diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Analytics.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Analytics.php new file mode 100644 index 00000000..1648c9ab --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Analytics.php @@ -0,0 +1,89 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +use NRFramework\Cache; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Analytics Helper Class + */ +class Analytics +{ + /** + * Returns average submission in current month + * + * @return float + */ + public static function getLeadsAverageThisMonth() + { + return number_format(self::getTotal('this_month') / date('d'), 1); + } + + /** + * Returns current month projection + * + * @return integer + */ + public static function getMonthProjection() + { + return number_format(self::getTotal('this_month') / date('d') * date('t'), 1); + } + + public static function getRows($type = null, $options = []) + { + return number_format(self::getTotal($type, $options)); + } + + public static function getTotal($type = null, $options = []) + { + $hash = md5($type . serialize($options)); + + if (Cache::has($hash)) + { + return Cache::get($hash); + } + + $model = \JModelLegacy::getInstance('Conversions', 'ConvertFormsModel', ['ignore_request' => true]); + + $model->setState('filter.state', [1, 2]); + $model->setState('filter.join_campaigns', 'skip'); + $model->setState('filter.join_forms', 'skip'); + + if ($type) + { + $model->setState('filter.period', $type); + } + + if ($type == 'range') + { + $model->setState('filter.created_from', $options['created_from']); + $model->setState('filter.created_to', $options['created_to']); + } + + $query = $model->getListQuery(); + + $query->clear('select'); + $query->select('count(a.id)'); + + $db = \JFactory::getDbo(); + $db->setQuery($query); + + $count = $db->loadResult(); + + return Cache::set($hash, $count); + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Api.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Api.php new file mode 100644 index 00000000..59c03e06 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Api.php @@ -0,0 +1,131 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +/** + * This is the main Convert Forms API helper class meant to be used ONLY by 3rd party developers and advanced users. + * Do not ever use this class to implement and rely any core feture. + */ +class Api +{ + /** + * Delete a submission from the database + * + * @param integer $id The submission's primary key + * + * @return bool True on success + */ + public static function removeSubmission($submission_id) + { + if (!$submission_id) + { + return; + } + + \JTable::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_convertforms/tables'); + $table = \JTable::getInstance('Conversion', 'ConvertFormsTable'); + return $table->delete($submission_id); + } + + /** + * Delete all form submissions from the database + * + * @param integer $form_id The form's primary key + * + * @return bool + */ + public static function removeFormSubmissions($form_id) + { + if (!$form_id) + { + return; + } + + $db = \JFactory::getDbo(); + + $query = $db->getQuery(true) + ->delete($db->quoteName('#__convertforms_conversions')) + ->where($db->quoteName('form_id') . ' = ' . $form_id); + + $db->setQuery($query); + + return $db->execute(); + } + + /** + * Return all form submissions + * + * @param integer $form_id The form's ID + * + * @return Object + */ + public static function getFormSubmissions($form_id) + { + if (!$form_id) + { + return; + } + + $db = \JFactory::getDbo(); + + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__convertforms_conversions')) + ->where($db->quoteName('form_id') . ' = ' . $form_id); + + $db->setQuery($query); + + $rows = $db->loadObjectList(); + + foreach ($rows as $key => $row) + { + $row->params = json_decode($row->params); + } + + return $rows; + } + + /** + * Return the total number of form total submissions + * + * @param integer $form_id The form's ID + * + * @return integer + */ + public static function getFormSubmissionsTotal($form_id) + { + return number_format(Form::getSubmissionsTotal($form_id)); + } + + /** + * Get the visitor's device type: desktop, tablet, mobile + * + * @return string + */ + public static function getDeviceType() + { + return \NRFramework\WebClient::getDeviceType(); + } + + /** + * Indicate if the visitor is browsing the site via a mobile + * + * @return bool + */ + public static function isMobile() + { + return self::getDeviceType() == 'mobile'; + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Export.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Export.php new file mode 100644 index 00000000..cc94c372 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Export.php @@ -0,0 +1,247 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +use Joomla\Registry\Registry; +use ConvertForms\Helper; +use NRFramework\File; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Export submissions to CSV and JSON + */ +class Export +{ + /** + * Export submissions to CSV or JSON file + * + * @param array $options The export options + * + * @return array + */ + public static function export($options) + { + // Increase memory size and execution time to prevent PHP errors on datasets > 20K + set_time_limit(300); // 5 Minutes + ini_set('memory_limit', '-1'); + + $options = new Registry($options); + + // Load submissions model + \JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_convertforms/models'); + $model = \JModelLegacy::getInstance('Conversions', 'ConvertFormsModel', ['ignore_request' => true]); + + $model->setState('filter.state', 1); + $model->setState('filter.join_campaigns', 'skip'); + $model->setState('filter.join_forms', 'skip'); + $model->setState('list.limit', $options->get('limit', 0)); + $model->setState('list.start', $options->get('offset', 0)); + $model->setState('list.direction', 'asc'); + + // Get specific submission IDs + if ($id = $options->get('filter_id')) + { + $model->setState('filter.id', $id); + } else + // Filter submissions + { + $model->setState('filter.form_id', $options->get('filter_form_id')); + $model->setState('filter.period', $options->get('filter_period', '')); + $model->setState('filter.created_from', $options->get('filter_created_from', '')); + $model->setState('filter.created_to', $options->get('created_to', '')); + } + + // Proceed only if we have submissions + if (!$submissions = $model->getItems()) + { + $error = \JText::sprintf('COM_CONVERTFORMS_NO_RESULTS_FOUND', strtolower(\JText::_('COM_CONVERTFORMS_SUBMISSIONS'))); + throw new \Exception($error); + } + + foreach ($submissions as $key => &$submission) + { + self::prepareSubmission($submission); + } + + $export_type = $options->get('export_type', 'csv'); + + $pagination = $model->getPagination(); + $firstRun = $pagination->pagesCurrent == 1; + $filename = File::getTempFolder() . $options->get('filename', 'convertforms_submissions.' . $export_type); + + switch ($export_type) + { + case 'json': + self::toJSON($submissions, $filename, !$firstRun); + break; + + default: + $excel_security = (bool) Helper::getComponentParams()->get('excel_security', true); + self::toCSV($submissions, $filename, !$firstRun, $excel_security); + break; + } + + return [ + 'options' => $options, + 'pagination' => $pagination + ]; + } + + /** + * Get a key value array with submission's submitted data + * + * @param object $submission The submission object + * + * @return array + */ + private static function prepareSubmission(&$submission) + { + $result = [ + 'id' => $submission->id, + 'created' => $submission->created + ]; + + foreach ($submission->prepared_fields as $field_name => $field) + { + // Always return the raw value and let the export type decide how the value should be displayed. + $result[$field_name] = $field->value_raw; + } + + $submission = $result; + } + + /** + * Create a JSON file with given data + * + * @param array $data The data to populate the file + * @param string $destination The path where the store the JSON file + * @param bool $append If true, given data will be appended to the end of the file. + * + * @return void + */ + private static function toJSON($data, $destination, $append = false) + { + $content = \JFile::exists($destination) ? (array) json_decode(file_get_contents($destination), true) : []; + $content = $append ? array_merge($content, $data) : $data; + $content = json_encode($content, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + + // Save the file + \JFile::write($destination, $content); + } + + /** + * Create a CSV file with given data + * + * @param array $data The data to populate the file + * @param string $destination The path where the store the CSV file + * @param bool $append If true, given data will be appended to the end of the file. + * @param boolean $excel_security If enabled, certain row values will be prefixed by a tab to avoid any CSV injection. + * + * @return void + */ + private static function toCSV($data, $destination, $append = false, $excel_security = true) + { + $output = fopen($destination, $append ? 'a' : 'w'); + + if (!$append) + { + // Support UTF-8 on Microsoft Excel + fputs($output, "\xEF\xBB\xBF"); + + // Add column names in the first line + fputcsv($output, array_keys($data[0])); + } + + foreach ($data as $key => $row) + { + // Prevent CSV Injection: https://vel.joomla.org/articles/2140-introducing-csv-injection + if ($excel_security) + { + foreach ($row as &$value) + { + $value = is_array($value) ? implode(', ', $value) : $value; + + $firstChar = substr($value, 0, 1); + + // Prefixe values starting with a =, +, - or @ by a tab character + if (in_array($firstChar, array('=', '+', '-', '@'))) + { + $value = ' ' . $value; + } + } + } + + fputcsv($output, $row); + } + + fclose($output); + } + + /** + * Redirects to the error layout and displays the given error message + * + * @param string $error_message + * + * @return void + */ + public static function error($error_message) + { + $app = \JFactory::getApplication(); + + $optionsQuery = http_build_query(array_filter([ + 'option' => 'com_convertforms', + 'view' => 'export', + 'layout' => 'error', + 'error' => $error_message, + 'tmpl' => $app->input->get('tmpl') + ])); + + $app->redirect('index.php?' . $optionsQuery); + } + + /** + * Verifies the export file does exist + * + * @param string $filename + * + * @return bool + */ + public static function exportFileExists($filename) + { + return \JFile::exists(File::getTempFolder() . $filename); + } + + /** + * Adds the Export popup to the page which can be triggered by toolbar buttons. + * + * @return void + */ + public static function renderModal() + { + \JHtml::script('com_convertforms/export.js', ['relative' => true, 'version' => 'auto']); + + \JFactory::getDocument()->addScriptDeclaration(' + document.addEventListener("DOMContentLoaded", function() { + new exportModal("'.\JFactory::getApplication()->input->get('view') . '"); + }); + '); + + $html = \JHtml::_('bootstrap.renderModal', 'cfExportSubmissions', [ + 'backdrop' => 'static' + ]); + + // This is the only way to add a custom CSS class to the popup container + echo str_replace('modal hide', 'modal hide transparent', $html); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field.php new file mode 100644 index 00000000..47e93f30 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field.php @@ -0,0 +1,429 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +use Joomla\Registry\Registry; +use ConvertForms\Helper; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Convert Forms Field Main Class + */ +class Field +{ + /** + * Field Object + * + * @var object + */ + protected $field; + + /** + * The prefix name used for input names + * + * @var string + */ + private $namePrefix = 'cf'; + + /** + * Filter user value before saving into the database. By default converts the input to a string; strips all HTML tags / attributes. + * + * @var string + */ + protected $filterInput = 'HTML'; + + /** + * Exclude common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields; + + /** + * Data passed to layout rendering + * + * @var object + */ + private $layoutData; + + /** + * Indicates whether it accepts multiple values + * + * @var bool + */ + protected $multiple = false; + + /** + * Indicates the default required behavior on the form + * + * @var bool + */ + protected $required = true; + + /** + * The data submitted by the user in the form + * + * @var array + */ + protected $data; + + /** + * Class constructor + * + * @param mixed $field_options Object or Array Field options + * + * @return void + */ + public function __construct($field_options = null, $form_data = null) + { + $this->data = $form_data; + + if ($field_options) + { + $field_options['required'] = isset($field_options['required']) ? $field_options['required'] : $this->required; + + // We should better call $this->setField() here + $this->field = new Registry($field_options); + } + + $this->app = \JFactory::getApplication(); + } + + /** + * Set field object + * + * Rename to prepareField + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + $field = is_array($field) ? (object) $field : $field; + + if (!isset($field->name) || empty($field->name)) + { + $field->name = $this->getName() . '_' . $field->key; + } + + $field->input_id = 'form' . $field->namespace . '_' . $field->name; + $field->input_name = $this->namePrefix . '[' . $field->name . ']'; + + $field->htmlattributes = []; + + $this->field = $field; + + return $this; + } + + /** + * Event fired during form saving in the backend to help us validate user options. + * + * @param object $model The Form Model + * @param array $form_data The form data to be saved + * @param array $field_options The field data + * + * @return bool + */ + public function onBeforeFormSave($model, $form_data, &$field_options) + { + if (isset($field_options['name']) && $field_options['name'] == '') + { + $field_options['name'] = $field_options['type'] . '_' . $field_options['key']; + } + + return true; + } + + /** + * Discovers the actual field name from the called class + * + * @return string + */ + protected function getName() + { + $class_parts = explode('\\', get_called_class()); + return strtolower(end($class_parts)); + } + + /** + * Renders the field's input element + * + * @return string HTML output + */ + protected function getInput() + { + $layoutsPath = JPATH_ADMINISTRATOR . '/components/com_convertforms/layouts/fields/'; + + // Override layout path if it's available + $layoutName = isset($this->inheritInputLayout) ? $this->inheritInputLayout : $this->getName(); + + // Check if an admininistrator layout is available + if ($this->app->isClient('administrator') && \JFile::exists($layoutsPath . $layoutName . '_admin.php')) + { + $layoutName .= '_admin'; + } + + return Helper::layoutRender('fields.' . $layoutName, $this->getInputData()); + } + + /** + * Prepares the field's input layout data + * + * @return array + */ + protected function getInputData() + { + return array( + 'class' => $this, + 'field' => $this->field, + 'form' => $this->field->form + ); + } + + /** + * Renders the Field's control group that will contain both input and label parts. + * + * @return string HTML Output + */ + public function getControlGroup() + { + \JPluginHelper::importPlugin('convertformstools'); + $this->app->triggerEvent('onConvertFormsFieldBeforeRender', [&$this->field]); + + $this->field->input = $this->getInput(); + + $layoutData = [ + 'field' => $this->field, + 'form' => $this->field->form + ]; + + return Helper::layoutRender('controlgroup', $layoutData); + } + + /** + * Renders the Field's Options Form used in the backend + * + * @param string $formControl From control prefix + * @param array $loadData Form data to bind + * + * @return string The final HTML output + */ + public function getOptionsForm($formControl = 'jform', $loadData = null) + { + // Setup the common form first + $form = new \JForm('cf', array('control' => $formControl)); + + $form->addFieldPath(JPATH_COMPONENT_ADMINISTRATOR . '/models/forms/fields'); + $form->addFieldPath(JPATH_PLUGINS . '/system/nrframework/fields'); + $form->loadFile(JPATH_COMPONENT_ADMINISTRATOR . '/ConvertForms/xml/field.xml'); + + // Exclude Fields + if (is_array($this->excludeFields)) + { + $reservedFields = array( + 'key', + 'type' + ); + + foreach ($form->getFieldSets() as $key => $fieldSetName) + { + $fields = $form->getFieldset($fieldSetName->name); + + foreach ($fields as $key => $field) + { + // We can't exclude reserved fields + if (in_array($field->fieldname, $reservedFields)) + { + continue; + } + + if (!in_array($field->fieldname, $this->excludeFields) && + !in_array('*', $this->excludeFields)) + { + continue; + } + + $form->removeField($field->fieldname); + } + } + } + + // Load field based options + $form->loadFile(JPATH_COMPONENT_ADMINISTRATOR . '/ConvertForms/xml/field/' . $this->getName() . '.xml'); + + \JPluginHelper::importPlugin('convertformstools'); + $this->app->triggerEvent('onConvertFormsBackendRenderOptionsForm', [&$form, $this->getName()]); + + // Bind Data + $form->bind($loadData); + + // Give individual field classes to manipulate the form before the render + if (method_exists($this, 'onBeforeRenderOptionsForm')) + { + $this->onBeforeRenderOptionsForm($form); + } + + // Render Layout + $data = array( + 'form' => $form, + 'header' => $this->getOptionsFormHeader(), + 'fieldTypeName' => $this->getName(), + 'loadData' => $loadData + ); + + $html = Helper::layoutRender('optionsform', $data); + + // Give individual field classes to manipulate the form after the render + if (method_exists($this, 'onAfterRenderOptionsForm')) + { + $this->onAfterRenderOptionsForm($html); + } + + return $html; + } + + /** + * Display a text before the form options + * + * @return string The text to display + */ + protected function getOptionsFormHeader() + { + return; + } + + /** + * Validate form submitted value + * + * @param mixed $value The field's value to validate (Passed by reference) + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + $isEmpty = $this->isEmpty($value); + $isRequired = $this->field->get('required'); + + if ($isEmpty && $isRequired) + { + $this->throwError(\JText::_('COM_CONVERTFORMS_FIELD_REQUIRED'), $field_options); + } + + // Let's do some filtering. + $value = $this->filterInput($value); + } + + /** + * Checks if submitted value is empty + * + * @param mixed $value + * + * @return bool + */ + protected function isEmpty($value) + { + if (is_array($value) && count($value) == 0) + { + return true; + } + + // Note: Do not use empty() as evaluates '0' as true which is a valid value for the Number field. + if ($value == '' || is_null($value)) + { + return true; + } + + return false; + } + + /** + * Filter user input + * + * @param mixed $input User input value + * + * @return mixed The filtered user input + */ + public function filterInput($input) + { + $filter = $this->field->get('filter', $this->filterInput); + + // Safehtml is a special filter angd we need to initialize JFilterInput class differently + if ($filter == 'safehtml') + { + return \JFilterInput::getInstance(null, null, 1, 1)->clean($input, 'html'); + } + + return \JFilterInput::getInstance()->clean($input, $filter); + } + + /** + * Get the field's label which is also parsed for Smart Tags + */ + public function getLabel() + { + if ($label = $this->field->get('label')) + { + return \NRFramework\SmartTags::getInstance()->replace($label); + } + + // In case the Label option is empty, use the name of the field. + return $this->field->get('name'); + } + + /** + * Throw an error exception + * + * @param [type] $message [description] + * + * @return [type] [description] + */ + public function throwError($message) + { + if (!$label = $this->getLabel()) + { + $label = $this->field->get('name', ucfirst($this->field->get('type'))); + } + + throw new \Exception($label . ': ' . \JText::_($message)); + } + + /** + * Prepare value to be displayed to the user as plain text + * + * @param mixed $value + * + * @return string + */ + public function prepareValue($value) + { + if (is_bool($value)) + { + return $value ? '1' : '0'; + } + + if (is_array($value)) + { + return implode(', ', $value); + } + + // Strings and numbers + return Helper::escape($value); + } + + public function prepareValueHTML($value) + { + return $this->prepareValue($value); + } +} +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Checkbox.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Checkbox.php new file mode 100644 index 00000000..96170d28 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Checkbox.php @@ -0,0 +1,38 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Checkbox extends \ConvertForms\FieldChoice +{ + /** + * Indicates whether it accepts multiple values + * + * @var bool + */ + protected $multiple = true; + + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = array( + 'placeholder', + 'browserautocomplete', + 'size', + ); +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Divider.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Divider.php new file mode 100644 index 00000000..d4286dfa --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Divider.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Divider extends \ConvertForms\Field +{ + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = [ + 'name', + 'placeholder', + 'browserautocomplete', + 'size', + 'required', + 'label', + 'description', + 'cssclass', + 'hidelabel', + 'inputcssclass', + 'value' + ]; + + /** + * Indicates the default required behavior on the form + * + * @var bool + */ + protected $required = false; +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Dropdown.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Dropdown.php new file mode 100644 index 00000000..768216e3 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Dropdown.php @@ -0,0 +1,22 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Dropdown extends \ConvertForms\FieldChoice +{ + +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Editor.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Editor.php new file mode 100644 index 00000000..c7bbe78f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Editor.php @@ -0,0 +1,80 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Editor extends Textarea +{ + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = [ + 'placeholder', + 'browserautocomplete', + 'size', + ]; + + /** + * Event fired before the field options form is rendered in the backend + * + * @param object $form + * + * @return void + */ + protected function onAfterRenderOptionsForm(&$html) + { + // Remove the 'None' editor from dropdown options + $html = str_replace('', '', $html); + } + + /** + * Renders the field's input element + * + * @return string HTML output + */ + protected function getInput() + { + $selected_editor = empty($this->field->editor) ? \JFactory::getConfig()->get('editor') : $this->field->editor; + + if (!$selected_editor) + { + return \JText::sprintf('COM_CONVERTFORMS_EDITOR_NOT_FOUND', $selected_editor); + } + + // Instantiate the editor + $editor = \Joomla\CMS\Editor\Editor::getInstance($selected_editor); + + $id = $this->field->input_id; + $name = $this->field->input_name; + $contents = htmlspecialchars($this->field->value, ENT_COMPAT, 'UTF-8'); + $width = '100%'; + $height = (int) $this->field->height; + $row = 1; + $col = 10; + $buttons = false; + $author = null; + $asset = null; + $params = [ + 'readonly' => $this->field->readonly, + ]; + + $this->field->richeditor = $editor->display($name, $contents, $width, $height, $col, $row, $buttons, $id, $author, $asset, $params); + + return parent::getInput(); + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Email.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Email.php new file mode 100644 index 00000000..563b3a8a --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Email.php @@ -0,0 +1,63 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Validate; + +class Email extends \ConvertForms\Field +{ + protected $inheritInputLayout = 'text'; + + /** + * Validate field value + * + * @param mixed $value The field's value to validate + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + parent::validate($value); + + if ($this->isEmpty($value)) + { + return true; + } + + if (!Validate::email($value) || $this->field->get('dnscheck') && !Validate::emaildns($value)) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_FIELD_EMAIL_INVALID'), $this->field); + } + } + + /** + * Prepare value to be displayed to the user as HTML/text + * + * @param mixed $value + * + * @return string + */ + public function prepareValueHTML($value) + { + if (!$value) + { + return; + } + + return '' . $value . ''; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Emptyspace.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Emptyspace.php new file mode 100644 index 00000000..2efd5623 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Emptyspace.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2018 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class EmptySpace extends \ConvertForms\Field +{ + /** + * Indicates the default required behavior on the form + * + * @var bool + */ + protected $required = false; + + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = [ + 'name', + 'placeholder', + 'browserautocomplete', + 'size', + 'required', + 'label', + 'description', + 'cssclass', + 'hidelabel', + 'inputcssclass', + 'value' + ]; +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Fileupload.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Fileupload.php new file mode 100644 index 00000000..90d45c5d --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Fileupload.php @@ -0,0 +1,337 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); +jimport('joomla.filesystem.path'); + +use ConvertForms\Helper; +use ConvertForms\Validate; +use Joomla\CMS\Filesystem\File as JFile; +use NRFramework\File; +use Joomla\Registry\Registry; + +class FileUpload extends \ConvertForms\Field +{ + /** + * The default upload folder + * + * @var string + */ + protected $default_upload_folder = '/media/com_convertforms/uploads/{randomid}_{file.basename}'; + + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = [ + 'size', + 'value', + 'browserautocomplete', + 'placeholder', + 'inputcssclass' + ]; + + /** + * Set field object + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + parent::setField($field); + + $field = $this->field; + + if (!isset($field->limit_files)) + { + $field->limit_files = 1; + } + + if (!isset($field->upload_types) || empty($field->upload_types)) + { + $field->upload_types = 'image/*'; + } + + // Accept multiple values + if ((int) $field->limit_files != 1) + { + $field->input_name .= '[]'; + } + + return $this; + } + + /** + * Validate field value + * + * @param mixed $value The field's value to validate + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + $is_required = $this->field->get('required'); + $max_files_allowed = $this->field->get('limit_files', 1); + $allowed_types = $this->field->get('upload_types'); + $upload_folder = $this->field->get('upload_folder_type', 'auto') == 'auto' ? $this->default_upload_folder : $this->field->get('upload_folder', $this->default_upload_folder); + + // Remove null and empty values + $value = is_array($value) ? $value : (array) $value; + $value = array_filter($value); + + // We expect a not empty array + if ($is_required && empty($value)) + { + $this->throwError(\JText::_('COM_CONVERTFORMS_FIELD_REQUIRED')); + } + + // Do we have the correct number of files? + if ($max_files_allowed > 0 && count($value) > $max_files_allowed) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_UPLOAD_MAX_FILES_LIMIT', $max_files_allowed)); + } + + // Validate file paths + foreach ($value as $key => &$source_file) + { + $source_file = base64_decode($source_file); + $source_file_info = File::pathinfo($source_file); + $source_basename = $source_file_info['basename']; + + if (!JFile::exists($source_file)) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_UPLOAD_FILE_IS_MISSING', $source_basename)); + } + + // Although the file is already checked during upload, make another sanity check here. + File::checkMimeOrDie($allowed_types, ['tmp_name' => $source_file]); + + // Remove the random ID added to file's name during upload process + $source_file_info['filename'] = preg_replace('#cf_(.*?)_(.*?)#', '', $source_file_info['filename']); + $source_file_info['basename'] = preg_replace('#cf_(.*?)_(.*?)#', '', $source_basename); + $source_file_info['index'] = $key + 1; + + // Replace Smart Tags in the upload folder value + $SmartTags = new \NRFramework\SmartTags(); + $SmartTags->add($source_file_info, 'file.'); + $destination_file = JPATH_ROOT . DIRECTORY_SEPARATOR . $SmartTags->replace($upload_folder); + + // Validate destination file + $destination_file_info = File::pathinfo($destination_file); + if (!isset($destination_file_info['extension'])) + { + $destination_file = implode(DIRECTORY_SEPARATOR, [$destination_file_info['dirname'], $destination_file_info['basename'], $source_basename]); + } + + // Move uploaded file to the destination folder after the form passes all validation checks. + // Thus, if an error is triggered by another field, the file will remain in the temp folder and the user will be able to re-submit the form. + $this->app->registerEvent('onConvertFormsSubmissionBeforeSave', function(&$data) use ($key, $source_file, $destination_file) + { + try + { + // Move uploaded file from the temp folder to the destination folder. + $destination_file = File::move($source_file, $destination_file); + + // Give a chance to manipulate the file with a hook. + // We can move the file to another folder, rename it, resize it or even uploaded it to a cloud storage service. + $this->app->triggerEvent('onConvertFormsFileUpload', [&$destination_file, $data]); + + // Always save the relative path to the database. + $destination_file = Helper::pathTorelative($destination_file); + + // Set back the new value to $data object + $data['params'][$this->field->get('name')][$key] = $destination_file; + + } catch (\Throwable $th) + { + $this->throwError($th->getMessage()); + } + }); + } + } + + /** + * Event fired before the field options form is rendered in the backend + * + * @param object $form + * + * @return void + */ + protected function onBeforeRenderOptionsForm($form) + { + // Set the maximum upload size limit to the respective options form field + $max_upload_size_str = \JHtml::_('number.bytes', \JUtility::getMaxUploadSize()); + $max_upload_size_int = (int) $max_upload_size_str; + + $form->setFieldAttribute('max_file_size', 'max', $max_upload_size_int); + + $desc_lang_str = $form->getFieldAttribute('max_file_size', 'description'); + $desc = \JText::sprintf($desc_lang_str, $max_upload_size_str); + $form->setFieldAttribute('max_file_size', 'description', $desc); + } + + /** + * Ajax method triggered by System Plugin during file upload. + * + * @param string $form_id + * @param string $field_key + * + * @return array + */ + public function onAjax($form_id, $field_key) + { + // Make sure we have a valid form and a field key + if (!$form_id || !$field_key) + { + $this->uploadDie('COM_CONVERTFORMS_UPLOAD_ERROR'); + } + + // Get field settings + if (!$upload_field_settings = \ConvertForms\Form::getFieldSettingsByKey($form_id, $field_key)) + { + $this->uploadDie('COM_CONVERTFORMS_UPLOAD_ERROR_INVALID_FIELD'); + } + + $allow_unsafe = $upload_field_settings->get('allow_unsafe', false); + + // Make sure we have a valid file passed + if (!$file = $this->app->input->files->get('file', null, ($allow_unsafe ? 'raw' : null))) + { + $this->uploadDie('COM_CONVERTFORMS_UPLOAD_ERROR_INVALID_FILE'); + } + + // In case we allow multiple uploads the file parameter is a 2 levels array. + $first_property = array_pop($file); + if (is_array($first_property)) + { + $file = $first_property; + } + + // Upload temporarily to the default upload folder + $allowed_types = $upload_field_settings->get('upload_types'); + + try { + $uploaded_filename = File::upload($file, null, $allowed_types, $allow_unsafe, 'cf_'); + + return [ + // Since the path of the uploaded file will be included in the form's POST data, obfuscate the path for security reasons. + // This will also prevent Akeeba Admin Tools DFIShield from mistakenly blocking File Uploads. + 'file' => base64_encode($uploaded_filename), + ]; + } catch (\Throwable $th) + { + $this->uploadDie($th->getMessage()); + } + } + + /** + * DropzoneJS detects errors based on the response error code. + * + * @param string $error_message + * + * @return void + */ + private function uploadDie($error_message) + { + http_response_code('500'); + die(\JText::_($error_message)); + } + + /** + * Prepare value to be displayed to the user as plain text + * + * @param mixed $value + * + * @return string + */ + public function prepareValue($value) + { + if (!$value) + { + return; + } + + $value = (array) $value; + + foreach ($value as &$link) + { + $link = Helper::absURL($link); + } + + return implode(', ', $value); + } + + /** + * Prepare value to be displayed to the user as HTML/text + * + * @param mixed $value + * + * @return string + */ + public function prepareValueHTML($value) + { + if (!$value) + { + return; + } + + $links = (array) $value; + $value = ''; + + foreach ($links as $link) + { + $link = Helper::absURL($link); + $value .= ''; + } + + return ''; + } + + /** + * Display a text before the form options + * + * @return string The text to display + */ + protected function getOptionsFormHeader() + { + $html = ''; + + $temp_folder = File::getTempFolder(); + + if (!@is_writable($temp_folder)) + { + $html .= ' +
+ ' . \JText::sprintf('COM_CONVERTFORMS_FILEUPLOAD_TEMP_FOLDER_NOT_WRITABLE', $temp_folder) . ' +
+ '; + } + + // Check if the Fileinfo PHP extension is installed required to detect the mime type. + if (!extension_loaded('fileinfo') || !function_exists('mime_content_type')) + { + $html .= ' +
+ ' . \JText::sprintf('COM_CONVERTFORMS_FILEUPLOAD_MIME_CONTENT_TYPE_MISSING') . ' +
+ '; + } + + return $html; + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Hcaptcha.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Hcaptcha.php new file mode 100644 index 00000000..1665d403 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Hcaptcha.php @@ -0,0 +1,130 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +use \ConvertForms\Helper; + +class Hcaptcha extends \ConvertForms\Field +{ + /** + * Exclude all common fields + * + * @var mixed + */ + protected $excludeFields = array( + 'name', + 'required', + 'size', + 'value', + 'placeholder', + 'browserautocomplete', + 'inputcssclass' + ); + + /** + * Set field object + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + parent::setField($field); + + $this->field->required = true; + + // When captcha is in invisible mode, don't show the control group + if ($this->field->hcaptcha_type == 'invisible') + { + $this->field->cssclass .= 'hide'; + } + + return $this; + } + + /** + * Get the hCaptcha Site Key used in Javascript code + * + * @return string + */ + public function getSiteKey() + { + return Helper::getComponentParams()->get('hcaptcha_sitekey'); + } + + /** + * Get the hCaptcha Secret Key used in communication between the website and the hCaptcha server + * + * @return string + */ + public function getSecretKey() + { + return Helper::getComponentParams()->get('hcaptcha_secretkey'); + } + + /** + * Validate field value + * + * @param mixed $value The field's value to validate + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + if (!$this->field->get('required')) + { + return true; + } + + // In case this is a submission via URL, skip the check. + if (\JFactory::getApplication()->input->get('task') == 'optin') + { + return true; + } + + $hcaptcha = new \NRFramework\Integrations\HCaptcha( + ['secret' => $this->getSecretKey()] + ); + + $response = isset($this->data['h-captcha-response']) ? $this->data['h-captcha-response'] : null; + + $hcaptcha->validate($response); + + if (!$hcaptcha->success()) + { + throw new \Exception($hcaptcha->getLastError()); + } + } + + /** + * Display a text before the form options + * + * @return string The text to display + */ + protected function getOptionsFormHeader() + { + if ($this->getSiteKey() && $this->getSecretKey()) + { + return; + } + + $url = \JURI::base() . 'index.php?option=com_config&view=component&component=com_convertforms#hcaptcha'; + + return + \JText::_('COM_CONVERTFORMS_FIELD_RECAPTCHA_KEYS_NOTE') . + ' ' + . \JText::_("COM_CONVERTFORMS_FIELD_HCAPTCHA_CONFIGURE") . + '.'; + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Heading.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Heading.php new file mode 100644 index 00000000..dd0b7757 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Heading.php @@ -0,0 +1,43 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2018 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Heading extends \ConvertForms\Field +{ + /** + * Indicates the default required behavior on the form + * + * @var bool + */ + protected $required = false; + + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = array( + 'name', + 'placeholder', + 'browserautocomplete', + 'size', + 'required', + 'hidelabel', + 'inputcssclass', + 'value' + ); +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Hidden.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Hidden.php new file mode 100644 index 00000000..cc771291 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Hidden.php @@ -0,0 +1,58 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Hidden extends \ConvertForms\Field +{ + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = [ + 'label', + 'placeholder', + 'description', + 'cssclass', + 'hidelabel', + 'browserautocomplete', + 'size', + 'inputcssclass' + ]; + + /** + * Indicates the default required behavior on the form + * + * @var bool + */ + protected $required = false; + + /** + * Set field object + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + parent::setField($field); + + // Always hide the container of a hidden field + $this->field->cssclass = 'cf-hide'; + + return $this; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Number.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Number.php new file mode 100644 index 00000000..ac03f567 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Number.php @@ -0,0 +1,27 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Number extends \ConvertForms\Field +{ + /** + * Filter user value before saving into the database + * + * @var string + */ + protected $filterInput = 'FLOAT'; +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Password.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Password.php new file mode 100644 index 00000000..bd944915 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Password.php @@ -0,0 +1,39 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Validate; + +class Password extends \ConvertForms\Field +{ + protected $inheritInputLayout = 'text'; + + /** + * Prepare value to be displayed to the user as HTML/text + * + * @param mixed $value + * + * @return string + */ + public function prepareValueHTML($value) + { + if ($value) + { + return str_repeat('*', strlen($value)); + } + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Radio.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Radio.php new file mode 100644 index 00000000..253bb277 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Radio.php @@ -0,0 +1,50 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Radio extends \ConvertForms\FieldChoice +{ + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = array( + 'placeholder', + 'browserautocomplete', + 'size', + ); + + /** + * Radio buttons expect single text value. So we need to transform the submitted array data to string. + * + * @param mixed $input User input value + * + * @return mixed The filtered user input + */ + public function filterInput($input) + { + $value = parent::filterInput($input); + + if (is_array($value) && isset($value[0])) + { + return $value[0]; + } + + return $value; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Recaptcha.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Recaptcha.php new file mode 100644 index 00000000..ea7dafcf --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Recaptcha.php @@ -0,0 +1,128 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +use \ConvertForms\Helper; + +class Recaptcha extends \ConvertForms\Field +{ + /** + * Exclude all common fields + * + * @var mixed + */ + protected $excludeFields = array( + 'name', + 'required', + 'size', + 'value', + 'placeholder', + 'browserautocomplete', + 'inputcssclass' + ); + + /** + * Set field object + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + parent::setField($field); + + $this->field->required = true; + + return $this; + } + + /** + * Get the reCAPTCHA Site Key used in Javascript code + * + * @return string + */ + public function getSiteKey() + { + return Helper::getComponentParams()->get('recaptcha_sitekey'); + } + + /** + * Get the reCAPTCHA Secret Key used in communication between the website and the reCAPTCHA server + * + * @return string + */ + public function getSecretKey() + { + return Helper::getComponentParams()->get('recaptcha_secretkey'); + } + + /** + * Validate field value + * + * @param mixed $value The field's value to validate + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + if (!$this->field->get('required')) + { + return true; + } + + // In case this is a submission via URL, skip the check. + if (\JFactory::getApplication()->input->get('task') == 'optin') + { + return true; + } + + jimport('recaptcha', JPATH_PLUGINS . '/system/nrframework/helpers/wrappers'); + + $recaptcha = new \NR_ReCaptcha( + ['secret' => $this->getSecretKey()] + ); + + $response = isset($this->data['g-recaptcha-response']) ? $this->data['g-recaptcha-response'] : null; + + $recaptcha->validate($response); + + if (!$recaptcha->success()) + { + throw new \Exception($recaptcha->getLastError()); + } + } + + /** + * Display a text before the form options + * + * @return string The text to display + */ + protected function getOptionsFormHeader() + { + if ($this->getSiteKey() && $this->getSecretKey()) + { + return; + } + + $url = \JURI::base() . 'index.php?option=com_config&view=component&component=com_convertforms#recaptcha'; + + return + \JText::_('COM_CONVERTFORMS_FIELD_RECAPTCHA_KEYS_NOTE') . + ' ' + . \JText::_("COM_CONVERTFORMS_FIELD_RECAPTCHA_CONFIGURE") . + '.'; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Recaptchav2invisible.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Recaptchav2invisible.php new file mode 100644 index 00000000..c2fc06ba --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Recaptchav2invisible.php @@ -0,0 +1,60 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +use \ConvertForms\Helper; + +class RecaptchaV2Invisible extends \ConvertForms\Field\Recaptcha +{ + /** + * Set field object + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + parent::setField($field); + + // When the widget is shown at the bottom right or left position, we need to remove the .control-group's div default padding. + if ($this->field->badge != 'inline') + { + $this->field->cssclass .= 'cf-no-padding'; + } + + return $this; + } + + /** + * Get the reCAPTCHA Site Key used in Javascript code + * + * @return string + */ + public function getSiteKey() + { + return Helper::getComponentParams()->get('recaptcha_sitekey_invs'); + } + + /** + * Get the reCAPTCHA Secret Key used in communication between the website and the reCAPTCHA server + * + * @return string + */ + public function getSecretKey() + { + return Helper::getComponentParams()->get('recaptcha_secretkey_invs'); + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Submit.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Submit.php new file mode 100644 index 00000000..77ad8e64 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Submit.php @@ -0,0 +1,43 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Submit extends \ConvertForms\Field +{ + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = array( + 'name', + 'description', + 'label', + 'placeholder', + 'required', + 'hidelabel', + 'browserautocomplete', + 'value', + ); + + /** + * Indicates the default required behavior on the form + * + * @var bool + */ + protected $required = false; +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Tel.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Tel.php new file mode 100644 index 00000000..861ae04f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Tel.php @@ -0,0 +1,39 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Tel extends \ConvertForms\Field +{ + protected $inheritInputLayout = 'text'; + + /** + * Prepare value to be displayed to the user as HTML/text + * + * @param mixed $value + * + * @return string + */ + public function prepareValueHTML($value) + { + if (!$value) + { + return; + } + + return '' . $value . ''; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Text.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Text.php new file mode 100644 index 00000000..32db84e1 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Text.php @@ -0,0 +1,84 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +use Joomla\String\StringHelper; + +defined('_JEXEC') or die('Restricted access'); + +class Text extends \ConvertForms\Field +{ + + /** + * Validate form submitted value + * + * @param mixed $value The field's value to validate (Passed by reference) + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + $isEmpty = $this->isEmpty($value); + $isRequired = $this->field->get('required'); + + // If the field is empty and its not required, skip validation + if ($isEmpty && !$isRequired) + { + return; + } + + if ($isEmpty && $isRequired) + { + $this->throwError(\JText::_('COM_CONVERTFORMS_FIELD_REQUIRED'), $field_options); + } + + // Validate Min / Max characters + $min_chars = $this->field->get('minchars', 0); + $max_chars = $this->field->get('maxchars', 0); + $value_length = StringHelper::strlen($value); + + if ($min_chars > 0 && $value_length < $min_chars) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_FIELD_VALIDATION_MIN_CHARS', $min_chars, $value_length), $field_options); + } + + if ($max_chars > 0 && $value_length > $max_chars) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_FIELD_VALIDATION_MAX_CHARS', $max_chars, $value_length), $field_options); + } + + // Validate Min / Max words + $min_words = $this->field->get('minwords', 0); + $max_words = $this->field->get('maxwords', 0); + + // Find words count + $words_temp = preg_replace('/\s+/', ' ', trim($value)); + $words_temp = array_filter(explode(' ', $words_temp)); + $words_count = count($words_temp); + + if ($min_words > 0 && $words_count < $min_words) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_FIELD_VALIDATION_MIN_WORDS', $min_words, $words_count), $field_options); + } + + if ($max_words > 0 && $words_count > $max_words) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_FIELD_VALIDATION_MAX_WORDS', $max_words, $words_count), $field_options); + } + + // Let's do some filtering. + $value = $this->filterInput($value); + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Textarea.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Textarea.php new file mode 100644 index 00000000..18c0d32c --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Textarea.php @@ -0,0 +1,21 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +class Textarea extends \ConvertForms\Field\Text +{ +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Url.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Url.php new file mode 100644 index 00000000..e1a67b37 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Field/Url.php @@ -0,0 +1,63 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms\Field; + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Validate; + +class Url extends \ConvertForms\Field +{ + protected $inheritInputLayout = 'text'; + + /** + * Validate field value + * + * @param mixed $value The field's value to validate + * + * @return mixed True on success, throws an exception on error + */ + public function validate(&$value) + { + parent::validate($value); + + if ($this->isEmpty($value)) + { + return true; + } + + if (!Validate::url($value)) + { + $this->throwError(\JText::sprintf('COM_CONVERTFORMS_FIELD_URL_INVALID')); + } + } + + /** + * Prepare value to be displayed to the user as HTML/text + * + * @param mixed $value + * + * @return string + */ + public function prepareValueHTML($value) + { + if (!$value) + { + return; + } + + return '' . $value . ''; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/FieldChoice.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/FieldChoice.php new file mode 100644 index 00000000..cdd8e8ad --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/FieldChoice.php @@ -0,0 +1,201 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Field Choice Class used by dropdown, checkbox and radio fields + */ +class FieldChoice extends \ConvertForms\Field +{ + /** + * Remove common fields from the form rendering + * + * @var mixed + */ + protected $excludeFields = [ + 'browserautocomplete', + ]; + + /** + * Set field object + * + * @param mixed $field Object or Array Field options + */ + public function setField($field) + { + parent::setField($field); + + // Get input options + $this->field->choices = $this->getChoices(); + + // Use the selected choice as the field value if we don't have a default value set. + if ($this->field->value == '') + { + foreach ($this->field->choices as $choice) + { + if ($choice['selected']) + { + $this->field->value = $choice['value']; + break; + } + } + } + + if ($this->multiple && !is_array($this->field->value)) + { + $this->field->value = explode(',', $this->field->value); + } + + return $this; + } + + /** + * Set the field choices + * + * Return Array sample + * + * $choices = array( + * 'label' => 'Color', + * 'value' => 'color, + * 'calc-value' => '150r, + * 'selected' => true, + * 'disabled' => false + * ) + * + * @return array The field choices array + */ + protected function getChoices() + { + $field = $this->field; + + if (!isset($field->choices) || !isset($field->choices['choices'])) + { + return; + } + + $choices = array(); + $hasPlaceholder = (isset($field->placeholder) && !empty($field->placeholder)); + + // Create a new array of valid only choices + foreach ($field->choices['choices'] as $key => $choiceValue) + { + if (!isset($choiceValue['label']) || $choiceValue['label'] == '') + { + continue; + } + + $label = trim($choiceValue['label']); + $value = $choiceValue['value'] == '' ? strip_tags($label) : $choiceValue['value']; + + $choices[] = array( + 'label' => $label, + 'value' => $value, + 'calc-value' => (isset($choiceValue['calc-value']) && $choiceValue['calc-value'] != '' ? $choiceValue['calc-value'] : $value), + 'selected' => (isset($choiceValue['default']) && $choiceValue['default'] && !$hasPlaceholder) ? true : false + ); + } + + // If we have a placeholder available, add it to dropdown choices. + if ($hasPlaceholder) + { + array_unshift($choices, array( + 'label' => trim($field->placeholder), + 'value' => '', + 'selected' => true + )); + } + + return $choices; + } + + /** + * In choice-based fields, it makes more sense to display the choice's label instead of the choice's value when the field is used for presentation purposes like in the + * + * 1. Thank you Message + * 2. {all_fields} Smart Tag + * 3. Form editing page in the back-end + * 4. PDF Form Submission addon. + * + * While we keep using the choice's value in functions like + * 1. Calculations + * 2. Conditional fields + * 3. JSON API. + * 4. {field.FIELDNAME} + * + * @param string $value The raw value as stored in the database / submitted by the user + * + * @return string + */ + public function prepareValueHTML($value) + { + if (is_array($value)) + { + foreach ($value as &$value_) + { + $value_ = $this->findChoiceLabelByValue($value_); + } + } else + { + $value = $this->findChoiceLabelByValue($value); + } + + return parent::prepareValueHTML($value); + } + + /** + * Attempt to assosiate a choice value with a choice label. As a fallback the raw value will be returned. + * + * The attempt may fail for one of the reasons below: + * + * 1. A choice value is renamed. + * 2. A choice is removed. + * 3. Multiple choices has the same value (which obviously is a mistake by the user). + * + * The most reliable way to always know the choice's label, is to implement this task https://smilemotive.teamwork.com/#/tasks/30244858 + * and start storing in the database a choice's unique ID instead of the choice's value. + * + * @param mixed $value + * + * @return string + */ + private function findChoiceLabelByValue($value) + { + // In multiple choice fields, the value can't be empty. + if ($value == '') + { + return; + } + + $choices = $this->field->get('choices.choices'); + + if (!$choices = $this->field->get('choices.choices')) + { + return; + } + + foreach ($choices as $choice) + { + // We might lowercase both values? + if ($choice->value == $value) + { + return $choice->label; + } + } + + // If we can't assosiacte the given value with a label, return the raw value as a fallback. + return $value; + } +} +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/FieldsHelper.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/FieldsHelper.php new file mode 100644 index 00000000..ea9b1a17 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/FieldsHelper.php @@ -0,0 +1,205 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +/** + * ConvertForms Fields Helper Class + */ +class FieldsHelper +{ + /** + * List of available field groups and types + * + * Consider using a field class property in order to declare the field group instead. + * + * @var array + */ + public static $fields = [ + 'common' => [ + 'text', + 'textarea', + 'dropdown', + 'radio', + 'checkbox', + 'number', + 'email', + 'submit' + ], + 'userinfo' => [ + 'tel', + 'url', + 'datetime', + 'country', + 'currency', + ], + 'layout' => [ + 'html', + 'heading', + 'emptyspace', + 'divider', + ], + 'advanced' => [ + 'hidden', + 'password', + 'fileupload', + 'recaptcha', + 'recaptchav2invisible', + 'hcaptcha', + 'editor', + 'termsofservice', + 'confirm' + ] + ]; + + /** + * Returns a list of all available field groups and types + * + * @return array + */ + public static function getFieldTypes() + { + $arr = []; + + foreach (self::$fields as $group => $fields) + { + if (!count($fields)) + { + continue; + } + + $arr[$group] = array( + 'name' => $group, + 'title' => \JText::_('COM_CONVERTFORMS_FIELDGROUP_' . strtoupper($group)) + ); + + foreach ($fields as $key => $field) + { + $arr[$group]['fields'][] = array( + 'name' => $field, + 'title' => \JText::_('COM_CONVERTFORMS_FIELD_' . strtoupper($field)), + 'desc' => \JText::_('COM_CONVERTFORMS_FIELD_' . strtoupper($field) . '_DESC'), + 'class' => self::getFieldClass($field) + ); + } + } + + return $arr; + } + + /** + * Render field control group used in the front-end + * + * @param object $fields The fields to render + * + * @return string The HTML output + */ + public static function render($fields) + { + $html = array(); + + foreach ($fields as $key => $field) + { + if (!isset($field['type'])) + { + continue; + } + + // Skip unknown field types + if (!$class = self::getFieldClass($field['type'])) + { + continue; + } + + $html[] = $class->setField($field)->getControlGroup(); + } + + return implode(' ', $html); + } + + /** + * Constructs and returns the field type class + * + * @param String $name The field type name + * + * @return Mixed Object on success, Null on failure + */ + public static function getFieldClass($name, $field_data = null, $form_data = null) + { + $class = __NAMESPACE__ . '\\Field\\' . ucfirst($name); + + if (!class_exists($class)) + { + return false; + } + + return new $class($field_data, $form_data); + } + + public static function prepare($form, $classPrefix = 'cf') + { + $params = $form['params']; + + if (!is_array($form['fields']) || count($form['fields']) == 0) + { + return; + } + + $fields_ = []; + + foreach ($form['fields'] as $key => $field) + { + $field['namespace'] = $form['id']; + + // Labels Styles + $field['labelStyles'] = array( + "color:" . $params->get("labelscolor"), + "font-size:" . (int) $params->get("labelsfontsize") . "px" + ); + + // Field Classes + $fieldClasses = [ + $classPrefix . "-input", + $classPrefix . "-input-shadow-" . ($params->get("inputshadow", "false") ? "1" : "0"), + isset($field['size']) ? $field['size'] : null, + isset($field['inputcssclass']) ? $field['inputcssclass'] : null + ]; + + // Field Styles + $fieldStyles = array( + "text-align:" . $params->get("inputalign", "left"), + "color:" . $params->get("inputcolor", "#888"), + "background-color:" . $params->get("inputbg"), + "border-color:" . $params->get("inputbordercolor", "#ccc"), + "border-radius:" . (int) $params->get("inputborderradius", "0") . "px", + "font-size:" . (int) $params->get("inputfontsize", "13") . "px", + "padding:" . (int) $params->get("inputvpadding", "11") . "px " . (int) $params->get("inputhpadding", "12") . "px" + ); + + $field['class'] = implode(' ', $fieldClasses); + $field['style'] = implode(';', $fieldStyles); + $field['form'] = $form; + + $fields_[] = $field; + } + + $html = self::render($fields_); + + return $html; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Form.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Form.php new file mode 100644 index 00000000..2c823c6f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Form.php @@ -0,0 +1,217 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Helper; +use NRFramework\Cache; +use Joomla\Registry\Registry; + +class Form +{ + /** + * Returns a form object from database + * + * @param integer $id The ID of the form + * @param bool $only_inputs If true, fields that doesn't have an input element such as HTML and reCAPTCHA, won't be returned. + * + * @return mixed Null on failure, array on success + */ + public static function load($id, $only_inputs = false, $ignore_state = false) + { + if (!$id) + { + return; + } + + $hash = 'convertforms_' . $id . '_' . (string) $only_inputs; + if (Cache::has($hash)) + { + return Cache::get($hash); + } + + // Get a db connection. + $db = \JFactory::getDbo(); + $query = $db->getQuery(true); + + $query->select('*') + ->from($db->quoteName('#__convertforms')) + ->where($db->quoteName('id') . ' = '. (int) $id); + + if (!$ignore_state) + { + $query->where($db->quoteName('state') . ' = 1'); + } + + $db->setQuery($query); + + if (!$form = $db->loadAssoc()) + { + return; + } + + $form['params'] = json_decode($form['params'], true); + + // Make 3rd party developer's life easier by setting field's name as the array key for faster code manipulation through PHP scripts. + foreach ($form['params']['fields'] as $key => $field) + { + // This is useful when we would like to skip non-interactive fields such as HTML, reCAPTCHA e.t.c. + if ($only_inputs && !isset($field['name'])) + { + unset($form['params']['fields'][$key]); + continue; + } + + $name = isset($field['name']) ? $field['name'] : $key; + + unset($form['params']['fields'][$key]); + $form['params']['fields'][$name] = $field; + } + + $form['fields'] = $form['params']['fields']; + unset($form['params']['fields']); + + return Cache::set($hash, $form); + } + + /** + * Get settings of a form field + * + * @param integer $form_id The id of the form + * @param integer $field_key The id of the field + * + * @return mixed Null on failure, Registry object on success + */ + public static function getFieldSettingsByKey($form_id, $field_key) + { + if (!$form = self::load($form_id)) + { + return; + } + + $found = array_filter($form['fields'], function($field) use ($field_key) + { + return ($field['key'] == $field_key); + }); + + return new Registry(array_pop($found));; + } + + /** + * Run user-defined PHP scripts on certain form events. + * + * The available events are: + * + * formprepare: Called on form data prepare. + * formdisplay: Called on form display. + * formsubmission: Called on form process. + * afterformprocess: Called after the form has been processed and the submission is saved into the database. + * + * @param Integer $form_id The form's ID + * @param String $script_name The script name to run + * @param Array $payload The data passed as argument to the PHP script. By reference. + * + * @return void + */ + public static function runPHPScript($form_id, $script_name, &$payload) + { + // Only on the front-end + if (\JFactory::getApplication()->isClient('administrator')) + { + return; + } + + if (!$form = self::load($form_id)) + { + return; + } + + // Abort, if the script is not found + if (!isset($form['params']['phpscripts'][$script_name])) + { + return; + } + + // Abort, if the script is empty + if (!$php_script = $form['params']['phpscripts'][$script_name]) + { + return; + } + + if (!isset($payload['form'])) + { + $payload['form'] = $form; + } + + $payload['script_name'] = $script_name; + + try + { + $executer = new \NRFramework\Executer($php_script, $payload); + $executer->run(); + } catch (\Throwable $th) + { + $error = $th->getMessage() . ' - ' . $th->getFile() . ' on line ' . $th->getLine(); + + // Log error + Helper::triggerError($error, 'PHP Script', $form_id); + + // Re throw exception + throw new \Exception($th->getMessage()); + } + } + + /** + * Return the total number of form submissions + * + * @param integer $form_id The form's ID + * + * @return integer + */ + public static function getSubmissionsTotal($form_id) + { + if (!$form_id) + { + return; + } + + $hash = md5('cf_count_' . $form_id); + + if (Cache::has($hash)) + { + return Cache::get($hash); + } + + \JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_convertforms/models'); + + $model = \JModelLegacy::getInstance('Conversions', 'ConvertFormsModel', ['ignore_request' => true]); + + $model->setState('filter.form_id', (int) $form_id); + $model->setState('filter.state', [1, 2]); + $model->setState('filter.join_campaigns', 'skip'); + $model->setState('filter.join_forms', 'skip'); + + $query = $model->getListQuery(); + + $query->clear('select'); + $query->select('count(a.id)'); + + $db = \JFactory::getDbo(); + $db->setQuery($query); + + $count = $db->loadResult(); + + return Cache::set($hash, $count); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Helper.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Helper.php new file mode 100644 index 00000000..be3e3fb0 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Helper.php @@ -0,0 +1,727 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +use NRFramework\Cache; +use ConvertForms\Form; +use Joomla\Registry\Registry; + +jimport('joomla.log.log'); + +class Helper +{ + /** + * Check if current logged in user is authorised to view a resource. + * + * @param string $action + * + * @return void + */ + public static function authorise($action, $throw_exception = false) + { + $authorised = \JFactory::getUser()->authorise($action, 'com_convertforms'); + + if (!$authorised && $throw_exception) + { + throw new \JAccessExceptionNotallowed(\JText::_('JERROR_ALERTNOAUTHOR'), 403); + } + + return $authorised; + } + + /** + * Trigger Error Event + * + * @param string $error The error message + * @param string $category The error category + * @param integer $form_id The form ID assosiated with the error + * @param mixed $data Extra data related to the error occured + * + * @return void + */ + public static function triggerError($error, $category, $form_id, $data = null) + { + \JPluginHelper::importPlugin('convertforms'); + \JFactory::getApplication()->triggerEvent('onConvertFormsError', [$error, $category, $form_id, $data]); + } + + /** + * Convert all applicable characters to HTML entities + * + * @param string $input The input string. + * + * @return string + */ + public static function escape($input) + { + if (!is_string($input)) + { + return $input; + } + + // Convert all HTML tags to HTML entities. + $input = htmlspecialchars($input, ENT_NOQUOTES, 'UTF-8'); + + // We do not need any Smart Tag replacements take place here, so we need to escape curly brackets too. + $input = str_replace(['{', '}'], ['{', '}'], $input); + + // Respect newline characters, by converting them to
tags. + $input = nl2br($input); + + return $input; + } + + public static function getComponentParams() + { + $hash = 'cfComponentParams'; + + if (Cache::has($hash)) + { + return Cache::get($hash); + } + + return Cache::set($hash, \JComponentHelper::getParams('com_convertforms')); + } + + public static function getFormLeadsCount($form) + { + $hash = 'formLeadsCount' . $form; + + if (Cache::has($hash)) + { + return Cache::get($hash); + } + + if (!$form || $form == 0) + { + return 0; + } + + $db = \JFactory::getDBO(); + $query = $db->getQuery(true); + + $query + ->select('count(*)') + ->from('#__convertforms_conversions') + ->where('form_id = ' . $form); + + $db->setQuery($query); + + return Cache::set($hash, $db->loadResult()); + } + + /** + * Renders form template selection modal to the document + * + * @return void + */ + public static function renderSelectTemplateModal() + { + echo \JHtml::_('bootstrap.renderModal', 'cfSelectTemplate', array( + 'url' => 'index.php?option=com_convertforms&view=templates&tmpl=component', + 'title' => \JText::_('COM_CONVERTFORMS_TEMPLATES_SELECT'), + 'closeButton' => true, + 'height' => '100%', + 'width' => '100%', + 'modalWidth' => '70', + 'bodyHeight' => '70', + 'footer' => ' + + ' . \JText::_('COM_CONVERTFORMS_TEMPLATES_BLANK') . ' + + ' + )); + } + + /** + * Writes the Not Found Items message + * + * @param string $view + * + * @return string + */ + public static function noItemsFound($view = 'submissions') + { + $html[] = ''; + $html[] = \JText::sprintf('COM_CONVERTFORMS_NO_RESULTS_FOUND', strtolower(\JText::_('COM_CONVERTFORMS_' . $view))); + + return implode(' ', $html); + } + + /** + * Get Visitor ID + * + * @return string + */ + public static function getVisitorID() + { + return \NRFramework\VisitorToken::getInstance()->get(); + } + + /** + * Returns campaigns list visitor is subscribed to + * If the user is logged in, we try to get the campaigns by user's ID + * Otherwise, the visitor cookie ID will be used instead + * + * @return array List of campaign IDs + */ + public static function getVisitorCampaigns() + { + $db = \JFactory::getDBO(); + $query = $db->getQuery(true); + $user = \JFactory::getUser(); + + $query + ->select('campaign_id') + ->from('#__convertforms_conversions') + ->where('state = 1') + ->group('campaign_id'); + + // Get submissions by user id if visitor is logged in + if ($user->id) + { + $query->where('user_id = ' . (int) $user->id); + } else + { + // Get submissions by Visitor Cookie + if (!$visitorID = self::getVisitorID()) + { + return false; + } + + $query->where('visitor_id = ' . $db->q($visitorID)); + } + + $db->setQuery($query); + return $db->loadColumn(); + } + + /** + * Returns an array with all available campaigns + * + * @return array + */ + public static function getCampaigns() + { + \JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_convertforms/models'); + + $model = \JModelLegacy::getInstance('Campaigns', 'ConvertFormsModel', array('ignore_request' => true)); + $model->setState('filter.state', 1); + + return $model->getItems(); + } + + /** + * Logs messages to log file + * + * @param string $msg The message + * @param object $type The log type + * + * @return void + */ + public static function log($msg, $type = 'debug') + { + $debugIsEnabled = self::getComponentParams()->get('debug', false); + + if ($type == 'debug' && !$debugIsEnabled) + { + return; + } + + $type = ($type == 'debug') ? \JLog::DEBUG : \JLog::ERROR; + + try { + \JLog::add($msg, $type, 'com_convertforms'); + } catch (\Throwable $th){ + } + } + + /** + * Loads pre-made form template + * + * @param string $name The template name + * + * @return object + */ + public static function loadFormTemplate($name) + { + $form = JPATH_ROOT . '/media/com_convertforms/templates/' . $name . '.cnvf'; + + if (!\JFile::exists($form)) + { + return; + } + + $content = file_get_contents($form); + + if (empty($content)) + { + return; + } + + $item = json_decode($content, true); + $item = $item[0]; + + $data = (object) array_merge((array) $item, (array) json_decode($item['params'])); + $data->id = 0; + $data->campaign = null; + $data->fields = (array) $data->fields; + + return $data; + } + + /** + * Configure the Linkbar. + * + * @param string $vName The name of the active view. + * + * @return void + */ + public static function addSubmenu($vName) + { + \JHtmlSidebar::addEntry( + \JText::_('NR_DASHBOARD'), + 'index.php?option=com_convertforms', + 'convertforms' + ); + \JHtmlSidebar::addEntry( + \JText::_('COM_CONVERTFORMS_FORMS'), + 'index.php?option=com_convertforms&view=forms', + 'forms' + ); + \JHtmlSidebar::addEntry( + \JText::_('COM_CONVERTFORMS_CAMPAIGNS'), + 'index.php?option=com_convertforms&view=campaigns', + 'campaigns' + ); + \JHtmlSidebar::addEntry( + \JText::_('COM_CONVERTFORMS_SUBMISSIONS'), + 'index.php?option=com_convertforms&view=conversions', + 'conversions' + ); + \JHtmlSidebar::addEntry( + \JText::_('COM_CONVERTFORMS_ADDONS'), + 'index.php?option=com_convertforms&view=addons', + 'addons' + ); + } + + /** + * Returns permissions + * + * @return object + */ + public static function getActions() + { + $user = \JFactory::getUser(); + $result = new \JObject; + $assetName = 'com_convertforms'; + + $actions = array( + 'core.admin', 'core.manage', 'core.create', 'core.edit', 'core.edit.state', 'core.delete' + ); + + foreach ($actions as $action) + { + $result->set($action, $user->authorise($action, $assetName)); + } + + return $result; + } + + /** + * Prepares a form object for rendering + * + * @param Object $form The form object + * + * @return array The prepared form array + */ + public static function prepareForm($item) + { + $item['id'] = isset($item['id']) ? $item['id'] : 0; + $classPrefix = 'cf'; + + // Replace variables + $item = \ConvertForms\SmartTags::replace($item, null, $item['id']); + + $params = new Registry($item['params']); + $item['params'] = $params; + + /* Box Classes */ + $boxClasses = array( + "convertforms", + $classPrefix, + $classPrefix . "-" . $params->get("imgposition"), + $classPrefix . "-" . $params->get("formposition"), + $params->get("hideform", true) ? $classPrefix . "-success-hideform" : null, + $params->get("hidetext", false) ? $classPrefix . "-success-hidetext" : null, + !$params->get("hidelabels", false) ? $classPrefix . "-hasLabels" : null, + $params->get("centerform", false) ? $classPrefix . "-isCentered" : null, + $params->get("classsuffix", null), + $classPrefix . '-labelpos-' . $params->get('labelposition', 'top'), + ); + + /* Box Styles */ + $font = trim($params->get('font')); + + $boxStyle = array( + "max-width:" . ($params->get("autowidth", "auto") == "auto" ? "auto" : (int) $params->get("width", "500") . "px"), + "background-color:" . $params->get("bgcolor", "transparent"), + "border-style:" . $params->get("borderstyle", "solid"), + "border-width:" . (int) $params->get("borderwidth", "2") . "px", + "border-color:" . $params->get("bordercolor", "#000"), + "border-radius:" . (int) $params->get("borderradius", "0") . "px", + "padding:" . (int) $params->get("padding", "20") . "px", + (!empty($font)) ? "font-family:" . $font : null + ); + + // Background Image + if ($params->get("bgimage", false)) + { + $imgurl = intval($params->get("bgimage")) == 1 ? \JURI::root() . $params->get("bgfile") : $params->get("bgurl"); + $bgImage = array( + "background-image: url(". $imgurl .")", + "background-repeat:" . strtolower($params->get("bgrepeat")), + "background-size:" . strtolower($params->get("bgsize")), + "background-position:" . strtolower($params->get("bgposition")) + ); + + $boxStyle = array_merge($bgImage, $boxStyle); + } + + // Form HTML Attributes + $item['boxattributes'] = implode(" ", + array( + 'id="' . $classPrefix . '_' . $item['id'] . '"', + 'class="' . implode(" ", $boxClasses) . '"', + 'style="' . implode(";", $boxStyle) . '"' + ) + ); + + // Main Image Checks + $imageOption = $params->get("image"); + if ($imageOption == '1') + { + if (\JFile::exists(JPATH_SITE . "/" . $params->get("imagefile"))) + { + $item['image'] = \JURI::root() . $params->get("imagefile"); + } + } + if ($imageOption == '2') + { + $item['image'] = $params->get("imageurl"); + } + + // Image Container + $item['imagecontainerclasses'] = implode(" ", array( + (in_array($params->get("imgposition"), array("img-right", "img-left")) ? $classPrefix . "-col-medium-" . $params->get("imagesize", 6) : null), + )); + + // Image + $item['imagestyles'] = array( + "width:" . ($params->get("imageautowidth", "auto") == "auto" ? "auto" : (int) $params->get("imagewidth", "500") . "px"), + "left:". (int) $params->get("imagehposition", "0") . "px ", + "top:". (int) $params->get("imagevposition", "0") . "px" + ); + $item['imageclasses'] = array( + ($params->get("hideimageonmobile", false) ? "cf-hide-mobile" : "") + ); + + // Form Container + $item['formclasses'] = array( + (in_array($params->get("formposition"), array("form-left", "form-right")) ? $classPrefix . "-col-large-" . $params->get("formsize", 6) : null), + ); + $item['formstyles'] = array( + "background-color:" . $params->get("formbgcolor", "none") + ); + + // Content + $item['contentclasses'] = implode(" ", array( + (in_array($params->get("formposition"), array("form-left", "form-right")) ? $classPrefix . "-col-large-" . (16 - $params->get("formsize", 6)) : null), + )); + + // Text Container + $item['textcontainerclasses'] = implode(" ", array( + (in_array($params->get("imgposition"), array("img-right", "img-left")) ? $classPrefix . "-col-medium-" . (16 - $params->get("imagesize", 6)) : null), + )); + + $textContent = trim($params->get("text", null)); + $footerContent = trim($params->get("footer", null)); + + $item['textIsEmpty'] = empty($textContent); + $item['footerIsEmpty'] = empty($footerContent); + $item['hascontent'] = !$item['textIsEmpty'] || (bool) isset($item['image']) ? 1 : 0; + + // Prepare Fields + $item['fields_prepare'] = \ConvertForms\FieldsHelper::prepare($item); + + // Load custom fonts into the document + \NRFramework\Fonts::loadFont($font); + + return $item; + } + + /** + * Renders form by ID + * + * @param integer $id The form ID + * + * @return string The form HTML + */ + public static function renderFormById($id) + { + if (!$data = Form::load($id)) + { + return; + } + + self::loadassets(true); + + return self::renderForm($data); + } + + /** + * Renders Form + * + * @param integer $formid The form id + * + * @return string The form HTML + */ + public static function renderForm($data) + { + \JPluginHelper::importPlugin('convertforms'); + \JPluginHelper::importPlugin('convertformstools'); + + // load translation strings + self::loadTranslations(); + + // Let user manipulate the form's settings by running their own PHP script + $payload_1 = ['form' => &$data]; + Form::runPHPScript($data['id'], 'formprepare', $payload_1); + + // Prepare form and fields + $data = self::prepareForm($data); + $html = self::layoutRender('form', $data); + + // Let user manipulate the form's HTML by running their own PHP script + $payload_2 = [ + 'formLayout' => &$html, + 'form' => $data + ]; + Form::runPHPScript($data['id'], 'formdisplay', $payload_2); + + \JFactory::getApplication()->triggerEvent('onConvertFormsAfterDisplay', [$data, $html]); + + // Prevent user frustration by fixing broken images in the backend. + // This is required since v2.8.0 where we no longer forces absolute URLs in the text editors. + if (\JFactory::getApplication()->isClient('administrator')) + { + $html = \NRFramework\URLHelper::relativePathsToAbsoluteURLs($html, null, false); + } + + return $html; + } + + /** + * Enqueues translations for the front-end + * + * @return void + */ + private static function loadTranslations() + { + \JText::script('COM_CONVERTFORMS_INVALID_RESPONSE'); + \JText::script('COM_CONVERTFORMS_INVALID_TASK'); + } + + /** + * Render HTML overridable layout + * + * @param string $layout The layout name + * @param object $data The data passed to layout + * + * @return string The rendered HTML layout + */ + public static function layoutRender($layout, $data) + { + return \JLayoutHelper::render($layout, $data, null, ['debug' => false, 'client' => 1, 'component' => 'com_convertforms']); + } + + /** + * Loads components media files + * + * @param boolean $front + * + * @return void + */ + public static function loadassets($frontend = false) + { + static $run; + + if ($run) + { + return; + } + + $run = true; + + // Front-end media files + if ($frontend) + { + // Load core.js needed by keepalive script. + \JHtml::_('behavior.core'); + \JHtml::_('behavior.keepalive'); + + \JHtml::script('com_convertforms/site.js', ['relative' => true, 'version' => 'auto']); + + $params = self::getComponentParams(); + + if ($params->get("loadCSS", true)) + { + \JHtml::stylesheet('com_convertforms/convertforms.css', ['relative' => true, 'version' => 'auto']); + } + + $doc = \JFactory::getDocument(); + $options = $doc->getScriptOptions('com_convertforms'); + $options = is_array($options) ? $options : []; + + $options = [ + // Remove trailing slash from the base URL to prevent unwanted redirections during AJAX submission + 'baseURL' => \Joomla\String\StringHelper::rtrim(\JRoute::_('index.php?option=com_convertforms'), '/'), + 'debug' => (bool) $params->get('debug', false) + ]; + + $doc->addScriptOptions('com_convertforms', $options); + + return; + } + + \JHtml::_('jquery.framework'); + \JHtml::stylesheet('com_convertforms/convertforms.sys.css', ['relative' => true, 'version' => 'auto']); + } + + /** + * Get Campaign Item by ID + * + * @param integer $id The campaign ID + * + * @return object + */ + public static function getCampaign($id) + { + $model = \JModelLegacy::getInstance('Campaign', 'ConvertFormsModel', array('ignore_request' => true)); + return $model->getItem($id); + } + + /** + * Write the given error message to log file. + * + * @param string $error_message The error message + * + * @return void + */ + public static function logError($error_message) + { + try { + \JLog::add($error_message, \JLog::ERROR, 'convertforms_errors'); + } catch (\Throwable $th) { + } + } + + /** + * Format given date based on the DATE_FORMAT_LC5 global format + * + * @param string $date + * + * @return string + */ + public static function formatDate($date) + { + if (!$date || $date == '0000-00-00 00:00:00') + { + return $date; + } + + return \JHtml::_('date', $date, \JText::_('DATE_FORMAT_LC5')); + } + + public static function getColumns($form_id) + { + if (!$form_id) + { + return []; + } + + $fields = Form::load($form_id, true, true); + + if (!is_array($fields) || !is_array($fields['fields'])) + { + return []; + } + + // Form Fields + $form_fields = array_map(function($value) + { + return 'param_' . $value; + }, array_keys($fields['fields'])); + + $default_columns = [ + 'id', + 'created', + 'user_id', + 'user_username', + 'visitor_id', + 'form_name', + 'param_leadnotes' + ]; + + // Set ID and Date Submitted as the first 2 columns + $columns = array_merge(array_slice($default_columns, 0, 2), $form_fields, array_slice($default_columns, 2, count($default_columns))); + + return $columns; + } + + /** + * Return absolute full URL of a path + * + * @param string $path + * + * @return string + */ + public static function pathTorelative($path) + { + return str_replace([JPATH_SITE, JPATH_ROOT], '', $path); + } + + /** + * Return absolute full URL of a path + * + * @param string $path + * + * @return string + */ + public static function absURL($path) + { + $path = str_replace([JPATH_SITE, JPATH_ROOT, \JURI::root()], '', $path); + $path = \JPath::clean($path); + + // Convert Windows Path to Unix + $path = str_replace('\\','/',$path); + + $path = ltrim($path, '/'); + $path = \JURI::root() . $path; + + return $path; + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/JsonApi.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/JsonApi.php new file mode 100644 index 00000000..a3859231 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/JsonApi.php @@ -0,0 +1,302 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Helper; + +/** + * ConvertForms API Class + */ +class JsonApi +{ + /** + * Joomla Application Object + * + * @var object + */ + private $app; + + /** + * API Key + * + * @var string + */ + private $apikey; + + /** + * Class Constructor + * + * @param string $key User API Key + */ + public function __construct($apikey) + { + if (!isset($apikey) || empty($apikey)) + { + $this->throwError('API Key is missing'); + } + + $this->apikey = $apikey; + + if (!$this->authenticate()) + { + $this->throwError('Invalid API Key: '. $this->apikey); + } + + $this->app = \JFactory::getApplication(); + } + + /** + * Throws an exception and logs the error message to the log file + * + * @param string $error The error message + * + * @return void + */ + private function throwError($error) + { + $error = 'ConvertForms API: ' . $error; + + Helper::log($error, 'error'); + throw new \Exception($error); + } + + /** + * Authenticate API Call + * + * @return bool + */ + public function authenticate() + { + return $this->getSiteKey() === $this->apikey; + } + + /** + * Returns Domain Key + * + * @return string + */ + public static function generateDomainKey() + { + $parse = parse_url(\JURI::root()); + $domain = isset($parse['host']) ? $parse['host'] : '-'; + $hash = md5('CF' . $domain); + + return $hash; + } + + /** + * Returns Domain Key + * + * @return string + */ + public static function getSiteKey() + { + return Helper::getComponentParams()->get('api_key', null); + } + + /** + * Route API endpoint to the proper method + * + * @param string $endpoint The API Endpoint Name + * + * @return string Response Array + */ + public function route($endpoint) + { + $endPointMethod = 'endPoint' . $endpoint; + + if (!method_exists($this, $endPointMethod)) + { + $this->throwError('Endpoint not found:' . $endpoint); + } + + return $this->$endPointMethod(); + } + + /** + * Loads and populates model + * + * @param JModel &$model + * + * @return JModel + */ + private function getModel($modelName) + { + if (!$modelName) + { + return; + } + + $model = \JModelLegacy::getInstance($modelName, 'ConvertFormsModel', array('ignore_request' => true)); + + $model->setState('list.limit', $this->app->input->get('limit', 1000)); + $model->setState('list.start', $this->app->input->get('start', 0)); + $model->setState('list.ordering', $this->app->input->get('order', 'a.id')); + $model->setState('list.direction', $this->app->input->get('dir', 'desc')); + + $state = $this->app->input->get('state', null); + + if (!is_null($state)) + { + $model->setState('filter.state', $state); + } + + return $model; + } + + /** + * Backwards compatibility support for old Leads endpoint + * + * @deprecated 2.2.0 + * + * @return array Database array + */ + private function endPointLeads() + { + return $this->endPointSubmissions(); + } + + /** + * Submissions Endpoint + * + * @since 2.2.0 + * + * @return array Database array + */ + private function endPointSubmissions() + { + // Load Model + $model = $this->getModel('Conversions'); + + // Apply form filter + $formID = $this->app->input->get('form', null); + if (!is_null($formID)) + { + $model->setState('filter.form_id', $formID); + } + + // Apply campaign filter + $campaignID = $this->app->input->get('campaign', null); + if (!is_null($campaignID)) + { + $model->setState('filter.campaign_id', $campaignID); + } + + // Get Data + $leads = $model->getItems(); + $data = array(); + + $tz = new \DateTimeZone($this->app->getCfg('offset', 'UTC')); + + foreach ($leads as $key => $lead) + { + // Convert created date to ISO8601 format to make Zapier happy. + $date_ = new \JDate($lead->created, $tz); + $lead->created = $date_->toISO8601(true); + + $data_ = array( + 'id' => $lead->id, + 'state' => $lead->state, + 'created' => $lead->created, + 'form_id' => $lead->form_id, + 'campaign_id' => $lead->campaign_id, + 'user_id' => $lead->user_id, + 'visitor_id' => $lead->visitor_id + ); + + // Include custom fields as well + if (isset($lead->prepared_fields)) + { + foreach ($lead->prepared_fields as $key => $field) + { + // This is a temporary workaround for File Upload field, to display files as absolute URLs in array + // We can't use $field->value directly as it transforms the array to string. + if ($field->options->get('type') == 'fileupload') + { + $field->value_raw = array_filter(array_map('trim', explode(',', $field->value))); + } + + $data_['field_' . $key] = $field->value_raw; + } + } + + $data[] = $data_; + } + + return $data; + } + + /** + * Forms Endpoint + * + * @return array Database array + */ + private function endPointForms() + { + return $this->endPointDefault('Forms'); + } + + /** + * Campaigns Endpoint + * + * @return array Database array + */ + private function endPointCampaigns() + { + return $this->endPointDefault('Campaigns'); + } + + /** + * Common Default Endpoint + * + * @param string $model ConvertForms model name + * + * @return array + */ + private function endPointDefault($model) + { + // Load Model + $model = $this->getModel($model); + + if (!$model) + { + return; + } + + // Get Data + $items = $model->getItems(); + + if (!$items) + { + return; + } + + $data = array(); + + foreach ($items as $key => $item) + { + $data[] = array( + 'id' => $item->id, + 'name' => $item->name, + 'created' => $item->created, + 'state' => $item->state + ); + } + + return $data; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Migrator.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Migrator.php new file mode 100644 index 00000000..e91cd78c --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Migrator.php @@ -0,0 +1,186 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +use Joomla\Registry\Registry; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Convert Forms Migrator + */ +class Migrator +{ + /** + * The database class + * + * @var object + */ + private $db; + + /** + * Indicates the current installed version of the extension + * + * @var string + */ + private $installedVersion; + + /** + * Class constructor + * + * @param string $installedVersion The current extension version + */ + public function __construct($installedVersion) + { + $this->installedVersion = $installedVersion; + $this->db = \JFactory::getDbo(); + } + + /** + * Start migration process + * + * @return void + */ + public function start() + { + $this->set_sib_campaigns_default_v2_version(); + + if (!$items = $this->getItems()) + { + return; + } + + foreach ($items as $item) + { + $item->params = new Registry($item->params); + + if (version_compare($this->installedVersion, '2.7.3', '<=')) + { + $this->fixUploadFolder($item); + } + + // Update box using id as the primary key. + $item->params = json_encode($item->params); + $this->db->updateObject('#__convertforms', $item, 'id'); + } + } + + private function fixUploadFolder(&$item) + { + if (!$fields = $item->params->get('fields')) + { + return; + } + + foreach ($fields as &$field) + { + if ($field->type != 'fileupload') + { + continue; + } + + if (isset($field->upload_folder_type)) + { + continue; + } + + $field->upload_folder_type = 'custom'; + } + } + + /** + * Finds all SendInBlue campaigns and sets the version to v2 if not set. + * + * @since 2.8.4 + * + * @return void + */ + private function set_sib_campaigns_default_v2_version() + { + if (version_compare($this->installedVersion, '2.8.4', '>=')) + { + return; + } + + if (!$campaigns = $this->getCampaigns('sendinblue')) + { + return; + } + + foreach ($campaigns as $item) + { + $item->params = new Registry($item->params); + + // version exists, move on + if ($version = $item->params->get('version')) + { + continue; + } + + // if no version is found, set it to v2 + $item->params->set('version', '2'); + + // Also set update existing to default value, true + $item->params->set('updateexisting', '1'); + + // Update box using id as the primary key. + $item->params = json_encode($item->params); + $this->db->updateObject('#__convertforms_campaigns', $item, 'id'); + } + } + + /** + * Get Forms List + * + * @return object + */ + public function getItems() + { + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select('*') + ->from('#__convertforms'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } + + /** + * Get Campaigns List + * + * @param string $service + * + * @return object + */ + public function getCampaigns($service = null) + { + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select('*') + ->from('#__convertforms_campaigns'); + + if ($service) + { + $query->where($this->db->quoteName('service') . ' = ' . $this->db->quote($service)); + } + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Plugin.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Plugin.php new file mode 100644 index 00000000..2d9391e5 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Plugin.php @@ -0,0 +1,388 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Helper; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +/** + * Services main class used by ConvertForms plugins + */ +class Plugin extends \JPlugin +{ + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * Wrappers Directory + * + * @var string + */ + private $wrappersDir = '/system/nrframework/helpers/wrappers/'; + + /** + * Lead row to manipulate + * + * @var object + */ + protected $lead; + + /** + * Auto loads the plugin language file + * + * @var boolean + */ + protected $autoloadLanguage = true; + + /** + * The campaign data. + * + * @var array + */ + protected $campaignData; + + /** + * Method to retrieve available lists/campaigns from API + * + * @param string $campaignData The Campaign's Data + * + * @return mixed Array on success, Throws an exception on fail + */ + public function getLists($campaignData) + { + $integration = $this->getCampaignIntegration($campaignData); + + $api = new $integration($campaignData); + + if (!method_exists($api, 'getLists')) + { + throw new \Exception('Method getLists() is missing from the ' . $this->getName() . ' wrapper'); + } + + $lists = $api->getLists(); + + if (!$api->success()) + { + throw new \Exception($api->getLastError()); + } + + return $lists; + } + + /** + * Returns the campaign integration. + * + * @param array $campaignData + * + * @return string + */ + protected function getCampaignIntegration($campaignData) + { + $class = str_replace('plgConvertForms', '', get_class($this)); + + return '\NRFramework\Integrations\\' . $class; + } + + /** + * Event ServiceName - Returns the service information + * + * @return array + */ + public function onConvertFormsServiceName() + { + $service = array( + 'name' => \JText::_('PLG_CONVERTFORMS_' . strtoupper($this->getName()) . '_ALIAS'), + 'alias' => $this->getName() + ); + + return $service; + } + + /** + * Appends form.xml to Campaign editing form + * + * @param JForm $form The form to be altered. + * @param mixed $data The associated data for the form. + * @param string $string The associated service name. + * + * @return boolean + */ + public function onConvertFormsCampaignPrepareForm($form, $data, $service) + { + if ($service != $this->getName()) + { + return true; + } + + // Try to load service form + try + { + $form->loadFile($this->getForm(), false); + $form->addFieldPath(JPATH_COMPONENT_ADMINISTRATOR . '/models/forms/fields'); + } + catch (Exception $e) + { + $this->app->enqueueMessage($e->getMessage(), 'error'); + } + + return true; + } + + /** + * Event that gets triggered whenever we want to retrieve service's account list + * + * @param array $campaignData All the Campaign Data + * + * @return array An array with all available lists + */ + public function onConvertFormsServiceLists($campaignData) + { + // Proceed only if we have a valid service + if ($campaignData['service'] != $this->getName()) + { + return; + } + + // Load service wrapper + $this->loadWrapper(); + + // Try to get service's account lists + try + { + return $this->getLists($campaignData); + } + // Catch any exception + catch (Exception $e) + { + Helper::log($e->getMessage(), 'error'); + return $e->getMessage(); + } + } + + /** + * Syncs conversion data with the assosiated third-party service. + * A conversion is assosiated with a Form who has a Campaign who has a Service + * Sync is skipped if the service is empty. + * + * Content is passed by reference, but after the save, so no changes will be saved. + * Method is called right after the content is saved. + * + * @param string $conversion The Conversion data + * @param bool $model The Conversions Model + * @param bool $isNew If the Conversion has just been created + * + * @return void + */ + public function onConvertFormsConversionAfterSave($conversion, $model, $isNew) + { + // Proceed only if we have a valid service + if ($conversion->campaign->service != $this->getName()) + { + return; + } + + // Validate Lead + $this->lead = clone $conversion; + $this->validateLead(); + + // Load service wrapper + $this->loadWrapper(); + + // Load Lead row for update + $table = $model->getTable(); + $table->load($conversion->id); + + $params = json_decode($table->params); + + if (!is_object($params)) + { + $params = new stdClass(); + } + + $params->sync_service = $conversion->campaign->service; + + // Try to sync the Lead with the assosiated 3rd party service + try + { + $this->subscribe($conversion); + + // Success. Update the Lead record. + unset($params->sync_error); + + $table->params = json_encode($params); + $table->store(); + + // Log debug message + Helper::log('Lead #' . $conversion->id . ' successfully synched with ' . $params->sync_service); + } + + // Catch any exception and save it to the Lead row. + // Then re-throw the same exception in order to be used by the AJAX handler. + catch (\Exception $e) + { + $params->sync_error = $e->getMessage(); + $table->params = json_encode($params); + $table->state = 0; + $table->store(); + + // Log error message + Helper::log('Error syncing lead #' . $conversion->id . ' with ' . $params->sync_service . " - " . $e->getMessage(), 'error'); + // Re-throw the exception + throw new \Exception($e->getMessage()); + } + } + + /** + * Validate lead and make sure there is at least 1 email field + * + * @return void + */ + protected function validateLead() + { + if (!isset($this->lead->params) || !is_array($this->lead->params)) + { + throw new \Exception(\JText::_('COM_CONVERTFORMS_INVALID_LEAD')); + } + + // First, try to find a field with a name set to 'email'. + foreach($this->lead->params as $key => $value) + { + if (strtolower($key) != 'email') + { + continue; + } + + // Email field found! + $this->lead->email = $value; + + // Remove the parameter in order to avoid sending the email value twice + unset($this->lead->params[$key]); + } + + // If no email field found, make a second attempt to find an email field by type + if (!isset($this->lead->email) || empty($this->lead->email)) + { + if (isset($this->lead->form->fields) && is_array($this->lead->form->fields)) + { + foreach ($this->lead->form->fields as $key => $field) + { + if ($field['type'] != 'email') + { + continue; + } + + if (!isset($this->lead->params[$field['name']])) + { + continue; + } + + // Email field found! + $this->lead->email = $this->lead->params[$field['name']]; + unset($this->lead->params[$field['name']]); + } + } + } + + // Make sure now we have found an email field + if (!isset($this->lead->email) || empty($this->lead->email)) + { + throw new \Exception(\JText::_('COM_CONVERTFORMS_FORM_IS_MISSING_THE_EMAIL_FIELD')); + } + } + + /** + * Loads Service Wrapper + * + * @return boolean + */ + protected function loadWrapper() + { + $wrapper = $this->getWrapperFile(); + + if (!\JFile::exists($wrapper)) + { + throw new \Exception('Wrapper ' . $wrapper . ' not found'); + } + + return include_once($wrapper); + } + + /** + * Returns Service Wrapper File + * + * @return string + */ + protected function getWrapperFile() + { + return JPATH_PLUGINS . $this->wrappersDir . $this->getName() . '.php'; + } + + /** + * Returns form.xml file path + * + * @return string + */ + private function getForm() + { + $xml = JPATH_PLUGINS . '/convertforms/' . $this->getName() . '/form.xml'; + + if (!\JFile::exists($xml)) + { + throw new \Exception('XML file is missing: ' . $xml); + } + + return $xml; + } + + /** + * Insensitive search for array key + * + * @param string $name The array key to search for + * @param array $array The array + * + * @return mixed False if not found, string if found + */ + public function findKey($name, $array) + { + $result = false; + + foreach ($array as $key => $value) + { + if (strtolower($key) == $name) + { + $result = $value; + break; + } + } + + return $result; + } + + /** + * Get plugin name alias + * + * @return string + */ + public function getName() + { + return isset($this->name) ? $this->name : $this->_name; + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/SmartTags.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/SmartTags.php new file mode 100644 index 00000000..0f52cc5f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/SmartTags.php @@ -0,0 +1,102 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +use ConvertForms\Helper; +use ConvertForms\Form; + +defined('_JEXEC') or die(); + +class SmartTags +{ + public static function replace($string, $submission = null, $form_id = null) + { + // Setup Submission Tags + $localTagsGroups = []; + + if (is_object($submission)) + { + $form_id = is_null($form_id) ? $submission->form_id : $form_id; + $localTagsGroups = array_merge($localTagsGroups, Submission::getSmartTags($submission)); + } + + $localTagsGroups['submissions']['count'] = $form_id ? Helper::getFormLeadsCount($form_id) : '0'; + + // Add Submission Tags to collection + $smartTags = new \NRFramework\SmartTags(); + foreach ($localTagsGroups as $key => $localTagsGroup) + { + $prefix = empty($key) ? null : $key . '.'; + $smartTags->add($localTagsGroup, $prefix); + } + + $result = $smartTags->replace($string); + + // Temporary fix for duplicate site URL. + // Since v2.8.0 that we don't force absoluste URLs in the editors, we may don't need to fix duplicate site URL on the fly any longer. + // We need to keep it though for a while to prevent backwards compatibility issues. + $result = self::fixDuplicateSiteURL($result); + + return $result; + } + + /** + * In TinyMCE we are forcing absolute URLs (relative_urls=false). This means that the editors prefixes all 'src' and 'href' properties + * with the site's base URL. If we try to use a File Upload Field Smart Tag in a link like in the example below: + * + * Download File + * + * The editor will transform the link into + * + * Download File + * + * Even though since v2.7.4 we store the relative path instead of the absolute URL in the database, this issue is not resolved as the relative path + * is transformed into an absolute URL by the prepareValue() method before the value arrives in this method. + * + * @param string $string + * + * @return string + */ + private static function fixDuplicateSiteURL($subject) + { + if (is_string($subject) && strpos($subject, 'http') !== false) + { + $domain = \JFactory::getApplication()->input->server->get('HTTP_HOST', '', 'STRING'); + /** + * $domain returns www.site.com + * The regex below will not be able to find the duplicate URL given the $subject: + * https://site.com/https://www.site.com/path/to/file + * Once we drop the "www." part from $domain, we will be able to successfully find and replace the duplicate URL. + */ + $domain = str_replace('www.', '', $domain); + return preg_replace('#http(s)?:\/\/(.*?)' . $domain . '(.*?)\/http#', 'http', $subject); + } + + if (is_array($subject)) + { + foreach ($subject as $key => &$item) + { + if (!is_string($item)) + { + continue; + } + + $item = self::fixDuplicateSiteURL($item); + } + } + + return $subject; + } +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Submission.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Submission.php new file mode 100644 index 00000000..8cffc7f7 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Submission.php @@ -0,0 +1,112 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +class Submission +{ + public static function getSmartTags($submission) + { + $data = [ + 'submission' => [ + 'id' => $submission->id, + 'user_id' => $submission->user_id, + 'date' => $submission->created, + 'created' => $submission->created, + 'modified' => $submission->modified, + 'campaign_id' => $submission->campaign_id, + 'form_id' => $submission->form_id, + 'visitor_id' => $submission->visitor_id, + 'status' => $submission->state == '1' ? \JText::_('COM_CONVERTFORMS_SUBMISSION_CONFIRMED') : \JText::_('COM_CONVERTFORMS_SUBMISSION_UNCONFIRMED'), + ] + ]; + + if (!is_array($submission->prepared_fields)) + { + return; + } + + $fields = $submission->prepared_fields; + + $all_fields = ''; + $all_fields_filled = ''; + + foreach ($fields as $field) + { + $field_name = $field->options->get('name'); + + // In case of a dropdown and radio fields, make also the label and the calc-value properties available. + // This is rather useful when we want to display the dropdown's selected text rather than the dropdown's value. + if (in_array($field->options->get('type'), ['dropdown', 'radio'])) + { + foreach ($field->options->get('choices.choices') as $choice) + { + $choice = (array) $choice; + + if ($field->value !== $choice['value']) + { + continue; + } + + if (isset($choice['label'])) + { + $data['field'][$field_name . '.label'] = $choice['label']; + } + + if (isset($choice['calc-value'])) + { + $data['field'][$field_name . '.calcvalue'] = $choice['calc-value']; + } + } + } + + $data['field'][$field_name] = $field->value; // The value in plain text. Arrays will be shown comma separated. + $data['field'][$field_name . '.raw'] = $field->value_raw; // The raw value as saved in the database. + $data['field'][$field_name . '.html'] = $field->value_html; // The value as transformed to be shown in HTML. + + $all_fields_item = '' . $field->class->getLabel() . ': ' . $field->value_html . '
'; + $all_fields .= $all_fields_item; + $all_fields_filled .= $field->value_html ? $all_fields_item : ''; + } + + $data['']['all_fields'] = $all_fields; + $data['']['all_fields_filled'] = $all_fields_filled; + + \JPluginHelper::importPlugin('convertformstools'); + \JFactory::getApplication()->triggerEvent('onConvertFormsGetSubmissionSmartTags', [$submission, &$data]); + + return $data; + } + + public static function replaceSmartTags($submission, $layout) + { + $smartTagGroups = self::getSmartTags($submission); + + $st = new \NRFramework\SmartTags(); + + foreach ($smartTagGroups as $key => $smartTagGroup) + { + $prefix = empty($key) ? null : $key . '.'; + $st->add($smartTagGroup, $prefix); + } + + return $st->replace($layout); + } + + public static function route($submission_id) + { + $itemId = \JFactory::getApplication()->input->get('Itemid'); + return \JRoute::_('index.php?Itemid=' . $itemId . '&option=com_convertforms&view=submission&id=' . $submission_id); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/SubmissionMeta.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/SubmissionMeta.php new file mode 100644 index 00000000..0ce00713 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/SubmissionMeta.php @@ -0,0 +1,174 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2019 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +defined('_JEXEC') or die('Restricted access'); + +class SubmissionMeta +{ + /** + * Logs table + * + * @var string + */ + private static $table = '#__convertforms_submission_meta'; + + /** + * Adds a Submission Meta. + * + * @param int $submission_id + * @param string $type + * @param string $key + * @param string $value + * @param array $params + * + * @return void + */ + public static function add($submission_id, $type, $key = '', $value, $params = []) + { + if (!$submission_id || !$type || !$value) + { + return; + } + + // Data to save + $data = (object) [ + 'submission_id' => $submission_id, + 'meta_type' => $type, + 'meta_key' => $key, + 'meta_value' => $value, + 'params' => json_encode($params), + 'date_created' => \JFactory::getDate()->toSql() + ]; + + // Insert the data + try + { + \JFactory::getDbo()->insertObject(self::$table, $data); + } + catch (Exception $e) + { + } + } + + /** + * Retrieves the meta row. + * + * @param int $submission_id + * @param string $type + * @param string $key + * + * @return mixed + */ + public static function getMeta($submission_id, $type, $key = '') + { + if (!$submission_id || !$type) + { + return; + } + + $db = \JFactory::getDbo(); + $query = $db->getQuery(true); + $query + ->select('*') + ->from($db->quoteName(self::$table)) + ->where($db->quoteName('submission_id') . ' = ' . $db->quote($submission_id)) + ->where($db->quoteName('meta_type') . ' = ' . $db->quote($type)); + + if (!empty($key)) + { + $query->where($db->quoteName('meta_key') . ' = ' . $db->quote($key)); + } + + $db->setQuery($query); + + return $db->loadAssoc(); + } + + /** + * Retrieves meta value. + * + * @param int $submission_id + * @param string $type + * @param string $key + * + * @return string + */ + public static function getValue($submission_id, $type, $key = '') + { + if (!$data = self::getMeta($submission_id, $type, $key)) + { + return; + } + + return $data['meta_value']; + } + + /** + * Deletes a submission meta + * + * @param int $submission_id + * @param string $type + * @param string $key + * + * @return void + */ + public static function delete($submission_id, $type, $key = '') + { + if (!$submission_id || !$type) + { + return; + } + + $db = \JFactory::getDbo(); + + $query = $db->getQuery(true) + ->delete($db->quoteName(self::$table)) + ->where($db->quoteName('submission_id') . ' = ' . $db->quote($submission_id)) + ->where($db->quoteName('meta_type') . ' = ' . $db->quote($type)); + + if (!empty($key)) + { + $query->where($db->quoteName('meta_key') . ' = ' . $db->quote($key)); + } + + $db->setQuery($query); + + return $db->execute(); + } + + /** + * Deletes a list of submission meta by ID + * + * @param array $ids + * + * @return void + */ + public static function deleteAll($ids) + { + if (!is_array($ids)) + { + return; + } + + $db = \JFactory::getDbo(); + + $query = $db->getQuery(true) + ->delete($db->quoteName(self::$table)) + ->where($db->quoteName('id') . ' IN (' . implode(', ', (array) $ids) . ')'); + + $db->setQuery($query); + + return $db->execute(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Validate.php b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Validate.php new file mode 100644 index 00000000..09d6668d --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/Validate.php @@ -0,0 +1,101 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace ConvertForms; + +// No direct access to this file +defined('_JEXEC') or die; + +class Validate +{ + /** + * Check if given email address is valid + * + * @param String $email The email address to check + * + * @return Boolean Return true if the email address is valid + */ + public static function email($email) + { + return filter_var($email, FILTER_VALIDATE_EMAIL); + } + + /** + * Check DNS records corresponding to a given email address + * + * @param String $email The email address to check + * + * @return Boolean Return true if the email address has valid MX records + */ + public static function emaildns($email) + { + // Check if it's an email address format + if (!self::email($email)) + { + return false; + } + + list($user, $domain) = explode('@', $email, 2); + + // checkdnsrr for PHP < 5.3.0 + if (!function_exists('checkdnsrr') && function_exists('exec') && is_callable('exec')) + { + @exec('nslookup -type=MX ' . escapeshellcmd($domain), $output); + + foreach($output as $line) + { + if (preg_match('/^' . preg_quote($domain) . '/', $line)) + { + return true; + } + } + + return false; + } + + // fallback method... + if (!function_exists('checkdnsrr') || !is_callable('checkdnsrr')) + { + return true; + } + + return checkdnsrr($domain, substr(PHP_OS, 0, 3) == 'WIN' ? 'A' : 'MX'); + } + + /** + * Validates the given date. + * + * Note: This method is limited to validate only english-based dates + * as the Date PHP class doesn't respect current locale without using hacks + * + * @param String $date The date string + * @param String $format The date format to be used + * + * @return boolean + */ + public static function dateFormat($date, $format = null) + { + return \JDate::createFromFormat($format, trim($date)); + } + + /** + * Validates URL + * + * @param string $url + * + * @return void + */ + public static function url($url) + { + return filter_var($url, FILTER_VALIDATE_URL); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/addons.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/addons.xml new file mode 100644 index 00000000..12f9cc4e --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/addons.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field.xml new file mode 100644 index 00000000..ba2c1b4d --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field.xml @@ -0,0 +1,63 @@ + +
+
+ + + + + + +
+
+ + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/checkbox.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/checkbox.xml new file mode 100644 index 00000000..803bec83 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/checkbox.xml @@ -0,0 +1,20 @@ + +
+
+ +
+
+ + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/divider.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/divider.xml new file mode 100644 index 00000000..adbb2484 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/divider.xml @@ -0,0 +1,39 @@ + +
+
+ + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/dropdown.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/dropdown.xml new file mode 100644 index 00000000..6e626fec --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/dropdown.xml @@ -0,0 +1,9 @@ + +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/editor.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/editor.xml new file mode 100644 index 00000000..a53e1beb --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/editor.xml @@ -0,0 +1,58 @@ + +
+
+ + + + +
+
+ + + + + +
+
+ + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/email.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/email.xml new file mode 100644 index 00000000..6a0868df --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/email.xml @@ -0,0 +1,15 @@ + +
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/emptyspace.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/emptyspace.xml new file mode 100644 index 00000000..21de89bd --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/emptyspace.xml @@ -0,0 +1,12 @@ + +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/fileupload.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/fileupload.xml new file mode 100644 index 00000000..da6d6c07 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/fileupload.xml @@ -0,0 +1,48 @@ + +
+
+ + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/hcaptcha.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/hcaptcha.xml new file mode 100644 index 00000000..fe593315 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/hcaptcha.xml @@ -0,0 +1,28 @@ + +
+
+ + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/heading.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/heading.xml new file mode 100644 index 00000000..ef8a93a5 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/heading.xml @@ -0,0 +1,67 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/hidden.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/hidden.xml new file mode 100644 index 00000000..591875b9 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/hidden.xml @@ -0,0 +1,9 @@ + +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/number.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/number.xml new file mode 100644 index 00000000..c99bddda --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/number.xml @@ -0,0 +1,25 @@ + +
+
+ + + +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/radio.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/radio.xml new file mode 100644 index 00000000..803bec83 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/radio.xml @@ -0,0 +1,20 @@ + +
+
+ +
+
+ + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/recaptcha.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/recaptcha.xml new file mode 100644 index 00000000..58130637 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/recaptcha.xml @@ -0,0 +1,19 @@ + +
+
+ + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/recaptchav2invisible.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/recaptchav2invisible.xml new file mode 100644 index 00000000..456f5440 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/recaptchav2invisible.xml @@ -0,0 +1,13 @@ + +
+
+ + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/submit.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/submit.xml new file mode 100644 index 00000000..60ad7bdf --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/submit.xml @@ -0,0 +1,78 @@ + +
+
+ + + + + + + + + + + + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/tel.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/tel.xml new file mode 100644 index 00000000..e5974a13 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/tel.xml @@ -0,0 +1,14 @@ + +
+
+ + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/text.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/text.xml new file mode 100644 index 00000000..fce1a41b --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/text.xml @@ -0,0 +1,52 @@ + +
+
+ + + + + + +
+
+ + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/textarea.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/textarea.xml new file mode 100644 index 00000000..8bc058cd --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/textarea.xml @@ -0,0 +1,56 @@ + +
+
+ +
+
+ + + + + +
+
+ + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/url.xml b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/url.xml new file mode 100644 index 00000000..1ab7a198 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/ConvertForms/xml/field/url.xml @@ -0,0 +1,16 @@ + +
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/access.xml b/deployed/convertforms/administrator/components/com_convertforms/access.xml new file mode 100644 index 00000000..c13f2235 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/access.xml @@ -0,0 +1,15 @@ + + +
+ + + + + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/autoload.php b/deployed/convertforms/administrator/components/com_convertforms/autoload.php new file mode 100644 index 00000000..5d4c8186 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/autoload.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// Register Convert Form namespace +JLoader::registerNamespace('ConvertForms', JPATH_ADMINISTRATOR . '/components/com_convertforms/ConvertForms', false, false, 'psr4'); + +// Ensure backwards compatibility with old class names +JLoader::registerAlias('ConvertFormsHelper', '\\ConvertForms\\Helper'); +JLoader::registerAlias('ConvertFormsService', '\\ConvertForms\\Plugin'); +JLoader::registerAlias('ConvertFormsSmartTags', '\\ConvertForms\\SmartTags'); +JLoader::registerAlias('ConvertFormsAnalytics', '\\ConvertForms\\Analytics'); + +?> \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/config.xml b/deployed/convertforms/administrator/components/com_convertforms/config.xml new file mode 100644 index 00000000..3bf5ec8d --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/config.xml @@ -0,0 +1,103 @@ + + +
+ + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
+ + + + + + + + + +
+
+ + + + + + +
+
+ + +
+
+ +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/controller.php b/deployed/convertforms/administrator/components/com_convertforms/controller.php new file mode 100644 index 00000000..8bee724c --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controller.php @@ -0,0 +1,21 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +/** + * Convert Forms master display controller. + */ +class ConvertFormsController extends JControllerLegacy +{ + +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/addons.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/addons.php new file mode 100644 index 00000000..26e04ab8 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/addons.php @@ -0,0 +1,40 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Addons list controller class. + */ +class ConvertFormsControllerAddons extends JControllerAdmin +{ + protected $text_prefix = 'COM_CONVERTFORMS_ADDONS'; + + /** + * 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 JModelLegacy The model. + * + * @since 1.6 + */ + public function getModel($name = 'Addon', $prefix = 'ConvertFormsModel', $config = array('ignore_request' => true)) + { + return parent::getModel($name, $prefix, $config); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/campaign.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/campaign.php new file mode 100644 index 00000000..adfeba0a --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/campaign.php @@ -0,0 +1,23 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.application.component.controllerform'); + +/** + * Campaign controller class + */ +class ConvertFormsControllerCampaign extends JControllerForm +{ + protected $text_prefix = 'COM_CONVERTFORMS_CAMPAIGN'; +} diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/campaigns.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/campaigns.php new file mode 100644 index 00000000..2128d0a8 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/campaigns.php @@ -0,0 +1,75 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Campaigns list controller class. + */ +class ConvertFormsControllerCampaigns extends JControllerAdmin +{ + protected $text_prefix = 'COM_CONVERTFORMS_CAMPAIGN'; + + /** + * 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 JModelLegacy The model. + * + * @since 1.6 + */ + public function getModel($name = 'Campaign', $prefix = 'ConvertFormsModel', $config = array('ignore_request' => true)) + { + return parent::getModel($name, $prefix, $config); + } + + /** + * Copy items specified by array cid and set Redirection to the list of items + * + * @return void + */ + function duplicate() + { + $ids = JFactory::getApplication()->input->get('cid', array(), 'array'); + + // Get the model. + $model = $this->getModel('Campaign'); + + foreach ($ids as $id) + { + $model->copy($id); + } + + JFactory::getApplication(JText::sprintf('COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_COPIED', count($ids))); + JFactory::getApplication()->redirect('index.php?option=com_convertforms&view=campaigns'); + } + + /** + * Export campaign submissions specified by campaign ids + * + * @return void + */ + function export() + { + $ids = JFactory::getApplication()->input->get('cid', null, 'INT'); + + // Get the Conversions model + $model = $this->getModel('Conversions'); + $model->export(null, $ids); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/conversion.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/conversion.php new file mode 100644 index 00000000..dad4033f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/conversion.php @@ -0,0 +1,23 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.application.component.controllerform'); + +/** + * Conversion controller class + */ +class ConvertFormsControllerConversion extends JControllerForm +{ + protected $text_prefix = 'COM_CONVERTFORMS_SUBMISSION'; +} diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/conversions.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/conversions.php new file mode 100644 index 00000000..ab49d02d --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/conversions.php @@ -0,0 +1,53 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Conversions list controller class. + */ +class ConvertFormsControllerConversions extends JControllerAdmin +{ + protected $text_prefix = 'COM_CONVERTFORMS_SUBMISSION'; + + /** + * 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 JModelLegacy The model. + * + * @since 1.6 + */ + public function getModel($name = 'Conversion', $prefix = 'ConvertFormsModel', $config = array('ignore_request' => true)) + { + return parent::getModel($name, $prefix, $config); + } + + /** + * Export Method + * Export the selected items specified by id + */ + public function export() + { + $ids = JFactory::getApplication()->input->get('cid', array(), 'array'); + + // Get the model. + $model = $this->getModel('Conversions'); + $model->export($ids); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/export.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/export.php new file mode 100644 index 00000000..4b01d662 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/export.php @@ -0,0 +1,85 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +/** + * Export controller class. + */ +class ConvertFormsControllerExport extends JControllerAdmin +{ + /** + * Used by the export form to submit the data + * + * @return void + */ + public function export() + { + JSession::checkToken('request') or die(JText::_('JINVALID_TOKEN')); + + $app = JFactory::getApplication(); + $input = $app->input; + + $tz = new \DateTimeZone($app->getCfg('offset', 'GMT')); + $date = \JFactory::getDate()->setTimezone($tz)->format('YmdHis', true); + $filename = 'convertforms_submissions_' . $date . '.' . $input->get('export_type'); + + $options = $input->getArray(); + $options['filter_id'] = $input->get('filter_id', null, 'RAW'); // Allow commas + $options['filename'] = $input->get('filename', $filename); + + $app->redirect('index.php?option=com_convertforms&view=export&layout=progress&' . http_build_query(array_filter($options))); + } + + /** + * Force download of the exported file + * + * @return void + */ + public function download() + { + if (!$filename = JFactory::getApplication()->input->get('filename', '', 'RAW')) + { + throw new Exception('Invalid filename'); + } + + $filename = NRFramework\File::getTempFolder() . $filename; + + if (!JFile::exists($filename)) + { + throw new Exception('Invalid filename'); + } + + error_reporting(0); + + // Send the appropriate headers to force the download in the browser + header('Content-Description: File Transfer'); + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="' . basename($filename) . '"'); + header('Expires: 0'); + header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + header("Cache-Control: public", false); + header('Pragma: public'); + header('Content-Length: ' . @filesize($filename)); + + // Read exported file to buffer + readfile($filename); + + // Don't leave any clues on the server. Delete the file. + JFile::delete($filename); + + jexit(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/form.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/form.php new file mode 100644 index 00000000..2098a0c3 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/form.php @@ -0,0 +1,97 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.application.component.controllerform'); + +/** + * Form Controller Class + */ +class ConvertFormsControllerForm extends JControllerForm +{ + protected $text_prefix = 'COM_CONVERTFORMS_FORM'; + + public function ajaxSave() + { + $data = $this->getFormDataFromRequest(); + $model = $this->getModel('Form'); + $validData = $model->validate('jform', $data); + + JPluginHelper::importPlugin('convertforms'); + JPluginHelper::importPlugin('convertformstools'); + + if (!$model->save($validData)) + { + header('HTTP/1.1 500'); + $response = [ + 'error' => \JText::sprintf('JLIB_APPLICATION_ERROR_SAVE_FAILED', $model->getError()) + ]; + } + else + { + $id = $model->getState('form.id'); + $isNew = $data['id'] == 0; + + $response = [ + 'id' => $id, + 'isNew' => $isNew, + 'redirect' => JRoute::_('index.php?option=com_convertforms&task=form.edit&id=' . $id) + ]; + } + + jexit(json_encode($response, JSON_UNESCAPED_UNICODE)); + } + + public function preview() + { + $data = $this->getModel('Form')->validate('jform', $this->getFormDataFromRequest()); + $data['params'] = json_decode($data['params'], true); + $data['fields'] = $data['params']['fields']; + + $response = [ + 'html' => ' +
+
+ ' . ConvertForms\Helper::renderForm($data) . ' +
+
+ ' + ]; + + echo json_encode($response, JSON_UNESCAPED_UNICODE); + + jexit(); + } + + private function getFormDataFromRequest() + { + $data = json_decode(file_get_contents('php://input')); + + $xx = new JRegistry(); + + foreach ($data as $value) + { + $key = str_replace(['jform[', ']', '['], ['', '', '.'], $value->name); + + // Why? + if ($key == 'emails') + { + continue; + } + + $xx->set($key, $value->value); + } + + return $xx->toArray(); + } +} diff --git a/deployed/convertforms/administrator/components/com_convertforms/controllers/forms.php b/deployed/convertforms/administrator/components/com_convertforms/controllers/forms.php new file mode 100644 index 00000000..dd0ab482 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/controllers/forms.php @@ -0,0 +1,95 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla controlleradmin library +jimport('joomla.application.component.controlleradmin'); + +class ConvertformsControllerForms extends JControllerAdmin +{ + protected $text_prefix = 'COM_CONVERTFORMS_FORM'; + + /** + * Proxy for getModel. + * @since 2.5 + */ + public function getModel($name = 'form', $prefix = 'ConvertFormsModel', $config = array('ignore_request' => true)) + { + return parent::getModel($name, $prefix, $config); + } + + /** + * Import Method + * Set layout to import + */ + public function import() + { + $app = JFactory::getApplication(); + + $file = $app->input->files->get("file"); + + if (!empty($file)) + { + if (isset($file['name'])) + { + // Get the model. + $model = $this->getModel('Forms'); + $model_item = $this->getModel('Form'); + $model->import($model_item); + } + else + { + $app->enqueueMessage(JText::_('NR_PLEASE_CHOOSE_A_VALID_FILE'), 'error'); + $app->redirect('index.php?option=com_convertforms&view=forms&layout=import'); + } + } + else + { + $app->redirect('index.php?option=com_convertforms&view=forms&layout=import'); + } + } + + /** + * Export Method + * Export the selected items specified by id + */ + public function export() + { + $ids = JFactory::getApplication()->input->get('cid', array(), 'array'); + + // Get the model. + $model = $this->getModel('Forms'); + $model->export($ids); + } + + /** + * Copy Method + * Copy all items specified by array cid + * and set Redirection to the list of items + */ + public function duplicate() + { + $ids = JFactory::getApplication()->input->get('cid', array(), 'array'); + + // Get the model. + $model = $this->getModel('Form'); + + foreach ($ids as $id) + { + $model->copy($id); + } + + JFactory::getApplication(JText::sprintf('COM_CONVERTFORMS_FORM_N_ITEMS_COPIED', count($ids))); + JFactory::getApplication()->redirect('index.php?option=com_convertforms&view=forms'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/convertforms.php b/deployed/convertforms/administrator/components/com_convertforms/convertforms.php new file mode 100644 index 00000000..5c073f0e --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/convertforms.php @@ -0,0 +1,71 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// Load Framework +if (!@include_once(JPATH_PLUGINS . '/system/nrframework/autoload.php')) +{ + throw new RuntimeException('Novarain Framework is not installed', 500); +} + +$app = JFactory::getApplication(); + +// Access check. +if (!JFactory::getUser()->authorise('core.manage', 'com_convertforms')) +{ + $app->enqueueMessage(JText::_('JERROR_ALERTNOAUTHOR'), 'error'); + return; +} + +use NRFramework\Functions; +use NRFramework\Extension; + +// Load framework's and component's language files +Functions::loadLanguage(); +Functions::loadLanguage('com_convertforms'); +Functions::loadLanguage('plg_system_convertforms'); + +// Initialize Convert Forms Library +require_once JPATH_ADMINISTRATOR . '/components/com_convertforms/autoload.php'; + +// Check required extensions +if (!Extension::pluginIsEnabled('nrframework')) +{ + $app->enqueueMessage(JText::sprintf('NR_EXTENSION_REQUIRED', JText::_('COM_CONVERTFORMS'), JText::_('PLG_SYSTEM_NRFRAMEWORK')), 'error'); +} + +if (!Extension::pluginIsEnabled('convertforms')) +{ + $app->enqueueMessage(JText::sprintf('NR_EXTENSION_REQUIRED', JText::_('COM_CONVERTFORMS'), JText::_('PLG_SYSTEM_CONVERTFORMS')), 'error'); +} + +if (!Extension::componentIsEnabled('ajax')) +{ + $app->enqueueMessage(JText::sprintf('NR_EXTENSION_REQUIRED', JText::_('COM_CONVERTFORMS'), 'Ajax Interface'), 'error'); +} + +// Load component's CSS/JS files +ConvertForms\Helper::loadassets(); + +if (defined('nrJ4')) +{ + JHtml::stylesheet('plg_system_nrframework/joomla4.css', ['relative' => true, 'version' => 'auto']); +} else +{ + JHtml::stylesheet('com_convertforms/joomla3.css', ['relative' => true, 'version' => 'auto']); +} + +// Perform the Request task +$controller = JControllerLegacy::getInstance('ConvertForms'); +$controller->execute($app->input->get('task')); +$controller->redirect(); \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/convertforms.xml b/deployed/convertforms/administrator/components/com_convertforms/convertforms.xml new file mode 100644 index 00000000..1f1acd37 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/convertforms.xml @@ -0,0 +1,75 @@ + + + COM_CONVERTFORMS + COM_CONVERTFORMS_DESC + 3.0.0 + September 2016 + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + script.install.php + sql/convertforms.sql + sql/uninstall.convertforms.sql + sql/updates/mysql + + + https://static.tassos.gr/update/convertformsfree?type=.xml + + + + controller.php + convertforms.php + controllers + models + views + + + COM_CONVERTFORMS + + + NR_DASHBOARD + + + COM_CONVERTFORMS_FORMS + + + COM_CONVERTFORMS_CAMPAIGNS + + + COM_CONVERTFORMS_SUBMISSIONS + + + COM_CONVERTFORMS_ADDONS + + + + ConvertForms + controllers + language + layouts + models + sql + tables + views + access.xml + config.xml + controller.php + convertforms.php + script.install.helper.php + version.php + autoload.php + + + + css + js + img + templates + font + + + + free + \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/language/bg-BG/bg-BG.com_convertforms.ini b/deployed/convertforms/administrator/components/com_convertforms/language/bg-BG/bg-BG.com_convertforms.ini new file mode 100644 index 00000000..eb7b3ee7 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/language/bg-BG/bg-BG.com_convertforms.ini @@ -0,0 +1,605 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +CONVERTFORMS="Convert Forms" +COM_CONVERTFORMS="Convert Forms" +COM_CONVERTFORMS_DESIGN="Дизайн" +COM_CONVERTFORMS_BEHAVIOR="Поведение" +COM_CONVERTFORMS_LIST="Списък" +COM_CONVERTFORMS_NO_RESULTS_FOUND="Няма резултати за %s" +COM_CONVERTFORMS_CREATE_NEW="Създайте нова?" +COM_CONVERTFORMS_EMAIL_ASCENDING="Имейл възходящо" +COM_CONVERTFORMS_EMAIL_DESCENDING="Имейл низходящо" +COM_CONVERTFORMS_ACTIONS="Действия" +COM_CONVERTFORMS_VIEW_LEADS="Преглед на подадените заявки" +NRI_PLG_CONVERTFORMS="Convert Forms плъгин" +COM_CONVERTFORMS_CONFIGURATION="Конфигурация Convert Forms" +COM_CONVERTFORMS_LOADCSS="Зареди css-стилове" +COM_CONVERTFORMS_LOADCSS_DESC="Изберете, за да заредите стиловете към разширенията. Или деактивирйате това, ако поставите свои стилове в свой css-файл, или например в поле за персонализиран код 'Custom Code', или в css стиловете на темплейта." +COM_CONVERTFORMS_DEBUG="Отстраняване на грешки" +COM_CONVERTFORMS_DEBUG_DESC="Активирайте тази опция, за да започнете отстраняване нагрешки и неочаквано поведение. Съобщенията за грешки ще се появяват в конзолата на вашия браузър (натиснете F12) и към папката Logs." +COM_CONVERTFORMS_FORMS="Формуляри" +COM_CONVERTFORMS_FORM="Формуляр" +COM_CONVERTFORMS_NEW_FORM="Нов формуляр" +COM_CONVERTFORMS_EDIT_FORM="Редактирай формуляр" +COM_CONVERTFORMS_FORM_N_ITEMS_COPIED="%s формуляри са копирани" +COM_CONVERTFORMS_FORM_N_ITEMS_PUBLISHED="%s формуляри са публикувани" +COM_CONVERTFORMS_FORM_N_ITEMS_UNPUBLISHED="%s формуляри са непубликувани" +COM_CONVERTFORMS_FORM_N_ITEMS_TRASHED="%s формуляри са в кошчето" +COM_CONVERTFORMS_FORM_N_ITEMS_DELETED="%s формуляри са изтрити" +COM_CONVERTFORMS_FORM_ASCENDING="Формуляр възходящо" +COM_CONVERTFORMS_FORM_DESCENDING="Формуляр низходящо" +COM_CONVERTFORMS_FORM_SELECT="- Избери формуляр - " +COM_CONVERTFORMS_FORM_CREATE_MODULE="Публикуване, създаване на модул" +COM_CONVERTFORMS_FORM_LEADS="Досега този формуляр има общо %s подадени заявки" +COM_CONVERTFORMS_FORM_CLIPBOARD_SHORTCODE="Публикувай чрез шорткод %s" +COM_CONVERTFORMS_CAMPAIGN="Кампания" +COM_CONVERTFORMS_CAMPAIGNS="Кампании" +COM_CONVERTFORMS_NEW_CAMPAIGN="Нова кампания" +COM_CONVERTFORMS_EDIT_CAMPAIGN="Редактирай кампания" +COM_CONVERTFORMS_CAMPAIGNS_NAME_DESC="Въведете име на кампания. Това име ще бъде видимо само от вас." +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_COPIED="%s Кампании са копирани" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_UNPUBLISHED="%s Кампании са непубликувани" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_PUBLISHED="%s Кампании са публикувани" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_TRASHED="%s Кампании са в кошчето" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_DELETED="%s Кампании са изтрити" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_UNPUBLISHED="%s заявки са непубликувани" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_PUBLISHED="%s заявки са публикувани" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_TRASHED="%s заявки са в кошчето" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_DELETED="%s заявки са изтрити" +; COM_CONVERTFORMS_SUBMISSION_N_ITEMS_ARCHIVED="%s submissions archived" +COM_CONVERTFORMS_CAMPAIGN_ASCENDING="Кампании възходящо" +COM_CONVERTFORMS_CAMPAIGN_DESCENDING="Кампании низходящо" +COM_CONVERTFORMS_CAMPAIGN_SELECT="- Избери Кампания -" +COM_CONVERTFORMS_CAMPAIGN_CONFIRM_DESC="Запишете кампанията, за да може да настроите интеграция" +COM_CONVERTFORMS_CAMPAIGN_CHANGED="Кампанията е променена" +COM_CONVERTFORMS_CAMPAIGN_SYNC="Синхронизиране подаването на заявки" +COM_CONVERTFORMS_CAMPAIGN_SYNC_DESC="Изберете дали заявките да се синхронизират със софтуер на трети страни или да се събират само в базата данни. Забележка: Ако трябва да се интегрирате със софтуер на трети страни като MailChimp, Aweber, GetResponse, Active Campaign и т.н., моля, инсталирайте съответния аддон в секцията Addons." +COM_CONVERTFORMS_N_ITEMS_TRASHED="%s Кампании са изтрити" +COM_CONVERTFORMS_CHOOSE_SERVICE="Изберете услуга" +COM_CONVERTFORMS_PENDING_LEADS="Заявки в изчакване" +COM_CONVERTFORMS_SUBMISSIONS="Заявки" +COM_CONVERTFORMS_SUBMISSION="Заявка" +; COM_CONVERTFORMS_LATEST_SUBMISSIONS="Latest Submissions" +COM_CONVERTFORMS_SUBMISSION_CONFIRMED="Потвърдени" +COM_CONVERTFORMS_SUBMISSION_UNCONFIRMED="Непотвърдени" +COM_CONVERTFORMS_EDIT_CONVERSION="Редактирай заявка" +COM_CONVERTFORMS_SUBMISSION_INVALID="Заявката не е открита" +COM_CONVERTFORMS_NOT_AUTHORIZED="Не сте упълномощени за достъп до тази страница." +COM_CONVERTFORMS_LEADS_ASC="Заявки възходящо" +COM_CONVERTFORMS_LEADS_DESC="Заявки низходящо" +COM_CONVERTFORMS_LEADS_EXPORT="Експорт на заявките" +COM_CONVERTFORMS_ADDONS="Addons" +COM_CONVERTFORMS_INSTALL_ADDONS="Виж инсталираните Addons" +COM_CONVERTFORMS_ADDONS_MISSING_KEY="За да можете да инсталирате допълненията на Convert Forms Addons, ще трябва да въведете своя Ключ за изтегляне в настройките на Novarain Framework Plugin" +COM_CONVERTFORMS_ADDONS_DESC="Addons добавките разширяват функционалността на Convert Forms. С тези добавки можете да се свързвате с софтуери на трети страни, да интегрирате нови функции и да направите Convert Forms още по-мощен." +COM_CONVERTFORMS_LAST_YEAR="Миналата година" +COM_CONVERTFORMS_THIS_YEAR="Тази година" +COM_CONVERTFORMS_LAST_MONTH="Миналия месец" +COM_CONVERTFORMS_THIS_MONTH="Този месец" +COM_CONVERTFORMS_LAST_WEEK="Миналата седмица" +COM_CONVERTFORMS_THIS_WEEK="Тази седмица" +COM_CONVERTFORMS_LAST_7_DAYS="Предишните 7 дена" +COM_CONVERTFORMS_YESTERDAY="Вчера" +COM_CONVERTFORMS_TODAY="Днес" +COM_CONVERTFORMS_AVG_DAY="Средно за ден (този месец)" +COM_CONVERTFORMS_PROJECTION="Прогноза за този месец" +COM_CONVERTFORMS_TOTAL="Общо" +COM_CONVERTFORMS_CHOOSE_FILE="Изберете .cnvf файл" +COM_CONVERTFORMS_FORMS_NAME_DESC="Уникалното и описателно име ще ви помогне в бъдеще с появята си в таблото за управление, в анализи и т.н." +COM_CONVERTFORMS_BACKGROUND_IMAGE="Фоново изображение" +COM_CONVERTFORMS_IMAGE_DESC="Изберете фоново изображение" +COM_CONVERTFORMS_CUSTOM_URL="Персонализиран URL адрес" +COM_CONVERTFORMS_BACKGROUND_URL="URL адрес на фоново изображение" +COM_CONVERTFORMS_BACKGROUND_URL_DESC="Въведете персонализиран URL адрес за изображение" +COM_CONVERTFORMS_BACKGROUND_FILE="Фоново изображение" +COM_CONVERTFORMS_BACKGROUND_FILE_DESC="Изберете изображение за качване." +COM_CONVERTFORMS_BACKGROUND_IMAGE_DESC="Можете да предоставите изображение, което да се появи като фон зад формата. Изберете Качване, за да качите ново изображение или Персонализиран URL, за да изтеглите изображение от URL адрес. За да работи тази настройка, избраният цвят на фона трябва да е прозрачен." +COM_CONVERTFORMS_FORM_BUILDER="Строител на форми" +COM_CONVERTFORMS_FIELD_TYPE="Тип Поле" +COM_CONVERTFORMS_FIELD_TYPE_DESC="Атрибутът Тип на Поле определя типа на входящия елемент за показване." +COM_CONVERTFORMS_FIELD_LABEL="Етикет поле" +COM_CONVERTFORMS_FIELD_LABEL_DESC="Етикетът на полето определя етикет за входящ елемент." +; COM_CONVERTFORMS_FIELD_NAME="Field Name" +COM_CONVERTFORMS_FIELD_NAME_DESC="Указва името на входния елемент, който се използва за свързване с данните от формуляра след подаването му. Използвайте тази опция и за съпоставяне на полета от формата с интегрираните приложения." +COM_CONVERTFORMS_PLACEHOLDER_NAME="Текст подсказка" +COM_CONVERTFORMS_PLACEHOLDER_NAME_DESC="Текстът, който искате да бъде показан в полето, преди потребителят да въведе каквито и да е данни." +COM_CONVERTFORMS_REQUIRED_NAME="Задължително поле" +; COM_CONVERTFORMS_REQUIRED_NAME_DESC="If enabled, this will ensure that this field is completed before allowing the form to be submitted." +COM_CONVERTFORMS_FIELDS="Полета" +COM_CONVERTFORMS_FIELDS_FREE_NOTICE="Използвате безплатната версия, която поддържа само 1 имейл поле. Надстройте до Pro версия, за да можете да управлявате неограничен брой полета." +COM_CONVERTFORMS_GENERAL="Общи" +COM_CONVERTFORMS_FORM_TEXT_ALIGN="Подравняване на текст в Поле" +COM_CONVERTFORMS_FORM_TEXT_ALIGN_DESC="Подравняване на текст във формата" +COM_CONVERTFORMS_INPUT_COLOR="Поле цвят на текст" +COM_CONVERTFORMS_INPUT_BGCOLOR="Поле фонов цвят" +COM_CONVERTFORMS_INPUT_BORDER_COLOR="Поле цвят контур" +COM_CONVERTFORMS_SHADOW="Сянка" +COM_CONVERTFORMS_INPUT_SHADOW_DESC="Добавя вътрешна сянка към полето за въвеждане" +COM_CONVERTFORMS_INPUT_FONT_SIZE="Поле размер на шрифта" +COM_CONVERTFORMS_INPUT_FONT_SIZE_DESC="Поле размер на шрифта" +COM_CONVERTFORMS_VPADDING_SIZE="Вертикален отстъп" +COM_CONVERTFORMS_HPADDING_SIZE="Хоризонтален отстъп" +COM_CONVERTFORMS_BOX_WIDTH_TYPE="Макс. ширина поле" +COM_CONVERTFORMS_BOX_WIDTH_TYPE_DESC="Въведете максимална ширина по избор или направете това поле да покрие цялата площ на екрана. Обърнете внимание, че това е максималната ширина, което означава, че формулярът винаги ще се побира на по-малки площи." +COM_CONVERTFORMS_FORM_WIDTH="Персонализирана макс. ширина" +COM_CONVERTFORMS_FORM_WIDTH_DESC="Въведете максимална ширина по ваш избор." +COM_CONVERTFORMS_REMOVE_DEFAULT_PADDING="Премахване на подразбиращото се допълване на клетки" +COM_CONVERTFORMS_REMOVE_DEFAULT_PADDING_DESC="Премахване на подразбиращото се допълване на клетки между полето на съдържанието и краищата на полето на формата" +COM_CONVERTFORMS_FORM_BORDER_STYLE="Стил рамка" +COM_CONVERTFORMS_FORM_BORDER_STYLE_DESC="Приложи рамка около формата" +COM_CONVERTFORMS_FORM_BORDER_COLOR="Цвят на рамка" +COM_CONVERTFORMS_FORM_BORDER_COLOR_DESC="Цвят рамка на формата" +COM_CONVERTFORMS_FORM_BORDER_WIDTH="Ширина рамка" +COM_CONVERTFORMS_FORM_BORDER_WIDTH_DESC="Ширина рамка на формата" +COM_CONVERTFORMS_BOX_RADIUS="Радиус на полето" +COM_CONVERTFORMS_BORDER_RADIUS="Радиус на рамка" +COM_CONVERTFORMS_BORDER_RADIUS_DESC="Въведете стойност за радиус на рамка" +COM_CONVERTFORMS_COLLECT_LEADS_USING="Събиране на подадени заявки с помощта на Кампания" +COM_CONVERTFORMS_COLLECT_LEADS_USING_DESC="Изпратените данни, събрани от този формуляр, ще бъдат асоциирани с избраната кампания. Можете да управлявате кампаниите си в секцията Кампании." +COM_CONVERTFORMS_SUCCESSFUL_SUBMISSION="Успешно подаване" +COM_CONVERTFORMS_SUCCESSFUL_SUBMISSION_DESC="Изберете действието, което искате да се извърши, след успешно подаване" +COM_CONVERTFORMS_DISPLAY_MSG="Показване на съобщение" +COM_CONVERTFORMS_REDIRECT_USER="Пренасочване на потребителя" +COM_CONVERTFORMS_SUCCESS_TEXT="Съобщение след успешно подаване" +COM_CONVERTFORMS_SUCCESS_TEXT_DESC="Въведете съобщението, което искате да покажете на потребителя, след като бъде успешно добавен към списъка." +COM_CONVERTFORMS_SUCCESS_URL="URL пренасочване" +COM_CONVERTFORMS_SUCCESS_URL_DESC="Въведете URL адреса, на който искате да пренасочите потребителя, след като бъде успешно добавен към списъка." +COM_CONVERTFORMS_PASS_DATA="Предайте данните от формата към URL адреса за пренасочване" +COM_CONVERTFORMS_PASS_DATA_DESC="Предава данните от формата като query arguments към URL на пренасочване." +COM_CONVERTFORMS_SUBMIT_STYLE="Стил на бутона за изпращане" +COM_CONVERTFORMS_SUBMIT_STYLE_DESC="Оформете бутона с приятни ефекти." +COM_CONVERTFORMS_BTN_SHADOW_DESC="Добавя външна сянка към бутона" +COM_CONVERTFORMS_SUBMIT_HOVER_COLOR="Цвят на текста при задържане над него" +COM_CONVERTFORMS_SUBMIT_HOVER_COLOR_DESC="Цвят на текста при задържане над него" +COM_CONVERTFORMS_CUSTOM_CSS="Потребителски CSS" +COM_CONVERTFORMS_CUSTOM_CSS_DESC="Стилизирайте формата със собствен персонализиран CSS.

За да ви помогне с оформянето, добавеният код в тази област се изпълнява и в бекенда." +COM_CONVERTFORMS_CLASS_SUFFIX="CSS клас суфикс" +COM_CONVERTFORMS_CLASS_SUFFIX_DESC="CSS клас суфикс" +COM_CONVERTFORMS_TEXTAREA_HEIGHT="Височина текстово поле" +COM_CONVERTFORMS_TEXTAREA_HEIGHT_DESC="Височината на текстовото поле указва видимата област в редове текс." +COM_CONVERTFORMS_CHOICES="Избор" +COM_CONVERTFORMS_CHOICES_DESC="Добавете допълнителни опции към това поле." +COM_CONVERTFORMS_FIELD_VALUE="Стойност по подразбиране" +COM_CONVERTFORMS_FIELD_VALUE_DESC="Въведете текста за полето по подразбиране." +COM_CONVERTFORMS_HIDE_LABELS="Скриване на етикет" +COM_CONVERTFORMS_HIDE_LABELS_DESC="Изберете тази опция, за да скриете етикета на полето на формата" +COM_CONVERTFORMS_IMAGE_SOURCE="Източник изображение" +COM_CONVERTFORMS_IMAGE_SOURCE_DESC="Можете да поставите изображение, което ще се появи сред съдържанието на формата. Изберете Качване, за да качите ново изображение или Потребителски URL адрес, за да въведете потребителски URL адрес." +COM_CONVERTFORMS_IMAGE_URL="URL на изображение" +COM_CONVERTFORMS_HIDE_IMAGE_ON_MOBILE="Скриване на изображението на малки екрани" +COM_CONVERTFORMS_HIDE_IMAGE_ON_MOBILE_DESC="На по-малки екрани като мобилни, по-малките модалности изглеждат по-добре. За да намалите размера на модала, можете да скриете изображението с тази настройка." +COM_CONVERTFORMS_HORIZONTAL_POSITION="Хоризонтална позиция" +COM_CONVERTFORMS_HORIZONTAL_POSITION_DESC="Хоризонтална позиция" +COM_CONVERTFORMS_VERTICAL_POSITION="Вертикално положение" +COM_CONVERTFORMS_VERTICAL_POSITION_DESC="Вертикална позиция" +COM_CONVERTFORMS_IMAGE_WIDTH_TYPE="Ширина на изображението" +COM_CONVERTFORMS_IMAGE_WIDTH_TYPE_DESC="Задайте ширина на изображението" +COM_CONVERTFORMS_BUTTON_ALIGN="Подравняване на бутони" +COM_CONVERTFORMS_FORM_POSITION="Позиция на формата" +COM_CONVERTFORMS_FORM_POSITION_DESC="Задайте позиция на формуляра спрямо контейнера с текст" +COM_CONVERTFORMS_FORM_SIZE="Размер на контейнера за форми" +COM_CONVERTFORMS_COLUMNS_DESC="Колко колони ще бъдат използвани. 6 колони заемат 50% от ширината." +COM_CONVERTFORMS_MESSAGE="Текстово съобщение" +COM_CONVERTFORMS_MESSAGE_DESC="Въведете текстовото съобщение на формуляра" +COM_CONVERTFORMS_IMAGE_POSITION="Позиция на изображението" +COM_CONVERTFORMS_IMAGE_POSITION_DESC="Позиция на изображението спрямо текста" +COM_CONVERTFORMS_FOOTER="Форма на долния колонтитул" +COM_CONVERTFORMS_BUTTON_TEXT="Техт бутон" +COM_CONVERTFORMS_BUTTON_TEXT_DESC="Текст за етикета на бутона" +COM_CONVERTFORMS_BTN_FONT_SIZE="Размер на текста в бутона" +COM_CONVERTFORMS_IMAGE_SIZE="Размер контейнер за изображения" +COM_CONVERTFORMS_BODY_FONT="Шрифтово семейство" +COM_CONVERTFORMS_BODY_FONT_DESC="Изберете шрифтово семейство за текстовете във формата. Имайте предвид, че зареждането на нестандартни шрифтове като Google Fonts може да повлияе на скоростта на уебсайта. Изберете По подразбиране, за да използвате шрифта по подразбиране на вашия уебсайт." +COM_CONVERTFORMS_EMAIL="Имейл" +COM_CONVERTFORMS_DATE="Дата" +COM_CONVERTFORMS_CREATED="Дата на създаване" +COM_CONVERTFORMS_SUBMISSION="Заявка" +COM_CONVERTFORMS_PREVIEW_SUCCESS="Показва съобщение за успех" +COM_CONVERTFORMS_PREVIEW_SIZE_DESKTOP="Тази версия ще се показва на екрани с размер 990px и по-високи" +COM_CONVERTFORMS_PREVIEW_SIZE_TABLET="Тази версия ще се показва на екрани с размер 768px - 990px" +COM_CONVERTFORMS_PREVIEW_SIZE_MOBILE="Тази версия ще се показва на екрани с размер 768px и по-малки" +COM_CONVERTFORMS_DEVICE_DESKTOP="Декстоп" +COM_CONVERTFORMS_DEVICE_TABLET="Таблет" +COM_CONVERTFORMS_DEVICE_MOBILE="Мобилен" +COM_CONVERTFORMS_RESET_FORM="Нулиране на формуляра" +COM_CONVERTFORMS_RESET_FORM_DESC="Нулиране на формуляра след успешно изпращане" +COM_CONVERTFORMS_HIDE_FORM="Скрий формуляр" +COM_CONVERTFORMS_HIDE_FORM_DESC="Скриване на формуляр след успешно изпращане" +COM_CONVERTFORMS_TEMPLATES="Шаблони" +COM_CONVERTFORMS_TEMPLATES_SELECT="Изберете шаблон" +COM_CONVERTFORMS_TEMPLATES_BLANK="Започни начисто" +COM_CONVERTFORMS_TEMPLATES_BLANK_DESC="Започни начисто и създай нов формуляр" +COM_CONVERTFORMS_TEMPLATE_GROUP_INLINE="В редица" +COM_CONVERTFORMS_TEMPLATE_GROUP_SIDEBAR="Странична лента" +COM_CONVERTFORMS_TEMPLATE_GROUP_BAR="Ленти" +COM_CONVERTFORMS_LABELS_COLOR="Цвят на текста на етикета" +COM_CONVERTFORMS_LABELS_FONT_SIZE="Размер на шрифта в етикета" +COM_CONVERTFORMS_IMAGE_ABOVE="На текста" +COM_CONVERTFORMS_IMAGE_BELOW="Под текста" +COM_CONVERTFORMS_IMAGE_RIGHT="В дясно от текста" +COM_CONVERTFORMS_IMAGE_LEFT="В ляво от текста" +COM_CONVERTFORMS_FLAT="Плосък" +COM_CONVERTFORMS_OUTLINE="Контур" +COM_CONVERTFORMS_GRADIENT="Градиент" +COM_CONVERTFORMS_EMAILS_DESC="Изпращане на известия по имейл, когато потребителите изпратят формуляр." +COM_CONVERTFORMS_EMAILS="Известия по имейл" +COM_CONVERTFORMS_EMAILS_REPLY_TO="Отговор към имейл" +COM_CONVERTFORMS_EMAILS_REPLY_TO_NAME="Отговор към Име" +COM_CONVERTFORMS_EMAILS_FROM_EMAIL="От имейл" +COM_CONVERTFORMS_EMAILS_FROM="Име формуляр" +COM_CONVERTFORMS_EMAILS_RECIPIENT="Изпрати към имейл" +COM_CONVERTFORMS_EMAILS_RECIPIENT_DESC="Въведете имейл адресите, на които желаете да получавате известия при изпращане на формуляра. За известия към множество имейли, моля отделете ги със запетая." +COM_CONVERTFORMS_EMAILS_SUBJECT="Тема на имейла" +COM_CONVERTFORMS_EMAILS_BODY="Съобщение" +COM_CONVERTFORMS_EMAILS_FREE_NOTE="Искате няколко известия?
Надстройте до PRO, за да ги отключите." +COM_CONVERTFORMS_EMAILS_ATTACHMENT="Прикачени" +COM_CONVERTFORMS_EMAILS_ATTACHMENT_DESC="Местоположение на файл, който да прикачите към корена на уеб пространството ви. Използвайте запетая, за да определите няколко файла." +COM_CONVERTFORMS_ADDONS_MISSING_ADDON="Липсва ли ви добавка addon?" +COM_CONVERTFORMS_ADDONS_MISSING_ADDON_DESC="В случай че ви липсва добавка за интеграция за любимото ви приложение, моля, уведомете ни и ще се радваме да го включим в колекцията Convert Forms addons." +COM_CONVERTFORMS_API_ENABLE="Разреши JSON API" +COM_CONVERTFORMS_API_DESC="JSON API ви позволява да изтеглите Convert Forms съдържание, използвайки HTTP заявки." +COM_CONVERTFORMS_API_KEY="Таен ключ" +COM_CONVERTFORMS_API_KEY_DESC="Този секретен ключ се използва за удостоверяване на критични задачи като CRON Jobs и JSON API. Ако оставите полето празно, всички задачи, изискващи удостоверяване на потребителя, ще бъдат бъдат деактивирани." +COM_CONVERTFORMS_IMAGE_ALT="Alt-таг за изображение" +COM_CONVERTFORMS_IMAGE_ALT_DESC="Алтернативен текст към изображение" +COM_CONVERTFORMS_CUSTOM_CODE="Потребителски код" +COM_CONVERTFORMS_CUSTOM_CODE_DESC="Поставете потребителски код в края на формуляра. Приемат се HTML, CSS и Javascript.

За Javascript не забравяйте да рамкирате кода с <script>.

Добавеният код в тази област не се изпълнява в бекенда." +COM_CONVERTFORMS_ISSUES="проблеми" +COM_CONVERTFORMS_ISSUES_DETECTED="%s открити проблеми при изпращане" +COM_CONVERTFORMS_CREATED="Дата на създаване" +COM_CONVERTFORMS_MODIFIED="Дата на промяна" +COM_CONVERTFORMS_IP="IP адрес на подателя" +COM_CONVERTFORMS_USER_ID="ID на подателя" +COM_CONVERTFORMS_USER_USERNAME="Потребителско име на подателя" +COM_CONVERTFORMS_VISITOR_ID="ID на посетителя" +COM_CONVERTFORMS_FORM_NAME="Име формуляр" +COM_CONVERTFORMS_CAMPAIGN_NAME="Име Кампания" +COM_CONVERTFORMS_ID="ID" +COM_CONVERTFORMS_CHOOSE_COLUMNS="Колони" +COM_CONVERTFORMS_CHOOSE_COLUMNS_OPTIONS="За да активирате конкретни полета, първо изберете формуляр в лентата с филтри." +COM_CONVERTFORMS_UNTITLED_BOX="Формуляр без заглавие" +COM_CONVERTFORMS_SELECT_LAYOUT="Изберете макет" +COM_CONVERTFORMS_SHOW_LAYOUTS="Покажи макети" +COM_CONVERTFORMS_HIDE_LAYOUTS="Скриване на макети" +COM_CONVERTFORMS_FIELDS_COPY="Дублирай поле" +COM_CONVERTFORMS_FIELDS_DELETE="Изтрий поле" +COM_CONVERTFORMS_FIELDGROUP_COMMON="Основни полета" +COM_CONVERTFORMS_FIELDGROUP_FANCY="Подобрени полета" +COM_CONVERTFORMS_FIELDGROUP_ADVANCED="Полета за напреднали" +COM_CONVERTFORMS_FIELD_HTML="HTML" +COM_CONVERTFORMS_FIELD_HTML_DESC="Добавете свободен текст или HTML код. Без ограничение!" +COM_CONVERTFORMS_FIELD_TEXT="Текстово поле" +COM_CONVERTFORMS_FIELD_TEXT_DESC="Текстово поле с един ред" +COM_CONVERTFORMS_FIELD_TEXTAREA="Област текст" +COM_CONVERTFORMS_FIELD_TEXTAREA_DESC="Подобно на текстовото поле, но може да побере въвеждането на многоредов текст." +COM_CONVERTFORMS_FIELD_NUMBER="Номер" +COM_CONVERTFORMS_FIELD_NUMBER_DESC="Текстово поле, което приема само числа" +COM_CONVERTFORMS_FIELD_NUMBER_STEP="Стъпка" +COM_CONVERTFORMS_FIELD_NUMBER_STEP_DESC="Стъпка, с която стойността ще се промени при натискане на стрелка." +COM_CONVERTFORMS_FIELD_NUMBER_MIN="Минимална стойност" +COM_CONVERTFORMS_FIELD_NUMBER_MIN_DESC="Минималната стойност, която полето ще позволи" +COM_CONVERTFORMS_FIELD_NUMBER_MAX="Максимална стойност" +COM_CONVERTFORMS_FIELD_NUMBER_MAX_DESC="Максималната стойност, която полето ще позволи" +COM_CONVERTFORMS_FIELD_RECAPTCHA="reCAPTCHA" +COM_CONVERTFORMS_FIELD_RECAPTCHA_DESC="Спрете подаването на спам чрез Google reCAPTCHA" +COM_CONVERTFORMS_FIELD_RECAPTCHA_KEYS_NOTE="Моля, задайте вашия сайт и Secret key в страницата за конфигуриране." +COM_CONVERTFORMS_FIELD_RECAPTCHA_CONFIGURE="Конфигурирайте reCAPTCHA сега" +COM_CONVERTFORMS_FIELD_RECAPTCHA_THEME_DESC="Цветова тема на джаджа" +COM_CONVERTFORMS_FIELD_RECAPTCHA_SIZE_DESC="Размер на джаджа" +COM_CONVERTFORMS_FIELD_DROPDOWN="Падащ списък" +COM_CONVERTFORMS_FIELD_DROPDOWN_DESC="Списък, който позволява един избор от падащо меню" +COM_CONVERTFORMS_FIELD_RADIO="Радио бутони" +COM_CONVERTFORMS_FIELD_RADIO_DESC="Списък, който позволява един избор от радио бутоните" +COM_CONVERTFORMS_FIELD_URL="уебсайт / URL" +COM_CONVERTFORMS_FIELD_URL_DESC="Приемане правилно оформен URL адрес, който започва с http: // или с https: //" +COM_CONVERTFORMS_FIELD_URL_INVALID="Невалиден URL" +COM_CONVERTFORMS_FIELD_COUNTRY="Държава" +COM_CONVERTFORMS_FIELD_COUNTRY_DESC="Списък на известните държави" +COM_CONVERTFORMS_FIELD_COUNTRY_VALUE="Стойност държава" +COM_CONVERTFORMS_FIELD_COUNTRY_VALUE_DESC="Изберете дали искате да запазите името на държавата (България) или кода на държавата (BG) в базата данни." +COM_CONVERTFORMS_FIELD_COUNTRY_DETECT="Откриване на страната на посетителя" +COM_CONVERTFORMS_FIELD_COUNTRY_DETECT_DESC="Ако е активирано, формулярът ще се опита да открие и попълни страната на посетителя. Изисква да бъде инсталирана приставката TGeoIP." +COM_CONVERTFORMS_FIELD_COUNTRY_NAME="Име на държава" +COM_CONVERTFORMS_FIELD_COUNTRY_CODE="Код на държава" +COM_CONVERTFORMS_FIELD_COUNTRY_EXCLUDE="Изключи държави" +COM_CONVERTFORMS_FIELD_COUNTRY_EXCLUDE_DESC="Въведете разделени със запетая кодове на държави, за да ги изключите от падащото меню. Пример: US,UK,CN" +COM_CONVERTFORMS_FIELD_CURRENCY="Валута" +COM_CONVERTFORMS_FIELD_CURRENCY_DESC="Списък на известните валути" +COM_CONVERTFORMS_FIELD_SUBMIT="Бутон Изпрати" +COM_CONVERTFORMS_FIELD_SUBMIT_DESC="Бутонът, който ще изпрати формуляра" +COM_CONVERTFORMS_FIELD_HIDDEN="Скрито поле" +COM_CONVERTFORMS_FIELD_HIDDEN_DESC="Поле, което не се вижда от потребителя в сайта." +COM_CONVERTFORMS_FIELD_EMAIL="Имейл адрес" +COM_CONVERTFORMS_FIELD_EMAIL_DESC="Текстово поле, което приема само валиден имейл адрес" +COM_CONVERTFORMS_FIELD_TERMSOFSERVICE="Условия за ползване" +COM_CONVERTFORMS_FIELD_TERMSOFSERVICE_DESC="Изисква от потребителя да се съгласи с вашите Условия за ползване, преди да им бъде разрешено да изпратят формуляра" +COM_CONVERTFORMS_FIELD_TERMSOFSERVICE_TEXT_LABEL="Условия за ползване – текст" +COM_CONVERTFORMS_FIELD_TERMSOFSERVICE_TEXT_LABEL_DESC="Текстът, който се появява веднага след отметката" +COM_CONVERTFORMS_FIELD_CHECKBOX="Отметки чекбокс" +COM_CONVERTFORMS_FIELD_CHECKBOX_DESC="Списък, който позволява множество отметки в чекбокс квадратчетата" +COM_CONVERTFORMS_FIELD_REQUIRED="Задължително" +COM_CONVERTFORMS_FIELD_EMAIL_INVALID="Невалиден имейл адрес" +COM_CONVERTFORMS_FIELD_SIZE="Размер на полето" +COM_CONVERTFORMS_FIELD_SIZE_DESC="Изберете размер по подразбиране на поле" +COM_CONVERTFORMS_FIELD_TEL="Телефон" +COM_CONVERTFORMS_FIELD_TEL_DESC="Позволява потребителят да въведе телефонен номер." +COM_CONVERTFORMS_FIELD_DATETIME="Дата / Час" +COM_CONVERTFORMS_FIELD_DATETIME_DESC="Избор на дата/час, който позволява избор на една дата, няколко дати или диапазон по дати." +COM_CONVERTFORMS_FIELD_DATETIME_FORMAT="Формат на дата" +COM_CONVERTFORMS_FIELD_DATETIME_FORMAT_DESC="Формат на показваната дата. Примери:

d/m/Y H: i
Y-m-d
m/d/YYY" +COM_CONVERTFORMS_FIELD_DATETIME_TIMEPICKER="Покажи Избор на час" +COM_CONVERTFORMS_FIELD_DATETIME_TIMEPICKER_DESC="Активира Избор на час. Ако е активирано, уверете се, че сте включили символите за време (H: i) в полето Формат ва дата." +COM_CONVERTFORMS_FIELD_DATETIME_MIN_DATE="Мин. Дата" +COM_CONVERTFORMS_FIELD_DATETIME_MIN_DATE_DESC="Минимална / най-ранната дата, разрешена за избор. Поддържа относителни формати като: днес, утре, +5 дена, +2 седмици / today, tomorrow, +5 day, +2 week" +COM_CONVERTFORMS_FIELD_DATETIME_MAX_DATE="Макс. Дата" +COM_CONVERTFORMS_FIELD_DATETIME_MAX_DATE_DESC="Максимална / последна дата, разрешена за избор. Поддържа относителни формати като: днес, утре, +5 дена, +2 седмици / today, tomorrow, +5 day, +2 week" +COM_CONVERTFORMS_FIELD_DATETIME_MODE="Режим на избор на дата" +COM_CONVERTFORMS_FIELD_DATETIME_MODE_DESC="Позволете на потребителя да избере една дата, няколко дати, или диапазон от дати." +COM_CONVERTFORMS_FIELD_DATETIME_TIME24="24 ч. формат" +COM_CONVERTFORMS_FIELD_DATETIME_TIME24_DESC="Показва избор на време в 24 часов режим без избор на AM/PM." +COM_CONVERTFORMS_FIELD_DATETIME_MINUTE_STEP="Стъпка минути" +COM_CONVERTFORMS_FIELD_DATETIME_MINUTE_STEP_DESC="Регулира стъпката за минути при Избор на час" +COM_CONVERTFORMS_FIELD_DATETIME_INLINE="Покажи на реда" +COM_CONVERTFORMS_FIELD_DATETIME_INLINE_DESC="Показва календара вътре във формуляра вместо като изскачащ прозорец." +COM_CONVERTFORMS_FIELD_DATETIME_THEME="Тема" +COM_CONVERTFORMS_FIELD_DATETIME_THEME_DESC="Избор тема на календар" +COM_CONVERTFORMS_FIELD_DATETIME_INVALID="Невалиден формат за дата - %s" +COM_CONVERTFORMS_FIELD_DATETIME_DISABLEMOBILE="Деактивирайте системния Избор на дата за мобилни устройства" +COM_CONVERTFORMS_FIELD_DATETIME_DISABLEMOBILE_DESC="Ако е поставено отметка, потребителите на мобилни устройства ще видят Избор на дата от Convert Form, вместо системния за устройството за избор на дата на интерфейс." +COM_CONVERTFORMS_CSS_CLASSES="CSS клас" +COM_CONVERTFORMS_CSS_CLASSES_DESC="Добавете CSS класове към контейнера за въвеждане. Това може да се използва предимно за целите на оформлението." +COM_CONVERTFORMS_INPUT_CSS_CLASSES="CSS клас, въвеждане " +COM_CONVERTFORMS_INPUT_CSS_CLASSES_DESC="Добавете CSS класове към въвеждащия елемент. Използвайте тази опция, за да стилизирате въвждането." +COM_CONVERTFORMS_DISABLE_BROWSER_AUTOCOMPLETE="Деактивиране на автоматичното довършване на браузъра" +COM_CONVERTFORMS_DISABLE_BROWSER_AUTOCOMPLETE_DESC="По подразбиране браузърите запомнят информация, която потребителят предоставя чрез полета за въвеждане. Активирайте тази опция, за да деактивирате автоматичното попълване в полетата." +; COM_CONVERTFORMS_FIELD_DESCRIPTION="Help Text" +; COM_CONVERTFORMS_FIELD_DESCRIPTION_DESC="Help text to show alongside this field." +COM_CONVERTFORMS_FIELD_EMAIL_DNSCHECK="DNS проверка" +COM_CONVERTFORMS_FIELD_EMAIL_DNSCHECK_DESC="Потвърдете въведения имейл адрес с DNS проверка." +COM_CONVERTFORMS_FIELDGROUP_USERINFO="Полета информация за потребителя" +COM_CONVERTFORMS_FIELD_CONFIRM="Потвърждение" +COM_CONVERTFORMS_FIELD_CONFIRM_DESC="Поле за потвърждение съвпадение по данни на две полета" +COM_CONVERTFORMS_FIELD_CONFIRM_FIELD="Потвърждение ключ на поле" +COM_CONVERTFORMS_FIELD_CONFIRM_FIELD_DESC="Въведете ключа на полето, който ще се използва за проверка, че стойността му съвпада" +COM_CONVERTFORMS_FIELD_CONFIRM_INVALID="Полето не е конфигурирано правилно" +COM_CONVERTFORMS_FIELD_CONFIRM_NOT_MATCH="Стойностите на полето не съвпадат" +COM_CONVERTFORMS_HIDE_TEXT="Скрий текст" +COM_CONVERTFORMS_HIDE_TEXT_DESC="Скриване на текста след успешно изпращане" +COM_CONVERTFORMS_FORM_IS_MISSING_THE_EMAIL_FIELD="Във формуляра липсва имейл поле" +COM_CONVERTFORMS_INVALID_LEAD="Не може да се валидира Изпратеният обект" +COM_CONVERTFORMS_EXCEL_SECURITY="Excel – разширена безопасност" +COM_CONVERTFORMS_EXCEL_SECURITY_DESC="Ако е активирана, стойностите в CSV експортирания файл, започващ с =, +, - или @, ще бъдат префиксирани с табулация, за да се избегне каквото и да е CSV инжектиране при отваряне на експортирания файл в Excel.

Деактивирайте тази опция само ако сте 100% сигурни, че данните са надеждни или ако имате проблеми с импортирането на CSV файла в приложение на 3-та страна." +COM_CONVERTFORMS_CHOICE_LAYOUT="Избор на макет" +COM_CONVERTFORMS_CHOICE_LAYOUT_DESC="Изберете макет за показване избора на полета" +COM_CONVERTFORMS_CHOICE_1_COLUMN="Една колона" +COM_CONVERTFORMS_CHOICE_2_COLUMN="Две колони" +COM_CONVERTFORMS_CHOICE_3_COLUMN="Три колони" +COM_CONVERTFORMS_CHOICE_SIDE_BY_SIDE="Един до друг" +COM_CONVERTFORMS_REQUIRED_INDICATION="Индикация на задължително поле" +COM_CONVERTFORMS_REQUIRED_INDICATION_DESC="Посочва задължителните полета със звездичка до всеки етикет на поле. Изисква се етикетът на полето да не е скрит." +COM_CONVERTFORMS_INPUT_MASK="Маска Въвеждане" +COM_CONVERTFORMS_INPUT_MASK_DESC="Помогнете на потребителя с въвеждането чрез предварително определен формат.

Синтаксис:
9: Числа (0-9)
a: Букви (a-я или A-Я)
A: Главни букви (A-Я)
*: Буквено-цифрови (0-9, a-я или A-Я)
&: Главни буквено-цифрови (0-9 или A-Я)

Примери:
Телефон: +1 (999) -9999
Дата: 99/99 / 9999
Пощенски код: 99999? -9999" +COM_CONVERTFORMS_LEAD_USER_SUBMITTED_DATA="Подадени от потребителя данни" +COM_CONVERTFORMS_NO_SUBMITTED_DATA="Не са открити изпратени данни" +COM_CONVERTFORMS_LEAD_INFO="Информация Подаване" +COM_CONVERTFORMS_NOTES="Бележки" +COM_CONVERTFORMS_DATE_RANGE="Диапазон от дати" +COM_CONVERTFORMS_START_DATE="Начална дата" +COM_CONVERTFORMS_END_DATE="Крайна дата" +COM_CONVERTFORMS_PERIOD="Диапазон" +COM_CONVERTFORMS_PERIOD_SELECT="- Избери диапазон дати - " +COM_CONVERTFORMS_HONEYPOT="Активиране на анти-спам Honeypot" +COM_CONVERTFORMS_HONEYPOT_DESC="Разрешете, за да добавите скрито Honeypot поле, която ше е видимо само за ботове. По този начин, когато полето се попълни, формулярът може автоматично да разбере, че потребителят е бил спамбот.

В много сайтове Honeypot е достатъчен, за да се избегнат спам записи. Ако все още получавате спам или искате да предприемете допълнителна предпазна мярка срещу него, reCAPTCHA е чудесна допълнителна опция." +COM_CONVERTFORMS_FIELD_FILEUPLOAD="Качване на файл" +COM_CONVERTFORMS_FIELD_FILEUPLOAD_DESC="Дава възможност на потребителя да качва файлове" +; COM_CONVERTFORMS_FILEUPLOAD_TEMP_FOLDER_NOT_WRITABLE="Your site's temp folder is set to %s but it's not writable. Please specify a writable temp folder." +; COM_CONVERTFORMS_FILEUPLOAD_FOLDER_TYPE="Upload Destination" +; COM_CONVERTFORMS_FILEUPLOAD_FOLDER_TYPE_DESC="Specify a destination folder for uploaded files.

Auto: The files will be uploaded to /media/com_convertforms/uploads folder. Additionally a random prefix will be added in the beginning of each file name to increase security.

Custom: Specify a custom destination folder and naming convention." +; COM_CONVERTFORMS_FILEUPLOAD_FOLDER="Custom Upload Destination" +; COM_CONVERTFORMS_FILEUPLOAD_FOLDER_DESC="Enter the path relative to the root of your webspace where the uploaded files will be stored. To rename uploaded files use the following Smart Tags.

{file.basename}: cat.jpg
{file.extension}: jpg
{file.filename}: cat
{file.index}
: index number

It can also accept global Smart Tags like {year}, {month}, {user.id} or {randomid} to create an even more dynamic upload destination." +COM_CONVERTFORMS_FILEUPLOAD_LIMIT_FILES="Ограничаване бр. файлове" +COM_CONVERTFORMS_FILEUPLOAD_LIMIT_FILES_DESC="Колко файла могат да бъдат качени? Ако е въведено 0 – без ограничение." +COM_CONVERTFORMS_FILEUPLOAD_MAX_FILE_SIZE="Ограничение размера на файл" +COM_CONVERTFORMS_FILEUPLOAD_MAX_FILE_SIZE_DESC="Задайте максималния допустим размер за всеки качен файл в мегабайти. Въведете 0 за без ограничение.

Максималният размер на качването на вашия сървър е: %s." +COM_CONVERTFORMS_FILEUPLOAD_UPLOAD_TYPES="Разрешени типове файлове" +; COM_CONVERTFORMS_FILEUPLOAD_UPLOAD_TYPES_DESC="Enter comma separated list of allowed file types like: .jpg, .gif, .png, .pdf

You may enter media types like: application/pdf, images/*, video/* or you can mix both: application/*, .png, .jpg

Note: This is not fool-proof and can be tricked, please remember that there is always a danger in allowing users to upload files.

The PHP extension fileinfo is required to be installed to guess." +COM_CONVERTFORMS_FIELD_FILTER="Филтър" +COM_CONVERTFORMS_FIELD_FILTER_DESC="Филтрирайте въвеждането от потребителя въз основа на следните филтри.
Текст: Преобразува въвеждането в обикновен текстов низ; премахва всички тагове / атрибути.
Безопасен HTML: Приемайте само безопасни HTML елементи. Букви-Цифри: Разрешава a-я и 0-9
Думи: Разрешава само букви a-я и подчертаване
Integer: Използва само първата цифра Float: Разрешава само символи a-я и подчертава" +COM_CONVERTFORMS_UPLOAD_ERROR="Невалиден формуляр или ключ на поле" +COM_CONVERTFORMS_UPLOAD_ERROR_INVALID_FIELD="Невалидно поле за качване" +COM_CONVERTFORMS_UPLOAD_ERROR_INVALID_FILE="Невалиден или неподдържан файл" +COM_CONVERTFORMS_UPLOAD_MAX_FILES_LIMIT="Можете да качвате до %d файла" +COM_CONVERTFORMS_UPLOAD_DRAG_AND_DROP_FILES="Завлачете и пуснете файлове тук или" +COM_CONVERTFORMS_UPLOAD_BROWSE="Преглед" +; COM_CONVERTFORMS_UPLOAD_FILE_IS_MISSING="Temporary file %s is missing. Please re-upload." +COM_CONVERTFORMS_UPLOAD_FOLDER_INVALID="Папката за качване %s не съществува или папката не е с разрешени права за запис в нея" +COM_CONVERTFORMS_UPLOAD_FILETOOBIG="Файлът е твърде голям ({{filesize}} MB). Максимален размер на файловете: {{maxFilesize}} MB." +COM_CONVERTFORMS_UPLOAD_INVALID_FILE="Не можете да качвате файлове от този тип." +COM_CONVERTFORMS_UPLOAD_FALLBACK_MESSAGE="Браузърът ви не поддържа качване на файлове с Drag'n'drop." +COM_CONVERTFORMS_UPLOAD_RESPONSE_ERROR = "Сървърът отговори с {{statusCode}} код." +COM_CONVERTFORMS_UPLOAD_CANCEL_UPLOAD="Прекратяване на качването" +COM_CONVERTFORMS_UPLOAD_CANCEL_UPLOAD_CONFIRMATION="Наистина ли искате да прекратите това качване?" +COM_CONVERTFORMS_UPLOAD_REMOVE_FILE="Премахване на файл" +COM_CONVERTFORMS_UPLOAD_MAX_FILES_EXCEEDED="Не можете да качвате повече файлове." +COM_CONVERTFORMS_UPLOAD_AUTO_DELETE="Автоматично изтриване на файлове" +COM_CONVERTFORMS_UPLOAD_AUTO_DELETE_DESC="Ако получавате много качвания, сървърното пространство може бързо да се запълни, което изисква редовно обслужване за освобождаване на място.

Тази опция ви помага автоматично да се изтриват файлове от папката за качване след зададен период.

Например въведете 3, за да изтриете автоматично файлове на възраст над 3 дни или 0, ако искате да запазите файловете завинаги.

Забележка: Приставката Convert Forms Uploaded Files Cleaner plugin трябва да е активирана и да е конфигуриран съответния Cron Job URL адрес на вашия сървър," +COM_CONVERTFORMS_READONLY="Само за четене" +COM_CONVERTFORMS_READONLY_DESC="Предотвратяване въвеждане в това поле" +COM_CONVERTFORMS_PHPSCRIPT="PHP скриптове" +COM_CONVERTFORMS_PHPSCRIPT_FORM_DISPLAY="Формулар Показване" +COM_CONVERTFORMS_PHPSCRIPT_FORM_DISPLAY_DESC="PHP скриптът, добавен в тази област, се изпълнява веднага преди показването на формата.

Основният акцент в тази област е променливата $formLayout (String), която съдържа HTML кода на формата.

За достъп до настройките на формата използвайте $form (Array ) променлива.

Не е необходимо да включвате <?php and ?> маркерите." +COM_CONVERTFORMS_PHPSCRIPT_FORM_PROCESS="Формуляр процес" +COM_CONVERTFORMS_PHPSCRIPT_FORM_PROCESS_DESC="PHP кодът, добавен в тази област, се изпълнява непосредствено преди данните от формуляра да бъдат запазени в базата данни, независимо дали изпращането е валидно или не.

Тази област е по-полезна, когато трябва да обработите изчисления, да извършите разширено валидиране или да промените стойността на полето. Всички модификации на променлива $post (Array), извършени тук, ще бъдат отразени в записа за изпращане.

За достъп до настройките на формуляра, използвайте променливата $form (Array).

Не е необходимо да включвате маркерите <?php and ?>." +COM_CONVERTFORMS_PHPSCRIPT_AFTER_FORM_SUBMISSION="След подаване на формуляр" +COM_CONVERTFORMS_PHPSCRIPT_AFTER_FORM_SUBMISSION_DESC="PHP кодът, добавен в тази област, се изпълнява, след като формулярът е успешно изпратен и данните са записани в базата данни.

Това е по-полезно, когато се опитвате да изпълните някои допълнителни задачи като безмълвно публикуване на данни на друг URL адрес. Можете да получите достъп до окончателното изпращане чрез променливата $submission (Object).

За достъп до настройките на формуляра използвайте променливата $form (Array).

Не е необходимо да включвате маркерите <?php and ?> tags." +; COM_CONVERTFORMS_PHPSCRIPT_NOTE="PHP Scripts are not executed on the backend to prevent issues with the live form previewer. Always test on the front-end." +COM_CONVERTFORMS_FIELD_PASSWORD="Парола" +COM_CONVERTFORMS_FIELD_PASSWORD_DESC="Предоставя на потребителя безопасно да въведе парола" +COM_CONVERTFORMS_FIELD_CONFIRM_TYPE="Поле за потвъждаване" +COM_CONVERTFORMS_FIELD_CONFIRM_TYPE_DESC="Изберете типа на Поле за потвърждаване между Текст и Парола." +COM_CONVERTFORMS_PHPSCRIPT_FORM_PREPARE="Предзареждане и подготвяне формуляр" +COM_CONVERTFORMS_PHPSCRIPT_FORM_PREPARE_DESC="PHP скриптът, добавен в тази област, се изпълнява точно преди да се подготвят данните на формата и да се изпратят до функцията за показване на формуляра.

Основният акцент в тази област е променливата $form (Array), която съдържа настройките на формуляра.

Не е необходимо да включвате маркерите <?php and ?>." +COM_CONVERTFORMS_ERROR_USER_ALREADY_EXIST="%s вече е регистриран." +COM_CONVERTFORMS_ERROR_INVALID_EMAIL_ADDRESS="%s изглежда фалшив или невалиден... Моля, въведете истински имейл адрес." +COM_CONVERTFORMS_RECAPTCHA_NOT_LOADED="Грешка: Google reCAPTCHA скриптът не се зарежда. Уверете се, че браузърът ви не го блокира или се свържете с администратора на сайта." +COM_CONVERTFORMS_ACCESS_FORMS="Достъп управление формуляри" +COM_CONVERTFORMS_ACCESS_FORMS_DESC="Позволява на потребителите в тази група да управляват формуляри." +COM_CONVERTFORMS_ACCESS_SUBMISSIONS="Достъп до изпращания" +COM_CONVERTFORMS_ACCESS_SUBMISSIONS_DESC="Позволява на потребителите в тази група да управляват Изпратените заявки от формуляр." +COM_CONVERTFORMS_ACCESS_CAMPAIGNS="Достъп до Кампании" +COM_CONVERTFORMS_ACCESS_CAMPAIGNS_DESC="Позволява на потребителите в тази група да управляват Кампании. Активирайте това, ако имате с проблеми с изпращането на спам." +COM_CONVERTFORMS_CSRF_CHECK="Използвайте Joomla! CSRF Token" +COM_CONVERTFORMS_CSRF_CHECK_DESC="Добавете допълнителен защитен слой към формулярите си, като верифициране всички AJAX заявки с CSRF Tokens.

Ако активирате това и използвате кеш механизъм, който кешира целия изход на страницата, като Joomla! Page Cache plugin или кеширащ прокси сървър като CloudFlare или Sucuri, може да срещнете проблеми с изпращането на формуляра." +COM_CONVERTFORMS_THANK_YOU_MESSAGE="Формулярът е успешно изпратен" +COM_CONVERTFORMS_SECRET_SET="Моля, конфигурирайте секретен ключ, за да може да ползвате optin крайната точка." +COM_CONVERTFORMS_SECRET_NO="Не е предоставен секретен ключ в URL адреса " +COM_CONVERTFORMS_SECRET_WRONG="Грешен секретен ключ е предоставен в URL " +COM_CONVERTFORMS_SECURITY="Сигурност" +COM_CONVERTFORMS_FIELD_RECAPTCHAV2INVISIBLE="reCAPTCHA Invisible" +COM_CONVERTFORMS_FIELD_RECAPTCHAV2INVISIBLE_DESC="Спрете подаването на спам, като използвате Invisible Google reCAPTCHA" +COM_CONVERTFORMS_FIELD_RECAPTCHA_INVIS_BADGE="Значка" +COM_CONVERTFORMS_FIELD_RECAPTCHA_INVIS_BADGE_DESC="Позиция на значката reCAPTCHA. 'inline' ви позволява да го позиционирате с CSS." +COM_CONVERTFORMS_FIELD_RECAPTCHA_INVIS_BADGE_BOTTOMRIGHT="Долу в дясно" +COM_CONVERTFORMS_FIELD_RECAPTCHA_INVIS_BADGE_BOTTOMLEFT="Долу в ляво" +COM_CONVERTFORMS_FIELD_RECAPTCHA_INVIS_BADGE_INLINE="Inline" +COM_CONVERTFORMS_SUBMISSIONS_VIEW_DEFAULT_TITLE="Заявки" +COM_CONVERTFORMS_SUBMISSIONS_LIST="Списък заявки" +COM_CONVERTFORMS_FRONT_SUBMISSIONS_CONFIRMED_ONLY="Показва само потвърденените" +COM_CONVERTFORMS_FRONT_SUBMISSIONS_CONFIRMED_ONLY_DESC="Активирайте това, за да се показват само потвърдени заявки." +COM_CONVERTFORMS_HIDE_EMPTY_VALUES="Скриване на празните стойности" +COM_CONVERTFORMS_HIDE_EMPTY_VALUES_DESC="Активирайте тази опция, за да скриете полета с празни стойности." +COM_CONVERTFORMS_SELECT_FORM="Изберете формуляр" +COM_CONVERTFORMS_SELECT_FORM_DESC="Изберете формуляра, от който да се показват заявките" +; COM_CONVERTFORMS_SELECT_FORM_DESC2="Select the form to display" +COM_CONVERTFORMS_LIST_LIMIT="Лимит страници" +COM_CONVERTFORMS_LIST_LIMIT_DESC="Брой заявки за показване на страница. Въведете 0 за без ограничение." +COM_CONVERTFORMS_FRONT_SUBMISSIONS_VIEW_OWN_ONLY="Виж само своите" +COM_CONVERTFORMS_FRONT_SUBMISSIONS_VIEW_OWN_ONLY_DESC="Въпреки че можете да покажете списък с заявки от различни потребители, на посетителя ще бъде разрешен достъп до страницата с подробности само за собствените заявки, ако тази опция е активирана.

Посетителят е длъжен да влезе в акаунта си." +COM_CONVERTFORMS_FRONT_SUBMISSIONS_PAGINATION="Покажи пагинация" +COM_CONVERTFORMS_FRONT_SUBMISSIONS_PAGINATION_DESC="Ако общият брой на заявките надвишава ограничението за показване на екран, под списъка за подаване ще бъдат показани връзки за пагинация страници." +COM_CONVERTFORMS_ORDER="Сортиране на заявки" +COM_CONVERTFORMS_ORDER_DESC="Ред на показване на заявките." +COM_CONVERTFORMS_ORDER_RECENT="Най-новите първи" +COM_CONVERTFORMS_ORDER_OLDEST="Най-старите първи" +COM_CONVERTFORMS_ORDER_RANDOM="Произволен ред" +COM_CONVERTFORMS_FILTER_USER="Показване на заявки от" +COM_CONVERTFORMS_FILTER_USER_DESC="Изберете да филтрирате заявките от потребителя, който ги е подал.

Влезли в системата потребители Показва заявки, подадени само от текущия влезнал в системата потребител. Всеки потребител ще вижда своите заявки.

Всички потребители Показва всички заявки.

Специфични потребители Позволява подателите да филтрират заявките." +COM_CONVERTFORMS_FILTER_USER_LOGGED_IN="Влезнали потребители" +COM_CONVERTFORMS_FILTER_USER_ALL="Всички потребители" +COM_CONVERTFORMS_FILTER_USER_SELECT="Специфични потребители" +COM_CONVERTFORMS_SET_USERS="ID идентификатори потребители " +COM_CONVERTFORMS_SET_USERS_DESC="Въведете ID идентификатор на Joomla User, за да филтрирате подадените заявки. Използвайте запетая, за да разделите няколко ID номера." +COM_CONVERTFORMS_LOAD_CSS="Зареди стилове" +COM_CONVERTFORMS_LOAD_CSS_DESC="Деактивирайте тази опция, ако не искате CSS стиловете на Convert Forms да не бъдат заредени." +COM_CONVERTFORMS_SUBMISSIONS_LAYOUT="Макет" +COM_CONVERTFORMS_SUBMISSIONS_LAYOUT_DESC="Изберете шаблон, който ще се използва за показване на заявките в сайта. Можете също да създадете свои шаблони." +COM_CONVERTFORMS_SUBMISSIONS_LAYOUT_TYPE="Тип оформление" +COM_CONVERTFORMS_SUBMISSIONS_LAYOUT_TYPE_DESC="Тип оформление" +COM_CONVERTFORMS_SUBMISSIONS_TEMPLATE="Шаблон" +COM_CONVERTFORMS_SUBMISSIONS_SELECT_TEMPLATE="Изберете шаблон" +COM_CONVERTFORMS_SUBMISSIONS_SELECT_TEMPLATE_DESC="Изберете шаблон за показване на заявките. Той ще се използва както за списък, така и за подробен изглед.

Можете да добавяте собствени макети преопределения във вашия шаблон." +COM_CONVERTFORMS_SUBMISSIONS_CONTAINER_LAYOUT="Контейнер шаблон" +COM_CONVERTFORMS_SUBMISSIONS_CONTAINER_LAYOUT_DESC="Главен HTML шаблон на списъка със заявки. Не премахвайте {submissions} маркер от него, тъй като той заменя с изходните данни." +COM_CONVERTFORMS_SUBMISSIONS_ROW_LAYOUT="Оформление на редовете" +COM_CONVERTFORMS_SUBMISSIONS_ROW_LAYOUT_DESC="HTML оформление на всяка заявка, както е показано в оформлението на контейнера." +COM_CONVERTFORMS_SUBMISSIONS_DETAILS_LAYOUT="Оформление на Детайли" +COM_CONVERTFORMS_SUBMISSIONS_DETAILS_LAYOUT_DESC="HTML оформлението на страницата с подробности за заявката." +; COM_CONVERTFORMS_FIELD_EMPTYSPACE="Empty Space" +; COM_CONVERTFORMS_FIELD_EMPTYSPACE_DESC="Add an empty space in your form" +; COM_CONVERTFORMS_FIELD_EMPTY_SPACE_GAP="Empty Space" +; COM_CONVERTFORMS_FIELD_EMPTY_SPACE_GAP_DESC="Set a vertical gap between fields in pixels." +; COM_CONVERTFORMS_FIELD_HEADING="Heading" +; COM_CONVERTFORMS_FIELD_HEADING_DESC="Add a Heading title to group your fields" +; COM_CONVERTFORMS_FIELD_HEADING_HEADINGTYPE="Title HTML Element" +; COM_CONVERTFORMS_FIELD_HEADING_HEADINGTYPE_DESC="Select the heading type." +; COM_CONVERTFORMS_FIELD_HEADING_USELINK="Use Link" +; COM_CONVERTFORMS_FIELD_HEADING_USELINK_DESC="Whether to make the heading point to a URL." +; COM_CONVERTFORMS_FIELD_HEADING_LINK="Link" +; COM_CONVERTFORMS_FIELD_HEADING_LINK_DESC="Enter the link to redirect the user to." +; COM_CONVERTFORMS_FIELD_HEADING_NEWTAB="Open in new tab" +; COM_CONVERTFORMS_FIELD_HEADING_NEWTAB_DESC="Enable to open the link in a new tab." +; COM_CONVERTFORMS_FIELD_HEADING_FONT_SIZE_DESC="Set the font font size for the heading." +; COM_CONVERTFORMS_FIELD_HEADING_FONT_FAMILY_DESC="Select the font family for the heading." +; COM_CONVERTFORMS_FIELD_HEADING_LINE_HEIGHT="Line Height" +; COM_CONVERTFORMS_FIELD_HEADING_LINE_HEIGHT_DESC="Set the line height for the heading." +; COM_CONVERTFORMS_FIELD_HEADING_LETTER_SPACING="Letter Spacing" +; COM_CONVERTFORMS_FIELD_HEADING_LETTER_SPACING_DESC="Set the letter spacing for the heading." +; COM_CONVERTFORMS_FIELD_HEADING_CONTENT_ALIGNMENT="Content Alignment" +; COM_CONVERTFORMS_FIELD_HEADING_CONTENT_ALIGNMENT_DESC="Select the alignment of the heading." +COM_CONVERTFORMS_FIELD_OPTIONS_SHOW_VALUES="Показва стойности" +COM_CONVERTFORMS_FIELD_OPTIONS_SHOW_VALUES_DESC="Уверете се, че сте задали уникална стойност за всеки избор или няма да имате начин да знаете коя опция е избрана от потребителя" +COM_CONVERTFORMS_FIELD_OPTIONS_CALC_VALUES="Използване калкулация на стойности" +COM_CONVERTFORMS_FIELD_OPTIONS_CALC_VALUES_DESC="Стойностите за изчисление обикновено се използват за изчисления. Представя числова стойност на избор." +COM_CONVERTFORMS_FIELD_DIVIDER="Разделител" +COM_CONVERTFORMS_FIELD_DIVIDER_DESC="Разделя вашия формуляр на секции" +COM_CONVERTFORMS_FIELD_BORDER_STYLE="Стил конкур" +COM_CONVERTFORMS_FIELD_BORDER_STYLE_DESC="Изберете стила на линията на разделителя." +COM_CONVERTFORMS_FIELD_BORDER_STYLE_SOLID="Плътен" +COM_CONVERTFORMS_FIELD_BORDER_STYLE_DASHED="Пунктир" +COM_CONVERTFORMS_FIELD_BORDER_STYLE_DOTTED="На точки" +COM_CONVERTFORMS_FIELD_BORDER_WIDTH="Ширина на разделител" +COM_CONVERTFORMS_FIELD_BORDER_WIDTH_DESC="Изберете ширината на разделителя." +COM_CONVERTFORMS_FIELD_BORDER_COLOR="Цвят линия" +COM_CONVERTFORMS_FIELD_BORDER_COLOR_DESC="Задайте цвета на линията на разделителя." +COM_CONVERTFORMS_FIELD_MARGIN_TOP="Горно поле" +COM_CONVERTFORMS_FIELD_MARGIN_TOP_DESC="Задайте поле отстояние от горе на разделителя." +COM_CONVERTFORMS_FIELD_MARGIN_BOTTOM="Долно поле" +COM_CONVERTFORMS_FIELD_MARGIN_BOTTOM_DESC="Задайте поле отстояние от долу на разделителя." +COM_CONVERTFORMS_FIELD_DATETIME_FIRSTDAYOFWEEK="Първи ден от седмицата" +COM_CONVERTFORMS_FIELD_DATETIME_FIRSTDAYOFWEEK_DESC="Променете първия ден от седмицата, представен в календара за избор на дата." +COM_CONVERTFORMS_ENTER_LABEL="Въведете етикет" +COM_CONVERTFORMS_ADD_FIELD="Добав поле" +COM_CONVERTFORMS_ALL_FIELDS="Всички полета" +; COM_CONVERTFORMS_ALL_FILLED_ONLY_FIELDS="All Filled-only Fields" +; COM_CONVERTFORMS_FIELDGROUP_LAYOUT="Layout Fields" +; COM_CONVERTFORMS_UPLOAD_ALLOW_UNSAFE="Allow Unsafe Files" +; COM_CONVERTFORMS_UPLOAD_ALLOW_UNSAFE_DESC="Allow the upload of unsafe files.

A file is considered unsafe when:
- A null byte is found in the file name.
- File extension is forbidden: .php, py etc.
- There's a php tag in file content.
- There's a short tag in file content.
- There's a forbidden extension anywhere in the content.

This option protects you also from unsafe files included in compressed files such as zip, rar, tar e.t.c." +; COM_CONVERTFORMS_LABEL_POSITION="Label Position" +; COM_CONVERTFORMS_LABEL_POSITION_DESC="Set the position of the field label" +; COM_CONVERTFORMS_INVALID_RESPONSE="Invalid Response" +; COM_CONVERTFORMS_INVALID_TASK="Invalid Task" +; COM_CONVERTFORMS_ERROR_WAIT_FILE_UPLOADS="Please wait file uploading to complete." +; COM_CONVERTFORMS_ERROR_INPUTMASK_INCOMPLETE="Mask is incomplete" +; COM_CONVERTFORMS_SUBMISSION_ID="Submission ID" +; COM_CONVERTFORMS_SUBMISSION_DATE="Submission Date" +; COM_CONVERTFORMS_SUBMISSION_CAMPAIGN_ID="Submission Campaign ID" +; COM_CONVERTFORMS_SUBMISSION_FORM_ID="Submission Form ID" +; COM_CONVERTFORMS_SUBMISSION_VISITOR_ID="Submission Visitor ID" +; COM_CONVERTFORMS_SUBMISSION_USER_ID="Submission User ID" +; COM_CONVERTFORMS_SUBMISSIONS_COUNT="Submissions Count" +; COM_CONVERTFORMS_MIN_CHARS="Minimum Characters" +; COM_CONVERTFORMS_MIN_CHARS_DESC="Minimum length for this field in characters. Enter 0 for no limit." +; COM_CONVERTFORMS_MAX_CHARS="Maximum Characters" +; COM_CONVERTFORMS_MAX_CHARS_DESC="Maximum length for this field in characters. Enter 0 for no limit." +; COM_CONVERTFORMS_MIN_WORDS="Minimum Words" +; COM_CONVERTFORMS_MIN_WORDS_DESC="Minimum length for this field in words. Enter 0 for no limit." +; COM_CONVERTFORMS_MAX_WORDS="Maximum Words" +; COM_CONVERTFORMS_MAX_WORDS_DESC="Maximum length for this field in words. Enter 0 for no limit." +; COM_CONVERTFORMS_FIELD_VALIDATION_MIN_CHARS="Please lengthen this text to %s characters or more. You're currently using %s characters." +; COM_CONVERTFORMS_FIELD_VALIDATION_MAX_CHARS="Please shorten this text to %s characters or less. You're currently using %s characters." +; COM_CONVERTFORMS_FIELD_VALIDATION_MIN_WORDS="Please lengthen this text to %s words or more. You're currently using %s words." +; COM_CONVERTFORMS_FIELD_VALIDATION_MAX_WORDS="Please shorten this text to %s words or less. You're currently using %s words." +; COM_CONVERTFORMS_FIELD_EDITOR="Rich Text Editor" +; COM_CONVERTFORMS_FIELD_EDITOR_DESC="Provide a rich text editor for the user to format their responses in this field." +; COM_CONVERTFORMS_EDITOR_HEIGHT="Editor Height" +; COM_CONVERTFORMS_EDITOR_HEIGHT_DESC="Set the height in pixels" +; COM_CONVERTFORMS_EDITOR_SELECT="Joomla Editor" +; COM_CONVERTFORMS_EDITOR_SELECT_DESC="Select the Joomla editor to be used for this field.

If you don't see any editors in the list, make sure you've installed and activated at least 1 Joomla Editor plugin through the Joomla Plugins Manager." +; COM_CONVERTFORMS_EDITOR_NOT_FOUND="Joomla Editor not found: %s" +; COM_CONVERTFORMS_EXPORT_COMPLETED="%s submissions exported" +; COM_CONVERTFORMS_DOWNLOAD_WILL_START="Your download will start automatically." +; COM_CONVERTFORMS_EXPORT_WORKING="Exporting" +; COM_CONVERTFORMS_EXPORT_PROCESSING="Processed %s of %s submissions" +; COM_CONVERTFORMS_EXPORT_ERROR_CANT_FIND_FILE="Can't find exported file" +; COM_CONVERTFORMS_FIELD_HCAPTCHA_CONFIGURE="Configure hCaptcha now" +; COM_CONVERTFORMS_FIELD_HCAPTCHA="hCaptcha" +; COM_CONVERTFORMS_FIELD_HCAPTCHA_DESC="Stop spam form submissions using hCaptcha" +; COM_CONVERTFORMS_FIELD_HCAPTCHA_TYPE_DESC="Select whether to use the checkbox or invisible version of hCaptcha." +; COM_CONVERTFORMS_FILEUPLOAD_MIME_CONTENT_TYPE_MISSING="The PHP extension fileinfo is required to guess the mime type of uploaded files but it's not installed or not loaded. Please contact your host to install it." +; COM_CONVERTFORMS_SUBMISSION_DEFAULT_STATE="Submission Default State" +; COM_CONVERTFORMS_SUBMISSION_DEFAULT_STATE_DESC="Set the default state of each new submission." diff --git a/deployed/convertforms/administrator/components/com_convertforms/language/ca-ES/ca-ES.com_convertforms.ini b/deployed/convertforms/administrator/components/com_convertforms/language/ca-ES/ca-ES.com_convertforms.ini new file mode 100644 index 00000000..7666b4ef --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/language/ca-ES/ca-ES.com_convertforms.ini @@ -0,0 +1,605 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +CONVERTFORMS="Convert Forms" +COM_CONVERTFORMS="Convert Forms" +COM_CONVERTFORMS_DESIGN="Disseny" +COM_CONVERTFORMS_BEHAVIOR="Comportament" +COM_CONVERTFORMS_LIST="Llistat" +COM_CONVERTFORMS_NO_RESULTS_FOUND="No s'ha trobat %s" +COM_CONVERTFORMS_CREATE_NEW="Crear-ne un nou?" +COM_CONVERTFORMS_EMAIL_ASCENDING="Correu electrònic ascendent" +COM_CONVERTFORMS_EMAIL_DESCENDING="Correu electrònic descendent" +COM_CONVERTFORMS_ACTIONS="Accions" +COM_CONVERTFORMS_VIEW_LEADS="Veure contribucions" +NRI_PLG_CONVERTFORMS="Connector Convert Forms" +COM_CONVERTFORMS_CONFIGURATION="Configuració Convert Forms" +COM_CONVERTFORMS_LOADCSS="Carregar fulla d'estils" +COM_CONVERTFORMS_LOADCSS_DESC="Selecciona-ho per carregar la fulla d'estils de l'extensió. Pots deshabilitar això si col·loques els teus estils personalitzats a una altra fulla d'estils, per exemple, el camp Codi Personalitzat o la fulla d'estils de la plantilla" +COM_CONVERTFORMS_DEBUG="Depuració" +COM_CONVERTFORMS_DEBUG_DESC="Activa aquesta opció per tenir una ajuda a l'hora de depurar errors i comportaments inesperats. Els missatges d'error s'enviaran a la consola del teu navegador (Pressiona F12) i a la carpeta Logs." +COM_CONVERTFORMS_FORMS="Formularis" +COM_CONVERTFORMS_FORM="Formulari" +COM_CONVERTFORMS_NEW_FORM="Nou formulari" +COM_CONVERTFORMS_EDIT_FORM="Editar formulari" +COM_CONVERTFORMS_FORM_N_ITEMS_COPIED="%sformularis copiats" +COM_CONVERTFORMS_FORM_N_ITEMS_PUBLISHED="%s formularis publicats" +COM_CONVERTFORMS_FORM_N_ITEMS_UNPUBLISHED="%s formulari no publicat" +COM_CONVERTFORMS_FORM_N_ITEMS_TRASHED="%s formularis reciclats" +COM_CONVERTFORMS_FORM_N_ITEMS_DELETED="%s formularis esborrats" +COM_CONVERTFORMS_FORM_ASCENDING="Formulari ascendent" +COM_CONVERTFORMS_FORM_DESCENDING="Formulari descendent" +COM_CONVERTFORMS_FORM_SELECT="- Escull formulari -" +COM_CONVERTFORMS_FORM_CREATE_MODULE="Publica creant un mòdul" +COM_CONVERTFORMS_FORM_LEADS="Fins ara s'ha contestat a aquest formulari %s vegades" +COM_CONVERTFORMS_FORM_CLIPBOARD_SHORTCODE="Publica emprant el codi curt: %s" +COM_CONVERTFORMS_CAMPAIGN="Campanya" +COM_CONVERTFORMS_CAMPAIGNS="Campanyes" +COM_CONVERTFORMS_NEW_CAMPAIGN="Nova campanya" +COM_CONVERTFORMS_EDIT_CAMPAIGN="Editar Campanya" +COM_CONVERTFORMS_CAMPAIGNS_NAME_DESC="Escriu un nom per la campanya. Aquest nom no el podrà veure ningú més que tu." +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_COPIED="%s Campanyes copiades" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_UNPUBLISHED="%s Campanyes no publicades" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_PUBLISHED="%s Campanyes publicades" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_TRASHED="%s Campanyes reciclades" +COM_CONVERTFORMS_CAMPAIGN_N_ITEMS_DELETED="%s Campanyes esborrades" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_UNPUBLISHED="%s respostes no publicades" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_PUBLISHED="%s respostes publicades" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_TRASHED="%s respostes reciclades" +COM_CONVERTFORMS_SUBMISSION_N_ITEMS_DELETED="%s respostes esborrades" +; COM_CONVERTFORMS_SUBMISSION_N_ITEMS_ARCHIVED="%s submissions archived" +COM_CONVERTFORMS_CAMPAIGN_ASCENDING="Campanya ascendent" +COM_CONVERTFORMS_CAMPAIGN_DESCENDING="Campanya descendent" +COM_CONVERTFORMS_CAMPAIGN_SELECT="- Escull Campanya -" +COM_CONVERTFORMS_CAMPAIGN_CONFIRM_DESC="Escull la campanya per configurar la teva integració." +COM_CONVERTFORMS_CAMPAIGN_CHANGED="Campanya canviada" +COM_CONVERTFORMS_CAMPAIGN_SYNC="Sincronitzar respostes" +COM_CONVERTFORMS_CAMPAIGN_SYNC_DESC="Escull si vols que les teves respostes es sincronitzin a altres programes de tercers o si l'ha de recollir únicament la teva base de dades.
NOTA: Si necessites integrar amb programes de tercers com MailChimp, Aweber, GetResponse, Active Campaign, etc instal·la el connector corresponent a la secció de connectors" +COM_CONVERTFORMS_N_ITEMS_TRASHED="%s Campanyes esborrades" +COM_CONVERTFORMS_CHOOSE_SERVICE="Escull un servei" +COM_CONVERTFORMS_PENDING_LEADS="Esperant respostes" +COM_CONVERTFORMS_SUBMISSIONS="Respostes" +COM_CONVERTFORMS_SUBMISSION="Resposta" +COM_CONVERTFORMS_LATEST_SUBMISSIONS="Darrera resposta" +COM_CONVERTFORMS_SUBMISSION_CONFIRMED="Confirmat" +COM_CONVERTFORMS_SUBMISSION_UNCONFIRMED="No confirmat" +COM_CONVERTFORMS_EDIT_CONVERSION="Editar resposta" +COM_CONVERTFORMS_SUBMISSION_INVALID="No s'ha trobat la r.esposta" +COM_CONVERTFORMS_NOT_AUTHORIZED="No estàs autoritzat a accedir a aquesta pàgina." +COM_CONVERTFORMS_LEADS_ASC="Respostes ascendent" +COM_CONVERTFORMS_LEADS_DESC="Respostes descendent" +COM_CONVERTFORMS_LEADS_EXPORT="Exportar respostes" +COM_CONVERTFORMS_ADDONS="Connectors" +COM_CONVERTFORMS_INSTALL_ADDONS="Veure connectors instal·lats" +COM_CONVERTFORMS_ADDONS_MISSING_KEY="Per poder instal·lar Convert Forms hauràs d'entrar la teva clau de descàrrega a la configuració del connector Novarain Framework" +COM_CONVERTFORMS_ADDONS_DESC="Els connectors expandeixen les funcionalitats de Convert Forms. Amb aquests connectors, pots connectar amb programari de tercers, integrar noves funcionalitats i que Convert Forms sigui inclús més potent." +COM_CONVERTFORMS_LAST_YEAR="Darrer any" +COM_CONVERTFORMS_THIS_YEAR="Aquest any" +COM_CONVERTFORMS_LAST_MONTH="Darrer mes" +COM_CONVERTFORMS_THIS_MONTH="Aquest mes" +COM_CONVERTFORMS_LAST_WEEK="Darrera setmana" +COM_CONVERTFORMS_THIS_WEEK="Aquesta setmana" +COM_CONVERTFORMS_LAST_7_DAYS="Darrers 7 dies" +COM_CONVERTFORMS_YESTERDAY="Ahir" +COM_CONVERTFORMS_TODAY="Avui" +COM_CONVERTFORMS_AVG_DAY="Mitja diària (aquest mes)" +COM_CONVERTFORMS_PROJECTION="Projecció per aquest mes" +COM_CONVERTFORMS_TOTAL="Total" +COM_CONVERTFORMS_CHOOSE_FILE="Escull un arxiu .cnvf" +COM_CONVERTFORMS_FORMS_NAME_DESC="Un nom únic i descriptiu t'ajudarà en el futur ja que apareixerà al taulell de control, analítiques, etc." +COM_CONVERTFORMS_BACKGROUND_IMAGE="Font de la imatge de fons" +COM_CONVERTFORMS_IMAGE_DESC="Escull la font de la imatge de fons" +COM_CONVERTFORMS_CUSTOM_URL="URL personalitzada" +COM_CONVERTFORMS_BACKGROUND_URL="URL de la imatge de fons" +COM_CONVERTFORMS_BACKGROUND_URL_DESC="Escriu la URL personalitzada de la teva imatge" +COM_CONVERTFORMS_BACKGROUND_FILE="Imatge de fons" +COM_CONVERTFORMS_BACKGROUND_FILE_DESC="Escull la imatge a carregar." +COM_CONVERTFORMS_BACKGROUND_IMAGE_DESC="Pots incloure una imatge que es mostrarà darrera del contingut del formulari. Escull Carregar per carregar una nova imatge o URL personalitzada per escriure una URL personalitzada. Per que aquesta opció funcioni, el color de fons ha de ser transparent." +COM_CONVERTFORMS_FORM_BUILDER="Creador de formulari" +COM_CONVERTFORMS_FIELD_TYPE="Tipus de camp" +COM_CONVERTFORMS_FIELD_TYPE_DESC="L'atribut tipus de camp especifica el tipus d'element d'entrada a mostrar." +COM_CONVERTFORMS_FIELD_LABEL="Etiqueta de camp" +COM_CONVERTFORMS_FIELD_LABEL_DESC="L'etiqueta de camp estableix una etiqueta per un element d'entrada." +COM_CONVERTFORMS_FIELD_NAME="Nom del camp" +COM_CONVERTFORMS_FIELD_NAME_DESC="Especifica el nom de l'element d'entrada que s'utilitzarà per referenciar les dades del formulari un cop aquest s'envia. Utilitza aquesta opció també per mapejar els camps del formulari amb integració amb apps." +COM_CONVERTFORMS_PLACEHOLDER_NAME="Text marcador de posició" +COM_CONVERTFORMS_PLACEHOLDER_NAME_DESC="El text que vols aparegui al camp, abans de que l'usuari escrigui alguna cosa." +COM_CONVERTFORMS_REQUIRED_NAME="Camp requerit" +; COM_CONVERTFORMS_REQUIRED_NAME_DESC="If enabled, this will ensure that this field is completed before allowing the form to be submitted." +COM_CONVERTFORMS_FIELDS="Camps" +COM_CONVERTFORMS_FIELDS_FREE_NOTICE="Estas utilitzant la versió Gratuïta que només permet un camp de correu electrònic. Millora a la versió Pro per poder administrar camps il·limitats." +COM_CONVERTFORMS_GENERAL="General" +COM_CONVERTFORMS_FORM_TEXT_ALIGN="Alineament text del camp" +COM_CONVERTFORMS_FORM_TEXT_ALIGN_DESC="Alineament text del formulari" +COM_CONVERTFORMS_INPUT_COLOR="Color del text del camp" +COM_CONVERTFORMS_INPUT_BGCOLOR="Color del fons del camp" +COM_CONVERTFORMS_INPUT_BORDER_COLOR="Color de la vora del camp" +COM_CONVERTFORMS_SHADOW="Ombra" +COM_CONVERTFORMS_INPUT_SHADOW_DESC="Afegeix una ombra interna al camp d'entrada" +COM_CONVERTFORMS_INPUT_FONT_SIZE="Mida de la font del camp" +COM_CONVERTFORMS_INPUT_FONT_SIZE_DESC="Mida de la font del camp" +COM_CONVERTFORMS_VPADDING_SIZE="Encoixinat (Padding) vertical" +COM_CONVERTFORMS_HPADDING_SIZE="Encoixinat (Padding) Horitzontal" +COM_CONVERTFORMS_BOX_WIDTH_TYPE="Amplada màxima de la caixa" +COM_CONVERTFORMS_BOX_WIDTH_TYPE_DESC="Estableix una amplada màxima personalitzada per aquesta caixa o fes que ocupi tot l'ample de pantalla. Tingues en compte que aquesta és l'amplada màxima, això significa que el formulari sempre s'adaptarà a àrees més petites." +COM_CONVERTFORMS_FORM_WIDTH="Amplada màxima personalitzada" +COM_CONVERTFORMS_FORM_WIDTH_DESC="Estableix una amplada màxima de la teva elecció." +COM_CONVERTFORMS_REMOVE_DEFAULT_PADDING="Elimina l'encoixinat (Padding) per defecte" +COM_CONVERTFORMS_REMOVE_DEFAULT_PADDING_DESC="Elimina l'encoixinat (Padding) per defecte entre l'àrea de contingut i les vores de la caixa del formulari." +COM_CONVERTFORMS_FORM_BORDER_STYLE="Estil de vora" +COM_CONVERTFORMS_FORM_BORDER_STYLE_DESC="Aplica una vora al voltant del formulari" +COM_CONVERTFORMS_FORM_BORDER_COLOR="Color de la vora" +COM_CONVERTFORMS_FORM_BORDER_COLOR_DESC="Color de la vora del formulari" +COM_CONVERTFORMS_FORM_BORDER_WIDTH="Amplada de la vora" +COM_CONVERTFORMS_FORM_BORDER_WIDTH_DESC="Amplada de la vora del formulari" +COM_CONVERTFORMS_BOX_RADIUS="Radi de la caixa" +COM_CONVERTFORMS_BORDER_RADIUS="Radi de la vora" +COM_CONVERTFORMS_BORDER_RADIUS_DESC="Escriu la mida del radi de la vora" +COM_CONVERTFORMS_COLLECT_LEADS_USING="Recull respostes utilitzant la campanya" +COM_CONVERTFORMS_COLLECT_LEADS_USING_DESC="Les respostes recollides per aquest formulari s'associaran amb la campanya seleccionada. Pots administrar les campanyes a la secció de campanyes." +COM_CONVERTFORMS_SUCCESSFUL_SUBMISSION="Acció de tramesa exitosa" +COM_CONVERTFORMS_SUCCESSFUL_SUBMISSION_DESC="Escull l'acció que vols que es dugui a terme després d'una tramesa exitosa" +COM_CONVERTFORMS_DISPLAY_MSG="Mostrar missatge" +COM_CONVERTFORMS_REDIRECT_USER="Redreçar l'usuari" +COM_CONVERTFORMS_SUCCESS_TEXT="Missatge després de l'èxit" +COM_CONVERTFORMS_SUCCESS_TEXT_DESC="Escriu el missatge que vols mostrar a l'usuari després de ser afegit al llistat amb èxit." +COM_CONVERTFORMS_SUCCESS_URL="Redreçar URL" +COM_CONVERTFORMS_SUCCESS_URL_DESC="Escriu la URL a on vols redreçar l'usuari després de ser afegit al llistat amb èxit." +COM_CONVERTFORMS_PASS_DATA="Passar les dades de la resposta per redreçar la URL" +COM_CONVERTFORMS_PASS_DATA_DESC="Passa les dades de la resposta com arguments de consulta per redreçar la URL." +COM_CONVERTFORMS_SUBMIT_STYLE="Estil del botó d'enviar" +COM_CONVERTFORMS_SUBMIT_STYLE_DESC="Estila el teu botó amb vistosos efectes." +COM_CONVERTFORMS_BTN_SHADOW_DESC="Afegeix una ombra exterior al botó" +COM_CONVERTFORMS_SUBMIT_HOVER_COLOR="Color del text al passar per sobre (Hover)" +COM_CONVERTFORMS_SUBMIT_HOVER_COLOR_DESC="Color del text al passar per sobre (Hover)" +COM_CONVERTFORMS_CUSTOM_CSS="CSS personalitzat" +COM_CONVERTFORMS_CUSTOM_CSS_DESC="Estila el formulari amb el teu propi CSS.

Per ajudar-te a estilar el formulari, el codi que afegeixis a aquesta àrea s'executarà també a l'editor." +COM_CONVERTFORMS_CLASS_SUFFIX="Suffix de classe" +COM_CONVERTFORMS_CLASS_SUFFIX_DESC="Suffix de classe" +COM_CONVERTFORMS_TEXTAREA_HEIGHT="Alçada de l'àrea de text" +COM_CONVERTFORMS_TEXTAREA_HEIGHT_DESC="L'alçada de l'àrea de text especifica l'alçada visible d'un àrea de text. En línies." +COM_CONVERTFORMS_CHOICES="Opcions" +COM_CONVERTFORMS_CHOICES_DESC="Afegeix opcions pel camp del formulari." +COM_CONVERTFORMS_FIELD_VALUE="Valor per defecte" +COM_CONVERTFORMS_FIELD_VALUE_DESC="Escriu el text del Valor per defecte del camp" +COM_CONVERTFORMS_HIDE_LABELS="Amagar etiqueta" +COM_CONVERTFORMS_HIDE_LABELS_DESC="Escull aquesta opció per amagar l'etiqueta del camp del formulari" +COM_CONVERTFORMS_IMAGE_SOURCE="Font de la imatge" +COM_CONVERTFORMS_IMAGE_SOURCE_DESC="Pots incloure una imatge que es mostrarà amb el contingut del formulari. Escull Carregar per carregar una nova imatge o URL personalitzada per escriure una URL personalitzada." +COM_CONVERTFORMS_IMAGE_URL="URL de la imatge" +COM_CONVERTFORMS_HIDE_IMAGE_ON_MOBILE="Amaga la imatge en les pantalles petites" +COM_CONVERTFORMS_HIDE_IMAGE_ON_MOBILE_DESC="A les pantalles petites, com les dels telèfons mòbils o finestres modals es veurà més bonic. Per reduir la mida del modal, pots amagar la imatge amb aquesta opció." +COM_CONVERTFORMS_HORIZONTAL_POSITION="Posició horitzontal" +COM_CONVERTFORMS_HORIZONTAL_POSITION_DESC="Posició horitzontal" +COM_CONVERTFORMS_VERTICAL_POSITION="Posició vertical" +COM_CONVERTFORMS_VERTICAL_POSITION_DESC="Posició vertical" +COM_CONVERTFORMS_IMAGE_WIDTH_TYPE="Amplada de la imatge" +COM_CONVERTFORMS_IMAGE_WIDTH_TYPE_DESC="Estableix l'amplada de la imatge" +COM_CONVERTFORMS_BUTTON_ALIGN="Alineació del botó" +COM_CONVERTFORMS_FORM_POSITION="Posició del formulari" +COM_CONVERTFORMS_FORM_POSITION_DESC="Estableix la posició relativa al contenidor de text del formulari " +COM_CONVERTFORMS_FORM_SIZE="Mida del contenidor del formulari" +COM_CONVERTFORMS_COLUMNS_DESC="Especifica quantes columnes s'utilitzaran. 6 columnes ocupen el 50% de l'amplada." +COM_CONVERTFORMS_MESSAGE="Missatge de text" +COM_CONVERTFORMS_MESSAGE_DESC="Escriu el missatge del text del formulari" +COM_CONVERTFORMS_IMAGE_POSITION="Posició de la imatge" +COM_CONVERTFORMS_IMAGE_POSITION_DESC="Estableix la posició relativa al text de la imatge" +COM_CONVERTFORMS_FOOTER="Peu del formulari" +COM_CONVERTFORMS_BUTTON_TEXT="Text del botó" +COM_CONVERTFORMS_BUTTON_TEXT_DESC="Escriu el text de l'etiqueta del botó" +COM_CONVERTFORMS_BTN_FONT_SIZE="Mida del text del botó" +COM_CONVERTFORMS_IMAGE_SIZE="Mida del contenidor d'imatge" +COM_CONVERTFORMS_BODY_FONT="Familia de fonts" +COM_CONVERTFORMS_BODY_FONT_DESC="Escull la família de fonts que s'utilitzarà per al formulari. Tingues en compte que carregar fonts no estàndard com Google Fonts impactarà la velocitat de la teva pàgina. Escull Defecte per utilitzar la font per defecte del teu lloc." +COM_CONVERTFORMS_EMAIL="Correu electrònic" +COM_CONVERTFORMS_DATE="Data" +COM_CONVERTFORMS_CREATED="Data de creació" +COM_CONVERTFORMS_SUBMISSION="Resposta" +COM_CONVERTFORMS_PREVIEW_SUCCESS="Previsualitza el missatge d'exit" +COM_CONVERTFORMS_PREVIEW_SIZE_DESKTOP="Aquesta versió es mostrarà en pantalles per sobre dels 990px" +COM_CONVERTFORMS_PREVIEW_SIZE_TABLET="Aquesta versió es mostrarà en pantalles d'entre 768 i 990px" +COM_CONVERTFORMS_PREVIEW_SIZE_MOBILE="Aquesta versió es mostrarà en pantalles per sota dels 768px" +COM_CONVERTFORMS_DEVICE_DESKTOP="Escriptori" +COM_CONVERTFORMS_DEVICE_TABLET="Tauleta" +COM_CONVERTFORMS_DEVICE_MOBILE="Mòbil" +COM_CONVERTFORMS_RESET_FORM="Reiniciar formulari" +COM_CONVERTFORMS_RESET_FORM_DESC="Reiniciar el formulari després d'una tramesa correcta" +COM_CONVERTFORMS_HIDE_FORM="Ocultar formulari" +COM_CONVERTFORMS_HIDE_FORM_DESC="Oculta el formulari després d'una tramesa correcta" +COM_CONVERTFORMS_TEMPLATES="Plantilles" +COM_CONVERTFORMS_TEMPLATES_SELECT="Escull una plantilla per començar" +COM_CONVERTFORMS_TEMPLATES_BLANK="Començar de zero" +COM_CONVERTFORMS_TEMPLATES_BLANK_DESC="Començar de zero un nou formulari" +COM_CONVERTFORMS_TEMPLATE_GROUP_INLINE="Inline" +COM_CONVERTFORMS_TEMPLATE_GROUP_SIDEBAR="Barra lateral" +COM_CONVERTFORMS_TEMPLATE_GROUP_BAR="Barres" +COM_CONVERTFORMS_LABELS_COLOR="Color de text de l'etiqueta" +COM_CONVERTFORMS_LABELS_FONT_SIZE="Mida de la font de l'etiqueta" +COM_CONVERTFORMS_IMAGE_ABOVE="Per sobre del text" +COM_CONVERTFORMS_IMAGE_BELOW="Per sota del text" +COM_CONVERTFORMS_IMAGE_RIGHT="A la dreta del text" +COM_CONVERTFORMS_IMAGE_LEFT="A l'esquerra del text" +COM_CONVERTFORMS_FLAT="Plà" +COM_CONVERTFORMS_OUTLINE="Outline" +COM_CONVERTFORMS_GRADIENT="Gradient" +COM_CONVERTFORMS_EMAILS_DESC="Enviar notificacions per correu electrònic quan un usuari respon a un formulari." +COM_CONVERTFORMS_EMAILS="Notificacions per correu electrònic" +COM_CONVERTFORMS_EMAILS_REPLY_TO="Correu electrònic de resposta" +COM_CONVERTFORMS_EMAILS_REPLY_TO_NAME="Nom de resposta" +COM_CONVERTFORMS_EMAILS_FROM_EMAIL="Correu electrònic del remitent" +COM_CONVERTFORMS_EMAILS_FROM="Nom del remitent" +COM_CONVERTFORMS_EMAILS_RECIPIENT="Enviar a l'adreça de correu electrònic" +COM_CONVERTFORMS_EMAILS_RECIPIENT_DESC="Escriu les adreces de correu electrònic on es rebran les notificacions de respostes. Per notificar a diversos correus electrònics, separa les adreces amb una coma." +COM_CONVERTFORMS_EMAILS_SUBJECT="Assumpte del correu electrònic" +COM_CONVERTFORMS_EMAILS_BODY="Missatge" +COM_CONVERTFORMS_EMAILS_FREE_NOTE="Vols notificacions múltiples?
Millora a PROper desbloquejar-les." +COM_CONVERTFORMS_EMAILS_ATTACHMENT="Adjunts" +COM_CONVERTFORMS_EMAILS_ATTACHMENT_DESC="Ruta relativa a l'arrel del teu espai web d'un arxiu a adjuntar. Utilitza comes per definir-ne més d'una." +COM_CONVERTFORMS_ADDONS_MISSING_ADDON="Has perdut algún connector?" +COM_CONVERTFORMS_ADDONS_MISSING_ADDON_DESC="En cas que trobis a faltar algun connector d'integració per la teva app favorita, fes-nos-ho saber i l'afegirem a la col·lecció de connectors de Convert Forms." +COM_CONVERTFORMS_API_ENABLE="Activar API JSON" +COM_CONVERTFORMS_API_DESC="l'API JSON et permet recuperar contingut de Convert Forms amb peticions HTTP." +COM_CONVERTFORMS_API_KEY="Clau secreta" +COM_CONVERTFORMS_API_KEY_DESC="Aquesta clau secreta s'utilitza per autentificar tasques crítiques com feines CRON o l'API JSON. Si ho deixes en blanc totes les tasques que requereixin autentificació d'usuari es deshabilitaran." +COM_CONVERTFORMS_IMAGE_ALT="Imatge alternativa" +COM_CONVERTFORMS_IMAGE_ALT_DESC="El text alternatiu a la imatge" +COM_CONVERTFORMS_CUSTOM_CODE="Codi personalitzat" +COM_CONVERTFORMS_CUSTOM_CODE_DESC="Insereix codi personalitzat al final del formulari. Accepta HTML, CSS i JavaScript.

Pel JavaScript, asegura't que envolcalles el codi amb l'etiqueta + +
+
+
+ +

+ form->renderFieldset('params') ?> +
+ +

+ form->renderFieldset('main') ?> +
+
+ + +
+
+ + diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/conversion/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/conversion/view.html.php new file mode 100644 index 00000000..bda8151a --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/conversion/view.html.php @@ -0,0 +1,69 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Conversion View Class + */ +class ConvertFormsViewConversion extends JViewLegacy +{ + /** + * display method of Item view + * @return void + */ + public function display($tpl = null) + { + // Access check. + ConvertForms\Helper::authorise('convertforms.submissions.manage', true); + + // get the Data + $form = $this->get('Form'); + $item = $this->get('Item'); + + // Check for errors. + if (!is_null($this->get('Errors')) && count($errors = $this->get('Errors'))) + { + JFactory::getApplication()->enqueueMessage(implode("\n", $errors), 'error'); + return false; + } + + // Assign the Data + $this->form = $form; + $this->item = $item; + $this->isnew = (!isset($_REQUEST["id"])) ? true : false; + + // Set the toolbar + $this->addToolBar(); + + // Display the template + parent::display($tpl); + } + + /** + * Setting the toolbar + */ + protected function addToolBar() + { + $input = JFactory::getApplication()->input; + $input->set('hidemainmenu', true); + $isNew = ($this->item->id == 0); + + JToolBarHelper::title($isNew ? JText::_('COM_CONVERTFORMS_NEW_CONVERSION') : JText::_('COM_CONVERTFORMS_EDIT_CONVERSION')); + JToolbarHelper::apply('conversion.apply'); + JToolBarHelper::save('conversion.save'); + JToolBarHelper::cancel('conversion.cancel', $isNew ? 'JTOOLBAR_CANCEL' : 'JTOOLBAR_CLOSE'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/conversions/tmpl/default.php b/deployed/convertforms/administrator/components/com_convertforms/views/conversions/tmpl/default.php new file mode 100644 index 00000000..06c3813e --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/conversions/tmpl/default.php @@ -0,0 +1,212 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\Button\PublishedButton; +use ConvertForms\Helper; + +if (!defined('nrJ4')) +{ + JHtml::_('formbehavior.chosen', 'select'); +} + +$listOrder = $this->escape($this->state->get('list.ordering')); +$listDirn = $this->escape($this->state->get('list.direction')); + +$user = JFactory::getUser(); +$columns = $this->state->get('filter.columns'); + +JFactory::getDocument()->addStyleDeclaration(' + .js-stools .js-stools-container-filters .chzn-container.active:not(.chzn-with-drop) .chzn-single { + border: 1px solid rgba(0,0,0,0.2); + } + .js-stools .js-stools-container-filters .chzn-container.active .chzn-single { + border: 1px solid #2384D3; + } +'); + +?> + +
+ + +
+ sidebar; ?> +
+ + +
+ $this)); + ?> + + + + + + + $column) { ?> + + + + + + items)) { ?> + items as $i => $item): ?> + authorise('core.edit.state', 'com_convertforms.conversion.' . $item->id); + $canEdit = $user->authorise('core.edit', 'com_convertforms.conversion.' . $item->id); + ?> + + + + $column) { + // Convert to lower case to always match the field in case it has been renamed. + $column = strtolower($column); + $params = []; + + if (!is_null($item->params)) + { + foreach ($item->params as $key => $value) + { + $params[strtolower($key)] = $value; + } + } + + $isParam = (strpos($column, 'param_') !== false); + $columnName = $isParam ? str_replace('param_', '' , $column) : $column; + + $value = false; + $col_class = !$isParam ? 'nowrap col_' . $column : $column; + + $submission_user = JFactory::getUser($item->user_id); + $submission_user_edit_url = $submission_user->id > 0 ? JURI::base() . '/index.php?option=com_users&task=user.edit&id=' . $submission_user->id : ''; + ?> + + + + + + + + + + +
+ + + +
id); ?> + + 'conversions.', + 'disabled' => !$canChange, + 'id' => 'state-' . $item->id + ]; + + echo (new PublishedButton)->render((int) $item->state, $i, $options); + ?> + +
+ state, $i, 'conversions.', $canChange); ?> + + state === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'conversions'); + echo JHtml::_('actionsdropdown.render', $this->escape($item->id)); + } + ?> +
+ +
+ id); + $value = '' . $item->$columnName . ''; + } else + { + $value = $item->$columnName; + } + + break; + case 'user_username': + if ($submission_user->id > 0) + { + $value = '' . $submission_user->username . ''; + } + break; + case 'user_id': + $value = ''; + + if ($submission_user->id > 0) + { + $value = '' . $submission_user->id . ''; + } + break; + + default: + if ($isParam) + { + if (isset($item->prepared_fields[$columnName])) + { + $value = $item->prepared_fields[$columnName]->value_html; + } + } else + { + if (isset($item->$columnName)) + { + $value = $item->$columnName; + } + } + break; + } + ?> + + + + params->sync_service) && isset($item->params->sync_error) && $key == 0) { ?> + params->sync_service . "_ALIAS"); ?>" + data-content="params->sync_error ?>" + style="color:red;"> + + + + +
+
+ +
+
+ + + +
+ + + +
+
+
+ diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/conversions/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/conversions/view.html.php new file mode 100644 index 00000000..ace1b60e --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/conversions/view.html.php @@ -0,0 +1,147 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\Toolbar\Toolbar; +use Joomla\CMS\Toolbar\ToolbarHelper; + +/** + * Conversions View + */ +class ConvertFormsViewConversions extends JViewLegacy +{ + /** + * Items view display method + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return mixed A string if successful, otherwise a JError object. + */ + public function display($tpl = null) + { + // Access check. + ConvertForms\Helper::authorise('convertforms.submissions.manage', true); + + $this->items = $this->get('Items'); + $this->state = $this->get('State'); + $this->pagination = $this->get('Pagination'); + $this->filterForm = $this->get('FilterForm'); + $this->activeFilters = $this->get('ActiveFilters'); + $this->config = JComponentHelper::getParams('com_convertforms'); + + ConvertForms\Helper::addSubmenu('conversions'); + $this->sidebar = JHtmlSidebar::render(); + + // Trigger all ConvertForms plugins + JPluginHelper::importPlugin('convertforms'); + JFactory::getApplication()->triggerEvent('onConvertFormsServiceName'); + + // Check for errors. + if (!is_null($this->get('Errors')) && count($errors = $this->get('Errors'))) + { + JFactory::getApplication()->enqueueMessage(implode("\n", $errors), 'error'); + return false; + } + + // Set the toolbar + $this->addToolBar(); + + // Display the template + parent::display($tpl); + } + + /** + * Add Toolbar to layout + */ + protected function addToolBar() + { + $canDo = ConvertForms\Helper::getActions(); + $state = $this->get('State'); + $viewLayout = JFactory::getApplication()->input->get('layout', 'default'); + + JToolBarHelper::title(JText::_('COM_CONVERTFORMS') . ": " . JText::_('COM_CONVERTFORMS_SUBMISSIONS'), "users"); + + // Joomla J4 + if (defined('nrJ4')) + { + $toolbar = Toolbar::getInstance('toolbar'); + + $dropdown = $toolbar->dropdownButton('status-group') + ->text('JTOOLBAR_CHANGE_STATUS') + ->toggleSplit(false) + ->icon('fas fa-ellipsis-h') + ->buttonClass('btn btn-action') + ->listCheck(true); + + $childBar = $dropdown->getChildToolbar(); + + if ($canDo->get('core.edit.state')) + { + $childBar->publish('conversions.publish')->listCheck(true); + $childBar->unpublish('conversions.unpublish')->listCheck(true); + $childBar->standardButton('export')->text('COM_CONVERTFORMS_LEADS_EXPORT')->task('conversions.export')->icon('icon-download')->listCheck(true); + $childBar->trash('conversions.trash')->listCheck(true); + } + + if ($this->state->get('filter.state') == -2) + { + $toolbar->delete('conversions.delete') + ->text('JTOOLBAR_EMPTY_TRASH') + ->message('JGLOBAL_CONFIRM_DELETE') + ->listCheck(true); + } + + if ($canDo->get('core.admin')) + { + $toolbar->preferences('com_convertforms'); + } + + $toolbar->help('JHELP', false, 'http://www.tassos.gr/joomla-extensions/convert-forms/docs'); + + return; + } + + if ($canDo->get('core.edit.state') && $state->get('filter.state') != 2) + { + JToolbarHelper::publish('conversions.publish', 'JTOOLBAR_PUBLISH', true); + JToolbarHelper::unpublish('conversions.unpublish', 'JTOOLBAR_UNPUBLISH', true); + JToolbarHelper::archiveList('conversions.archive'); + } + + if ($canDo->get('core.delete') && $state->get('filter.state') == -2) + { + JToolbarHelper::deleteList('', 'conversions.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + else if ($canDo->get('core.edit.state')) + { + JToolbarHelper::trash('conversions.trash'); + } + + if ($canDo->get('core.edit')) + { + JToolbarHelper::editList('conversion.edit'); + } + + if ($canDo->get('core.create')) + { + JToolbarHelper::custom('', 'box-add toolbarexportmodal', '', 'COM_CONVERTFORMS_LEADS_EXPORT'); + ConvertForms\Export::renderModal(); + } + + if ($canDo->get('core.admin')) + { + JToolbarHelper::preferences('com_convertforms'); + } + + JToolbarHelper::help("Help", false, "http://www.tassos.gr/joomla-extensions/convert-forms/docs"); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/default.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/default.php new file mode 100644 index 00000000..82c504cd --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/default.php @@ -0,0 +1,163 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Helper; + +jimport('joomla.filesystem.file'); + +$downloadKey = NRFramework\Functions::getDownloadKey(); + +echo \NRFramework\HTML::checkForOutdatedExtension('com_convertforms'); + +if (JComponentHelper::getParams('com_convertforms')->get('show_update_notification', true)) +{ + echo \NRFramework\HTML::checkForUpdates('com_convertforms'); +} + +$canAccessOptions = Helper::authorise('core.admin'); +$canAccessForms = Helper::authorise('convertforms.forms.manage'); +$canAccessSubmissions = Helper::authorise('convertforms.submissions.manage'); +$canAccessCampaigns = Helper::authorise('convertforms.campaigns.manage'); + +?> + + +
+ +
+
+ +
+
+ +
+
+
+

+ +
+
+
+
+

+ +
+
+
+ +
+ + +
+

+

".JText::_("COM_CONVERTFORMS").""); ?>

+

+ + +

+
+ + + 'slide0')); ?> + + + + + + + + + + + +
+
+ + + diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/latest.leads.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/latest.leads.php new file mode 100644 index 00000000..dc8ed5aa --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/latest.leads.php @@ -0,0 +1,68 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + + +?> + +latestleads)) { ?> + + + + + + + + + latestleads as $key => $lead) { ?> + "> + + + + + + + +
+ params) + { + continue; + } + + foreach ($lead->params as $param_key => $param_value) + { + if (strtolower($param_key) == 'email') + { + $email = $param_value; + break; + } + } + + echo $email; + ?> + params->sync_error)) { ?> + + + + form_name ?>created; ?>
+ +
+ +
+ \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.docs.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.docs.php new file mode 100644 index 00000000..0854a393 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.docs.php @@ -0,0 +1,33 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +$docs = array( + "Getting Started with Convert Forms" => "getting-started-with-convert-forms", + "How to use the Form Designer" => "how-to-use-the-form-designer", + "How to display a form on the frontend" => "how-to-display-a-form-on-the-frontend", + "Sync Submissions with ActiveCampaign" => "sync-leads-with-activecampaign", + "Sync Submissions with GetResponse" => "sync-leads-with-getresponse", + "Sync Submissions with MailChimp" => "sync-leads-with-mailchimp", + "How to use Convert Forms as a popup" => "how-to-use-convert-forms-as-a-popup", +); + +$docHome = "http://www.tassos.gr/joomla-extensions/convert-forms/docs/"; + +?> + +
    + $url) { ?> +
  • + +
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.info.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.info.php new file mode 100644 index 00000000..2840092f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.info.php @@ -0,0 +1,56 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + +
GNU GPLv3 Commercial
Tassos Marinos - www.tassos.gr
+ + + +
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.stats.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.stats.php new file mode 100644 index 00000000..1ceda00f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.stats.php @@ -0,0 +1,61 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Analytics; + +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
'-7 day', 'created_to' => 'now']) ?>
+ diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.translations.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.translations.php new file mode 100644 index 00000000..ccab4834 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/tmpl/panel.translations.php @@ -0,0 +1,20 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +?> + +

+ + . +

\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/view.html.php new file mode 100644 index 00000000..c8b9d537 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/convertforms/view.html.php @@ -0,0 +1,50 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +class ConvertFormsViewConvertForms extends JViewLegacy +{ + /** + * Items view display method + * + * @return void + */ + function display($tpl = null) + { + $this->config = JComponentHelper::getParams('com_convertforms'); + + $model = \JModelLegacy::getInstance('Conversions', 'ConvertFormsModel', ['ignore_request' => true]); + $model->setState('list.limit', 10); + $model->setState('filter.state', 1); + + $this->latestleads = $model->getItems(); + + ConvertForms\Helper::renderSelectTemplateModal(); + + if (!defined('nrJ4')) + { + JHTML::_('behavior.modal'); + JHtml::_('bootstrap.popover'); + } + + JHtml::stylesheet('jui/icomoon.css', array(), true); + + JToolBarHelper::title(JText::_('COM_CONVERTFORMS')); + + // Display the template + parent::display($tpl); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/editorbutton/tmpl/button.php b/deployed/convertforms/administrator/components/com_convertforms/views/editorbutton/tmpl/button.php new file mode 100644 index 00000000..3b204c53 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/editorbutton/tmpl/button.php @@ -0,0 +1,69 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +// load the JS needed to handle the form data and send it back to the editor +$script = ' + jQuery(function($) { + function insertConvertFormShortcode() { + // Get the convertform id + convertformid = $("#jform_convertformid").val(); + + window.parent.jInsertEditorText("{convertforms " + convertformid + "}", ' . json_encode($this->eName) . '); + window.parent.jModalClose(); + return false; + } + + $(".cfEditorButton button").click(function() { + insertConvertFormShortcode(); + }) + }) +'; + +$style = ' + .cfEditorButton form, .eboxEditorButton .controls > * { + margin:0; + } + .cfHeader { + border-bottom: 1px dotted #ccc; + margin-bottom: 15px; + padding-bottom: 5px; + } + .cfHeader p { + color:#666; + font-size: 11px; + } + .cfHeader h3 { + font-size: 16px; + margin-bottom: 5px; + margin-top: 0; + } + .cfEditorButton .control-group { + margin-bottom: 15px; + } + .cfEditorButton { + padding: 5px; + } +'; + +JFactory::getDocument()->addScriptDeclaration($script); +JFactory::getDocument()->addStyleDeclaration($style); + +?> +
+
+ form->renderFieldset("main") ?> + +
+
diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/editorbutton/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/editorbutton/view.html.php new file mode 100644 index 00000000..da024cf9 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/editorbutton/view.html.php @@ -0,0 +1,47 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +class ConvertFormsViewEditorbutton extends JViewLegacy +{ + /** + * Items view display method + * @return void + */ + public function display($tpl = null) + { + + // Load plugin language file + NRFramework\Functions::loadLanguage("plg_editors-xtd_convertforms"); + + // Get editor name + $eName = JFactory::getApplication()->input->getCmd('e_name'); + + // Get form fields + $xml = JPATH_PLUGINS . "/editors-xtd/convertforms/form.xml"; + $form = new JForm("com_convertforms.button", array('control' => 'jform')); + $form->loadFile($xml, false); + + // Template properties + $this->eName = preg_replace('#[^A-Z0-9\-\_\[\]]#i', '', $eName); + $this->form = $form; + + parent::display($tpl); + return; + + } + +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/completed.php b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/completed.php new file mode 100644 index 00000000..6509b995 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/completed.php @@ -0,0 +1,39 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +if ($this->download_link) +{ + JFactory::getDocument()->addScriptDeclaration(' + document.addEventListener("DOMContentLoaded", function() { + window.location.href = "' . $this->download_link . '"; + }); + '); +} + +?> + +
+
+ +

+ total_submissions_exported)) ?> +

+

+ +

+ + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/default.php b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/default.php new file mode 100644 index 00000000..15aff0b4 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/default.php @@ -0,0 +1,42 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +JFactory::getDocument()->addScriptDeclaration(' + document.addEventListener("DOMContentLoaded", function() { + var form = document.querySelector(".export_tool form"); + form.addEventListener("submit", function(e) { + var btn = form.querySelector("button[type=\'submit\']"); + btn.innerText = "' . JText::_('NR_PLEASE_WAIT') . '..."; + document.querySelector(".export_tool").classList.add("working"); + }); + }); +'); + +?> + +
+
+

+
+ form->renderFieldset('submission'); ?> + + + + + +
+
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/error.php b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/error.php new file mode 100644 index 00000000..703e4dcb --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/error.php @@ -0,0 +1,26 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +?> + +
+
+ +

+

error; ?>

+ + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/progress.php b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/progress.php new file mode 100644 index 00000000..1f5446e1 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/export/tmpl/progress.php @@ -0,0 +1,30 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +?> + +
+
+ +

+ +

+

+ processed), number_format($this->total)); ?> +

+ + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/export/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/export/view.html.php new file mode 100644 index 00000000..62cc5bce --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/export/view.html.php @@ -0,0 +1,142 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Export; + +/** + * Templates View + */ +class ConvertFormsViewExport extends JViewLegacy +{ + /** + * Items view display method + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return mixed A string if successful, otherwise a JError object. + */ + public function display($tpl = null) + { + $app = JFactory::getApplication(); + $input = $app->input; + $viewLayout = $input->get('layout', 'default'); + + $this->tmpl = $input->get('tmpl'); + $this->baseURL = 'index.php?option=com_convertforms&view=export'; + $this->start_over_link = $this->baseURL . ($this->tmpl == 'component' ? '&tmpl=component' : ''); + + switch ($viewLayout) + { + case 'completed': + $file = $input->get('filename'); + + if (!Export::exportFileExists($file)) + { + Export::error(JText::_('COM_CONVERTFORMS_EXPORT_ERROR_CANT_FIND_FILE')); + } + + $this->download_link = 'index.php?option=com_convertforms&task=export.download&filename=' . $file; + $this->total_submissions_exported = $input->get('total'); + $this->export_type = $input->get('export_type'); + break; + + case 'progress': + JSession::checkToken('request') or die(JText::_('JINVALID_TOKEN')); + + try + { + $data = Export::export($input->getArray()); + + $pagination = $data['pagination']; + $options = $data['options']; + + $totalProcessedSoFar = $pagination->pagesCurrent * $pagination->limit; + $totalProcessedSoFar = $pagination->total > $totalProcessedSoFar ? $totalProcessedSoFar : $pagination->total; + + $this->processed = $totalProcessedSoFar; + $this->total = $pagination->total; + + if ($pagination->pagesCurrent < $pagination->pagesTotal) + { + $new_url = \JURI::getInstance(); + + $new_url->setVar('offset', $options['offset'] + $options['limit']); + $new_url->setVar('processed', $this->processed); + $new_url->setVar('total', $this->total); + + header('Refresh:0; url=' . $new_url->toString()); + } else + { + // Export completed + $optionsQuery = http_build_query(array_filter([ + 'total' => $this->total, + 'filename' => $options['filename'], + 'export_type' => $options['export_type'], + 'tmpl' => $this->tmpl + ])); + + $app->redirect($this->baseURL . '&layout=completed&' . $optionsQuery); + } + + } catch (\Throwable $th) + { + Export::error($th->getMessage()); + } + + break; + + case 'error': + $this->error = $input->get('error', '', 'RAW'); + break; + + default: + $form = new JForm('export'); + $form->loadFile(JPATH_COMPONENT_ADMINISTRATOR . '/models/forms/export_submissions.xml'); + $form->bind($app->input->getArray()); + + $this->form = $form; + + break; + } + + if ($this->tmpl == 'component') + { + JFactory::getDocument()->addStyleDeclaration(' + body { + background:none !important; + } + '); + } else + { + $this->addToolBar(); + } + + // Check for errors. + if (!is_null($this->get('Errors')) && count($errors = $this->get('Errors'))) + { + $app->enqueueMessage(implode("\n", $errors), 'error'); + return false; + } + + // Display the template + parent::display($tpl); + } + + /** + * Add Toolbar to layout + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_CONVERTFORMS') . ": " . JText::_('COM_CONVERTFORMS_LEADS_EXPORT')); + } +} diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/form/tmpl/edit.php b/deployed/convertforms/administrator/components/com_convertforms/views/form/tmpl/edit.php new file mode 100644 index 00000000..da04cb71 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/form/tmpl/edit.php @@ -0,0 +1,247 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\HTML\HTMLHelper; +use NRFramework\HTML; + +HTMLHelper::_('behavior.formvalidator'); +HTMLHelper::_('behavior.keepalive'); + +JHtml::script('com_convertforms/admin.js', ['relative' => true, 'version' => 'auto']); +JHtml::stylesheet('com_convertforms/editor.css', ['relative' => true, 'version' => 'auto']); + +if (defined('nrJ4')) +{ + JFactory::getDocument()->addScript(JURI::root(true) . '/media/vendor/tinymce/tinymce.js'); + HTML::fixFieldTooltips(); + +} else +{ + JFactory::getDocument()->addScript(JURI::root(true) . '/media/editors/tinymce/tinymce.min.js'); + JHtml::script('com_convertforms/cookie.js', ['relative' => true, 'version' => 'auto']); +} + +$fonts = new NRFonts(); +JFactory::getDocument()->addScriptDeclaration('var ConvertFormsGoogleFonts = '. json_encode($fonts->getFontGroup('google'))); + +$tabState = JFactory::getApplication()->input->cookie->get("ConvertFormsState" . $this->item->id, 'fields'); +$tabStateParts = explode("-", $tabState); +$tabActive = $tabStateParts[0]; + +// Smart Tags Box +echo NRFramework\HTML::smartTagsBox(); + + +NRFramework\HTML::renderProOnlyModal(); + + +if (!$this->isnew) { + // Render Embed popup + echo \JHtml::_('bootstrap.renderModal', 'embedForm', [ + 'title' => 'Embed Form', + 'footer' => '', + ], ' +

You are almost done! To embed this form on your site, please paste the following shortcode inside an article or a module.

+ +

or you can follow the instructions from this page.

+ '); +} + + +function tabSetStart($active) +{ + echo defined('nrJ4') ? HTMLHelper::_('uitab.startTabSet', 'sections', ['active' => $active, 'orientation' => 'vertical']) : JHtml::_('bootstrap.startTabSet', 'sections', ['active' => $active]);; +} + +function tabSetEnd() +{ + echo defined('nrJ4') ? HTMLHelper::_('uitab.endTabSet') : JHtml::_('bootstrap.endTabSet');; +} + +function tabStart($name, $title) +{ + echo defined('nrJ4') ? HTMLHelper::_('uitab.addTab', 'sections', $name, JText::_($title)) : JHtml::_('bootstrap.addTab', 'sections', $name, JText::_($title)); +} + +function tabEnd() +{ + echo defined('nrJ4') ? HTMLHelper::_('uitab.endTab') : JHtml::_('bootstrap.endTab'); +} + +if (defined('nrJ4')) +{ + NRFramework\HTML::fixFieldTooltips(); +} + +?> + +
+ + triggerEvent('onConvertFormsEditorView'); + ?> + +
+ +
+
+ +
+
+ + get('sitename') ?> +
+
+ + +
+ +
+ + " id="formname" value="name ?>"/> +
+
+ +
+
+
+
+
+
+ tabs as $key => $tab) + { + $tabName = $key; + $tabLabel = JText::_($tab["label"]); + + tabStart($tabName, ''); + + $panelActive = $tabActive == $key ? $tabState : ""; + + echo JHtml::_('bootstrap.startAccordion', $tabName, array('active' => $panelActive)); + echo "

" . $tabLabel . "

"; + + $single = count($tab["fields"]) == 1 ? true : false; + + foreach ($tab["fields"] as $key => $field) + { + if ($single) + { + echo '
' . $this->form->renderFieldset($field["name"]) . '
'; + continue; + } + + echo JHtml::_('bootstrap.addSlide', $tabName, JText::_($field["label"]), $tabName.'-' . $field["name"], $field["name"]); + + $fieldset = $this->form->renderFieldset($field["name"]); + JFactory::getApplication()->triggerEvent('onConvertFormsBackendFormPrepareFieldset', [$field["name"], &$fieldset]); + echo $fieldset; + + echo JHtml::_('bootstrap.endSlide'); + } + + echo JHtml::_('bootstrap.endAccordion'); + + tabEnd(); + } + + tabSetEnd(); + ?> + + +
+
+
+
+
+
+
    +
  • + + +
  • +
+
+
+ +
+
+
+
+
+
+
+ + +
\ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/form/tmpl/field.php b/deployed/convertforms/administrator/components/com_convertforms/views/form/tmpl/field.php new file mode 100644 index 00000000..e867a9bd --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/form/tmpl/field.php @@ -0,0 +1,17 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +?> + +field; ?> diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/form/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/form/view.html.php new file mode 100644 index 00000000..92c8a65f --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/form/view.html.php @@ -0,0 +1,57 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Item View + */ +class ConvertFormsViewForm extends JViewLegacy +{ + /** + * display method of Item view + * @return void + */ + public function display($tpl = null) + { + // Access check. + ConvertForms\Helper::authorise('convertforms.forms.manage', true); + + // Check for errors. + if (!is_null($this->get('Errors')) && count($errors = $this->get('Errors'))) + { + JFactory::getApplication()->enqueueMessage(implode("\n", $errors), 'error'); + return false; + } + + // Assign the Data + $this->form = $this->get('Form'); + $this->item = $this->get('Item'); + $this->isnew = (!isset($_REQUEST["id"])) ? true : false; + $this->tabs = $this->get('Tabs'); + $this->name = $this->item->name ?: JText::_('COM_CONVERTFORMS_UNTITLED_BOX'); + + \JPluginHelper::importPlugin('convertformstools'); + \JFactory::getApplication()->triggerEvent('onConvertFormsBackendEditorDisplay'); + + $title = JText::_('COM_CONVERTFORMS') . ' - ' . ($this->isnew ? JText::_("COM_CONVERTFORMS_UNTITLED_BOX") : $this->name); + + JFactory::getDocument()->setTitle($title); + JToolbarHelper::title($title); + + // Display the template + parent::display($tpl); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/form/view.raw.php b/deployed/convertforms/administrator/components/com_convertforms/views/form/view.raw.php new file mode 100644 index 00000000..c4f60e2d --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/form/view.raw.php @@ -0,0 +1,76 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.application.component.view'); + +/** + * Item View + */ +class ConvertFormsViewForm extends JViewLegacy +{ + /** + * display method of Item view + * @return void + */ + public function display($tpl = null) + { + $app = JFactory::getApplication(); + + // Check for errors. + if (count($errors = $this->get('Errors'))) + { + $app->enqueueMessage(implode('\n', $errors), 'error'); + return false; + } + + $layout = $app->input->get('layout', 'default'); + + if ($layout == 'preview') + { + //$data = json_decode($app->input->get('jform', null, 'RAW')); + + $input = json_decode(file_get_contents('php://input')); + $data = json_decode($input); + + $xx = new JRegistry(); + + foreach ($data as $value) + { + $key = str_replace(['jform[', ']', '['], ['', '', '.'], $value->name); + $xx->set($key, $value->value); + } + + $xx = $xx->toArray(); + + $this->data = $this->getModel('Form')->validate('jform', $xx); + $this->data['params'] = json_decode($this->data['params'], true); + $this->data['fields'] = $this->data['params']['fields']; + + unset($this->data['params']['fields']); + + $this->form = ConvertForms\Helper::renderForm($this->data); + } + + if ($layout == 'field') + { + $formControl = urldecode($app->input->get('formcontrol', null, 'RAW')); + $loadData = $app->input->get('field', array(), 'ARRAY'); + + $this->field = ConvertForms\FieldsHelper::getFieldClass($loadData['type'])->getOptionsForm($formControl, $loadData); + } + + // Display the template + parent::display($tpl); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/forms/tmpl/default.php b/deployed/convertforms/administrator/components/com_convertforms/views/forms/tmpl/default.php new file mode 100644 index 00000000..9f477b20 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/forms/tmpl/default.php @@ -0,0 +1,229 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\Button\PublishedButton; + +JHtml::_('bootstrap.popover'); + +$listOrder = $this->escape($this->state->get('list.ordering')); +$listDirn = $this->escape($this->state->get('list.direction')); + +if (!defined('nrJ4')) +{ + JFactory::getDocument()->addScriptDeclaration(' + jQuery(function($) { + Joomla.submitbutton = function(task) { + if (task == "form.add") { + jQuery("#cfSelectTemplate").modal("show"); + } else { + Joomla.submitform(task, document.getElementById("adminForm")); + } + } + }); + '); +} + +$user = JFactory::getUser(); + +?> + +
+ + +
+ sidebar; ?> +
+ +
+ $this)); + ?> + + + + + + + + + + + + + + items)) { ?> + items as $i => $item): ?> + id); + $canChange = $user->authorise('core.edit.state', 'com_convertforms.form.' . $item->id); + $leadsURL = JURI::base() . 'index.php?option=com_convertforms&view=conversions&filter.period&filter.form_id='. $item->id; + ?> + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
id); ?> + + 'forms.', + 'disabled' => !$canChange, + 'id' => 'state-' . $item->id + ]; + + echo (new PublishedButton)->render((int) $item->state, $i, $options); + ?> + +
+ state, $i, 'forms.', $canChange); ?> + + state === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'forms'); + JHtml::_('actionsdropdown.' . 'duplicate', 'cb' . $i, 'forms'); + + echo JHtml::_('actionsdropdown.render', $this->escape($item->name)); + } + ?> +
+ +
+ escape($item->name); ?> + + + campaign)) + { + echo ConvertForms\Helper::getCampaign($item->campaign)->name; + } + ?> + + + + "> + + + + + + id ?>
+
+ + - + +
+
+ + pagination->getListFooter(); ?> + +
+ + + +
+
+
+ + + + \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/forms/tmpl/import.php b/deployed/convertforms/administrator/components/com_convertforms/views/forms/tmpl/import.php new file mode 100644 index 00000000..79cffc15 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/forms/tmpl/import.php @@ -0,0 +1,67 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +defined('_JEXEC') or die; + +?> +
+
+ +
+ +
+ +
+
+
+ + +
+
+ + + + + + +
+
+
+
+ +
+
+ + + +
+ + diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/forms/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/forms/view.html.php new file mode 100644 index 00000000..abc7ff38 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/forms/view.html.php @@ -0,0 +1,194 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +defined('_JEXEC') or die('Restricted access'); + +use Joomla\CMS\Toolbar\Toolbar; +use Joomla\CMS\Toolbar\ToolbarHelper; + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Forms View Class + */ +class ConvertFormsViewForms extends JViewLegacy +{ + /** + * Items view display method + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return mixed A string if successful, otherwise a JError object. + */ + public function display($tpl = null) + { + // Access check. + ConvertForms\Helper::authorise('convertforms.forms.manage', true); + + $this->items = $this->get('Items'); + $this->state = $this->get('State'); + $this->pagination = $this->get('Pagination'); + $this->filterForm = $this->get('FilterForm'); + $this->activeFilters = $this->get('ActiveFilters'); + $this->config = JComponentHelper::getParams('com_convertforms'); + + ConvertForms\Helper::addSubmenu('forms'); + $this->sidebar = JHtmlSidebar::render(); + $this->moduleID = NRFramework\Extension::getID('mod_convertforms', 'module'); + + // Check for errors. + if (!is_null($this->get('Errors')) && count($errors = $this->get('Errors'))) + { + JFactory::getApplication()->enqueueMessage(implode("\n", $errors), 'error'); + return false; + } + + // Set the toolbar + $this->addToolBar(); + + ConvertForms\Helper::renderSelectTemplateModal(); + + // Display the template + parent::display($tpl); + } + + /** + * Add Toolbar to layout + */ + protected function addToolBar() + { + $canDo = ConvertForms\Helper::getActions(); + $state = $this->get('State'); + $viewLayout = JFactory::getApplication()->input->get('layout', 'default'); + + // Joomla J4 + if (defined('nrJ4')) + { + $toolbar = Toolbar::getInstance('toolbar'); + + if ($viewLayout == 'import') + { + $title = JText::_('COM_CONVERTFORMS') . ': ' . JText::_('NR_IMPORT_ITEMS'); + + JFactory::getDocument()->setTitle($title); + JToolbarHelper::title($title); + JToolbarHelper::back(); + } + else + { + ToolbarHelper::title(JText::_('COM_CONVERTFORMS') . ": " . JText::_('COM_CONVERTFORMS_FORMS')); + + if ($canDo->get('core.create')) + { + $newGroup = $toolbar->dropdownButton('new-group'); + $newGroup->configure( + function (Toolbar $childBar) + { + $childBar->popupButton('new')->text('New')->selector('cfSelectTemplate')->icon('icon-new')->buttonClass('btn btn-success'); + $childBar->addNew('form.add')->text('COM_CONVERTFORMS_TEMPLATES_BLANK'); + $childBar->standardButton('import')->text('NR_IMPORT')->task('forms.import')->icon('icon-upload'); + } + ); + } + + $dropdown = $toolbar->dropdownButton('status-group') + ->text('JTOOLBAR_CHANGE_STATUS') + ->toggleSplit(false) + ->icon('fas fa-ellipsis-h') + ->buttonClass('btn btn-action') + ->listCheck(true); + + $childBar = $dropdown->getChildToolbar(); + + if ($canDo->get('core.edit.state')) + { + $childBar->publish('forms.publish')->listCheck(true); + $childBar->unpublish('forms.unpublish')->listCheck(true); + $childBar->standardButton('copy')->text('JTOOLBAR_DUPLICATE')->task('forms.duplicate')->listCheck(true); + $childBar->standardButton('export')->text('NR_EXPORT')->task('forms.export')->icon('icon-download')->listCheck(true); + $childBar->trash('forms.trash')->listCheck(true); + } + + if ($this->state->get('filter.state') == -2) + { + $toolbar->delete('forms.delete') + ->text('JTOOLBAR_EMPTY_TRASH') + ->message('JGLOBAL_CONFIRM_DELETE') + ->listCheck(true); + } + + if ($canDo->get('core.admin')) + { + $toolbar->preferences('com_convertforms'); + } + + $toolbar->help('JHELP', false, "http://www.tassos.gr/joomla-extensions/responsive-scroll-triggered-box-for-joomla/docs"); + } + + return; + } + + if ($viewLayout == 'import') + { + JFactory::getDocument()->setTitle(JText::_('COM_CONVERTFORMS') . ': ' . JText::_('NR_IMPORT_ITEMS')); + JToolbarHelper::title(JText::_('COM_CONVERTFORMS') . ': ' . JText::_('NR_IMPORT_ITEMS')); + JToolbarHelper::back(); + } + else + { + JToolBarHelper::title(JText::_('COM_CONVERTFORMS') . ": " . JText::_('COM_CONVERTFORMS_FORMS')); + + if ($canDo->get('core.create')) + { + JToolbarHelper::addNew('form.add'); + } + + if ($canDo->get('core.edit')) + { + JToolbarHelper::editList('form.edit'); + } + + if ($canDo->get('core.create')) + { + JToolbarHelper::custom('forms.duplicate', 'copy', 'copy', 'JTOOLBAR_DUPLICATE', true); + } + + if ($canDo->get('core.edit.state') && $state->get('filter.state') != 2) + { + JToolbarHelper::publish('forms.publish', 'JTOOLBAR_PUBLISH', true); + JToolbarHelper::unpublish('forms.unpublish', 'JTOOLBAR_UNPUBLISH', true); + } + + if ($canDo->get('core.delete') && $state->get('filter.state') == -2) + { + JToolbarHelper::deleteList('', 'forms.delete', 'JTOOLBAR_EMPTY_TRASH'); + } + else if ($canDo->get('core.edit.state')) + { + JToolbarHelper::trash('forms.trash'); + } + + if ($canDo->get('core.create')) + { + JToolbarHelper::custom('forms.export', 'box-add', 'box-add', 'NR_EXPORT'); + JToolbarHelper::custom('forms.import', 'box-remove', 'box-remove', 'NR_IMPORT', false); + } + + if ($canDo->get('core.admin')) + { + JToolbarHelper::preferences('com_convertforms'); + } + } + + JToolbarHelper::help("Help", false, "http://www.tassos.gr/joomla-extensions/convert-forms/docs"); + } +} \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/templates/tmpl/default.php b/deployed/convertforms/administrator/components/com_convertforms/views/templates/tmpl/default.php new file mode 100644 index 00000000..4e5a9152 --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/templates/tmpl/default.php @@ -0,0 +1,52 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); +JHtml::_('bootstrap.popover'); + +?> + +
+
+ templates as $key => $templateGroup) { ?> + + +
+
+ + \ No newline at end of file diff --git a/deployed/convertforms/administrator/components/com_convertforms/views/templates/view.html.php b/deployed/convertforms/administrator/components/com_convertforms/views/templates/view.html.php new file mode 100644 index 00000000..42a9d49e --- /dev/null +++ b/deployed/convertforms/administrator/components/com_convertforms/views/templates/view.html.php @@ -0,0 +1,111 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +defined('_JEXEC') or die('Restricted access'); + +// import Joomla view library +jimport('joomla.application.component.view'); + +/** + * Templates View + */ +class ConvertFormsViewTemplates extends JViewLegacy +{ + /** + * Items view display method + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return mixed A string if successful, otherwise a JError object. + */ + function display($tpl = null) + { + $this->config = JComponentHelper::getParams('com_convertforms'); + $this->templates = $this->getTemplates(); + + // Check for errors. + if (!is_null($this->get('Errors')) && count($errors = $this->get('Errors'))) + { + JFactory::getApplication()->enqueueMessage(implode("\n", $errors), 'error'); + return false; + } + + // Set the toolbar + $this->addToolBar(); + + // Display the template + parent::display($tpl); + } + + /** + * Get list of all available templates + * + * @return array + */ + function getTemplates() + { + $templatesPath = JPATH_ROOT . "/media/com_convertforms/templates/"; + $xmlFile = $templatesPath . "templates.xml"; + + if (!JFile::exists($xmlFile)) + { + return; + } + + if (!$templateGroups = simplexml_load_file($xmlFile)) + { + return; + } + + $templates = array(); + + foreach ($templateGroups as $templateGroup) + { + $templateGroupName = (string) $templateGroup["name"]; + + foreach ($templateGroup as $template) + { + $templateName = (string) $template["name"]; + + // Check if template thumb file exists + if (!JFile::exists($templatesPath . $templateName . ".jpg")) + { + continue; + } + + $templateInfo = array( + "name" => $templateName, + "label" => (string) $template["label"], + "thumb" => JURI::root() . 'media/com_convertforms/templates/' . $templateName . '.jpg', + "link" => JURI::base() . "index.php?option=com_convertforms&view=form&layout=edit&template=" . $templateName + ); + + // Check if template thumb file exists + if (!JFile::exists($templatesPath . $templateName . ".cnvf")) + { + unset($templateInfo["link"]); + } + + $templates[$templateGroupName][] = $templateInfo; + } + } + + return $templates; + } + + /** + * Add Toolbar to layout + */ + protected function addToolBar() + { + JToolBarHelper::title(JText::_('COM_CONVERTFORMS') . ": " . JText::_('COM_CONVERTFORMS_TEMPLATES')); + } +} \ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/controller.php b/deployed/convertforms/components/com_convertforms/controller.php new file mode 100644 index 00000000..fc5ca1d9 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/controller.php @@ -0,0 +1,53 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class ConvertFormsController extends JControllerLegacy +{ + /** + * Method to display a view. + * + * @param boolean $cachable If true, the view output will be cached. + * @param boolean $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. + */ + public function display($cachable = false, $urlparams = false) + { + $viewName = $this->input->getCmd('view'); + + // Access front-end submissions only through a predefined Convert Forms Menu Item. + if (in_array($viewName, ['submissions', 'submission'])) + { + $app = JFactory::getApplication(); + $menu = $app->getMenu()->getActive(); + + if (!$menu || !$menu->id || $menu->component != 'com_convertforms') + { + $app->enqueueMessage(JText::_('COM_CONVERTFORMS_NOT_AUTHORIZED'), 'error'); + return; + } + + $model = $this->getModel($viewName); + if (!$model->authorize()) + { + $app->enqueueMessage(JText::_('COM_CONVERTFORMS_NOT_AUTHORIZED'), 'error'); + return; + } + } + + parent::display($cachable, $urlparams); + + return $this; + } +} \ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/controllers/cron.php b/deployed/convertforms/components/com_convertforms/controllers/cron.php new file mode 100644 index 00000000..d12b58d4 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/controllers/cron.php @@ -0,0 +1,121 @@ + 'convertforms_cron.php'], \JLog::ALL, ['convertforms.cron']); + + $this->app = \JFactory::getApplication(); + $this->secret = Helper::getComponentParams()->get('api_key'); + + parent::__construct(); + } + + /** + * Start the cron task + * + * @return void + */ + public function cron() + { + $this->log('Starting CRON job', \JLog::DEBUG); + + // Makes sure SiteGround's SuperCache doesn't cache the CRON view + $this->app->setHeader('X-Cache-Control', 'False', true); + + if (empty($this->secret)) + { + $this->log('No secret key configured', \JLog::ERROR); + header('HTTP/1.1 503 Service unavailable due to configuration'); + jexit(); + } + + // Authenticate request + if ($this->app->input->get('secret', null, 'raw') != $this->secret) + { + $this->log('Wrong secret key provided in URL', \JLog::ERROR); + header('HTTP/1.1 403 Forbidden'); + jexit(); + } + + // Validate command to run + $command = $this->app->input->get('command', null, 'raw'); + $command = trim(strtolower($command)); + $commandEscaped = \JFilterInput::getInstance()->clean($command, 'cmd'); + + if (empty($command)) + { + $this->log('No command provided in URL', \JLog::ERROR); + header('HTTP/1.1 501 Not implemented'); + jexit(); + } + + // Register a new task-specific Convert Forms CRON logger + \JLog::addLogger(['text_file' => "convertforms_cron_$commandEscaped.php"], \JLog::ALL, ['convertforms.cron.' . $command]); + $this->log("Starting execution of command $commandEscaped", \JLog::DEBUG); + + // Import plugins and trigger the cron task event + \JPluginHelper::importPlugin('system'); + \JPluginHelper::importPlugin('convertforms'); + \JPluginHelper::importPlugin('convertformstools'); + $this->app->triggerEvent('onConvertFormsCronTask', [$command, ['time_limit' => 10]]); + + $this->log("Finished running command $commandEscaped", \JLog::DEBUG); + + echo $commandEscaped . ' OK'; + jexit(); + } + + /** + * Log message to the default log file + * + * @param string $msg + * @param object $type + * + * @return void + */ + private function log($msg, $type) + { + try { + \JLog::add($msg, $type, 'convertforms.cron'); + } catch (\Throwable $th) { + } + } +} diff --git a/deployed/convertforms/components/com_convertforms/controllers/field.php b/deployed/convertforms/components/com_convertforms/controllers/field.php new file mode 100644 index 00000000..eb589903 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/controllers/field.php @@ -0,0 +1,109 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Helper; + +/** + * Convert Forms form submit controller + * + * @since 2.7.5 + */ +class ConvertFormsControllerField extends JControllerForm +{ + /** + * Joomla Application Object + * + * @var object + */ + protected $app; + + /** + * The components parameters + * + * @var object + */ + protected $params; + + /** + * Class Constructor + * + * @param string $key User API Key + */ + public function __construct() + { + $this->app = JFactory::getApplication(); + $this->params = Helper::getComponentParams(); + + // Load component language file + NRFramework\Functions::loadLanguage('com_convertforms'); + + parent::__construct(); + } + + /** + * The main submit method + * + * @return void + */ + public function ajax() + { + // Prevent AJAX response pollution by disabling PHP reporting notices. + if (!$this->params->get('debug', false)) + { + error_reporting(E_ALL & ~E_NOTICE); + } + + $form_id = $this->app->input->get('form_id'); + $field_key = $this->app->input->get('field_key'); + $field_type = $this->app->input->get('field_type'); + + $this->checkCSRFTokenOrDie($field_key, $form_id); + + $field_class = ConvertForms\FieldsHelper::getFieldClass($field_type); + + if (!method_exists($field_class, 'onAjax')) + { + return; + } + + $response = $field_class->onAjax($form_id, $field_key); + + echo json_encode($response); + + // Stop execution + jexit(); + } + + /** + * Check for a CSRF Token only if the respective option is enabled. + * + * @return void + */ + private function checkCSRFTokenOrDie($task, $form_id) + { + if (!$this->params->get('csrf_check', false)) + { + return; + } + + if (JSession::checkToken('request')) + { + return; + } + + Helper::triggerError(JText::_('JINVALID_TOKEN'), $task, $form_id, $this->app->input->request->getArray()); + + jexit(JText::_('JINVALID_TOKEN')); + } +} \ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/controllers/submit.php b/deployed/convertforms/components/com_convertforms/controllers/submit.php new file mode 100644 index 00000000..04ceb5e0 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/controllers/submit.php @@ -0,0 +1,191 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use ConvertForms\Helper; +use ConvertForms\SmartTags; +use NRFramework\URLHelper; + +/** + * Convert Forms form submit controller + * + * @since 2.4.0 + */ +class ConvertFormsControllerSubmit extends JControllerForm +{ + /** + * Joomla Application Object + * + * @var object + */ + protected $app; + + /** + * The secret key configured in the configuration page + * + * @var string + */ + protected $params; + + /** + * Form data to be stored in the database + * + * @var array + */ + protected $form_data; + + /** + * Represents the form ID to store the data to. + * + * @var integer + */ + protected $form_id; + + /** + * Class Constructor + * + * @param string $key User API Key + */ + public function __construct() + { + $this->app = \JFactory::getApplication(); + $this->params = Helper::getComponentParams(); + + $input = $this->app->input; + $data = $input->getArray(); + + // Ensure nothing is stripped by Joomla filters by getting the raw object. + $data['cf'] = $input->post->get('cf', '', 'RAW'); + + $this->form_data = $data; + + // Detect form ID + $form_id = (isset($data['cf']) && isset($data['cf']['form_id'])) ? (int) $data['cf']['form_id'] : null; + $this->form_id = $form_id; + + // Load component language file + NRFramework\Functions::loadLanguage('com_convertforms'); + + parent::__construct(); + } + + /** + * The main submit method + * + * @return void + */ + public function submit() + { + // Prevent AJAX response pollution by disabling PHP reporting notices. + if (!$this->params->get('debug', false)) + { + error_reporting(E_ALL & ~E_NOTICE); + } + + // Check for a CSRF Token only if the respective option is enabled. + if ($this->params->get('csrf_check', false)) + { + $this->checkCSRFTokenOrDie(); + } + + $response = new stdClass(); + + // The purpose of this property is to help script parse JSON + $response->convertforms = 'submit'; + + try + { + $submission = $this->createSubmission(); + + $response->success = true; + $response->task = $submission->form->onsuccess; + + switch ($response->task) + { + case 'msg': + $response->value = URLHelper::relativePathsToAbsoluteURLs($submission->form->successmsg); + $response->hideform = $submission->form->hideform; + $response->resetform = $submission->form->resetform; + break; + case 'url': + $response->value = $submission->form->successurl; + $response->passdata = $submission->form->passdata; + break; + } + } + catch (Exception $e) + { + $this->triggerError($e->getMessage()); + $response->error = $e->getMessage(); + } + + echo json_encode($response); + + // Stop execution + jexit(); + } + + /** + * Store the submitted to database + * + * @return Object + */ + protected function createSubmission() + { + $componentPath = JPATH_ADMINISTRATOR . '/components/com_convertforms/'; + JModelLegacy::addIncludePath($componentPath . 'models'); + JTable::addIncludePath($componentPath . 'tables'); + + $model = JModelLegacy::getInstance('Conversion', 'ConvertFormsModel', ['ignore_request' => true]); + $submission = $model->createConversion($this->form_data); + + // Prepare with Smart Tags + if ($submission->form->onsuccess == 'msg') + { + $submission->form->successmsg = SmartTags::replace($submission->form->successmsg, $submission); + } + + if ($submission->form->onsuccess == 'url') + { + $submission->form->successurl = SmartTags::replace($submission->form->successurl, $submission); + } + + return $submission; + } + + /** + * Reject request if no valid CSRF token is found. + * + * @return void + */ + protected function checkCSRFTokenOrDie() + { + if (!JSession::checkToken('request')) + { + $this->triggerError(JText::_('JINVALID_TOKEN')); + jexit(JText::_('JINVALID_TOKEN')); + } + } + + /** + * Trigger a submission-based error + * + * @param string $message The error message + * + * @return void + */ + protected function triggerError($message) + { + Helper::triggerError($message, ucfirst($this->input->get('task')), $this->form_id, $this->form_data); + } +} diff --git a/deployed/convertforms/components/com_convertforms/convertforms.php b/deployed/convertforms/components/com_convertforms/convertforms.php new file mode 100644 index 00000000..f3349f11 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/convertforms.php @@ -0,0 +1,42 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +// Load Framework +if (!@include_once(JPATH_PLUGINS . '/system/nrframework/autoload.php')) +{ + throw new RuntimeException('Novarain Framework is not installed', 500); +} + +// Initialize Convert Forms Library +if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_convertforms/autoload.php')) +{ + throw new RuntimeException('Convert Forms component is not properly installed', 500); +} + +// Load component's language files +NRFramework\Functions::loadLanguage('com_convertforms'); + +// Set default controller +$input = JFactory::getApplication()->input; +$task = $input->get('task'); + +if (strpos($task, '.') === false) +{ + $input->set('task', $task . '.' . $task); +} + +// Load controller +$controller = JControllerLegacy::getInstance('ConvertForms'); +$controller->execute($input->get('task')); +$controller->redirect(); \ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/models/form.php b/deployed/convertforms/components/com_convertforms/models/form.php new file mode 100644 index 00000000..e208cc79 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/models/form.php @@ -0,0 +1,45 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class ConvertFormsModelForm extends JModelAdmin +{ + /** + * Get Submission Data + * + * @param object $pk The submission's primary key + * + * @return object + */ + public function getItem($pk = null) + { + $form_id = JFactory::getApplication()->getParams()->get('form_id'); + + $form = ConvertForms\Helper::renderFormById($form_id); + + return $form; + } + + /** + * 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 2.5 + */ + public function getForm($data = array(), $loadData = true) + { + + } +} diff --git a/deployed/convertforms/components/com_convertforms/models/submission.php b/deployed/convertforms/components/com_convertforms/models/submission.php new file mode 100644 index 00000000..e624d456 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/models/submission.php @@ -0,0 +1,155 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once JPATH_COMPONENT_ADMINISTRATOR . '/models/conversion.php'; + +class ConvertFormsModelSubmission extends ConvertFormsModelConversion +{ + /** + * Application Object + * + * @var object + */ + private $app; + + /** + * Active Menu Item + * + * @var object + */ + public $menu; + + /** + * Submissions filter options and params; + * + * @var object + */ + public $options; + + /** + * Class constructor + */ + public function __construct() + { + $this->app = JFactory::getApplication(); + $this->menu = $this->app->getMenu()->getActive(); + $this->options = isset($config['options']) ? new Registry($config['options']) : $this->menu->getParams(); + + parent::__construct(); + } + + /** + * Get Submission Data + * + * @param object $pk The submission's primary key + * + * @return object + */ + public function getItem($pk = null, $prepare = true) + { + $item = parent::getItem($pk, $prepare); + + if (!$item->id) + { + return; + } + + if (!isset($item->prepared_fields)) + { + return; + } + + $item->fields = $item->prepared_fields; + + $hide_empty_values = (bool) $this->options->get('hide_empty_values', false); + + foreach ($item->fields as $key => $field) + { + if ($hide_empty_values && (is_null($field->value_html) || $field->value_html == '')) + { + unset($item->fields[$key]); + } + } + + return $item; + } + + public function authorize() + { + // Verify we are browsing a submission that belongs the form selected in the menu item settings + if (!$this->submissionBelongsToSelectedForm()) + { + return; + } + + $filter_submitters = $this->options->get('filter_user', 'current'); + $view_own_only = $filter_submitters == 'current' ? true : (bool) $this->options->get('view_own_only', true); + + // User is allowed to see all submissions + if (!$view_own_only) + { + return true; + } + + // Deny access, if user is not logged-in + if (!$user_id = JFactory::getUser()->id) + { + return; + } + + $submission_user_id = (int) $this->getItem()->user_id; + + if ($filter_submitters == 'current' && $user_id != $submission_user_id) + { + return; + } + + if ($filter_submitters == 'users') + { + $filter_users = explode(',', $this->options->get('users')); + + if (!in_array($user_id, $filter_users)) + { + return; + } + } + + return true; + } + + /** + * Verify we are browsing a submission that belongs the form selected in the menu item settings + * + * @return mixed Null on failure, string on success + */ + private function submissionBelongsToSelectedForm() + { + $db = JFactory::getDbo(); + + $query = $db->getQuery(true) + ->select($db->quoteName('id')) + ->from($db->quoteName('#__convertforms_conversions')) + ->where($db->quoteName('id') . ' = '. (int) $this->app->input->get('id')) + ->where($db->quoteName('form_id') . ' = ' . (int) $this->options->get('form_id')); + + $db->setQuery($query); + + return $db->loadResult(); + } + + public function getMenu() + { + return $this->menu; + } +} diff --git a/deployed/convertforms/components/com_convertforms/models/submissions.php b/deployed/convertforms/components/com_convertforms/models/submissions.php new file mode 100644 index 00000000..1190772b --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/models/submissions.php @@ -0,0 +1,144 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +require_once JPATH_ADMINISTRATOR . '/components/com_convertforms/models/conversions.php'; + +class ConvertFormsModelSubmissions extends ConvertFormsModelConversions +{ + /** + * Application Object + * + * @var object + */ + private $app; + + /** + * Submissions filter options and params; + * + * @var object + */ + public $options; + + /** + * Class constructor + */ + public function __construct($config = array()) + { + $this->app = JFactory::getApplication(); + $this->options = isset($config['options']) ? new Registry($config['options']) : $this->app->getMenu()->getActive()->getParams(); + + parent::__construct($config); + } + + /** + * Method to auto-populate the model state. + * + * This method should only be called once per instantiation and is designed + * to be called on the first call to the getState() method unless the model + * configuration flag to ignore the request is set. + * + * 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 3.0.1 + */ + protected function populateState($ordering = 'ordering', $direction = 'ASC') + { + $options = $this->options; + + $this->setState('filter.form_id', $options->get('form_id', 0)); + + // Set page limit / limit start + $this->setState('list.limit', $options->get('list_limit', 20)); + + $limitstart = $this->app->input->get('limitstart', 0, 'uint'); + $this->setState('list.start', $limitstart); + + // Filter State + $filter_confirmed_only = $options->get('confirmed_only', false); + $this->setState('filter.state', $filter_confirmed_only ? '1' : '0,1'); + + // Set ordering + $ordering = $options->get('ordering', 'recent'); + + switch ($ordering) + { + case 'oldest': + $this->setState('list.ordering', 'created'); + $this->setState('list.direction', 'asc'); + break; + + case 'random': + $this->setState('list.ordering', 'rand()'); + break; + + default: // recent + $this->setState('list.ordering', 'created'); + $this->setState('list.direction', 'desc'); + break; + } + + // Filter Users + $filter_user = $options->get('filter_user', ''); + + switch ($filter_user) + { + case 'specific': + $user = $options->get('user_ids', -1); + break; + case 'current': + $user = \JFactory::getUser()->id ?: -1; + break; + default: + $user = null; + } + + if ($user) + { + $this->setState('filter.user_id', $user); + } + } + + /** + * [getItems description] + * + * @return object + */ + public function getItems() + { + if (!$items = parent::getItems()) + { + return $items; + } + + foreach ($items as &$item) + { + // View submission link + $item->link = ConvertForms\Submission::route($item->id); + } + + return $items; + } + + public function authorize() + { + return true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/views/form/tmpl/default.php b/deployed/convertforms/components/com_convertforms/views/form/tmpl/default.php new file mode 100644 index 00000000..2a5f0de1 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/form/tmpl/default.php @@ -0,0 +1,22 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +?> + +params->get('show_page_heading')) { ?> +

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

+ + +item; ?> \ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/views/form/tmpl/default.xml b/deployed/convertforms/components/com_convertforms/views/form/tmpl/default.xml new file mode 100644 index 00000000..837d8fb1 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/form/tmpl/default.xml @@ -0,0 +1,18 @@ + + + + + + + + + +
+ +
+
+
diff --git a/deployed/convertforms/components/com_convertforms/views/form/view.html.php b/deployed/convertforms/components/com_convertforms/views/form/view.html.php new file mode 100644 index 00000000..d64b5bce --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/form/view.html.php @@ -0,0 +1,69 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +/** + * Content categories view. + * + * @since 1.5 + */ +class ConvertFormsViewForm extends JViewLegacy +{ + /** + * Display the Hello World view + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return void + */ + public function display($tpl = null) + { + $this->item = $this->get('Item'); + $this->params = JFactory::getApplication()->getParams(); + + $this->_prepareDocument(); + + parent::display($tpl); + } + + /** + * Prepares the document + * + * @return void + */ + protected function _prepareDocument() + { + $doc = \JFactory::getDocument(); + $app = \JFactory::getApplication(); + $activeMenuItem = $app->getMenu()->getActive(); + $params = $activeMenuItem->getParams(); + + if ($robots_value = $params->get('robots')) + { + $robots = $doc->getMetaData('robots'); + $robots = empty($robots) ? $robots_value : $robots . ', ' . $robots_value; + + $doc->setMetaData('robots', $robots); + } + + if ($params->get('menu-meta_keywords')) + { + $doc->setMetadata('keywords', $params->get('menu-meta_keywords')); + } + + if ($params->get('menu-meta_description')) + { + $doc->setDescription($params->get('menu-meta_description')); + } + } +} diff --git a/deployed/convertforms/components/com_convertforms/views/submission/tmpl/default.php b/deployed/convertforms/components/com_convertforms/views/submission/tmpl/default.php new file mode 100644 index 00000000..ab10d6c6 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submission/tmpl/default.php @@ -0,0 +1,102 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +if ($this->params->get('load_css', true)) +{ + JHtml::stylesheet('com_convertforms/submissions.css', ['relative' => true, 'version' => 'auto']); +} + +$print_view = JFactory::getApplication()->input->get('print') == 1; + +if ($print_view) +{ + JFactory::getDocument()->addScriptDeclaration(' + window.print(); + '); +} + +?> +
+

#submission->id ?>

+ + +

+ + Print + +

+ +

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + triggerEvent('onConvertFormsFrontSubmissionViewInfo', array($this->submission)); + ?> +
submission->id ?>
+ + submission->state == '1' ? 'COM_CONVERTFORMS_SUBMISSION_CONFIRMED' : 'COM_CONVERTFORMS_SUBMISSION_UNCONFIRMED')) ?> + + submission->params['sync_error'])) { + echo $this->submission->params['sync_error']; + } + ?> +
submission->created ?>
submission->modified ?>
submission->form->name ?>
Usersubmission->user_name) ? $this->submission->user_name : $this->submission->user_id ?>
+
+
+

+ submission->fields)) { ?> + + submission->fields as $field) { ?> + + + + + +
class->getLabel() ?>value_html ?>
+ +

+ +
+ + + + + + +
\ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/views/submission/view.html.php b/deployed/convertforms/components/com_convertforms/views/submission/view.html.php new file mode 100644 index 00000000..7361557f --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submission/view.html.php @@ -0,0 +1,91 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +/** + * Content categories view. + * + * @since 1.5 + */ +class ConvertFormsViewSubmission extends JViewLegacy +{ + /** + * Display the Hello World view + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return void + */ + public function display($tpl = null) + { + if (!$this->submission = $this->get('Item')) + { + JFactory::getApplication()->enqueueMessage(JText::_('COM_CONVERTFORMS_SUBMISSION_INVALID'), 'error'); + return; + } + + $this->_prepareDocument(); + + $this->params = JFactory::getApplication()->getParams(); + + // Layout checks + if ($this->params->get('layout_type', 'file') == 'custom') + { + $layout = $this->params->get('layout_details'); + + if (!empty($layout)) + { + echo ConvertForms\Submission::replaceSmartTags($this->submission, $layout); + return; + } + } + + $this->menu = $this->get('Menu'); + $this->submissions_link = JRoute::_('index.php?option=com_convertforms&view=submissions&Itemid=' . $this->menu->id); + + // Display the view + $this->setLayout($this->params->get('submissions_layout')); + parent::display($tpl); + } + + /** + * Prepares the document + * + * @return void + */ + protected function _prepareDocument() + { + $doc = \JFactory::getDocument(); + $app = \JFactory::getApplication(); + $activeMenuItem = $app->getMenu()->getActive(); + $params = $activeMenuItem->getParams(); + + if ($robots_value = $params->get('robots')) + { + $robots = $doc->getMetaData('robots'); + $robots = empty($robots) ? $robots_value : $robots . ', ' . $robots_value; + + $doc->setMetaData('robots', $robots); + } + + if ($params->get('menu-meta_keywords')) + { + $doc->setMetadata('keywords', $params->get('menu-meta_keywords')); + } + + if ($params->get('menu-meta_description')) + { + $doc->setDescription($params->get('menu-meta_description')); + } + } +} diff --git a/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default.php b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default.php new file mode 100644 index 00000000..617fa132 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default.php @@ -0,0 +1,25 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +if ($this->params->get('load_css', true)) +{ + JHtml::stylesheet('com_convertforms/submissions.css', ['relative' => true, 'version' => 'auto']); +} + +?> +
+ params->get('show_page_heading')) { ?> +

params->get('page_heading', $this->params->get('page_title')) ?>

+ + loadTemplate(count($this->submissions) ? 'list' : 'noresults'); ?> +
\ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default.xml b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default.xml new file mode 100644 index 00000000..95b1051a --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default.xml @@ -0,0 +1,123 @@ + + + + + + + + + + + +
+
+
+ + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+
+
diff --git a/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default_list.php b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default_list.php new file mode 100644 index 00000000..7b1dfd38 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default_list.php @@ -0,0 +1,54 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; +?> + + + + + + + + + + + submissions as $submission) { ?> + + + + + + + +
id ?>created ?> + state == '1' ? 'success' : 'danger'); + + if (!defined('nrJ4')) + { + $badge = 'badge-' . ($submission->state == '1' ? 'success' : 'important'); + } + ?> + + + state == '1' ? 'COM_CONVERTFORMS_SUBMISSION_CONFIRMED' : 'COM_CONVERTFORMS_SUBMISSION_UNCONFIRMED')) ?> + + View
+ +pagination && $pagination = $this->pagination->getPagesLinks()) { ?> + + diff --git a/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default_noresults.php b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default_noresults.php new file mode 100644 index 00000000..4122c4d2 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/default_noresults.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; +?> + +

\ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/smarttags.php b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/smarttags.php new file mode 100644 index 00000000..13a7c055 --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submissions/tmpl/smarttags.php @@ -0,0 +1,82 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die(); + +$groups = [ + 'Container Layout' => [ + '{total}' => 'The total number of submissions', + '{submissions}' => 'Contains the HTML of all submission rows.', + '{pagination.links}' => 'Display the Pages Links.', + '{pagination.results}' => 'Show the results currently being displayed. Eg: Results 1 - 5 of 7.', + '{pagination.counter}' => 'Show the current page and total pages. Eg: Page 1 of 2.' + ], + 'Row & Details Layout' => [ + '{submission.id}' => 'The ID of the submission.', + '{submission.created}' => 'The date when the submission created.', + '{submission.modified}' => 'The date when the submission modified.', + '{submission.form_id}' => 'The ID of the form assosiated with the submission.', + '{submission.visitor_id}' => 'The unique ID of the user who submitted the form.', + '{submission.user_id}' => 'The Joomla User ID of the user who submitted the form.', + '{submission.status}' => 'The status of the submission.', + '{link}' => 'The link that points to the submission details layout.', + '{field.FIELD_KEY}' => 'Use this syntax to display a field value as plain text. Eg: {field.name} or {field.myfield}', + '{field.FIELD_KEY.html}' => 'Use this syntax to display a field value as HTML (If applicable). Eg: {field.uploadfield.html}', + ] +]; + +// Global Tags +$st = new NRFramework\SmartTags; +$global_tags = $st->get(); + +foreach ($global_tags as $tag => $tag_value) +{ + if (strpos($tag, 'querystring') !== false) + { + continue; + } + + $groups['Global'][$tag] = JText::_('NR_TAG_' . strtoupper(str_replace(array("{", "}", "."), "", $tag))); +} + +$groups['Global']['{querystring.PARAM}'] = 'Use this syntax to pull the value of a query string parameter. Eg: {querystring.id} or {querystring.name}'; + +JFactory::getDocument()->addStyleDeclaration(' + .CodeMirror { + min-height: auto; + height: 300px; + max-width: 800px; + width:100%; + } + .controls > p.label { + display:none; + } +'); + +?> + +
+

Smart Tags

+ + $tags) { ?> + + + + $value) { ?> + + + + + + +
+
\ No newline at end of file diff --git a/deployed/convertforms/components/com_convertforms/views/submissions/view.html.php b/deployed/convertforms/components/com_convertforms/views/submissions/view.html.php new file mode 100644 index 00000000..6874975a --- /dev/null +++ b/deployed/convertforms/components/com_convertforms/views/submissions/view.html.php @@ -0,0 +1,102 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +/** + * Content categories view. + * + * @since 1.5 + */ +class ConvertFormsViewSubmissions extends JViewLegacy +{ + /** + * Display the Hello World view + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return void + */ + public function display($tpl = null) + { + $this->params = JFactory::getApplication()->getParams(); + $this->submissions = $this->get('Items'); + $this->pagination = $this->params->get('show_pagination', true) ? $this->get('Pagination') : null; + + $this->_prepareDocument(); + + // Layout checks + if ($this->params->get('layout_type', 'file') == 'custom') + { + $layout_container = $this->params->get('layout_container'); + $layout_row = $this->params->get('layout_row'); + $html = ''; + + if (!empty($layout_container) && !empty($layout_row)) + { + foreach ($this->submissions as $submission) + { + $output = ConvertForms\Submission::replaceSmartTags($submission, $layout_row); + $output = str_replace('{link}', $submission->link, $output); + $html .= $output; + } + + $st = new \NRFramework\SmartTags(); + $st->add([ + 'submissions' => $html, + 'total' => $this->get('Total'), + 'pagination.links' => ($this->pagination) ? $this->pagination->getPagesLinks() : '', + 'pagination.counter' => ($this->pagination) ? $this->pagination->getPagesCounter() : '', + 'pagination.results' => ($this->pagination) ? $this->pagination->getResultsCounter() : '' + ]); + + echo $st->replace($layout_container); + return; + } + } + + // Display the view + $this->setLayout($this->params->get('submissions_layout')); + parent::display($tpl); + } + + /** + * Prepares the document + * + * @return void + */ + protected function _prepareDocument() + { + $doc = \JFactory::getDocument(); + $app = \JFactory::getApplication(); + $activeMenuItem = $app->getMenu()->getActive(); + $params = $activeMenuItem->getParams(); + + if ($robots_value = $params->get('robots')) + { + $robots = $doc->getMetaData('robots'); + $robots = empty($robots) ? $robots_value : $robots . ', ' . $robots_value; + + $doc->setMetaData('robots', $robots); + } + + if ($params->get('menu-meta_keywords')) + { + $doc->setMetadata('keywords', $params->get('menu-meta_keywords')); + } + + if ($params->get('menu-meta_description')) + { + $doc->setDescription($params->get('menu-meta_description')); + } + } +} diff --git a/deployed/convertforms/media/com_convertforms/css/choices.css b/deployed/convertforms/media/com_convertforms/css/choices.css new file mode 100644 index 00000000..16efd2f9 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/choices.css @@ -0,0 +1,3 @@ +.nr_choices{margin:5px -5px 0 -5px}.nr_choices .nr-choice-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:8px}.nr_choices .nr-choice-item>*{margin:0 4px;line-height:1}.nr_choices .nr-choice-default{position:relative;top:-1px}.nr_choices .nr-choice-control{white-space:nowrap}.nr_choices .nr-choice-input{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.nr_choices .nr-choice-input input[type="text"]{padding:5px 8px;height:30px;width:100%}.nr_choices [class^="cf-icon-"]:before{font-size:1.4em;margin:0 1px;width:auto}.nr_choices .nr-choice-input>input:not(:last-child){margin-bottom:2px !important}.nr_choices .nr-choice-sort{cursor:move}.nr-choice-settings{margin-top:15px}.nr-choice-settings,.nr-choice-settings span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;white-space:nowrap}.nr-choice-settings label{margin:0 15px 0 5px} + + diff --git a/deployed/convertforms/media/com_convertforms/css/convertforms.css b/deployed/convertforms/media/com_convertforms/css/convertforms.css new file mode 100644 index 00000000..550656a1 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/convertforms.css @@ -0,0 +1,3 @@ +.convertforms{margin:0;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.convertforms *,.convertforms *:before,.convertforms *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.convertforms .cf-content-heading *{font-family:inherit}.convertforms button,.convertforms form,.convertforms label,.convertforms .cf-input{height:auto;margin:0;max-width:100%;width:100%;line-height:normal;border-radius:0;border:none;outline:0;text-transform:none;font-family:inherit;-webkit-box-shadow:none;box-shadow:none}.convertforms button:focus,.convertforms form:focus,.convertforms label:focus,.convertforms .cf-input:focus{outline:0}.convertforms .cf-label{display:inline-block;width:auto}.convertforms .cf-input[type="checkbox"]{-webkit-appearance:checkbox;-moz-appearance:checkbox;appearance:checkbox}.convertforms .cf-input[type="checkbox"],.convertforms .cf-input[type="radio"]{width:auto}.convertforms textarea.cf-input{overflow:auto}.convertforms .cf-select{position:relative}.convertforms .cf-select.cf-width-auto{display:inline-block}.convertforms .cf-select select{background:transparent;background-image:none !important;width:100%;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.convertforms .cf-select select::-ms-expand{display:none}.convertforms .cf-select select:-moz-focusring{color:transparent !important;text-shadow:0 0 0 #888 !important}.convertforms .cf-select:after{content:'';position:absolute;top:0;width:0;height:0;right:10px;bottom:0;margin:auto;border-style:solid;border-width:5px 5px 0 5px;border-color:#a0a0a0 transparent transparent transparent;pointer-events:none}.convertforms .cf-select:hover::after{border-top-color:#848484}@media all and (min-width: 0\0) and (-webkit-min-device-pixel-ratio: 0), all and (min-width: 0\0) and (min-resolution: 0.001dpcm){.convertforms .cf-select select{padding-right:0}.convertforms .cf-select:after,.convertforms .cf-select:before{display:none}}.convertforms .cf-input{border:solid 1px #ccc}.convertforms .cf-input:focus{-webkit-box-shadow:none !important;box-shadow:none !important}.convertforms .cf-input:not(.flatpickr-input)[readonly]{background-color:#f1f1f1 !important}.convertforms .cf-fields{margin:-9px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.convertforms .cf-control-group{padding:9px;max-width:100%;width:100%;min-width:120px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.convertforms .cf-control-group.cf-no-padding{padding:0}.convertforms .cf-control-input-desc{opacity:.8;margin-top:6px;font-size:14px}.convertforms .cf-checkbox-group,.convertforms .cf-radio-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:2px 0}.convertforms .cf-checkbox-group .cf-label,.convertforms .cf-radio-group .cf-label{margin:0;font-weight:300;padding-left:5px}.convertforms .cf-checkbox-group .cf-label p,.convertforms .cf-radio-group .cf-label p{margin:0;padding:0}.convertforms.cf-col2 .cf-control-group{width:50%}.convertforms.cf-hor .cf-input,.convertforms.cf-hor .cf-btn{height:40px !important;padding-top:0 !important;padding-bottom:0 !important}.convertforms .cf-label{font-weight:700;line-height:1.3;margin-bottom:6px;display:block}.convertforms .cf-label .cf-required-label{color:#ff0000;font-weight:400}@media (min-width: 640px){.convertforms.cf-labelpos-left .cf-control-group:not(.cf-hide){display:-webkit-box;display:-ms-flexbox;display:flex}.convertforms.cf-labelpos-left .cf-control-group:not(.cf-hide)>*{-webkit-box-flex:1;-ms-flex:1;flex:1}.convertforms.cf-labelpos-left .cf-control-group:not(.cf-hide) .cf-control-label{max-width:30%;padding-right:10px}.convertforms.cf-labelpos-left .cf-control-group:not(.cf-hide):not([data-type="submit"]) .cf-control-input{max-width:70%;margin-left:auto}}@media (min-width: 1024px){.convertforms.cf-form-left form,.convertforms.cf-form-right form{display:-webkit-box;display:-ms-flexbox;display:flex}.convertforms.cf-form-left .cf-form-wrap,.convertforms.cf-form-right .cf-form-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.convertforms.cf-form-left .cf-fields,.convertforms.cf-form-right .cf-fields{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.convertforms.cf-form-left .cf-form-wrap{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}}.convertforms .cf-field-hp{display:none !important;position:absolute !important;left:-9000px !important}.convertforms.cf-img-below .cf-content,.convertforms.cf-img-left .cf-content,.convertforms.cf-img-right .cf-content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.convertforms.cf-img-below .cf-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.convertforms.cf-img-below .cf-content>div{width:100%}.convertforms.cf-img-right .cf-content-img,.convertforms.cf-img-below .cf-content-img{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.convertforms .cf-content-img img{position:relative;max-width:100%;padding:9px;display:inline-block}.convertforms .cf-btn{position:relative;cursor:pointer}.convertforms .cf-btn,.convertforms .cf-btn:before,.convertforms .cf-btn:after{-webkit-transition:all 200ms ease;transition:all 200ms ease}.convertforms .cf-btn:active,.convertforms .cf-btn:focus,.convertforms .cf-btn:hover{background-image:none;border:none}.convertforms .cf-btn.cf-btn-shadow-1{-webkit-box-shadow:0 3px 1px 0 rgba(0,0,0,0.2);box-shadow:0 3px 1px 0 rgba(0,0,0,0.2)}.convertforms .cf-btn.cf-btn-style-flat:hover{opacity:.8}.convertforms .cf-btn.cf-btn-style-gradient{position:relative}.convertforms .cf-btn.cf-btn-style-gradient:after{content:" ";background:-webkit-gradient(linear, left bottom, left top, from(rgba(0,0,0,0.2)), to(rgba(0,0,0,0)));background:linear-gradient(to top, rgba(0,0,0,0.2) 0%, rgba(0,0,0,0) 100%);display:block;width:100%;height:100%;position:absolute;top:0;left:0}.convertforms .cf-btn.cf-btn-style-gradient:hover:after{opacity:0}.convertforms .cf-input-shadow-1{-webkit-box-shadow:1px 1px 2px 0 rgba(0,0,0,0.4) inset !important;box-shadow:1px 1px 2px 0 rgba(0,0,0,0.4) inset !important}.convertforms .cf-response{color:#fff;margin-bottom:18px;padding:10px 15px;width:100%;border-radius:5px;display:none;text-align:center}.convertforms.cf-success .cf-response{background-color:#358e3d;display:block}.convertforms.cf-success.cf-success-hideform .cf-response{margin-bottom:0}.convertforms.cf-success.cf-success-hideform .cf-fields,.convertforms.cf-success.cf-success-hideform .cf-footer{display:none}.convertforms.cf-success.cf-success-hidetext .cf-content-wrap{display:none}.convertforms.cf-error .cf-response{background-color:#CC3A3A;display:block}.convertforms .cf-spinner-container{visibility:hidden;position:absolute;top:0;left:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%;height:100%;font-size:10px}.convertforms.cf-working .cf-spinner-container{visibility:visible}.convertforms.cf-working .cf-btn-text{visibility:hidden}.convertforms .cf-spinner>span{width:10px;height:10px;background-color:currentColor;border-radius:100%;display:inline-block;-webkit-animation:cf-bouncedelay 1s infinite ease-in-out both;animation:cf-bouncedelay 1s infinite ease-in-out both;margin:0 3px}.convertforms .cf-spinner .bounce1{-webkit-animation-delay:-0.32s;animation-delay:-0.32s}.convertforms .cf-spinner .bounce2{-webkit-animation-delay:-0.16s;animation-delay:-0.16s}@-webkit-keyframes cf-bouncedelay{0%,80%,100%{-webkit-transform:scale(0)}40%{-webkit-transform:scale(1)}}@keyframes cf-bouncedelay{0%,80%,100%{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.convertforms .cf-footer{margin-top:18px;-ms-flex-item-align:normal;align-self:normal}.convertforms .cf-footer p{margin:0}.convertforms .cfupload{font-size:14px;color:#555;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.convertforms .cfupload>div:nth-child(2){margin-top:15px}.convertforms .cfupload .dz-message{border:2px dashed currentColor;padding:25px 10px;text-align:center;border-radius:3px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-transition:all 200ms ease;transition:all 200ms ease}@media (max-width: 639px){.convertforms .cfupload .dz-message{padding:10px}}.convertforms .cfupload .dz-message>*{margin:5px;opacity:.8}.convertforms .cfupload .dz-message:hover>*{opacity:1}.convertforms .cfupload .dz-message .cfupload-browse{color:inherit;width:auto;border-radius:5px;padding:4px 7px;background:transparent;border:solid 1px currentColor;color:inherit}.convertforms .cfupload.dz-clickable .dz-message{cursor:pointer}.convertforms .cfupload.dz-drag-hover .dz-message{background-color:#c7ecc7 !important;color:#5d5c5c}.convertforms .cfupload.dz-drag-hover .dz-message>*{opacity:1}.convertforms .cfup-status{width:8px;height:8px;border-radius:100%;background-color:#999;text-indent:-100000000px;margin-right:8px;position:relative;top:3px;-ms-flex-negative:0;flex-shrink:0}.convertforms .dz-processing .cfup-status{background-color:#4b7ac3}.convertforms .dz-success .cfup-status{background-color:#4bc380}.convertforms .dz-error .cfup-status{background-color:#f44660}.convertforms .cfup-file{font-size:14px;padding-bottom:8px;display:-webkit-box;display:-ms-flexbox;display:flex;line-height:1;position:relative}.convertforms .cfup-file .cfup-right{white-space:nowrap;display:-webkit-box;display:-ms-flexbox;display:flex}.convertforms .cfup-file .cfup-right .cfup-size{opacity:.7}.convertforms .cfup-file .cfup-right .cfup-size strong{font-weight:normal}.convertforms .cfup-file .cfup-right .cfup-remove{font-family:Arial;font-size:20px;text-decoration:none;color:#f44660;position:relative;top:-3px;margin-left:10px}.convertforms .cfup-file .cfup-right .cfup-remove:hover{opacity:1}.convertforms .cfup-file .cfup-details{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;padding-right:10px}@media (max-width: 639px){.convertforms .cfup-file .cfup-details{padding-left:0}}.convertforms .cfup-file .cfup-details .cfup-name{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;word-break:break-all}.convertforms .cfup-file .cfup-progress{display:none;width:100%;height:2px;background-color:#ccc;position:absolute;width:100%;left:0;bottom:5px}.convertforms .cfup-file .cfup-progress .dz-upload{background-color:#4b7ac3;height:100%;width:0;display:block;border-radius:5px 0 0 5px;-webkit-transition:all 500ms linear;transition:all 500ms linear}.convertforms .cfup-file.dz-processing .cfup-progress{display:block}.convertforms .cfup-file .cfup-error{display:none;color:#f44660;margin-top:8px;font-size:.8em}.convertforms .cfup-file.dz-error .cfup-error{display:block}.convertforms .cfup-file.dz-complete .cfup-progress{display:none}.convertforms .cf-width-fill{width:100%}.convertforms .cf-width-auto{width:auto}.convertforms .cf-one-half,.convertforms .cf-two-fourths,.convertforms .cf-three-sixths{width:50%}.convertforms .cf-one-third,.convertforms .cf-two-sixths{width:33.3333%}.convertforms .cf-one-fourth{width:25%}.convertforms .cf-one-fifth{width:20%}.convertforms .cf-one-sixth{width:16.6666%}.convertforms .cf-two-thirds{width:66.6666%}.convertforms .cf-two-fifths{width:40%}.convertforms .cf-three-fourths{width:75%}.convertforms .cf-three-fifths{width:60%}.convertforms .cf-four-fifths{width:80%}.convertforms .cf-five-sixths{width:83.3333%}.convertforms .cf-hide{display:none;pointer-events:none}@media (max-width: 639px){.convertforms .cf-hide-mobile{display:none !important}}.convertforms .cf-col-1{width:6.25%}.convertforms .cf-col-2{width:12.5%}.convertforms .cf-col-3{width:18.75%}.convertforms .cf-col-4{width:25%}.convertforms .cf-col-5{width:31.25%}.convertforms .cf-col-6{width:37.5%}.convertforms .cf-col-7{width:43.75%}.convertforms .cf-col-8{width:50%}.convertforms .cf-col-9{width:56.25%}.convertforms .cf-col-10{width:62.5%}.convertforms .cf-col-11{width:68.75%}.convertforms .cf-col-12{width:75%}.convertforms .cf-col-13{width:81.25%}.convertforms .cf-col-14{width:87.5%}.convertforms .cf-col-15{width:93.75%}.convertforms .cf-col-16{width:100%}@media (min-width: 640px){.convertforms .cf-col-medium-1{width:6.25%}.convertforms .cf-col-medium-2{width:12.5%}.convertforms .cf-col-medium-3{width:18.75%}.convertforms .cf-col-medium-4{width:25%}.convertforms .cf-col-medium-5{width:31.25%}.convertforms .cf-col-medium-6{width:37.5%}.convertforms .cf-col-medium-7{width:43.75%}.convertforms .cf-col-medium-8{width:50%}.convertforms .cf-col-medium-9{width:56.25%}.convertforms .cf-col-medium-10{width:62.5%}.convertforms .cf-col-medium-11{width:68.75%}.convertforms .cf-col-medium-12{width:75%}.convertforms .cf-col-medium-13{width:81.25%}.convertforms .cf-col-medium-14{width:87.5%}.convertforms .cf-col-medium-15{width:93.75%}.convertforms .cf-col-medium-16{width:100%}}@media (min-width: 1024px){.convertforms .cf-col-large-1{width:6.25%}.convertforms .cf-col-large-2{width:12.5%}.convertforms .cf-col-large-3{width:18.75%}.convertforms .cf-col-large-4{width:25%}.convertforms .cf-col-large-5{width:31.25%}.convertforms .cf-col-large-6{width:37.5%}.convertforms .cf-col-large-7{width:43.75%}.convertforms .cf-col-large-8{width:50%}.convertforms .cf-col-large-9{width:56.25%}.convertforms .cf-col-large-10{width:62.5%}.convertforms .cf-col-large-11{width:68.75%}.convertforms .cf-col-large-12{width:75%}.convertforms .cf-col-large-13{width:81.25%}.convertforms .cf-col-large-14{width:87.5%}.convertforms .cf-col-large-15{width:93.75%}.convertforms .cf-col-large-16{width:100%}}.convertforms .cf-content-wrap,.convertforms .cf-form-wrap{padding:18px}.convertforms .cf-content-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.convertforms.cf-iscentered{margin-left:auto;margin-right:auto}.convertforms .cf-text-center{text-align:center}.convertforms .cf-text-right{text-align:right}.convertforms.cf-disabled,.convertforms .cf-disabled{pointer-events:none}.convertforms [class*="cf-list-"]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-left:-8px;margin-right:-8px}.convertforms [class*="cf-list-"]>div{white-space:nowrap;padding-right:8px;padding-left:8px}.convertforms [class*="cf-list-"].cf-list-2-columns>div{-ms-flex-preferred-size:50%;flex-basis:50%}.convertforms [class*="cf-list-"].cf-list-3-columns>div{-ms-flex-preferred-size:33.33%;flex-basis:33.33%} + + diff --git a/deployed/convertforms/media/com_convertforms/css/convertforms.sys.css b/deployed/convertforms/media/com_convertforms/css/convertforms.sys.css new file mode 100644 index 00000000..05ac864b --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/convertforms.sys.css @@ -0,0 +1,3 @@ +@import url(../font/css/cfont.css);.cf-templates{padding:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#cfSelectTemplate{max-width:1200px;margin:0 auto;left:0;right:0}#cfSelectTemplate .modal-header{-webkit-box-shadow:0 0px 1px 1px rgba(0,0,0,0.1);box-shadow:0 0px 1px 1px rgba(0,0,0,0.1);position:relative;z-index:1}#cfSelectTemplate .modal-title{font-size:16px}#cfSelectTemplate .modal-dialog{width:100%}#cfSelectTemplate .modal-body{overflow:hidden !important;padding:0}.cf-templates-header{margin-bottom:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;background-color:#1a3867;color:#fff;padding:10px 18px}.cf-templates-header h3{margin:0;font-weight:normal}.cf-template-group:not(:first-child) .cf-template-group-name{margin-top:20px;border-top:solid 1px #ccc;padding-top:20px}.cf-template-group-name{font-size:14px;font-weight:normal;line-height:1;font-weight:bold;text-align:center;text-transform:uppercase;letter-spacing:1px}.cf-template-group-items{-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:20px 0;margin:-10px}.cf-template-group-items *{-webkit-box-sizing:inherit;box-sizing:inherit}.cf-template-group-items .blank{background-color:#fff;border:solid 5px #ccc;color:#888;text-align:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:18px;line-height:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cf-template-group-items a{text-decoration:none !important;display:block}.cf-template-group-items img{border:solid 1px rgba(0,0,0,0.1)}.cf-template{padding:10px;width:50%}.cf-template>div{position:relative}@media (min-width: 1024px){.cf-template{width:33.3333%}}.cf-template a:hover{opacity:.9}@media (min-width: 1024px){.cf-template-group-sidebar .cf-template{width:25%}}.cf-template-group-bar .cf-template{width:100%}@media (min-width: 1024px){.cf-template-group-bar .cf-template{width:50%}}.dashboard{font-size:14px}.dashboard .accordion{background-color:#fff}.dashboard .accordion .card-header,.dashboard .accordion .accordion-toggle{color:inherit;text-decoration:none;font-weight:bold;background-color:rgba(0,0,0,0.03);padding:.75rem 1.25rem}.dashboard .accordion .accordion-inner{padding:20px}.dashboard tr:active,.dashboard tr:focus,.dashboard tr:hover{background-color:transparent !important}.nr-icons{list-style:none;margin:-5px;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.nr-icons li{margin:5px;-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;min-width:100px;max-width:120px}.nr-icons a{display:block;background-color:#fff;color:inherit;border:1px solid #e3e3e3;padding:15px 10px;text-align:center}.nr-icons a:hover,.nr-icons a:focus{text-decoration:none}.nr-icons span{color:#444}.nr-icons span[class*="icon"]{display:block;min-height:44px;font-size:40px;height:auto;line-height:1;margin:0 auto 10px 0;width:auto;color:inherit}body.view-convertforms,body.view-{background-color:#f6f8fc}body.view-convertforms #subhead,body.view- #subhead{display:none}.nr-well-white{height:100%;background-color:#fff;border-radius:0 !important;-webkit-box-shadow:none;box-shadow:none;border:solid 1px #e3e3e3;padding:20px}.nr-well-white h3{font-size:1.15em;margin:0 0 20px 0}.nr-well-white td,.nr-well-white th{padding-left:0 !important;padding-right:0 !important}.modal-sm{width:350px !important}.modal-nr{left:0 !important;right:0 !important;margin:auto !important}.modal-nr .modal-body{padding:10px 15px !important;-webkit-box-sizing:border-box;box-sizing:border-box}.modal-nr .modal-header{font-weight:bold}.cf-addons-container.disabled{opacity:.5;pointer-events:none}.cf-addons{margin:30px 0}.cf-addons>*{-webkit-box-sizing:border-box;box-sizing:border-box}.cf-addons h3{margin-top:0;margin-bottom:5px;font-size:1.3em}.cf-addons-container{padding:15px;font-size:14px}.cf-addon{border-bottom:solid 1px #dee2e6;font-size:.9em}@media (min-width: 640px){.cf-addon .cf-addon-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cf-addon .cf-addon-text{padding:10px;margin-right:auto}}.cf-addon-img{padding:15px 10px 15px 0;text-align:center}.cf-addon-img img{max-width:45px;display:inline-block}.cf-addon-text{padding:0 20px}.cf-addon-action{padding:20px;padding-right:0}.cf-addon-action>.btn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}body.view-addons .container-main{background-color:#fff}.cf-layout-btn{float:right}.cf-layout-classes{display:none;border:1px solid #e3e3e3;margin:5px 0 10px 0}.cf-layout-classes .cf-width-fill{width:100%}.cf-layout-classes .cf-width-auto{width:auto}.cf-layout-classes .cf-one-half,.cf-layout-classes .cf-two-fourths,.cf-layout-classes .cf-three-sixths{width:50%}.cf-layout-classes .cf-one-third,.cf-layout-classes .cf-two-sixths{width:33.3333%}.cf-layout-classes .cf-one-fourth{width:25%}.cf-layout-classes .cf-one-fifth{width:20%}.cf-layout-classes .cf-one-sixth{width:16.6666%}.cf-layout-classes .cf-two-thirds{width:66.6666%}.cf-layout-classes .cf-two-fifths{width:40%}.cf-layout-classes .cf-three-fourths{width:75%}.cf-layout-classes .cf-three-fifths{width:60%}.cf-layout-classes .cf-four-fifths{width:80%}.cf-layout-classes .cf-five-sixths{width:83.3333%}.cf-layout-classes>span{background-color:#e3e3e3;font-weight:bold;padding:5px 9px;display:inline-block;width:100%;font-size:12px}.cf-layout-classes .cf-layout-list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:5px}.cf-layout-classes .cf-layout{width:25%;padding:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:-1px}.cf-layout-classes .cf-layout span{display:block;height:30px;margin:1px;background-color:#b1bac3;-webkit-transition:background-color .1s ease-in-out;transition:background-color .1s ease-in-out;cursor:pointer}.cf-layout-classes .cf-layout span:hover{background-color:#132f53}.export_tool{-webkit-box-sizing:border-box;box-sizing:border-box;color:#333}.export_tool *,.export_tool *:before,.export_tool *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.export_tool.tmpl-component{position:fixed;top:0;left:0;width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.export_tool .container{background-color:#fff;max-width:400px;max-height:100%;border:solid 1px rgba(0,0,0,0.1);border-radius:10px;margin:0 auto;padding:30px;-webkit-box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1);box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1);-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.export_tool .container>[class^="icon-"]{font-size:70px;width:auto;height:auto;margin:0;line-height:1;color:green}.export_tool .input-append{display:-webkit-box;display:-ms-flexbox;display:flex}.export_tool .controls .btn-group.btn-group-yesno{width:100%}.export_tool form{margin:0}.export_tool .control-label label .star{display:none}.export_tool .control-group{margin-bottom:13px}.export_tool button[type=submit]{width:100%;padding:8px 14px;outline:none}.export_tool select,.export_tool input{width:100% !important;padding:7px 8px !important;height:auto !important;outline:0;margin:0 !important}.export_tool select:focus,.export_tool input:focus{outline:0}.export_tool.completed{text-align:center;margin:-20px}.export_tool.completed .btn{margin-top:10px}.export_tool.completed [class^="icon-"]{color:green}.export_tool.error [class^="icon-"]{color:red}.export_tool.error .error_message{font-size:1.2em;margin:10px 0 20px 0}.export_tool.form.working{pointer-events:none}.export_tool.form.working button[type="submit"]{opacity:.7}.export_tool h1{font-size:16px;border-bottom:solid 1px #e8e8e8;padding-bottom:1px;margin:-10px 0 20px 0;text-transform:uppercase;text-align:center}.export_tool h2{font-size:20px}.modal.transparent{width:100% !important;height:100% !important;top:0 !important;left:0 !important;bottom:0 !important;right:0 !important;margin:0 !important;overflow:hidden !important;background:none !important;-webkit-box-sizing:border-box;box-sizing:border-box}.modal.transparent *{-webkit-box-sizing:inherit;box-sizing:inherit}.modal.transparent .modal-header{position:absolute;right:0;top:0;z-index:1;border:none;padding:20px 30px}.modal.transparent .modal-header h3{display:none}.modal.transparent .modal-header .close{color:#fff;opacity:1;border:none !important;margin:0;font-size:4em;outline:none;font-family:tahoma}.modal.transparent .modal-body{height:100% !important;max-height:100% !important;background:none !important;overflow:hidden !important}.modal.transparent iframe{height:100%}.toolbarexportmodal>span{pointer-events:none}body.com_convertforms.view- .subhead-collapse{display:none}body.com_convertforms.view- .header:not(#header){margin-bottom:20px}body.com_convertforms .accordion-heading strong{font-weight:normal}body.com_convertforms .accordion-heading a{color:inherit;text-decoration:none}body.com_convertforms .accordion-group{border-radius:0}body.com_convertforms .pagination-toolbar{text-align:center}body.com_convertforms .disabled{pointer-events:none}div.mce-fullscreen{z-index:10000}a.disabled{pointer-events:none}table.nrTable{margin:0;width:100%}table.nrTable .text-center{text-align:center}table.nrTable .text-right{text-align:right}table.nrTable th{color:#888}table.nrTable td,table.nrTable th{border-color:#e3e3e3;padding:10px}table.nrTable tbody tr.error>td{background-color:#f9f0f0}table.nrTable.noBorder td,table.nrTable.noBorder th{padding:7px 0;border:none}table.nrTable.scroll{overflow-x:auto;display:block;max-width:100%;margin:auto}.js-stools select,.js-stools input{background-color:#fff !important;border:1px solid #ccc !important}.js-stools select:focus,.js-stools input:focus{outline:none}.item-icons{margin:0 -10px;padding:0;list-style:none}.item-icons li{display:inline;padding:0 10px}.item-icons a{display:inline-block}.item-icons .icon{font-size:24px;line-height:1em;margin:0;width:auto;height:auto}.footer_review .stars{color:#fcac0a;text-decoration:none;letter-spacing:0px}.disable-click{pointer-events:none}.chooseColumns{position:relative}.chooseColumns .form-check-input{-webkit-appearance:checkbox;-moz-appearance:checkbox;appearance:checkbox}.chooseColumns .form-check-input:focus{-webkit-box-shadow:none;box-shadow:none}.chooseColumns .chooseColumnsOptions{position:absolute;margin-top:10px;background-color:#fff;z-index:15;-webkit-transition:height 0.01s;transition:height 0.01s;border:solid 1px #ccc;padding:15px;min-width:160px;border-radius:5px;-webkit-box-shadow:1px 1px 10px 1px rgba(0,0,0,0.1);box-shadow:1px 1px 10px 1px rgba(0,0,0,0.1)}.chooseColumns .chooseColumnsOptions button{margin-top:20px;width:100%}.chooseColumns .chooseColumnsOptions fieldset{margin:0;padding:0;max-height:300px;overflow:auto}.chooseColumns .form-check{margin:0;display:block} + + diff --git a/deployed/convertforms/media/com_convertforms/css/editor.css b/deployed/convertforms/media/com_convertforms/css/editor.css new file mode 100644 index 00000000..e236fc74 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/editor.css @@ -0,0 +1,3 @@ +#sidebar-wrapper,.subhead{display:none}.cfe-main{display:-webkit-box;display:-ms-flexbox;display:flex;height:calc(100% - 60px - 31px)}.cfEditor{color:#444}.cfEditor input,.cfEditor select,.cfEditor textarea{font-size:1em;width:100%;max-width:100%;padding:6px 8px;margin:0 !important;-webkit-box-shadow:none;box-shadow:none;border-radius:2px;border:1px solid #ccc}.cfEditor input:focus,.cfEditor select:focus,.cfEditor textarea:focus{border-color:#444;-webkit-box-shadow:none;box-shadow:none;outline:0}.cfEditor input[type="checkbox"],.cfEditor input[type="radio"]{width:auto}.cfEditor fieldset{padding:0 !important}.nrEditor{overflow:hidden;position:fixed;top:0;left:0;width:100%;height:100%;font-size:13px}.nrEditor .emails .btn-toolbar,.nrEditor .emails .btn-group{font-size:inherit}.nrEditor .emails .subform-repeatable{padding-right:0}.nrEditor .emails .subform-repeatable>.btn-toolbar .btn-group{width:100%}.nrEditor .emails .subform-repeatable>.btn-toolbar .btn{width:100%;padding:.9em;font-size:13px;line-height:1;margin:0;color:#fff}.nrEditor .emails .subform-repeatable>.btn-toolbar .btn:after{content:"Add Email Notification"}.nrEditor .emails .subform-repeatable-group{border:none;margin:25px 0 0 0;padding:0 0 40px 0;position:relative}.nrEditor .emails .subform-repeatable-group .btn-toolbar .btn.btn-primary{display:none}.nrEditor .emails .subform-repeatable-group input{margin-bottom:0}.nrEditor .emails .subform-repeatable-group .control-label{padding-top:0}.nrEditor .emails .subform-repeatable-group .control-group:last-child{margin-bottom:0}.nrEditor .emails .subform-repeatable-group .btn-toolbar{position:absolute;bottom:0;right:0}.nrEditor .emails .subform-repeatable-group .btn-toolbar .btn-group{font-size:.8em;margin:-1px}.nrEditor .emails .subform-repeatable-group .btn-toolbar .btn-group .btn{margin:1px !important;position:static}.nrEditor .emails .subform-repeatable-group .btn-toolbar .btn-group .btn span{line-height:13px}.nrEditor .fm .nav-tabs{background:none;margin:-12px -20px 20px -20px;padding-left:5px;border-bottom:1px solid #ddd;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:start}.nrEditor .fm .nav-tabs>li{margin:0 5px 0 0;width:auto}.nrEditor .fm .nav-tabs>li.active>a,.nrEditor .fm .nav-tabs>li a.active{position:relative}.nrEditor .fm .nav-tabs>li.active>a:after,.nrEditor .fm .nav-tabs>li a.active:after{content:"";display:block;position:absolute;top:auto;bottom:0;left:0;right:0;margin:0 auto;width:60px;height:2px;background-color:#F1A208;border-radius:4px}.nrEditor .fm .nav-tabs>li>a{color:inherit;margin:0;padding:12px 15px;border-radius:0;border:none;font-weight:bold;-webkit-box-shadow:none;box-shadow:none}.nrEditor .fm .nav-tabs>li>a:hover,.nrEditor .fm .nav-tabs>li>a:focus{background:none}.nrEditor .fmItem:not(:first-child){display:none}.nrEditor .fmItem h3{margin-top:0;font-weight:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-size:16px}.nrEditor .fmItem h3 small{margin-right:auto;padding-left:10px;color:#999}.nrEditor .fmItem h3:not(:first-child){border-top:solid 1px #e3e3e3;padding-top:20px;margin-top:20px}.nrEditor .fmItem h3 .cf-menu{float:right;font-size:14px;margin-right:-15px}.nrEditor .addFieldButton{width:100%}.nrEditor .fmAvailableFields h5{font-size:1em;font-weight:normal}.nrEditor .fmAvailableFields .fmFieldGroup:not(:last-child){margin-bottom:15px;padding-bottom:15px;border-bottom:solid 1px #e3e3e3}.nrEditor .fmAvailableFields .fmFields{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:-2px}.nrEditor .fmAvailableFields .fmFields div{width:50%;padding:2px}.nrEditor .fmAvailableFields .fmFields button{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.nrEditor .fmAvailableFields .fmFields button[data-pro-only]{opacity:.7}.nrEditor .fmAvailableFields .fmFields button span{margin:0}.nrEditor .fmAddedFields>.item{background-color:#f5f5f5;border:solid 1px #dcdbdb;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;padding:10px;margin-bottom:5px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;white-space:nowrap}.nrEditor .fmAddedFields>.item .fmFieldLabel{max-width:80%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.nrEditor .fmAddedFields>.item a{color:inherit;padding:5px;margin:-10px -2px;text-decoration:none !important}.nrEditor .fmAddedFields>.item a:hover{background-color:#e3e3e3}.nrEditor .fmAddedFields>.item.sortable-chosen.ghost-item{background-color:#e3e3e3}.nrEditor .cfe-top{background-color:#10223e;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#fff;height:31px;padding:0 1em;font-size:.95em;pointer-events:none}.nrEditor .cfe-top>div{opacity:.3}.nrEditor .minicolors-theme-bootstrap .minicolors-input{padding-left:34px}.nrEditor .minicolors-swatch{top:0 !important;left:0 !important;margin:5px;width:23px !important;height:23px !important}.nrEditor joomla-tab-element{margin-left:35px;overflow-x:hidden;padding-top:0 !important}.nrEditor .control-group{margin-bottom:13px}.nrEditorOptions{position:relative;z-index:1;-webkit-box-shadow:2px 0 5px 2px rgba(0,0,0,0.1);box-shadow:2px 0 5px 2px rgba(0,0,0,0.1);background-color:#fff;-ms-flex-negative:0;flex-shrink:0;overflow:auto;overflow-x:hidden}.nrEditorOptions .field-media-wrapper>.input-prepend{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:inherit}.nrEditorOptions .field-media-wrapper>.input-prepend>*{height:33px !important;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.nrEditorOptions .field-media-wrapper>.input-prepend [class^="icon-"]{width:auto;height:auto;margin-right:0;line-height:inherit;font-size:11px;font-weight:normal}.nrEditorOptions .field-media-wrapper>.input-prepend>.popover{height:auto !important}.nrEditorOptions .field-media-wrapper>.input-prepend .field-media-preview{width:50px !important}.nrEditorOptions .field-media-wrapper>.input-prepend .field-media-input{width:100%}.nrEditorOptions .field-media-wrapper>.input-prepend .button-select{border-radius:0 !important;border-left:none !important}.nrEditorOptions .field-media-wrapper>.input-prepend .button-clear{border-radius:0 4px 4px 0 !important;border-left:none !important}.nrEditorOptions .alert{margin:0;padding:0.7em 1em}.nrEditorOptions .tox-tinymce:not(.tox-fullscreen){height:240px !important}.nrEditorOptions .tox .tox-tbtn{height:27px;font-size:13px}.nrEditorOptions .tox .tox-tbtn:not(.tox-tbtn--select){width:27px}.nrEditorOptions .tox .tox-tbtn--bespoke .tox-tbtn__select-label{width:5em}.nrEditorOptions .tox .tox-toolbar{border-bottom:solid 1px #ccc}.nrEditorOptions .control-label{padding-right:0;padding-left:0;width:auto}.nrEditorOptions label{font-size:1em;color:inherit}.nrEditorOptions form{margin:0}.nrEditorOptions form,.nrEditorOptions .tabs-left>*{height:100%}.nrEditorOptions select{height:auto}.nrEditorOptions .add-on span{-webkit-box-shadow:none;box-shadow:none;border-top-left-radius:0;border-bottom-left-radius:0}@media (min-width: 640px){.nrEditorOptions{width:415px}}.nrEditorOptions .small{font-size:.9em}.nrEditorOptions .input-append,.nrEditorOptions .input-prepend{white-space:normal;margin:0}.nrEditorOptions .accordion>h2{border-bottom:1px solid #dddddd;font-size:1.4em;font-weight:400;margin:0;padding:1em 1.1em}.nrEditorOptions .accordion .accordion-item{border:none;border-radius:0;border-bottom:solid 1px #ddd}.nrEditorOptions .accordion .accordion-inner{padding:15px 20px}.nrEditorOptions .accordion .accordion-inner>.control-group:last-child{margin:0 !important}.nrEditorOptions .accordion .accordion-button{margin:0 !important;font-size:13px;background-color:#f5f5f5 !important;color:#444 !important;border-radius:0 !important;padding:1.1em 1.5em !important}.nrEditorOptions .accordion .accordion-button:after{position:absolute;top:0;right:15px;background-size:12px;background-position:center;width:1.25rem !important;height:100% !important;background-color:transparent !important}.nrEditorOptions #sections>div{background-color:#fff;padding-top:55px;position:fixed;height:100%;z-index:100;width:auto;min-width:auto;border:none;border-right:1px solid #ddd;overflow:visible;font-size:18px;width:50px}.nrEditorOptions #sections>div button{background:none;color:inherit;margin-bottom:5px;-webkit-transition:all 150ms ease;transition:all 150ms ease}.nrEditorOptions #sections>div button:after{display:none}.nrEditorOptions #sections>div button:hover span:after{background-color:#F1A208;font-family:var(--font-sans-serif);font-weight:400;color:#fff;content:attr(data-label);display:block;font-size:.75em;padding:.6em .7em;left:100%;position:absolute;top:8px;border-radius:0 3px 3px 0}.nrEditorOptions #sections>div button:hover:before{color:#F1A208;content:"\e808";font-family:"cfont";position:absolute;left:100%;top:0;margin-left:-6px;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nrEditorOptions #sections>div button[aria-expanded=true]{color:#F1A208;cursor:default}.nrEditorOptions #sections>div button[aria-expanded=true]:after{display:block;height:100%;width:2px;background-color:currentColor}.nrEditorOptions #sections>div button[aria-expanded=true] span:after,.nrEditorOptions #sections>div button[aria-expanded=true]:before{display:none}.nrEditorPreview{background-color:#999;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.nrEditorPreview *,.nrEditorPreview *:before,.nrEditorPreview *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.nrEditorPreview .nrEditorPreviewContainer{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;overflow-y:auto}.nrEditorPreview .nrEditorPreviewContainer>div{margin:auto;padding:30px;width:100%}.nrEditorPreview .nrEditorPreviewContainer .b{width:100%}@media all and (-ms-high-contrast: none), (-ms-high-contrast: active){.nrEditorPreview .nrEditorPreviewContainer{height:100%}.nrEditorPreview .nrEditorPreviewContainer>div{display:table;height:100%}.nrEditorPreview .nrEditorPreviewContainer>div>div{display:table-cell;vertical-align:middle;height:100%}}.nrEditorPreview .cf{-webkit-box-shadow:1px 1px 1px 1px rgba(0,0,0,0.2);box-shadow:1px 1px 1px 1px rgba(0,0,0,0.2);margin:0 auto}.nrEditorTools{-ms-flex-negative:0;flex-shrink:0;padding:13px 12px;background-color:#ccc;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nrEditorTools .r{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:-3px}.nrEditorTools .nrNav{margin:0;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex}.nrEditorTools .nrNav>*{margin-right:10px}.nrEditorTools a{display:inline-block;text-decoration:none !important;font-size:16px;color:inherit;opacity:.5;padding:10px}.nrEditorTools a:hover{opacity:1}.nrEditorTools .nrCheckbox{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;white-space:nowrap}.nrEditorTools .nrCheckbox input:focus{outline:none}.nrEditorTools .nrCheckbox label{margin:0 0 0 5px;font-size:1em;color:inherit;cursor:pointer}.loader{font-size:10px;text-indent:-9999em;border-top:1.1em solid rgba(255,255,255,0.2);border-right:1.1em solid rgba(255,255,255,0.2);border-bottom:1.1em solid rgba(255,255,255,0.2);border-left:1.1em solid #ffffff;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-animation:load8 1.1s infinite linear;animation:load8 1.1s infinite linear;position:absolute;bottom:0;right:0;margin:20px;display:none}.loader,.loader:after{border-radius:50%;width:50px;height:50px}@-webkit-keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes load8{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.toggle-editor{display:none}.mce-menu-item .mce-text{background:none !important}.cfe-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cfe-toolbar .saveForm{font-size:.87em !important}.modal{margin:0 auto !important;left:0 !important;right:0 !important;border-radius:5px !important}.modal,.modal *{color:inherit}.modal.fade{-webkit-transition-duration:.1s !important;transition-duration:.1s !important}.modal .modal-header h3{font-size:14px;font-weight:bold}.modal button:focus{outline:0}.cfe-header{width:100%;height:60px;background-color:#1a3867;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 10px;font-size:1.25em;position:relative;z-index:2;-webkit-box-shadow:0 2px 5px 2px rgba(0,0,0,0.25);box-shadow:0 2px 5px 2px rgba(0,0,0,0.25);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.cfe-header .cfe-logo>svg{height:35px;margin-left:5px}.cfe-header .cls-1{fill:#F1A208}.cfe-header .cfe-title{position:absolute;width:100%;text-align:center;pointer-events:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cfe-header .cfe-title>*{pointer-events:all;border:none;font-size:inherit;border-bottom:solid 1px transparent;padding:0;margin:0;background:none}.cfe-header .cfe-title label{color:inherit;cursor:pointer;opacity:.8;font-size:inherit;padding-right:5px}.cfe-header .cfe-title input{border-radius:0;color:inherit}.cfe-header .cfe-title input:focus{color:#F1A208;border-bottom:solid 1px #F1A208}.cfe-header .cfe-title input:focus-visible{outline:0}.cfe-header .cf-icon-cancel{font-size:18px}.cfe-header .cf-menu-parent{padding-left:10px}.cfe-header .cf-menu>li>a:not(.save):hover,.cfe-header .cf-menu li.open>a,.cfe-header .cf-menu>li>a:not(.save):hover,.cfe-header .cf-menu li>a.show{background-color:rgba(255,255,255,0.07)}.cfe-logo{pointer-events:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-weight:bold}.cfe-logo img{margin-right:10px}body{overflow:hidden;padding:0}html.mce-fullscreen nav,html.mce-fullscreen .cfe-header,html.tox-fullscreen nav,html.tox-fullscreen .cfe-header{display:none}html.mce-fullscreen .nrEditor,html.tox-fullscreen .nrEditor{position:static}html.mce-fullscreen .st_box,html.tox-fullscreen .st_box{position:fixed;right:15px;left:auto !important;top:auto !important;bottom:55px}html.mce-fullscreen .has-smarttags.is_textarea .st_trigger,html.tox-fullscreen .has-smarttags.is_textarea .st_trigger{top:auto;padding:25px;position:fixed;z-index:99999;font-size:20px !important}.navbar .admin-logo{padding-top:8px}.navbar .container-fluid>*{opacity:.3;pointer-events:none}#status,header{display:none}@media (min-width: 640px){.subhead-collapse{display:none}}.tab-content{overflow:visible !important}.accordion{margin:0 !important}.control-group:last-child{margin:0 !important}#system-message-container{left:0;margin:0 auto;position:absolute;right:0;top:15px;z-index:10000;font-size:1.1em;max-width:90vw;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}#system-message-container h4{display:none}#system-message-container .alert{position:relative;padding:10px 40px 10px 15px;border:none}#system-message-container .alert.alert-danger{color:#fff;background-color:#bd362f}#system-message-container button{position:absolute;right:5px;top:8px;color:#fff;opacity:.7;font-weight:normal;font-size:1.8em}#system-message-container button:hover{opacity:1}.container-fluid{padding:0}.navbar-inverse .navbar-inner{background:#10223e !important}#content .modal-footer{font-size:13px}.form-select{background-color:transparent;background-size:90rem}#content .btn,.cf-btn{color:#444;background-color:#f3f3f3;font-size:1em;line-height:1;padding:.6em .8em;border-radius:4px;margin:0;border:solid 1px rgba(0,0,0,0.25);-webkit-box-shadow:none;box-shadow:none;outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer;text-decoration:none !important;-webkit-font-smoothing:antialiased}#content .btn:active,#content .btn:focus,.cf-btn:active,.cf-btn:focus{-webkit-box-shadow:none !important;box-shadow:none !important}#content .btn:hover,.cf-btn:hover{-webkit-box-shadow:inset 0 0 10px 15px rgba(0,0,0,0.05);box-shadow:inset 0 0 10px 15px rgba(0,0,0,0.05)}#content .btn:active,.cf-btn:active{border-color:rgba(0,0,0,0.4)}#content .btn.btn-dark,.cf-btn.btn-dark{background-color:#444 !important;color:#fff !important}#content .btn.btn-danger,.cf-btn.btn-danger{background-color:#bd362f;color:#fff !important}#content .btn.btn-success,.cf-btn.btn-success{background-color:#46a546;color:#fff !important}#embedForm{width:480px}#embedForm .modal-body{font-size:16px;line-height:1.5;color:#333;text-align:center}#embedForm .shortcode{background-color:#ececec;text-align:center;font-size:25px;font-family:monospace;line-height:2;border:solid 1px rgba(0,0,0,0.1);margin:10px 0 20px 0;width:100%;cursor:default}#embedForm .modal-body{padding:20px}.cf-menu{list-style:none;margin:0;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 -5px}.cf-menu>li{margin:0 5px}.cf-menu-item{outline:0;text-align:center;padding:.5em .8em;font-size:1em;line-height:1em;background:none;border:none;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 100ms ease-in-out;transition:all 100ms ease-in-out;text-decoration:none !important;color:inherit !important;display:block}.cf-menu-item:before{margin:0;width:auto}.cf-menu-item:hover{background-color:rgba(0,0,0,0.07);color:inherit}.cf-menu-item i{font-style:normal}.cf-menu-item .hover-state{display:none !important}.cf-menu-item.working{pointer-events:none}.cf-menu-item.working .up-state{display:none !important}.cf-menu-item.working .hover-state{display:inline-block !important}.cf-menu-item.save{border-color:rgba(255,255,255,0.1) !important}.cf-menu-item.save>*{pointer-events:none}.cf-menu-item.save [class^="cf-icon-"]:before{margin-left:0;margin-right:4px}.cf-menu-parent{position:relative}.cf-menu-parent>.cf-icon-dots{line-height:inherit;border-radius:100%;width:2.1em;height:2.1em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cf-menu-parent>.cf-icon-dots:before{-webkit-transform:rotate(90deg);transform:rotate(90deg);font-weight:bold}.cf-menu-parent>ul{display:none;list-style:none;margin:0;padding:0;position:absolute;margin-top:5px;top:100% !important;right:0 !important;left:auto !important;-webkit-transform:unset !important;transform:unset !important;background-color:#fff;z-index:1;border:solid 1px #ccc;-webkit-box-shadow:2px 3px 2px -1px rgba(0,0,0,0.2);box-shadow:2px 3px 2px -1px rgba(0,0,0,0.2);border-radius:4px;white-space:nowrap;min-width:210px;font-size:1em}.cf-menu-parent>ul a{color:#444;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.8em !important;text-decoration:none;-webkit-transition:all 150ms ease;transition:all 150ms ease;font-size:.95em;line-height:1}.cf-menu-parent>ul a:hover{background-color:rgba(0,0,0,0.07);text-decoration:none}.cf-menu-parent>ul a span:before{margin-right:.6em;font-size:1.3em;width:20px;text-align:center}.cf-menu-parent .separator{border-top:1px solid rgba(0,0,0,0.12);margin:7px 0}.cf-menu-parent .cf-menu-item.show{background-color:rgba(0,0,0,0.07)}.cf-menu-parent.open ul{display:block}.cf-menu-parent.open>.cf-menu-item{background-color:rgba(0,0,0,0.07)} + + diff --git a/deployed/convertforms/media/com_convertforms/css/editorj4.css b/deployed/convertforms/media/com_convertforms/css/editorj4.css new file mode 100644 index 00000000..139597f9 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/editorj4.css @@ -0,0 +1,2 @@ + + diff --git a/deployed/convertforms/media/com_convertforms/css/field_editor.css b/deployed/convertforms/media/com_convertforms/css/field_editor.css new file mode 100644 index 00000000..1a4cd598 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/field_editor.css @@ -0,0 +1,3 @@ +.convertforms .toggle-editor,.convertforms .mce-statusbar{display:none}.convertforms .js-editor-tinymce iframe,.convertforms .CodeMirror{height:var(--height) !important}.convertforms .mceButton,.convertforms .wf-editor-toggle{width:auto} + + diff --git a/deployed/convertforms/media/com_convertforms/css/joomla3.css b/deployed/convertforms/media/com_convertforms/css/joomla3.css new file mode 100644 index 00000000..1ada6b24 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/joomla3.css @@ -0,0 +1,3 @@ +.cfEditor{-webkit-box-sizing:border-box;box-sizing:border-box}.cfEditor *{-webkit-box-sizing:inherit;box-sizing:inherit}.cfEditor input,.cfEditor select,.cfEditor textarea{font-family:inherit !important;height:auto !important;line-height:23px !important}.nrEditor{top:31px !important}.nrEditor .accordion>h2{border-bottom:1px solid #dddddd;font-size:1.4em;font-weight:400;margin:0;padding:1em 1.1em}.nrEditor .accordion .accordion-inner{padding:15px 20px}.nrEditor .accordion .accordion-inner>.control-group:last-child{margin:0 !important}.nrEditor .accordion .accordion-item{border-radius:0;border-right:0;border-left:0;border-top:0}.nrEditor .accordion .accordion-button{background-color:#f5f5f5;padding:1em 1.55em;-webkit-box-shadow:none;box-shadow:none}.nrEditor .accordion .accordion-button:after{background-size:.8rem;width:.8rem;height:.8rem}.nrEditor .accordion .accordion-header,.nrEditor .accordion .accordion-button{font-size:1em}.nrEditor #sectionsContent{margin-left:49px;overflow-x:hidden}.nrEditor #sectionsTabs{padding-top:55px;margin:0 !important;position:fixed;z-index:100}.nrEditor #sectionsTabs li{margin-bottom:0;margin-left:0}.nrEditor #sectionsTabs a:hover{background:none;position:relative}.nrEditor #sectionsTabs a:hover span{pointer-events:none}.nrEditor #sectionsTabs a:hover span:after{background-color:#F1A208;font-family:var(--font-sans-serif);font-weight:400;color:#fff;content:attr(data-label);display:block;font-size:.75em;left:100%;padding:8px 10px;position:absolute;top:8px;-webkit-transition:all 200ms ease;transition:all 200ms ease}.nrEditor #sectionsTabs a:hover:before{color:#F1A208;content:"\e808";font-family:"cfont";display:block;left:100%;margin-left:-6px;position:absolute;top:13px}.nrEditor #sectionsTabs a{background:none;-webkit-transition:all 200ms ease;transition:all 200ms ease;border:none !important;font-size:18px;line-height:1;min-width:auto !important;margin:0 !important;padding:15px;color:#444}.nrEditor #sectionsTabs [class^="icon-"]{margin-right:0;width:auto;height:auto}.nrEditor #sectionsTabs .active a{color:#F1A208 !important;cursor:default;position:relative}.nrEditor #sectionsTabs .active a:after{content:" ";display:block;height:100%;width:2px;background-color:#F1A208;position:absolute;left:0;top:0;opacity:1}.nrEditor #sectionsTabs .active a span:after,.nrEditor #sectionsTabs .active a:before{display:none}.nrEditor .input-append{position:relative;display:-webkit-box !important;display:-ms-flexbox !important;display:flex !important;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.nrEditor .input-append .add-on{height:auto !important;min-width:auto !important;padding:5px 10px !important}.nrEditor #sectionsTabs{padding-top:62px !important}.nrEditor .nrEditorOptions .accordion>div{border-radius:0;margin:0;border:none;border-bottom:solid 1px #ddd !important;-webkit-box-shadow:none;box-shadow:none}.nrEditor .nrEditorOptions .accordion .accordion-heading a{background-color:#f5f5f5 !important;text-decoration:none;font-size:1em;line-height:1;padding:1.2em 1.6em;color:#444 !important;font-weight:normal;border:none}.nrEditor .nrEditorOptions .accordion .accordion-heading a:after{content:"\e810";font-family:"cfont";font-size:15px;float:right;background:none !important;width:auto !important}.nrEditor .nrEditorOptions .accordion .accordion-heading a.collapsed:after{content:"\e80d"}.nrEditor .modal{-webkit-box-sizing:border-box;box-sizing:border-box}.nrEditor .modal *{-webkit-box-sizing:inherit;box-sizing:inherit}.minicolors{width:100% !important}.minicolors .minicolors-panel{top:auto !important;left:0 !important;height:163px !important;width:185px !important}.minicolors.minicolors-with-opacity .minicolors-panel{width:205px !important}.chooseColumnsOptions{left:-1000000px}.chooseColumnsOptions.in{left:0}.chooseColumnsOptions input{margin-top:2px}.chooseColumnsOptions button{margin-top:10px} + + diff --git a/deployed/convertforms/media/com_convertforms/css/servicelists.css b/deployed/convertforms/media/com_convertforms/css/servicelists.css new file mode 100644 index 00000000..f5d18809 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/servicelists.css @@ -0,0 +1,3 @@ +@import url(../font/css/cfont.css);.cf-working,.cflists .active{pointer-events:none}.viewLists{outline:none !important}.cflists{-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;padding:0;margin:5px 0 0 0;max-width:284px;border:solid 1px #ccc;background-color:#fff;font-weight:bold;display:none;-webkit-box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1);box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1);font-size:13px;border-radius:3px}.cflists *{-webkit-box-sizing:inherit;box-sizing:inherit}.cflists li{position:relative;overflow:hidden;font-size:1em;line-height:1}.cflists li:last-child a{border-bottom:none}.cflists a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:10px 10px;white-space:nowrap;width:100%;text-decoration:none !important;color:inherit;color:#444 !important;-webkit-transition:background 150ms ease;transition:background 150ms ease}.cflists a:hover,.cflists a .active{background-color:#fff}.cflists a:after{font-family:"cfont";margin-left:auto}.cflists .id{font-size:.9em;opacity:.6;font-weight:normal;padding-left:5px}.cflists .active a{background-color:#ebf8f3}.cflists .active a:after{content:"\e801";color:green} + + diff --git a/deployed/convertforms/media/com_convertforms/css/submissions.css b/deployed/convertforms/media/com_convertforms/css/submissions.css new file mode 100644 index 00000000..bfb3411e --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/css/submissions.css @@ -0,0 +1,3 @@ +.convertforms-submissions table{width:100%;margin:20px 0}.convertforms-submissions table thead{border-bottom:solid 2px #e2e2e2}.convertforms-submissions table thead th{border-top:none}.convertforms-submissions table td,.convertforms-submissions table th{text-align:left;padding:8px 10px;border:solid 1px #e2e2e2;border-left:none;border-right:none}.convertforms-submissions.list table tr:nth-child(odd) td{background-color:#f3f3f3}.convertforms-submissions.item table th{width:200px;font-weight:normal}.convertforms-submissions.item table td,.convertforms-submissions.item table th{padding-left:0;padding-right:0}.convertforms-submissions.item.print{padding:20px}.convertforms-submissions.item.print h1{margin-top:0}.convertforms-submissions .pagination{text-align:center}.convertforms-submissions .pagination .pagecounter{margin-top:10px}.convertforms-submissions .pagination [class^="icon-"]{margin:0}.submission_section{margin-top:30px}.submission_section h3{margin:0} + + diff --git a/deployed/convertforms/media/com_convertforms/font/config.json b/deployed/convertforms/media/com_convertforms/font/config.json new file mode 100644 index 00000000..8a1e0f0f --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/font/config.json @@ -0,0 +1,131 @@ +{ + "name": "cfont", + "css_prefix_text": "cf-icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "copyright": "Tassos.gr - Convert Forms Extension", + "glyphs": [ + { + "uid": "3e674995cacc2b09692c096ea7eb6165", + "css": "megaphone", + "code": 59392, + "src": "fontawesome" + }, + { + "uid": "12f4ece88e46abd864e40b35e05b11cd", + "css": "ok", + "code": 59393, + "src": "fontawesome" + }, + { + "uid": "d10920db2e79c997c5e783279291970c", + "css": "dots", + "code": 59394, + "src": "entypo" + }, + { + "uid": "5d2d07f112b8de19f2c0dbfec3e42c05", + "css": "spin", + "code": 59448, + "src": "fontelico" + }, + { + "uid": "06301c50d89b5d3e651bd07ebd6d7de7", + "css": "cancel", + "code": 59395, + "src": "mfglabs" + }, + { + "uid": "0ddd3e8201ccc7d41f7b7c9d27eca6c1", + "css": "link", + "code": 59416, + "src": "fontawesome" + }, + { + "uid": "ecf8edb95c3f45eb433b4cce7ba9f740", + "css": "users", + "code": 59398, + "src": "entypo" + }, + { + "uid": "d18071bbf8f0a8cec8d1f556c91c6af0", + "css": "heart", + "code": 59401, + "src": "entypo" + }, + { + "uid": "acf41aa4018e58d49525665469e35665", + "css": "thumbs-up", + "code": 59399, + "src": "fontawesome" + }, + { + "uid": "c76b7947c957c9b78b11741173c8349b", + "css": "attention", + "code": 59415, + "src": "fontawesome" + }, + { + "uid": "ce3cf091d6ebd004dd0b52d24074e6e3", + "css": "help", + "code": 61736, + "src": "fontawesome" + }, + { + "uid": "c8585e1e5b0467f28b70bce765d5840c", + "css": "copy", + "code": 61637, + "src": "fontawesome" + }, + { + "uid": "44e04715aecbca7f266a17d5a7863c68", + "css": "plus-1", + "code": 59396, + "src": "fontawesome" + }, + { + "uid": "53ed8570225581269cd7eff5795e8bea", + "css": "unhappy", + "code": 59397, + "src": "fontelico" + }, + { + "uid": "9dc654095085167524602c9acc0c5570", + "css": "left-dir", + "code": 59400, + "src": "fontawesome" + }, + { + "uid": "8704cd847a47b64265b8bb110c8b4d62", + "css": "down-open", + "code": 59405, + "src": "entypo" + }, + { + "uid": "9c7ff134960bb5a82404e4aeaab366d9", + "css": "up-open", + "code": 59408, + "src": "entypo" + }, + { + "uid": "eeadb020bb75d089b25d8424aabe19e0", + "css": "minus", + "code": 59402, + "src": "fontawesome" + }, + { + "uid": "4ba33d2607902cf690dd45df09774cb0", + "css": "plus", + "code": 59404, + "src": "fontawesome" + }, + { + "uid": "559647a6f430b3aeadbecd67194451dd", + "css": "menu", + "code": 61641, + "src": "fontawesome" + } + ] +} \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/font/css/cfont.css b/deployed/convertforms/media/com_convertforms/font/css/cfont.css new file mode 100644 index 00000000..f6424a05 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/font/css/cfont.css @@ -0,0 +1,77 @@ +@font-face { + font-family: 'cfont'; + src: url('../font/cfont.eot?92131453'); + src: url('../font/cfont.eot?92131453#iefix') format('embedded-opentype'), + url('../font/cfont.woff2?92131453') format('woff2'), + url('../font/cfont.woff?92131453') format('woff'), + url('../font/cfont.ttf?92131453') format('truetype'), + url('../font/cfont.svg?92131453#cfont') format('svg'); + font-weight: normal; + font-style: normal; +} +/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ +/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ +/* +@media screen and (-webkit-min-device-pixel-ratio:0) { + @font-face { + font-family: 'cfont'; + src: url('../font/cfont.svg?92131453#cfont') format('svg'); + } +} +*/ + + [class^="cf-icon-"]:before, [class*=" cf-icon-"]:before { + font-family: "cfont"; + font-style: normal; + font-weight: normal; + speak: never; + + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .2em; + text-align: center; + /* opacity: .8; */ + + /* For safety - reset parent styles, that can break glyph codes*/ + font-variant: normal; + text-transform: none; + + /* fix buttons height, for twitter bootstrap */ + line-height: 1em; + + /* Animation center compensation - margins should be symmetric */ + /* remove if not needed */ + margin-left: .2em; + + /* you can be more comfortable with increased icons size */ + /* font-size: 120%; */ + + /* Font smoothing. That was taken from TWBS */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + /* Uncomment for 3D effect */ + /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ +} + +.cf-icon-megaphone:before { content: '\e800'; } /* '' */ +.cf-icon-ok:before { content: '\e801'; } /* '' */ +.cf-icon-dots:before { content: '\e802'; } /* '' */ +.cf-icon-cancel:before { content: '\e803'; } /* '' */ +.cf-icon-plus-1:before { content: '\e804'; } /* '' */ +.cf-icon-unhappy:before { content: '\e805'; } /* '' */ +.cf-icon-users:before { content: '\e806'; } /* '' */ +.cf-icon-thumbs-up:before { content: '\e807'; } /* '' */ +.cf-icon-left-dir:before { content: '\e808'; } /* '' */ +.cf-icon-heart:before { content: '\e809'; } /* '' */ +.cf-icon-minus:before { content: '\e80a'; } /* '' */ +.cf-icon-plus:before { content: '\e80c'; } /* '' */ +.cf-icon-down-open:before { content: '\e80d'; } /* '' */ +.cf-icon-up-open:before { content: '\e810'; } /* '' */ +.cf-icon-attention:before { content: '\e817'; } /* '' */ +.cf-icon-link:before { content: '\e818'; } /* '' */ +.cf-icon-spin:before { content: '\e838'; } /* '' */ +.cf-icon-copy:before { content: '\f0c5'; } /* '' */ +.cf-icon-menu:before { content: '\f0c9'; } /* '' */ +.cf-icon-help:before { content: '\f128'; } /* '' */ \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/font/font/cfont.eot b/deployed/convertforms/media/com_convertforms/font/font/cfont.eot new file mode 100644 index 00000000..38cd5cbd Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/font/font/cfont.eot differ diff --git a/deployed/convertforms/media/com_convertforms/font/font/cfont.svg b/deployed/convertforms/media/com_convertforms/font/font/cfont.svg new file mode 100644 index 00000000..c1b2d472 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/font/font/cfont.svg @@ -0,0 +1,50 @@ + + + +Copyright (C) 2020 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/font/font/cfont.ttf b/deployed/convertforms/media/com_convertforms/font/font/cfont.ttf new file mode 100644 index 00000000..1f244227 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/font/font/cfont.ttf differ diff --git a/deployed/convertforms/media/com_convertforms/font/font/cfont.woff b/deployed/convertforms/media/com_convertforms/font/font/cfont.woff new file mode 100644 index 00000000..5127a197 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/font/font/cfont.woff differ diff --git a/deployed/convertforms/media/com_convertforms/font/font/cfont.woff2 b/deployed/convertforms/media/com_convertforms/font/font/cfont.woff2 new file mode 100644 index 00000000..e43ac26c Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/font/font/cfont.woff2 differ diff --git a/deployed/convertforms/media/com_convertforms/img/hcaptcha_dark.png b/deployed/convertforms/media/com_convertforms/img/hcaptcha_dark.png new file mode 100644 index 00000000..69e07991 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/hcaptcha_dark.png differ diff --git a/deployed/convertforms/media/com_convertforms/img/hcaptcha_dark_compact.png b/deployed/convertforms/media/com_convertforms/img/hcaptcha_dark_compact.png new file mode 100644 index 00000000..bd044c64 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/hcaptcha_dark_compact.png differ diff --git a/deployed/convertforms/media/com_convertforms/img/hcaptcha_light.png b/deployed/convertforms/media/com_convertforms/img/hcaptcha_light.png new file mode 100644 index 00000000..ae1af6ce Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/hcaptcha_light.png differ diff --git a/deployed/convertforms/media/com_convertforms/img/hcaptcha_light_compact.png b/deployed/convertforms/media/com_convertforms/img/hcaptcha_light_compact.png new file mode 100644 index 00000000..a0ddf6fc Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/hcaptcha_light_compact.png differ diff --git a/deployed/convertforms/media/com_convertforms/img/logo.svg b/deployed/convertforms/media/com_convertforms/img/logo.svg new file mode 100644 index 00000000..90f153bb --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/img/logo.svg @@ -0,0 +1 @@ +logo2 \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/img/recaptcha_dark.png b/deployed/convertforms/media/com_convertforms/img/recaptcha_dark.png new file mode 100644 index 00000000..d2927bf7 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/recaptcha_dark.png differ diff --git a/deployed/convertforms/media/com_convertforms/img/recaptcha_invisible.png b/deployed/convertforms/media/com_convertforms/img/recaptcha_invisible.png new file mode 100644 index 00000000..594415f7 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/recaptcha_invisible.png differ diff --git a/deployed/convertforms/media/com_convertforms/img/recaptcha_light.png b/deployed/convertforms/media/com_convertforms/img/recaptcha_light.png new file mode 100644 index 00000000..bd2cf9b2 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/img/recaptcha_light.png differ diff --git a/deployed/convertforms/media/com_convertforms/js/admin.js b/deployed/convertforms/media/com_convertforms/js/admin.js new file mode 100644 index 00000000..8aa2daf6 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/admin.js @@ -0,0 +1,2 @@ +!function(){var a=/\s/g,r=/>/g,d=/ .modal").forEach(function(e){d(e).on("show.bs.modal",function(){d(e).appendTo("body")})})},this.initEditorFields=function(){tinyMCE.remove(),tinyMCE.init({init_instance_callback:function(e){e.on("ExecCommand",function(){tinyMCE.triggerSave(),a()}),e.on("blur",function(){tinyMCE.triggerSave(),a()})},content_css:i.root+"templates/system/css/editor.css",document_base_url:i.root,height:"170",plugins:"textcolor, code, colorpicker, fullscreen, link, image",selector:".editorx",toolbar1:"fontsizeselect styleselect link unlink image mybutton",toolbar2:"forecolor | bold italic underline | alignleft aligncenter alignright | code fullscreen",fontsize_formats:"10px 11px 12px 14px 16px 18px 20px 22px 24px 26px 28px 30px 32px 34px 36px 38px 40px 42px 46px 48px 50px 52px",mode:"specific_textareas",entity_encoding:"raw",forced_root_block:"",toolbar_items_size:"small",statusbar:!1,menubar:!1,inline_styles:!0,force_br_newlines:!1,paste_data_images:!0,importcss_append:!0,image_advtab:!0,valid_children:"+div[style]"})},this.loadGoogleFont=function(e){-1').attr("href",e))},this.loadScript=function(e,t){var n;document.querySelector('script[src="'+e+'"]')?console.log("Script is already loaded",e):((n=document.createElement("script")).type="text/javascript",n.readyState?n.onreadystatechange=function(){"loaded"!=n.readyState&&"complete"!=n.readyState||(n.onreadystatechange=null,t())}:n.onload=function(){t()},e=-1 span",function(){var e=t(this).closest(".control-group");input=e.find("input"),btn=e.find(".cf-layout-btn"),value=t.trim(input.val()),css_class=t(this).attr("class"),value=0 .item[data-key="+t+"]").remove(),o.find(".fmItem[data-key="+t+"]").remove(),o.trigger("fieldsUpdate"),c.emitEvent("update"),n.data("focusnext")&&((e=o.find(".fmItems > .fmItem:first-child").attr("data-key"))?i(e):s("fmaddField"))),!1}),a(document).on("click",".copyField",function(){return function(e){var t=o.find(".fmItems > .fmItem[data-key="+e+"]");field_type=t.find("input[id$=_type]").val(),field_data=t.find("input, select, textarea"),formControl=l(e);var i={};a.map(field_data.serializeArray(),function(e,t){var n=e.name.replace(formControl,"field"),e=e.value;"field[name]"==n&&(e+="_copy"+Math.random().toString(36).substr(2,4)),"field[key]"==n&&(e=o.attr("data-nextid")),i[n]=e}),i.formcontrol=encodeURIComponent(l()),i.copyfield=e,d(i)}(a(this).closest("div").attr("data-key")),!1}),o.on("fieldsUpdate",function(e){$builder.trigger("renderForm")}),o.on("afterAddField",function(){key=parseInt(o.attr("data-nextid"));var e=a(".fmItem[data-key="+key+"]");i(key),isJ4||o.find(".hasPopover").popover({html:!0,trigger:"hover focus",container:"body"}),isJ4?(e.get(0).dispatchEvent(new CustomEvent("joomla:updated",{bubbles:!0,cancelable:!0})),ConvertFormsBuilder.initEditorFields()):(a(document).trigger("subform-row-add"),e=(e=e)||document,a(e).find(".minicolors").each(function(){var e=a(this),t="color"!==e.data("validate")&&e.data("format")||"hex";e.minicolors({control:e.data("control")||"hue",format:"rgba"===t?"rgb":t,keywords:e.data("keywords")||"",opacity:"rgba"===t,position:e.data("position")||"default",theme:e.data("theme")||"bootstrap"})})),key+=1,o.attr("data-nextid",key)}),$builder.on("controlGroupClick",function(e,t){i(t)}),document.addEventListener("change",function(e){e=e.target.closest(".fmItem");e&&(n(e.dataset.key),c.emitEvent("update"))});var c={emitEvent:function(e,t){builder.dispatchEvent(new CustomEvent("fields."+e,{detail:t}))},getFieldsArray:function(){var e=a(".fmItems .fmItem");if(e.length){var o=[];return e.each(function(){var e=a(this),t=e.find("input[id$=__name]").val(),n=e.find("input[id$=__type]").val(),e=e.data("key"),i={id:e,name:t,label:r(e)+" ("+e+")",type:n,shortcode:t?"{field."+t+"}":null};["radio","dropdown","checkbox"].includes(n)&&((e=document.querySelector('.fmItems .fmItem[data-key="'+e+'"]').querySelector(".nr_choices").querySelectorAll(".nr-choice-item"))&&(i.options=[]),e.forEach(function(e){var t=e.querySelector(".nr-choice-label").value;t&&(e=e.querySelector(".nr-choice-value").value,i.options.push({label:t,value:e||t}))})),o.push(i)}),o}}};window.ConvertFormsBuilder.FieldsHelper=c}),document.addEventListener("DOMContentLoaded",function(){var t=document.querySelector("#formname"),e=document.querySelector("#jform_name");autosizeInput(t),changeValue=function(e){t.value=e,t.dispatchEvent(new Event("change")),t.dispatchEvent(new Event("input"))},t.addEventListener("input",function(){e.value=this.value}),t.addEventListener("blur",function(){this.value||changeValue(this.dataset.fallback)}),e.addEventListener("input",function(){changeValue(this.value)})}),jQuery(function(a){var e=a(".st");a(".fm").on("fieldsUpdate",function(){e.trigger("update")}),a(document).on("subform-row-add",function(){e.trigger("update")}),a(document).on("smartTagsBoxBeforeRender",function(e,t,n){var i,o=n.closest(".fmItem").length;skipFields=-1<["jform_text","jform_footer"].indexOf(n.prev().attr("id")),skip=o||skipFields,skip||(i={},o={Submission:{"{submission.id}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_ID"),"{submission.user_id}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_USER_ID"),"{submission.date}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_DATE"),"{submission.status}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_STATUS"),"{submission.campaign_id}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_CAMPAIGN_ID"),"{submission.form_id}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_FORM_ID"),"{submission.visitor_id}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSION_VISITOR_ID"),"{submissions.count}":Joomla.JText._("COM_CONVERTFORMS_SUBMISSIONS_COUNT")}},ConvertFormsBuilder.FieldsHelper.getFieldsArray().filter(function(e){return void 0!==e.name}).forEach(function(e){var t;i[e.shortcode]=e.label,"dropdown"!=e.type&&"radio"!=e.type||(t="{field."+e.name+".label}",i[t]=e.label+" Label")}),i["{all_fields}"]=Joomla.JText._("COM_CONVERTFORMS_ALL_FIELDS"),i["{all_fields_filled}"]=Joomla.JText._("COM_CONVERTFORMS_ALL_FILLED_ONLY_FIELDS"),o.Fields=i,a.extend(!0,t,o))})}),jQuery(function(e){var t=e(".nrEditor");function n(){if(state=function(){if($tabs=t.find(".nav-tabs"),0!=$tabs.children().length)return tab=$tabs.find("li.active a").attr("href").replace("#",""),panel=t.find(".tab-pane#"+tab+" .accordion-body.in.collapse"),panel=panel.length?(panel=panel.parent().attr("class").split(" "),panel[1]):"",tab+"-"+panel}(),null!=state){formID=t.find("form").attr("pk");try{Cookies.set("ConvertFormsState"+formID,state)}catch(e){console.log(e)}}}document.querySelector("body.task-display")||(t.find(".accordion").on("shown.bs.collapse hidden.bs.collapse",function(){n()}),t.find(".nav-tabs").on("shown.bs.tab",function(){n()}))}); + diff --git a/deployed/convertforms/media/com_convertforms/js/checkbox.js b/deployed/convertforms/media/com_convertforms/js/checkbox.js new file mode 100644 index 00000000..c288b5ee --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/checkbox.js @@ -0,0 +1,2 @@ +!function(e){"use strict";function c(e){var c,t;e.classList.contains("cf-input")&&"checkbox"===e.type&&((c=e.closest(".cf-control-group")).querySelectorAll(".cf-checkbox-group-required").length<2||(e=c.querySelectorAll("input[type=checkbox]"),(t=0==c.querySelectorAll("input[type=checkbox]:checked").length)&&"false"==c.dataset.requiredOverride||e.forEach(function(e){e.required=t})))}ConvertForms.Helper.onReady(function(){e.querySelectorAll(".cf-list > .cf-checkbox-group-required:first-child input[type=checkbox]").forEach(function(e){c(e)}),e.addEventListener("change",function(e){c(e.target)})})}(document); + diff --git a/deployed/convertforms/media/com_convertforms/js/choices.js b/deployed/convertforms/media/com_convertforms/js/choices.js new file mode 100644 index 00000000..a2733c49 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/choices.js @@ -0,0 +1,2 @@ +jQuery(function(c){var i="This item must contain at least one choice";function a(){c(document).trigger("nrChoicesUpdate"),ConvertFormsBuilder.FieldsHelper.emitEvent("update")}c(document).on("change",".nr-choice-item input.nr-choice-default",function(e){var t=c(this);t.closest(".nr_choices").find("input[type=radio]").not(t).prop("checked",!1).trigger("update"),a()}),c(document).on("change",".nr-choice-settings .showvalues",function(e){var t=c(this),n=t.closest(".nr-choice-settings").prev(),t=t.is(":checked");n.find("input.nr-choice-value").css({display:t?"block":"none"})}),c(document).on("change",".nr-choice-settings .showcalcvalues",function(e){var t=c(this),n=t.closest(".nr-choice-settings").prev(),t=t.is(":checked");n.find("input.nr-choice-calc-value").css({display:t?"block":"none"})}),c(document).on("click",".nr-choice-remove",function(e){var t,n;e.preventDefault(),t=c(this),n=t.closest(".nr_choices"),e=parseInt(n.find(".nr-choice-item").length),n=parseInt(n.data("min")),e!=n?(t.closest(".nr-choice-item").remove(),a()):alert(i)}),c(document).on("click",".nr-choice-add",function(e){e.preventDefault(),function(e){var t=e.closest(".nr-choice-item"),n=t.find("input[type=radio]").is(":checked"),c=e.closest(".nr_choices"),i=parseInt(c.attr("data-nextid")),o=c.attr("data-fieldname"),e=t.clone().insertAfter(t);repeatableField=c.closest(".subform-repeatable-group"),repeatableField.length&&repeatableField[0].hasAttribute("data-new")&&(repeatableIndex=repeatableField.data("group"),o=o.replace("[fieldsX]","["+repeatableIndex+"]"));e.attr("data-id",i),e.find("input.nr-choice-label").val("").attr("name",o+"[choices]["+i+"][label]"),e.find("input.nr-choice-value").val("").attr("name",o+"[choices]["+i+"][value]"),e.find("input.nr-choice-default").attr("name",o+"[choices]["+i+"][default]").prop("checked",!1),1==n&&t.find("input[type=radio]").prop("checked",!0);i++,c.attr("data-nextid",i),a()}(c(this))}),document.querySelector(".nrEditor").addEventListener("fields.displayOptions",function(e){e=e.detail.el.querySelector(".nr_choices");e&&(ConvertFormsBuilder.loadStylesheet("media/com_convertforms/css/choices.css"),new Sortable(e,{animation:150,handle:".nr-choice-sort",onUpdate:function(){a()}}))})}); + diff --git a/deployed/convertforms/media/com_convertforms/js/cookie.js b/deployed/convertforms/media/com_convertforms/js/cookie.js new file mode 100644 index 00000000..12fa0eeb --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/cookie.js @@ -0,0 +1,156 @@ +/*! + * JavaScript Cookie v2.1.3 + * https://github.com/js-cookie/js-cookie + * + * Copyright 2006, 2015 Klaus Hartl & Fagner Brack + * Released under the MIT license + */ +;(function (factory) { + var registeredInModuleLoader = false; + if (typeof define === 'function' && define.amd) { + define(factory); + registeredInModuleLoader = true; + } + if (typeof exports === 'object') { + module.exports = factory(); + registeredInModuleLoader = true; + } + if (!registeredInModuleLoader) { + var OldCookies = window.Cookies; + var api = window.Cookies = factory(); + api.noConflict = function () { + window.Cookies = OldCookies; + return api; + }; + } +}(function () { + function extend () { + var i = 0; + var result = {}; + for (; i < arguments.length; i++) { + var attributes = arguments[ i ]; + for (var key in attributes) { + result[key] = attributes[key]; + } + } + return result; + } + + function init (converter) { + function api (key, value, attributes) { + var result; + if (typeof document === 'undefined') { + return; + } + + // Write + + if (arguments.length > 1) { + attributes = extend({ + path: '/' + }, api.defaults, attributes); + + if (typeof attributes.expires === 'number') { + var expires = new Date(); + expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5); + attributes.expires = expires; + } + + try { + result = JSON.stringify(value); + if (/^[\{\[]/.test(result)) { + value = result; + } + } catch (e) {} + + if (!converter.write) { + value = encodeURIComponent(String(value)) + .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); + } else { + value = converter.write(value, key); + } + + key = encodeURIComponent(String(key)); + key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent); + key = key.replace(/[\(\)]/g, escape); + + return (document.cookie = [ + key, '=', value, + attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + attributes.path ? '; path=' + attributes.path : '', + attributes.domain ? '; domain=' + attributes.domain : '', + attributes.secure ? '; secure' : '' + ].join('')); + } + + // Read + + if (!key) { + result = {}; + } + + // To prevent the for loop in the first place assign an empty array + // in case there are no cookies at all. Also prevents odd result when + // calling "get()" + var cookies = document.cookie ? document.cookie.split('; ') : []; + var rdecode = /(%[0-9A-Z]{2})+/g; + var i = 0; + + for (; i < cookies.length; i++) { + var parts = cookies[i].split('='); + var cookie = parts.slice(1).join('='); + + if (cookie.charAt(0) === '"') { + cookie = cookie.slice(1, -1); + } + + try { + var name = parts[0].replace(rdecode, decodeURIComponent); + cookie = converter.read ? + converter.read(cookie, name) : converter(cookie, name) || + cookie.replace(rdecode, decodeURIComponent); + + if (this.json) { + try { + cookie = JSON.parse(cookie); + } catch (e) {} + } + + if (key === name) { + result = cookie; + break; + } + + if (!key) { + result[name] = cookie; + } + } catch (e) {} + } + + return result; + } + + api.set = api; + api.get = function (key) { + return api.call(api, key); + }; + api.getJSON = function () { + return api.apply({ + json: true + }, [].slice.call(arguments)); + }; + api.defaults = {}; + + api.remove = function (key, attributes) { + api(key, '', extend(attributes, { + expires: -1 + })); + }; + + api.withConverter = init; + + return api; + } + + return init(function () {}); +})); diff --git a/deployed/convertforms/media/com_convertforms/js/export.js b/deployed/convertforms/media/com_convertforms/js/export.js new file mode 100644 index 00000000..2cd6e98e --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/export.js @@ -0,0 +1,2 @@ +exportModal=function(o){detectViewFilters=function(e){var t;"conversions"==o&&(t=getTableCheckedIDs(),e.dataset.filter_id=0',jQuery(e).modal("show")},getTableCheckedIDs=function(){var e=document.querySelectorAll('table tbody input[type="checkbox"]:checked'),t=[];return e.length&&e.forEach(function(e){t.push(e.value)}),t},init()}; + diff --git a/deployed/convertforms/media/com_convertforms/js/field_editor.js b/deployed/convertforms/media/com_convertforms/js/field_editor.js new file mode 100644 index 00000000..4d6b96d5 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/field_editor.js @@ -0,0 +1,2 @@ +!function(){"use strict";document.addEventListener("ConvertFormsBeforeSubmit",function(e){e=e.detail.instance.selector.querySelectorAll('.cf-control-group[data-type="editor"] textarea');0!=e.length&&e.forEach(function(e){var t=Joomla.editors.instances[e.id];t&&(e.value=t.getValue())})})}(); + diff --git a/deployed/convertforms/media/com_convertforms/js/field_fileupload.js b/deployed/convertforms/media/com_convertforms/js/field_fileupload.js new file mode 100644 index 00000000..796d06ca --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/field_fileupload.js @@ -0,0 +1,2 @@ +ConvertForms.Helper.onReady(function(e){var i,s;"undefined"!=typeof Dropzone&&(i=ConvertForms.Helper.getBaseURL("task=field.ajax&field_type=fileupload"),s=ConvertForms.Helper.getCSRFToken(),Dropzone.autoDiscover=!1,e.forEach(function(a){var e=a.querySelectorAll(".cfupload"),l=[];e.forEach(function(o){var e=o.closest(".cf-control-input").querySelector(".cfup-tmpl"),t=e.innerHTML;e.closest(".cf-control-input").removeChild(e);var r=(r=parseFloat(o.getAttribute("data-maxfilesize")))||null,e=(e=parseInt(o.getAttribute("data-maxfiles")))||null,n=a.querySelector("button.cf-btn"),e=new Dropzone(o,((e={url:i,previewTemplate:t,maxFilesize:r,uploadMultiple:1!=e,maxFiles:e,acceptedFiles:o.getAttribute("data-acceptedfiles"),autoProcessQueue:!0,parallelUploads:1,filesizeBase:1e3,createImageThumbnails:!1,timeout:0,dictFallbackMessage:ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_FALLBACK_MESSAGE"),dictInvalidFileType:ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_INVALID_FILE")}).dictFallbackMessage=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_FALLBACK_MESSAGE"),e.dictFileTooBig=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_FILETOOBIG"),e.dictResponseError=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_RESPONSE_ERROR"),e.dictCancelUpload=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_CANCEL_UPLOAD"),e.dictCancelUploadConfirmation=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_CANCEL_UPLOAD_CONFIRMATION"),e.dictRemoveFile=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_REMOVE_FILE"),e.dictMaxFilesExceeded=ConvertForms.Helper.text("COM_CONVERTFORMS_UPLOAD_MAX_FILES_EXCEEDED"),e));n&&(e.on("queuecomplete",function(){n.classList.remove("cf-disabled")}),e.on("processing",function(){n.classList.add("cf-disabled")})),e.on("sending",function(e,t,r){r.append("form_id",o.closest("form").querySelector("input[name='cf[form_id]']").value),r.append("field_key",o.getAttribute("data-key")),t.setRequestHeader("X-CSRF-Token",s),r.append(s,1)}),e.on("success",function(e){var t=e.xhr.response;try{t=JSON.parse(t)}catch(e){var r=t.match(/{([^}]*)}/i);null!==r?t=JSON.parse(r[0]):alert("Error! "+e+"
"+t)}r=document.createElement("input");r.setAttribute("type","hidden"),r.setAttribute("name",o.dataset.name),r.setAttribute("value",t.file),e.previewTemplate.appendChild(r)}),l.push(e)}),a.addEventListener("beforeSubmit",function(e){var r;e.defaultPrevented||(r=0,l.forEach(function(e){var t=e.getQueuedFiles().length,e=e.getUploadingFiles().length;r=r+t+e}),0Error: '+e+"")}s(".viewLists").click(function(){var a=s(this),e=s(this).next(),t=s("#jform_service");if(formdata=s(".cf-service-fields input").add(t),!e.is(":visible")){for(var i=formdata.length-1;0<=i;i--)if(s(formdata[i]).prop("required")&&!s(formdata[i]).val()&&"jform_list"!=s(formdata[i]).attr("id")){var r=s(formdata[i]).attr("id");return void l("Please enter a valid "+s("label[for="+r+"]").text().trim())}return token=s("#adminForm input[name=task]").prev().attr("name"),s.ajax({type:"POST",url:"index.php?option=com_ajax&format=raw&plugin=ConvertForms&task=lists&"+token+"=1",headers:{"X-CSRF-Token":token},data:formdata.serialize(),beforeSend:function(){s(".cf-service-fields .alert").remove(),a.addClass("cf-working disabled")},complete:function(){a.removeClass("cf-working disabled")},success:function(t){if(t){t=s("
").html(t).text();try{t=s.parseJSON(t)}catch(e){l(e+"\n"+t)}var e,i;t.error?l(t.error):(e=a,t=t.lists,i="",s.each(t,function(e,t){i=i+'
  • '+t.name+' '+t.id+"
  • "}),$list=e.next(),$list.html(i).show(),value=e.closest("div").find("input").val(),value&&$list.find('span:contains("'+value+'")').closest("li").addClass("active"))}else l("Can't get lists")}}),!1}e.hide()}),s(document).on("click",".cflists a",function(){var e;return e=s(this),s(".cflists li").removeClass("active"),listID=e.find(".id").text(),e.closest("div").find("input").val(listID),e.parent().addClass("active"),e.closest("ul").hide(),!1})}); + diff --git a/deployed/convertforms/media/com_convertforms/js/site.js b/deployed/convertforms/media/com_convertforms/js/site.js new file mode 100644 index 00000000..f56b6dce --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/js/site.js @@ -0,0 +1,2 @@ +function _createForOfIteratorHelperLoose(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(r)return(r=r.call(e)).next.bind(r);if(Array.isArray(e)||(r=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0;return function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(r="Object"===r&&e.constructor?e.constructor.name:r)||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);rDon't miss a thing!
    Subscribe<\\/span><\\/span> to our newsletter<\\/span><\\/span><\\/div>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"0\",\"imageurl\":\"\",\"imagefile\":\"\",\"imgposition\":\"img-above\",\"imageautowidth\":\"auto\",\"imagewidth\":\"140\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-right\",\"formsize\":\"12\",\"formbgcolor\":\"rgba(195, 195, 195, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"12\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"13\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}" + } +] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_bar.jpg b/deployed/convertforms/media/com_convertforms/templates/diamond_bar.jpg new file mode 100644 index 00000000..fb305c8c Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/diamond_bar.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_inline.cnvf b/deployed/convertforms/media/com_convertforms/templates/diamond_inline.cnvf new file mode 100644 index 00000000..bf5f6183 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/diamond_inline.cnvf @@ -0,0 +1,10 @@ +[ + { + "id": "48", + "name": "Template: Diamond Inline", + "state": "1", + "created": "2018-01-17 16:34:14", + "ordering": "0", + "params": "{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"cf-two-thirds\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e86161\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"cf-one-third\"}},\"autowidth\":\"custom\",\"width\":\"600\",\"bgcolor\":\"rgba(238, 238, 238, 1)\",\"bgimage\":\"0\",\"bgurl\":\"https:\\/\\/thrivethemes.com\\/wp-content\\/themes\\/ignition-child\\/api_connections\\/assets\\/img\\/activecampaign.png\",\"bgfile\":\"images\\/joomla_black.png\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"

    Subscribe<\\/span><\\/h2>\\r\\n

    Lorem ipsum dolor sit amet, consectetur adipisicing
    tempor incididunt ut labore et dolore magna aliqua.
    quis nostrud exercitation ullamco laboris nisi ut
    consequat. Duis aute irure dolor in reprehenderit
    cillum dolore eu fugiat nulla pariatur. Excepteur
    <\\/span><\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\/convertforms\\/convertforms-03.png\",\"imgposition\":\"img-left\",\"imageautowidth\":\"auto\",\"imagewidth\":\"220\",\"imagesize\":\"6\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-bottom\",\"formsize\":\"6\",\"formbgcolor\":\"rgba(195, 195, 195, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"13\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"20\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}" + } +] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_inline.jpg b/deployed/convertforms/media/com_convertforms/templates/diamond_inline.jpg new file mode 100644 index 00000000..9fae921d Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/diamond_inline.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_inline_2.cnvf b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_2.cnvf new file mode 100644 index 00000000..4b5cf7d8 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_2.cnvf @@ -0,0 +1,10 @@ +[ + { + "id": "49", + "name": "Template: Diamond Inline 2", + "state": "1", + "created": "2018-01-17 16:38:35", + "ordering": "0", + "params": "{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"cf-two-thirds\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e86161\",\"textcolor\":\"#fff\",\"texthovercolor\":\"#fff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"cf-one-third\"}},\"autowidth\":\"custom\",\"width\":\"600\",\"bgcolor\":\"rgba(238, 238, 238, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"


    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmodtor incidint<\\/strong> utlabore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco.
    <\\/span><\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\/convertforms\\/convertforms-16.png\",\"imgposition\":\"img-above\",\"imageautowidth\":\"auto\",\"imagewidth\":\"150\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-bottom\",\"formsize\":\"6\",\"formbgcolor\":\"rgba(195, 195, 195, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"13\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"20\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}" + } +] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_inline_2.jpg b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_2.jpg new file mode 100644 index 00000000..afeaae6a Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_2.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_inline_3.cnvf b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_3.cnvf new file mode 100644 index 00000000..4756a503 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_3.cnvf @@ -0,0 +1 @@ +[{"id":"50","name":"Template: Diamond Inline 3","state":"1","created":"2018-01-17 16:40:57","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"text\",\"name\":\"NAME\",\"label\":\"Enter your name\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your name\",\"hidelabel\":\"1\",\"cssclass\":\"\",\"pattern\":\"\",\"browserautocomplete\":\"0\"},\"fields2\":{\"key\":\"2\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e86161\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"\"}},\"autowidth\":\"custom\",\"width\":\"600\",\"bgcolor\":\"rgba(238, 238, 238, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
    <\\\/span><\\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\\/convertforms\\\/convertforms-20.png\",\"imgposition\":\"img-above\",\"imageautowidth\":\"auto\",\"imagewidth\":\"500\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"-5\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-right\",\"formsize\":\"5\",\"formbgcolor\":\"rgba(195, 195, 195, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"12\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"13\",\"inputhpadding\":\"13\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_inline_3.jpg b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_3.jpg new file mode 100644 index 00000000..9fba631d Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/diamond_inline_3.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_sidebar.cnvf b/deployed/convertforms/media/com_convertforms/templates/diamond_sidebar.cnvf new file mode 100644 index 00000000..cd6f2de5 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/diamond_sidebar.cnvf @@ -0,0 +1 @@ +[{"id":"55","name":"Template: Diamond Sidebar","state":"1","created":"2018-01-17 16:58:15","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e86161\",\"textcolor\":\"#fff\",\"texthovercolor\":\"#fff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"\"}},\"autowidth\":\"custom\",\"width\":\"300\",\"bgcolor\":\"rgba(238, 238, 238, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"

    Lorem ipsum dolor sit amet, consect adipisicing elit, sed do eiusmod tempor.
    <\\\/span><\\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\\/convertforms\\\/convertforms-07.png\",\"imgposition\":\"img-above\",\"imageautowidth\":\"custom\",\"imagewidth\":\"140\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-bottom\",\"formsize\":\"5\",\"formbgcolor\":\"rgba(195, 195, 195, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"12\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"center\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"13\",\"inputhpadding\":\"13\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"Thank you\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/diamond_sidebar.jpg b/deployed/convertforms/media/com_convertforms/templates/diamond_sidebar.jpg new file mode 100644 index 00000000..56179b91 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/diamond_sidebar.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_bar.cnvf b/deployed/convertforms/media/com_convertforms/templates/ruby_bar.cnvf new file mode 100644 index 00000000..ba0fd2fc --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/ruby_bar.cnvf @@ -0,0 +1 @@ +[{"id":"59","name":"Template: Ruby Bar","state":"1","created":"2018-01-17 17:20:22","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"cf-two-fifths\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"text\",\"name\":\"name\",\"label\":\"Enter your name\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your name\",\"hidelabel\":\"1\",\"cssclass\":\"cf-two-fifths\",\"pattern\":\"\",\"browserautocomplete\":\"0\"},\"fields2\":{\"key\":\"2\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e47c57\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"cf-one-fifth\"}},\"autowidth\":\"custom\",\"width\":\"900\",\"bgcolor\":\"rgba(51, 51, 51, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"

    Don't miss a thing!
    Subscribe<\\\/span><\\\/span> to our newsletter<\\\/span><\\\/span><\\\/div>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"0\",\"imageurl\":\"\",\"imagefile\":\"\",\"imgposition\":\"img-above\",\"imageautowidth\":\"auto\",\"imagewidth\":\"140\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-right\",\"formsize\":\"12\",\"formbgcolor\":\"rgba(66, 66, 66, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"12\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"13\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_bar.jpg b/deployed/convertforms/media/com_convertforms/templates/ruby_bar.jpg new file mode 100644 index 00000000..e5173d60 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/ruby_bar.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_inline.cnvf b/deployed/convertforms/media/com_convertforms/templates/ruby_inline.cnvf new file mode 100644 index 00000000..8ac78fcd --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/ruby_inline.cnvf @@ -0,0 +1 @@ +[{"id":"51","name":"Template: Ruby Inline","state":"1","created":"2018-01-17 16:48:26","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"cf-two-thirds\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e47c57\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"cf-one-third\"}},\"autowidth\":\"custom\",\"width\":\"600\",\"bgcolor\":\"rgba(54, 54, 54, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"

    Lorem ipsum dolor sit amet, consectetur adipisicing
    tempor incididunt ut labore et dolore magna aliqua.
    quis nostrud exercitation ullamco laboris nisi ut
    consequat. Duis aute irure dolor in reprehenderit
    cillum dolore eu fugiat nulla pariatur. Excepteur
    <\\\/span><\\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\\/convertforms\\\/convertforms-02.png\",\"imgposition\":\"img-left\",\"imageautowidth\":\"auto\",\"imagewidth\":\"220\",\"imagesize\":\"6\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-bottom\",\"formsize\":\"6\",\"formbgcolor\":\"rgba(66, 66, 66, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"13\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"14\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_inline.jpg b/deployed/convertforms/media/com_convertforms/templates/ruby_inline.jpg new file mode 100644 index 00000000..78d4fbc6 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/ruby_inline.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_inline_2.cnvf b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_2.cnvf new file mode 100644 index 00000000..0ad1c217 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_2.cnvf @@ -0,0 +1 @@ +[{"id":"53","name":"Template: Ruby Inline 2","state":"1","created":"2018-01-17 16:51:24","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"cf-two-thirds\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e47c57\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"cf-one-third\"}},\"autowidth\":\"custom\",\"width\":\"600\",\"bgcolor\":\"rgba(54, 54, 54, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"


    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmodtor incidint<\\\/strong> utlabore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco.
    <\\\/span><\\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\\/convertforms\\\/convertforms-17.png\",\"imgposition\":\"img-above\",\"imageautowidth\":\"auto\",\"imagewidth\":\"150\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-bottom\",\"formsize\":\"6\",\"formbgcolor\":\"rgba(66, 66, 66, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"13\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"left\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"15\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_inline_2.jpg b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_2.jpg new file mode 100644 index 00000000..2c9173a1 Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_2.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_inline_3.cnvf b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_3.cnvf new file mode 100644 index 00000000..fafb03c0 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_3.cnvf @@ -0,0 +1 @@ +[{"id":"54","name":"Template: Ruby Inline 3","state":"1","created":"2018-01-17 16:55:48","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"text\",\"name\":\"name\",\"label\":\"Enter your name\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your name\",\"hidelabel\":\"1\",\"cssclass\":\"\",\"pattern\":\"\",\"browserautocomplete\":\"0\"},\"fields2\":{\"key\":\"2\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e47c57\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"\"}},\"autowidth\":\"custom\",\"width\":\"600\",\"bgcolor\":\"rgba(54, 54, 54, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"


    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmodtor incidint utlabore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco.<\\\/span>
    <\\\/span><\\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\\/convertforms\\\/convertforms-21.png\",\"imgposition\":\"img-above\",\"imageautowidth\":\"auto\",\"imagewidth\":\"150\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-right\",\"formsize\":\"6\",\"formbgcolor\":\"rgba(66, 66, 66, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"13\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"center\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"11\",\"inputhpadding\":\"16\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"You've successfully subscribed. Thank you!\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_inline_3.jpg b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_3.jpg new file mode 100644 index 00000000..c0c8531c Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/ruby_inline_3.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_sidebar.cnvf b/deployed/convertforms/media/com_convertforms/templates/ruby_sidebar.cnvf new file mode 100644 index 00000000..e2447625 --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/ruby_sidebar.cnvf @@ -0,0 +1 @@ +[{"id":"56","name":"Template: Ruby Sidebar","state":"1","created":"2018-01-17 16:59:11","ordering":"0","params":"{\"fields\":{\"fields0\":{\"key\":\"0\",\"type\":\"email\",\"name\":\"email\",\"label\":\"Enter your email\",\"description\":\"\",\"required\":\"1\",\"value\":\"\",\"placeholder\":\"Enter your email\",\"hidelabel\":\"1\",\"cssclass\":\"\",\"browserautocomplete\":\"0\"},\"fields1\":{\"key\":\"1\",\"type\":\"submit\",\"text\":\"Sign up\",\"align\":\"full\",\"btnstyle\":\"flat\",\"fontsize\":\"14\",\"shadow\":\"0\",\"bg\":\"#e47c57\",\"textcolor\":\"#ffffff\",\"texthovercolor\":\"#ffffff\",\"borderradius\":\"5\",\"vpadding\":\"11\",\"hpadding\":\"15\",\"cssclass\":\"\"}},\"autowidth\":\"custom\",\"width\":\"300\",\"bgcolor\":\"rgba(54, 54, 54, 1)\",\"bgimage\":\"0\",\"bgurl\":\"\",\"bgfile\":\"\",\"bgrepeat\":\"repeat\",\"bgsize\":\"auto\",\"bgposition\":\"center top\",\"text\":\"

    Lorem ipsum dolor sit amet, consect adipisicing elit, sed do eiusmod tempor. <\\\/span>
    <\\\/span><\\\/p>\",\"font\":\"Arial\",\"padding\":\"0\",\"borderradius\":\"0\",\"borderstyle\":\"none\",\"bordercolor\":\"#f28395\",\"borderwidth\":\"10\",\"image\":\"1\",\"imageurl\":\"\",\"imagefile\":\"images\\\/convertforms\\\/convertforms-12.png\",\"imgposition\":\"img-above\",\"imageautowidth\":\"custom\",\"imagewidth\":\"140\",\"imagesize\":\"5\",\"imagehposition\":\"0\",\"imagevposition\":\"0\",\"imagealt\":\"\",\"hideimageonmobile\":\"0\",\"formposition\":\"form-bottom\",\"formsize\":\"5\",\"formbgcolor\":\"rgba(66, 66, 66, 1)\",\"labelscolor\":\"#888888\",\"labelsfontsize\":\"13\",\"inputfontsize\":\"12\",\"inputcolor\":\"#333333\",\"inputbg\":\"#eeeeee\",\"inputalign\":\"center\",\"inputbordercolor\":\"#ffffff\",\"inputborderradius\":\"5\",\"inputvpadding\":\"13\",\"inputhpadding\":\"13\",\"inputshadow\":\"0\",\"footer\":\"\",\"customcss\":\"\",\"customcode\":\"\",\"classsuffix\":\"\",\"sendnotifications\":\"0\",\"emails\":\"\",\"campaign\":\"29\",\"onsuccess\":\"msg\",\"successmsg\":\"Thank you\",\"resetform\":\"1\",\"hideform\":\"1\",\"successurl\":\"\",\"passdata\":\"0\"}"}] \ No newline at end of file diff --git a/deployed/convertforms/media/com_convertforms/templates/ruby_sidebar.jpg b/deployed/convertforms/media/com_convertforms/templates/ruby_sidebar.jpg new file mode 100644 index 00000000..7bcc59bf Binary files /dev/null and b/deployed/convertforms/media/com_convertforms/templates/ruby_sidebar.jpg differ diff --git a/deployed/convertforms/media/com_convertforms/templates/templates.xml b/deployed/convertforms/media/com_convertforms/templates/templates.xml new file mode 100644 index 00000000..c599e4ab --- /dev/null +++ b/deployed/convertforms/media/com_convertforms/templates/templates.xml @@ -0,0 +1,39 @@ + + + +

    + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/deployed/convertforms/media/plg_system_nrframework/css/assignmentselection.css b/deployed/convertforms/media/plg_system_nrframework/css/assignmentselection.css new file mode 100644 index 00000000..34eed174 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/assignmentselection.css @@ -0,0 +1,3 @@ +.assign{background-color:#F0F0F0;border:solid 1px #DEDEDE;color:inherit !important;padding:10px;margin-bottom:-1px}.assign .control-group{display:-webkit-box;display:-ms-flexbox;display:flex}.assign .control-group .control-label{max-width:260px;padding:0}.assign .control-group>div{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1}.assign .control-group.assignmentselection{-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0}.assign .control-group.assignmentselection label{margin:0;padding:0}.assign .control-group.assignmentselection .chzn-color-state.chzn-single[rel="value_0"]{background:none !important;color:inherit !important}.assign .control-group.assignmentselection .chzn-color-state.chzn-single[rel="value_2"]{background-color:#bd362f !important;color:#fff}.assign .assign-options .control-group{margin:10px 0 0 0}.assign .assign-options .control-label>label{padding-top:5px}.assign .btn_ignore.btn.active{background-color:#EFEFEF;color:#555555}.assign .btn_exclude.btn.active{background-color:#942a25;border-color:#942a25}.assign .btn{min-width:60px}.assign .controls:empty{display:none}.assign .well-note{font-size:.9em}.assign-group{padding-top:20px;margin-top:20px}.assign-group p{opacity:.7;margin-bottom:15px}.assign-group>label{font-weight:bold;font-size:16px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/conditionbuilder.css b/deployed/convertforms/media/plg_system_nrframework/css/conditionbuilder.css new file mode 100644 index 00000000..a8c533d1 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/conditionbuilder.css @@ -0,0 +1,3 @@ +.cb{-webkit-box-sizing:border-box;box-sizing:border-box}.cb *{-webkit-box-sizing:inherit;box-sizing:inherit}.cb.disabled{pointer-events:none}.cb input[type="text"],.cb input[type="number"]{height:auto}@media (min-width: 1200px){.cb input.span12,.cb textarea.span12{width:100%}}.cb-group{background-color:#f9f9f9;border:solid 1px #dedcdc;-webkit-box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1);box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1)}.cb-group:not(:last-child){position:relative;margin-bottom:75px}.cb-group:not(:last-child):after{content:"AND";text-align:center;width:100%;position:absolute;bottom:-75px;height:75px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:-1}.cb-group:not(:last-child):before{content:"\2013\2013\2013\00a0\00a0\00a0\00a0\2013\2013\2013";white-space:nowrap;font-size:10px;letter-spacing:3px;font-family:Georgia;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:70px;position:absolute;bottom:-75px;left:0;right:0;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:.5;z-index:-1}.cb-item{padding:15px;position:relative}.cb-item:not(:last-child){border-bottom:dashed 1px #dedcdc}.cb-item:not(:last-child):after{content:"OR";position:absolute;font-family:Arial;bottom:-10px;left:0;right:0;background-color:#f9f9f9;text-align:center;margin:0 auto;width:40px}.cb-item-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.cb-item-toolbar .cb-dropdown .controls,.cb-item-toolbar .cb-dropdown .control-group{margin:0}.cb-item-toolbar .cb-item-buttons{margin-left:5px}.cb-item-toolbar .cb-item-buttons [class^="icon-"]{margin:0}.form-horizontal .cb-item-content>.control-group{margin-bottom:10px}.form-horizontal .cb-item-content>.control-group:first-child{margin-top:15px}.form-horizontal .cb-item-content>.control-group:last-child{margin-bottom:0} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/fields.css b/deployed/convertforms/media/plg_system_nrframework/css/fields.css new file mode 100644 index 00000000..a89992e1 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/fields.css @@ -0,0 +1,3 @@ +.nr-well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#F0F0F0;border:1px solid #F0F0F0;border-radius:3px;position:relative}.nr-well .well-desc{margin-bottom:25px;color:#555}.nr-well h4{font-size:16px;margin-top:0}.nr-well>.control-group:last-child{margin-bottom:0}.nr-well .controls:empty,.nr-well .control-label:empty,.nr-well .control-group:empty{display:none}.nr-well .wellbtn{position:absolute;top:0;right:0;margin:19px}.nr-well .wellbtn span{margin:0}.well-note{font-size:11px;line-height:1.5;opacity:.7}.input-xmini{width:30px}.input-flex{display:-webkit-box;display:-ms-flexbox;display:flex;margin:0 -5px}.input-flex .input-flex-item{padding:0 5px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/images-selector-field.css b/deployed/convertforms/media/plg_system_nrframework/css/images-selector-field.css new file mode 100644 index 00000000..99631742 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/images-selector-field.css @@ -0,0 +1,3 @@ +.nr-images-selector{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center;border:1px solid #dedede;padding:5px;border-radius:3px}.nr-images-selector.cols_2 .image{width:50%}.nr-images-selector.cols_3 .image{width:33.3333%}.nr-images-selector.cols_4 .image{width:25%}.nr-images-selector.cols_5 .image{width:20%}.nr-images-selector.cols_6 .image{width:16.6666%}.nr-images-selector .image{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.nr-images-selector .image label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding:10px;margin:5px;cursor:pointer;border:1px solid transparent}.nr-images-selector .image label:hover,.nr-images-selector .image label.active{background:#f5f5f5;border-radius:3px;border-color:#ccc}.nr-images-selector .image label img{-o-object-fit:contain;object-fit:contain;max-width:100%;image-rendering:crisp-edges;-ms-interpolation-mode:nearest-neighbor}.nr-images-selector .image input[type="radio"]:checked+label{border-color:#009cde;-webkit-box-shadow:0 0 3px 0 rgba(0,0,0,0.2) inset;box-shadow:0 0 3px 0 rgba(0,0,0,0.2) inset}.nr-images-selector .image input{display:none} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/inline-control-group.css b/deployed/convertforms/media/plg_system_nrframework/css/inline-control-group.css new file mode 100644 index 00000000..7efe4b60 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/inline-control-group.css @@ -0,0 +1,3 @@ +.inline-control-group{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:-5px}.inline-control-group .controls{margin-left:0 !important;line-height:1;min-width:auto}.inline-control-group .control-label{padding:0 10px 0 0 !important}.inline-control-group fieldset{padding:0 !important}.inline-control-group .control-group:not([class*="hidden"]){-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;margin:5px !important}.inline-control-group.timetable{margin:-7px -5px}.inline-control-group.timetable input[type="checkbox"],.inline-control-group.timetable label,.inline-control-group.timetable .form-check{margin:0;padding:0;position:static}.inline-control-group.timetable .control-group:nth-child(2) .control-label{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;padding-left:7px !important;width:90px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/joomla3.css b/deployed/convertforms/media/plg_system_nrframework/css/joomla3.css new file mode 100644 index 00000000..2a4b10fb --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/joomla3.css @@ -0,0 +1,3 @@ +.assign .control-group .control-label{max-width:180px !important}.minicolors-theme-bootstrap .minicolors-input{font-family:inherit !important;width:calc(206px - 24px) !important} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/joomla4.css b/deployed/convertforms/media/plg_system_nrframework/css/joomla4.css new file mode 100644 index 00000000..76f071ff --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/joomla4.css @@ -0,0 +1,3 @@ +joomla-tab>ul a[role=tab][active]{font-weight:normal;color:inherit}joomla-tab>ul a[role=tab]{padding:0.6rem 1rem}.input-group-text{background-color:#efeff0;color:inherit;border-color:var(--border);-webkit-box-shadow:inset 0 0 0 0.1rem #e9e9e9;box-shadow:inset 0 0 0 0.1rem #e9e9e9;font-size:.9em !important}.input-group-append{left:-1px;position:relative}.form-control{display:inline-block}.input-mini{max-width:60px}.input-small{max-width:90px}.input-medium{max-width:150px}.input-large{max-width:210px}.input-xlarge{max-width:270px}.input-xxlarge{max-width:530px}.minicolors-swatch{top:8px !important;left:8px !important;width:28px !important;height:28px !important}.boxColor{background:url(../../../media/vendor/minicolors/css/jquery.minicolors.png) -80px 0}a{text-decoration:none}a[target="_blank"]::before{content:none}#proOnlyModal .btn-danger{background:#c52827;color:#fff;-webkit-box-shadow:none;box-shadow:none;margin:0}#proOnlyModal .pro-only-bonus:before{content:"\f058" !important;font-family:"Font Awesome 5 Free" !important}a[data-pro-only] span{position:static !important}.modal a.btn-primary{color:var(--atum-text-light) !important;background-color:var(--atum-link-color) !important;border-color:var(--atum-link-color) !important}.control-label:empty{display:none} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/proonlymodal.css b/deployed/convertforms/media/plg_system_nrframework/css/proonlymodal.css new file mode 100644 index 00000000..4b8a54e2 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/proonlymodal.css @@ -0,0 +1,3 @@ +#proOnlyModal{width:480px;left:0;right:0;margin:0 auto}#proOnlyModal.joomla-modal .icon-lock{margin-top:0 !important}#proOnlyModal .modal-header{padding:0;border:none}#proOnlyModal .modal-header button{border:none;position:absolute;z-index:1;margin:0;right:0;top:0}#proOnlyModal .modal-header button.btn-close{margin:10px}#proOnlyModal em{font-style:normal}#proOnlyModal h2{margin:0 0 -5px 0}#proOnlyModal .po-upgrade{padding:0 10px}#proOnlyModal .modal-body{max-height:100%;padding:0}#proOnlyModal .modal-body p{margin:20px 0}#proOnlyModal .modal-body p:last-child{margin-bottom:0}#proOnlyModal .pro-only-footer{margin-top:20px;font-size:12px;color:#666;line-height:1.6}#proOnlyModal .pro-only-footer a{color:inherit;text-decoration:underline}#proOnlyModal .pro-only-footer a:hover{color:#1f496e;text-decoration:none}#proOnlyModal .pro-only-body{padding:35px 30px;color:#555;font-size:14px}#proOnlyModal .pro-only-body .icon-lock{font-size:40px;width:auto;height:auto;display:block;color:#d0d0d0;margin:15px 0 25px 0}#proOnlyModal .pro-only-bonus{background-color:#faffac;margin:35px -30px 0 -30px;padding:24px 60px 20px;font-size:15px;color:#4d4d4d;position:relative}#proOnlyModal .pro-only-bonus:before{content:"\e218";font-family:"IcoMoon";color:#3abc01;display:block;position:absolute;top:-7px;font-size:18px;border-radius:100%;width:100%;left:0}#proOnlyModal .pro-only-bonus b:last-child{font-weight:700;color:#3abc01} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/select2.css b/deployed/convertforms/media/plg_system_nrframework/css/select2.css new file mode 100644 index 00000000..19f73874 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/select2.css @@ -0,0 +1,3 @@ +.select2-container{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container *,.select2-container *:before,.select2-container *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.select2-container .select2-selection--single{-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:block;height:28px;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:block;min-height:32px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{-webkit-box-sizing:border-box;box-sizing:border-box;border:none;font-size:100%;margin-top:6px;margin-left:2px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #ccc;border-radius:3px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:5px 8px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.select2-results__option .row-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding-right:10px}.select2-results__option:not(:last-child){border-bottom:solid 1px #e2e2e2}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;-webkit-box-shadow:1px -1px 1px 1px rgba(0,0,0,0.1);box-shadow:1px -1px 1px 1px rgba(0,0,0,0.1)}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0;-webkit-box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1);box-shadow:1px 1px 1px 1px rgba(0,0,0,0.1)}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #ccc;border-radius:3px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{-webkit-box-sizing:border-box;box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #ccc;border-radius:3px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:block;font-weight:bold;margin-left:4px;float:right}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;-webkit-box-shadow:none;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:232px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{color:#ccc;background-color:#fff !important;cursor:default}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#f5f5f5}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/smarttagsbox.css b/deployed/convertforms/media/plg_system_nrframework/css/smarttagsbox.css new file mode 100644 index 00000000..8006d282 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/smarttagsbox.css @@ -0,0 +1,3 @@ +.st{position:fixed;top:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;z-index:111111;width:100%;height:100%;font-size:14px;display:none}.st *{-webkit-box-sizing:inherit;box-sizing:inherit}.st_overlay{width:100%;height:100%;background-color:rgba(0,0,0,0.5)}.st_box{position:absolute;top:0;left:0;background-color:#dbdddd;padding:15px;color:#444;width:600px;max-width:100%;margin-top:3px;-webkit-box-shadow:2px 2px 1px 1px rgba(0,0,0,0.2);box-shadow:2px 2px 1px 1px rgba(0,0,0,0.2)}.st_box a{text-decoration:none !important;color:inherit;font-size:inherit;line-height:1;display:block}.st_box a:focus{color:inherit}.st_box a:hover{color:#222}.st_toolbar{margin-bottom:10px}.st_toolbar .st_input_search{height:auto;width:100%;padding:8px 10px;border:none;border-radius:5px}.st_container{height:220px;display:-webkit-box;display:-ms-flexbox;display:flex}.st_nav{width:200px;padding-right:15px}.st_nav a{padding:10px;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.st_nav a.active{font-weight:bold;pointer-events:none}.st_nav a:not(:last-child){border-bottom:solid 1px rgba(255,255,255,0.5)}.st_tabs{width:100%;background-color:#fff;overflow:auto;padding:15px 20px}.st_tabs .st_tab_content{display:none}.st_tabs .st_item{padding:5px 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:pointer}.st_tabs .st_item:hover{color:blue}.st_tabs .st_item small{font-family:'Courier New', Courier, monospace}.has-smarttags{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.has-smarttags *,.has-smarttags *:before{-webkit-box-sizing:inherit;box-sizing:inherit}.has-smarttags .st_trigger{visibility:hidden;opacity:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:absolute;right:1px;top:1px;margin:0;cursor:pointer;width:25px;height:calc(100% - 2px);z-index:1;overflow:hidden;font-size:13px;color:#000;line-height:1;background-color:#fff;border-radius:2px;-webkit-transition:all 70ms ease-in-out;transition:all 70ms ease-in-out}.has-smarttags .st_trigger:before{opacity:.3}.has-smarttags .st_trigger:hover:before{opacity:.6}.has-smarttags:hover .st_trigger,.has-smarttags.active .st_trigger{visibility:visible;opacity:1}.has-smarttags.active{position:relative;z-index:999999999}.has-smarttags.active .st_trigger{opacity:.8}.has-smarttags.is_textarea .st_trigger{bottom:6px;right:8px;top:auto;height:25px}#wrapper .has-smarttags .st_trigger{font-size:11px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/toggle.css b/deployed/convertforms/media/plg_system_nrframework/css/toggle.css new file mode 100644 index 00000000..0a1567ae --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/toggle.css @@ -0,0 +1,3 @@ +.nrtoggle{-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;position:relative;height:26.4px;width:48px}.nrtoggle *,.nrtoggle *:before,.nrtoggle *:after{-webkit-box-sizing:inherit;box-sizing:inherit}.nrtoggle input{opacity:0;position:absolute;height:100% !important;width:100% !important;margin:0 !important;cursor:pointer;z-index:1}.nrtoggle input+label{position:relative;display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:.4s ease;transition:.4s ease;height:26.4px;width:48px;border:1px solid #dcd9d9;border-radius:26.4px;background-color:#efeff0;margin:0}.nrtoggle input+label:after{content:"";position:absolute;top:0;left:0;display:block;-webkit-box-shadow:0 0 0 1px rgba(0,0,0,0.1),0 4px 0px 0 rgba(0,0,0,0.03),0 4px 9px rgba(0,0,0,0.06),0 3px 3px rgba(0,0,0,0.05);box-shadow:0 0 0 1px rgba(0,0,0,0.1),0 4px 0px 0 rgba(0,0,0,0.03),0 4px 9px rgba(0,0,0,0.06),0 3px 3px rgba(0,0,0,0.05);-webkit-transition:0.3s cubic-bezier(0.54, 1.6, 0.5, 1);transition:0.3s cubic-bezier(0.54, 1.6, 0.5, 1);background:#f5f5f5;height:24.4px;width:24.4px;border-radius:100%}.nrtoggle input:active+label{-webkit-transition:.01s;transition:.01s;-webkit-box-shadow:inset 0 0 3px 1px rgba(0,0,0,0.2);box-shadow:inset 0 0 3px 1px rgba(0,0,0,0.2)}.nrtoggle input:checked+label{background:#46a546}.nrtoggle input:checked+label:after{left:21.6px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/treeselect.css b/deployed/convertforms/media/plg_system_nrframework/css/treeselect.css new file mode 100644 index 00000000..dcbf29a8 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/treeselect.css @@ -0,0 +1,3 @@ +.nr_treeselect{-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;padding:15px;border:solid 1px #ddd;border-radius:3px;font-size:13px}.nr_treeselect *{-webkit-box-sizing:inherit;box-sizing:inherit}.nr_treeselect .pull-left{float:left}.nr_treeselect .clearfix{*zoom:1}.nr_treeselect .nr_treeselect-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.nr_treeselect .nr_treeselect-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:.95em;-ms-flex-wrap:wrap;flex-wrap:wrap}.nr_treeselect .nr_treeselect-controls>span:not(:last-child){padding-right:5px;margin-right:6px;border-right:solid 1px #e6e6e6}.nr_treeselect .nr_treeselect-controls>span.nr_no_border{border:none;padding:0;margin:0}.nr_treeselect .nr_treeselect-controls>span.right{margin-left:auto}.nr_treeselect .nr_treeselect-controls .nr_treeselect-filter{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:250px;padding-left:10px}.nr_treeselect .nr_treeselect-controls .nr_treeselect-filter input{height:auto;width:100%;-ms-flex-negative:1;flex-shrink:1;border-radius:15px;border:1px solid #ccc;padding:4px 12px}.nr_treeselect .nr_treeselect-sub{padding-left:25px;margin:0}.nr_treeselect .nr_treeselect-ul{border-top:solid 1px #e6e6e6;padding:15px 0 0 0;margin:10px 0 0 0}.nr_treeselect .nr_treeselect-ul .nav-header{font-size:.9em;display:block;padding:0;font-weight:bold;line-height:18px;color:#999;text-transform:uppercase}.nr_treeselect .nr_treeselect-ul .divider{margin-bottom:6px}.nr_treeselect .nr_treeselect-ul li{margin:0;padding-top:7px;list-style:none}.nr_treeselect .nr_treeselect-ul span.nr_treeselect-toggle{line-height:18px}.nr_treeselect .nr_treeselect-ul label,.nr_treeselect .nr_treeselect-ul input{margin:0 0 0 7px;font-size:1em}.nr_treeselect .nr_treeselect-ul .nr_treeselect-menu{margin-left:7px}.nr_treeselect .nr_treeselect-ul .nr_treeselect-menu .btn{width:25px;padding:0;min-width:25px;height:19px;background-color:#f3f3f3;margin-top:-2px;color:inherit;border:solid 1px #b3b3b3;-webkit-box-shadow:none !important;box-shadow:none !important}.nr_treeselect .nr_treeselect-ul .nr_treeselect-menu .btn:after{margin-left:0}.nr_treeselect .nr_treeselect-ul .btn-group{font-size:1em}.nr_treeselect .nr_treeselect-ul ul.dropdown-menu{margin:0;padding:5px;font-size:1em;white-space:nowrap}.nr_treeselect .nr_treeselect-ul ul.dropdown-menu li{padding:0 5px;border:none}.nr_treeselect .nr_treeselect-ul ul.dropdown-menu a{padding:3px 0} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/updatechecker.css b/deployed/convertforms/media/plg_system_nrframework/css/updatechecker.css new file mode 100644 index 00000000..c3025bee --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/updatechecker.css @@ -0,0 +1,3 @@ +.nr-updatechecker{background-color:#dff0d8;border:solid 1px rgba(0,0,0,0.1);border-top:none;border-left:none;border-right:none;line-height:1;margin:-20px -20px 20px -20px;color:#333}.nr-updatechecker .nr-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.nr-updatechecker .nr-wrap>div{padding:20px}@media (max-width: 640px){.nr-updatechecker .nr-wrap>div.nruc_toolbar{padding-top:0}}.nr-updatechecker .btn{min-width:120px;padding:6px 14px}.nr-updatechecker .btn span{position:relative;top:1px}.nr-updatechecker .nruc_subtitle{opacity:.7;font-size:12px}.nr-updatechecker .nruc_title{font-size:20px;margin-bottom:8px} + + diff --git a/deployed/convertforms/media/plg_system_nrframework/css/vendor/jquery-clockpicker.min.css b/deployed/convertforms/media/plg_system_nrframework/css/vendor/jquery-clockpicker.min.css new file mode 100644 index 00000000..b4dd9cf9 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/vendor/jquery-clockpicker.min.css @@ -0,0 +1,9 @@ +/*! + * ClockPicker v0.0.7 for jQuery (http://weareoutman.github.io/clockpicker/) + * Copyright 2014 Wang Shenwei. + * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE) + * + * Bootstrap v3.1.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid;overflow:visible;margin:0;padding:0;z-index:auto;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;bottom:auto;left:auto;right:auto;top:auto;-webkit-transform:none;-ms-transform:none;transform:none}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.btn{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent}.btn.active:focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default:active,.btn-default:focus,.btn-default:hover,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default.active,.btn-default:active,.open .dropdown-toggle.btn-default{background-image:none}.btn-block{display:block;width:100%}.text-primary{color:#428bca}.clockpicker .input-group-addon{cursor:pointer}.clockpicker-moving{cursor:move}.clockpicker-align-left.popover>.arrow{left:25px}.clockpicker-align-top.popover>.arrow{top:17px}.clockpicker-align-right.popover>.arrow{left:auto;right:25px}.clockpicker-align-bottom.popover>.arrow{top:auto;bottom:6px}.clockpicker-popover .popover-title{background-color:#fff;color:#999;font-size:24px;font-weight:700;line-height:30px;text-align:center}.clockpicker-popover .popover-title span{cursor:pointer; float:none; margin-height:inherit;margin:0;}.clockpicker-popover .popover-content{background-color:#f8f8f8;padding:12px}.popover-content:last-child{border-bottom-left-radius:5px;border-bottom-right-radius:5px}.clockpicker-plate{background-color:#fff;border:1px solid #ccc;border-radius:50%;width:200px;height:200px;overflow:visible;position:relative;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.clockpicker-canvas,.clockpicker-dial{width:200px;height:200px;position:absolute;left:-1px;top:-1px}.clockpicker-minutes{visibility:hidden}.clockpicker-tick{border-radius:50%;color:#666;line-height:26px;text-align:center;width:26px;height:26px;position:absolute;cursor:pointer}.clockpicker-tick.active,.clockpicker-tick:hover{background-color:#c0e5f7;background-color:rgba(0,149,221,.25)}.clockpicker-button{background-image:none;background-color:#fff;border-width:1px 0 0;border-top-left-radius:0;border-top-right-radius:0;margin:0;padding:10px 0}.clockpicker-button:hover{background-image:none;background-color:#ebebeb}.clockpicker-button:focus{outline:0!important}.clockpicker-dial{-webkit-transition:-webkit-transform 350ms,opacity 350ms;-moz-transition:-moz-transform 350ms,opacity 350ms;-ms-transition:-ms-transform 350ms,opacity 350ms;-o-transition:-o-transform 350ms,opacity 350ms;transition:transform 350ms,opacity 350ms}.clockpicker-dial-out{opacity:0}.clockpicker-hours.clockpicker-dial-out{-webkit-transform:scale(1.2,1.2);-moz-transform:scale(1.2,1.2);-ms-transform:scale(1.2,1.2);-o-transform:scale(1.2,1.2);transform:scale(1.2,1.2)}.clockpicker-minutes.clockpicker-dial-out{-webkit-transform:scale(.8,.8);-moz-transform:scale(.8,.8);-ms-transform:scale(.8,.8);-o-transform:scale(.8,.8);transform:scale(.8,.8)}.clockpicker-canvas{-webkit-transition:opacity 175ms;-moz-transition:opacity 175ms;-ms-transition:opacity 175ms;-o-transition:opacity 175ms;transition:opacity 175ms}.clockpicker-canvas-out{opacity:.25}.clockpicker-canvas-bearing,.clockpicker-canvas-fg{stroke:none;fill:#0095dd}.clockpicker-canvas-bg{stroke:none;fill:#c0e5f7}.clockpicker-canvas-bg-trans{fill:rgba(0,149,221,.25)}.clockpicker-canvas line{stroke:#0095dd;stroke-width:1;stroke-linecap:round}.clockpicker-button.am-button{margin:1px;padding:5px;border:1px solid rgba(0,0,0,.2);border-radius:4px}.clockpicker-button.pm-button{margin:1px 1px 1px 136px;padding:5px;border:1px solid rgba(0,0,0,.2);border-radius:4px} \ No newline at end of file diff --git a/deployed/convertforms/media/plg_system_nrframework/css/vendor/jquery.rateyo.min.css b/deployed/convertforms/media/plg_system_nrframework/css/vendor/jquery.rateyo.min.css new file mode 100644 index 00000000..87f9ad38 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/css/vendor/jquery.rateyo.min.css @@ -0,0 +1 @@ +.jq-ry-container{position:relative;padding:0 5px;line-height:0;display:block;cursor:pointer;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.jq-ry-container[readonly=readonly]{cursor:default}.jq-ry-container>.jq-ry-group-wrapper{position:relative;width:100%}.jq-ry-container>.jq-ry-group-wrapper>.jq-ry-group{position:relative;line-height:0;z-index:10;white-space:nowrap}.jq-ry-container>.jq-ry-group-wrapper>.jq-ry-group>svg{display:inline-block}.jq-ry-container>.jq-ry-group-wrapper>.jq-ry-group.jq-ry-normal-group{width:100%}.jq-ry-container>.jq-ry-group-wrapper>.jq-ry-group.jq-ry-rated-group{width:0;z-index:11;position:absolute;top:0;left:0;overflow:hidden} \ No newline at end of file diff --git a/deployed/convertforms/media/plg_system_nrframework/js/assignmentselection.js b/deployed/convertforms/media/plg_system_nrframework/js/assignmentselection.js new file mode 100644 index 00000000..4696cf7f --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/js/assignmentselection.js @@ -0,0 +1,2 @@ +jQuery(function(a){a(".assignmentselection").each(function(){var s=a(this),l=a(this).closest(".control-group").parent();fix=s.parent().hasClass("well-assign"),fix?((l=a(this).closest(".well-assign")).children(":last-child").addClass("assign-options"),l.children().not(":last-child").wrapAll('
    '),l.find(".assignmentselection label").wrap('
    '),l.find(".assignmentselection .control-label").css({"padding-right":"20px"})):(l.children().not(":first-child").wrapAll('
    '),l.children().filter(":first-child").addClass("assignmentselection")),l.hasClass("assign")||l.addClass("assign"),s.on("change",function(){l.removeClass("alert-success alert-danger"),s.removeClass("custom-select-color-state custom-select-success custom-select-danger"),0").addClass("cb-group").attr("data-key",a.groupKey).attr("data-max-index",0).appendTo(".cb-items").html(e),c(".cb").attr("data-max-index",a.groupKey)):(t.after(e),t.closest(".cb-group").attr("data-max-index",r))})}($element,t.data("control-group"),groupKey,conditionKey)}),c(document).on("click",".removeCondition",function(e){e.preventDefault(),function(e){if(1==c(".cb-item").length)return alert("You can't remove the last item");$group=e.closest(".cb-group"),e.remove(),0==$group.children().length&&$group.remove()}(c(e.target).closest(".cb-item"))}),c(document).on("change",".condition_selector",function(e){e.preventDefault();var t=c(e.target).closest(".cb-item");condition_name=c(this).val(),function(t,o){var e=t.closest(".cb");groupKey=parseInt(t.closest(".cb-group").attr("data-key")),conditionKey=parseInt(t.closest(".cb-item").attr("data-key")),options={controlgroup:e.attr("data-control-group")+"["+groupKey+"]["+conditionKey+"]",name:o},s("options",options,function(e){t.find(".cb-item-content").html(e),c(document).trigger("afterConditionSettings",[t,o])})}(t,condition_name)}),c(document).on("afterConditionSettings",function(e,t,o){!function(e,t){var o=system_url.replace("/administrator","");switch(e){case"usergroup":case"menu":case"category":case"k2category":NRHelper.loadStyleSheet(o+"/media/plg_system_nrframework/css/treeselect.css"),NRHelper.loadScript(o+"/media/plg_system_nrframework/js/treeselect.js",function(){NRTreeselect.init(t.get(0))});break;case"date":NRHelper.loadStyleSheet(o+"/media/system/css/fields/calendar.css"),NRHelper.loadScript(o+"/media/system/js/fields/calendar-locales/en.js"),NRHelper.loadScript(o+"/media/system/js/fields/calendar-locales/date/gregorian/date-helper.min.js"),NRHelper.loadScript(o+"/media/system/js/fields/calendar.min.js",function(){var e=t.get(0).querySelectorAll(".field-calendar");for(i=0;i'),input_type=e.prop("nodeName").toLowerCase(),e.parent().addClass("is_"+input_type)})}function o(t){t=void 0===t?0:t;$el_tabs.find(".st_tab_content").hide().eq(t).show(),$el_nav.find("a").removeClass("active").eq(t).addClass("active")}function r(){s(".has-smarttags").removeClass("active"),s("body").removeClass("smarttags-active"),i.hide()}$el_box=i.find(".box"),$el_nav=i.find(".st_nav"),$el_tabs=i.find(".st_tabs"),$el_search=i.find(".st_input_search"),$active_element=null,input_selector=Joomla.getOptions("SmartTagsBox").selector,t(),i.on("update",function(){t()}),$el_search.on("keyup",function(){!function(a){$el_tabs.find(".st_search").remove(),0==a.length&&o();a=s.trim(a.toLowerCase());var n=[];$el_tabs.find(".st_tab_content:not(.st_nosearch) > .st_item").each(function(){var t=s(this);if(-1").parent().html();n.push(e)}}),$el_tabs.append(''),$el_tab_search=$el_tabs.find(".st_search"),0==n.length?$el_tab_search.html(Joomla.JText._("NR_SMARTTAGS_NOTFOUND")):$el_tab_search.html(n.join(""));o($el_tab_search.index())}(s(this).val())}),s(document).on("click","span.st_trigger",function(){return function(t){if(i.is(":visible"))return r();$active_element=t,function(){var t=Joomla.getOptions("SmartTagsBox").tags;tags=s.extend({},t),s(document).trigger("smartTagsBoxBeforeRender",[tags,$active_element]);var e="";s.each(tags,function(t){e+=''+t+""}),i.find(".st_container .st_nav").html(e);var a="";s.each(tags,function(t,e){a+='
    ',s.each(e,function(t,e){if(!e)return!0;a+=''+e+" "+t+""}),a+="
    "}),i.find(".st_container .st_tabs").html(a)}();var e=t.parent();container_height=e.outerHeight(),e.addClass("active"),s("body").addClass("smarttags-active");var a=s(window).height()-(e.offset().top+e.height()),n="bottom"==(310'),n.after('
    '),e.find("ul.nr_treeselect-sub").length&&(e.find("span.icon-").addClass("nr_treeselect-toggle icon-minus"),n.find("label:first").after(c),e.find("ul.nr_treeselect-sub ul.nr_treeselect-sub").length||e.find("div.nr_treeselect-menu-expand").remove())}),l.find("span.nr_treeselect-toggle").on("click",function(){var e=t(this);e.parent().find("ul.nr_treeselect-sub").is(":visible")?(e.removeClass("icon-minus").addClass("icon-plus"),e.parent().find("ul.nr_treeselect-sub").hide(),e.parent().find("ul.nr_treeselect-sub span.nr_treeselect-toggle").removeClass("icon-minus").addClass("icon-plus")):(e.removeClass("icon-plus").addClass("icon-minus"),e.parent().find("ul.nr_treeselect-sub").show(),e.parent().find("ul.nr_treeselect-sub span.nr_treeselect-toggle").removeClass("icon-plus").addClass("icon-minus"))}),i.find("input.nr_treeselect-filter").on("keyup",function(){var n=t(this).val().toLowerCase();l.find("li").each(function(){var e=t(this);-1==e.text().toLowerCase().indexOf(n)?e.hide():e.show()})}),i.find("a.nr_treeselect-checkall").on("click",function(){l.find("input").prop("checked",!0)}),i.find("a.nr_treeselect-uncheckall").on("click",function(){l.find("input").prop("checked",!1)}),i.find("a.nr_treeselect-toggleall").on("click",function(){l.find("input").each(function(){var e=t(this);e.prop("checked")?e.prop("checked",!1):e.prop("checked",!0)})}),i.find("a.nr_treeselect-expandall").on("click",function(){l.find("ul.nr_treeselect-sub").show(),l.find("span.nr_treeselect-toggle").removeClass("icon-plus").addClass("icon-minus")}),i.find("a.nr_treeselect-collapseall").on("click",function(){l.find("ul.nr_treeselect-sub").hide(),l.find("span.nr_treeselect-toggle").removeClass("icon-minus").addClass("icon-plus")}),i.find("a.nr_treeselect-showall").on("click",function(){l.find("li").show()}),i.find("a.nr_treeselect-showselected").on("click",function(){l.find("li").each(function(){var e=t(this),n=!0;e.find("input").each(function(){if(t(this).prop("checked"))return n=!1}),n?e.hide():e.show()})}),i.find("a.nr_treeselect-maximize").on("click",function(){l.css("max-height",""),i.find("a.nr_treeselect-maximize").hide(),i.find("a.nr_treeselect-minimize").show()}),i.find("a.nr_treeselect-minimize").on("click",function(){l.css("max-height",s),i.find("a.nr_treeselect-minimize").hide(),i.find("a.nr_treeselect-maximize").show()}),e.querySelectorAll(".checkall, .uncheckall").forEach(function(e){e.addEventListener("click",function(){var n=!!this.classList.contains("checkall");this.closest(".nr_treeselect-item").parentNode.querySelectorAll(":scope .nr_treeselect-sub input").forEach(function(e){e.checked=n})})}),e.querySelectorAll(".expandall, .collapseall").forEach(function(e){e.addEventListener("click",function(){var n=!!this.classList.contains("expandall"),e=this.closest(".nr_treeselect-item").parentNode;e.querySelectorAll("ul.nr_treeselect-sub").forEach(function(e){e.style.display=n?"block":"none"});var t=e.querySelector("ul.nr_treeselect-sub span.nr_treeselect-toggle");t.classList.remove(n?"icon-plus":"icon-minus"),t.classList.add(n?"icon-minus":"icon-plus")})})}),!0}};t.addEventListener("DOMContentLoaded",function(){var e,n;for(e=t.querySelectorAll(".nr_treeselect"),n=0;nt?"0":"")+t}function e(t){var i=++m+"";return t?t+i:i}function s(s,r){function p(t,i){var e=u.offset(),s=/^touch/.test(t.type),o=e.left+b,n=e.top+b,p=(s?t.originalEvent.touches[0]:t).pageX-o,h=(s?t.originalEvent.touches[0]:t).pageY-n,k=Math.sqrt(p*p+h*h),v=!1;if(!i||!(g-y>k||k>g+y)){t.preventDefault();var m=setTimeout(function(){c.addClass("clockpicker-moving")},200);l&&u.append(x.canvas),x.setHand(p,h,!i,!0),a.off(d).on(d,function(t){t.preventDefault();var i=/^touch/.test(t.type),e=(i?t.originalEvent.touches[0]:t).pageX-o,s=(i?t.originalEvent.touches[0]:t).pageY-n;(v||e!==p||s!==h)&&(v=!0,x.setHand(e,s,!1,!0))}),a.off(f).on(f,function(t){a.off(f),t.preventDefault();var e=/^touch/.test(t.type),s=(e?t.originalEvent.changedTouches[0]:t).pageX-o,l=(e?t.originalEvent.changedTouches[0]:t).pageY-n;(i||v)&&s===p&&l===h&&x.setHand(s,l),"hours"===x.currentView?x.toggleView("minutes",A/2):r.autoclose&&(x.minutesView.addClass("clockpicker-dial-out"),setTimeout(function(){x.done()},A/2)),u.prepend(j),clearTimeout(m),c.removeClass("clockpicker-moving"),a.off(d)})}}var h=n(V),u=h.find(".clockpicker-plate"),v=h.find(".clockpicker-hours"),m=h.find(".clockpicker-minutes"),T=h.find(".clockpicker-am-pm-block"),C="INPUT"===s.prop("tagName"),H=C?s:s.find("input"),P=s.find(".input-group-addon"),x=this;if(this.id=e("cp"),this.element=s,this.options=r,this.isAppended=!1,this.isShown=!1,this.currentView="hours",this.isInput=C,this.input=H,this.addon=P,this.popover=h,this.plate=u,this.hoursView=v,this.minutesView=m,this.amPmBlock=T,this.spanHours=h.find(".clockpicker-span-hours"),this.spanMinutes=h.find(".clockpicker-span-minutes"),this.spanAmPm=h.find(".clockpicker-span-am-pm"),this.amOrPm="PM",r.twelvehour){{var S=['
    ','",'","
    "].join("");n(S)}n('').on("click",function(){x.amOrPm="AM",n(".clockpicker-span-am-pm").empty().append("AM")}).appendTo(this.amPmBlock),n('').on("click",function(){x.amOrPm="PM",n(".clockpicker-span-am-pm").empty().append("PM")}).appendTo(this.amPmBlock)}r.autoclose||n('").click(n.proxy(this.done,this)).appendTo(h),"top"!==r.placement&&"bottom"!==r.placement||"top"!==r.align&&"bottom"!==r.align||(r.align="left"),"left"!==r.placement&&"right"!==r.placement||"left"!==r.align&&"right"!==r.align||(r.align="top"),h.addClass(r.placement),h.addClass("clockpicker-align-"+r.align),this.spanHours.click(n.proxy(this.toggleView,this,"hours")),this.spanMinutes.click(n.proxy(this.toggleView,this,"minutes")),H.on("focus.clockpicker click.clockpicker",n.proxy(this.show,this)),P.on("click.clockpicker",n.proxy(this.toggle,this));var E,D,I,B,z=n('
    ');if(r.twelvehour)for(E=1;13>E;E+=1)D=z.clone(),I=E/6*Math.PI,B=g,D.css("font-size","120%"),D.css({left:b+Math.sin(I)*B-y,top:b-Math.cos(I)*B-y}),D.html(0===E?"00":E),v.append(D),D.on(k,p);else for(E=0;24>E;E+=1){D=z.clone(),I=E/6*Math.PI;var O=E>0&&13>E;B=O?w:g,D.css({left:b+Math.sin(I)*B-y,top:b-Math.cos(I)*B-y}),O&&D.css("font-size","120%"),D.html(0===E?"00":E),v.append(D),D.on(k,p)}for(E=0;60>E;E+=5)D=z.clone(),I=E/30*Math.PI,D.css({left:b+Math.sin(I)*g-y,top:b-Math.cos(I)*g-y}),D.css("font-size","120%"),D.html(i(E)),m.append(D),D.on(k,p);if(u.on(k,function(t){0===n(t.target).closest(".clockpicker-tick").length&&p(t,!0)}),l){var j=h.find(".clockpicker-canvas"),L=t("svg");L.setAttribute("class","clockpicker-svg"),L.setAttribute("width",M),L.setAttribute("height",M);var U=t("g");U.setAttribute("transform","translate("+b+","+b+")");var W=t("circle");W.setAttribute("class","clockpicker-canvas-bearing"),W.setAttribute("cx",0),W.setAttribute("cy",0),W.setAttribute("r",2);var N=t("line");N.setAttribute("x1",0),N.setAttribute("y1",0);var X=t("circle");X.setAttribute("class","clockpicker-canvas-bg"),X.setAttribute("r",y);var Y=t("circle");Y.setAttribute("class","clockpicker-canvas-fg"),Y.setAttribute("r",3.5),U.appendChild(N),U.appendChild(X),U.appendChild(Y),U.appendChild(W),L.appendChild(U),j.append(L),this.hand=N,this.bg=X,this.fg=Y,this.bearing=W,this.g=U,this.canvas=j}o(this.options.init)}function o(t){t&&"function"==typeof t&&t()}var c,n=window.jQuery,r=n(window),a=n(document),p="http://www.w3.org/2000/svg",l="SVGAngle"in window&&function(){var t,i=document.createElement("div");return i.innerHTML="",t=(i.firstChild&&i.firstChild.namespaceURI)==p,i.innerHTML="",t}(),h=function(){var t=document.createElement("div").style;return"transition"in t||"WebkitTransition"in t||"MozTransition"in t||"msTransition"in t||"OTransition"in t}(),u="ontouchstart"in window,k="mousedown"+(u?" touchstart":""),d="mousemove.clockpicker"+(u?" touchmove.clockpicker":""),f="mouseup.clockpicker"+(u?" touchend.clockpicker":""),v=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null,m=0,b=100,g=80,w=54,y=13,M=2*b,A=h?350:1,V=['
    ','
    ','
    ',''," : ",'','',"
    ",'
    ','
    ','
    ','
    ','
    ',"
    ",'',"","
    ","
    "].join("");s.DEFAULTS={"default":"",fromnow:0,placement:"bottom",align:"left",donetext:"完成",autoclose:!1,twelvehour:!1,vibrate:!0},s.prototype.toggle=function(){this[this.isShown?"hide":"show"]()},s.prototype.locate=function(){var t=this.element,i=this.popover,e=t.offset(),s=t.outerWidth(),o=t.outerHeight(),c=this.options.placement,n=this.options.align,r={};switch(i.show(),c){case"bottom":r.top=e.top+o;break;case"right":r.left=e.left+s;break;case"top":r.top=e.top-i.outerHeight();break;case"left":r.left=e.left-i.outerWidth()}switch(n){case"left":r.left=e.left;break;case"right":r.left=e.left+s-i.outerWidth();break;case"top":r.top=e.top;break;case"bottom":r.top=e.top+o-i.outerHeight()}i.css(r)},s.prototype.show=function(){if(!this.isShown){o(this.options.beforeShow);var t=this;this.isAppended||(c=n(document.body).append(this.popover),r.on("resize.clockpicker"+this.id,function(){t.isShown&&t.locate()}),this.isAppended=!0);var e=((this.input.prop("value")||this.options["default"]||"")+"").split(":");if("now"===e[0]){var s=new Date(+new Date+this.options.fromnow);e=[s.getHours(),s.getMinutes()]}this.hours=+e[0]||0,this.minutes=+e[1]||0,this.spanHours.html(i(this.hours)),this.spanMinutes.html(i(this.minutes)),this.toggleView("hours"),this.locate(),this.isShown=!0,a.on("click.clockpicker."+this.id+" focusin.clockpicker."+this.id,function(i){var e=n(i.target);0===e.closest(t.popover).length&&0===e.closest(t.addon).length&&0===e.closest(t.input).length&&t.hide()}),a.on("keyup.clockpicker."+this.id,function(i){27===i.keyCode&&t.hide()}),o(this.options.afterShow)}},s.prototype.hide=function(){o(this.options.beforeHide),this.isShown=!1,a.off("click.clockpicker."+this.id+" focusin.clockpicker."+this.id),a.off("keyup.clockpicker."+this.id),this.popover.hide(),o(this.options.afterHide)},s.prototype.toggleView=function(t,i){var e=!1;"minutes"===t&&"visible"===n(this.hoursView).css("visibility")&&(o(this.options.beforeHourSelect),e=!0);var s="hours"===t,c=s?this.hoursView:this.minutesView,r=s?this.minutesView:this.hoursView;this.currentView=t,this.spanHours.toggleClass("text-primary",s),this.spanMinutes.toggleClass("text-primary",!s),r.addClass("clockpicker-dial-out"),c.css("visibility","visible").removeClass("clockpicker-dial-out"),this.resetClock(i),clearTimeout(this.toggleViewTimer),this.toggleViewTimer=setTimeout(function(){r.css("visibility","hidden")},A),e&&o(this.options.afterHourSelect)},s.prototype.resetClock=function(t){var i=this.currentView,e=this[i],s="hours"===i,o=Math.PI/(s?6:30),c=e*o,n=s&&e>0&&13>e?w:g,r=Math.sin(c)*n,a=-Math.cos(c)*n,p=this;l&&t?(p.canvas.addClass("clockpicker-canvas-out"),setTimeout(function(){p.canvas.removeClass("clockpicker-canvas-out"),p.setHand(r,a)},t)):this.setHand(r,a)},s.prototype.setHand=function(t,e,s,o){var c,r=Math.atan2(t,-e),a="hours"===this.currentView,p=Math.PI/(a||s?6:30),h=Math.sqrt(t*t+e*e),u=this.options,k=a&&(g+w)/2>h,d=k?w:g;if(u.twelvehour&&(d=g),0>r&&(r=2*Math.PI+r),c=Math.round(r/p),r=c*p,u.twelvehour?a?0===c&&(c=12):(s&&(c*=5),60===c&&(c=0)):a?(12===c&&(c=0),c=k?0===c?12:c:0===c?0:c+12):(s&&(c*=5),60===c&&(c=0)),this[this.currentView]!==c&&v&&this.options.vibrate&&(this.vibrateTimer||(navigator[v](10),this.vibrateTimer=setTimeout(n.proxy(function(){this.vibrateTimer=null},this),100))),this[this.currentView]=c,this[a?"spanHours":"spanMinutes"].html(i(c)),!l)return void this[a?"hoursView":"minutesView"].find(".clockpicker-tick").each(function(){var t=n(this);t.toggleClass("active",c===+t.html())});o||!a&&c%5?(this.g.insertBefore(this.hand,this.bearing),this.g.insertBefore(this.bg,this.fg),this.bg.setAttribute("class","clockpicker-canvas-bg clockpicker-canvas-bg-trans")):(this.g.insertBefore(this.hand,this.bg),this.g.insertBefore(this.fg,this.bg),this.bg.setAttribute("class","clockpicker-canvas-bg"));var f=Math.sin(r)*d,m=-Math.cos(r)*d;this.hand.setAttribute("x2",f),this.hand.setAttribute("y2",m),this.bg.setAttribute("cx",f),this.bg.setAttribute("cy",m),this.fg.setAttribute("cx",f),this.fg.setAttribute("cy",m)},s.prototype.done=function(){o(this.options.beforeDone),this.hide();var t=this.input.prop("value"),e=i(this.hours)+":"+i(this.minutes);this.options.twelvehour&&(e+=this.amOrPm),this.input.prop("value",e),e!==t&&(this.input.triggerHandler("change"),this.isInput||this.element.trigger("change")),this.options.autoclose&&this.input.trigger("blur"),o(this.options.afterDone)},s.prototype.remove=function(){this.element.removeData("clockpicker"),this.input.off("focus.clockpicker click.clockpicker"),this.addon.off("click.clockpicker"),this.isShown&&this.hide(),this.isAppended&&(r.off("resize.clockpicker"+this.id),this.popover.remove())},n.fn.clockpicker=function(t){var i=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=n(this),o=e.data("clockpicker");if(o)"function"==typeof o[t]&&o[t].apply(o,i);else{var c=n.extend({},s.DEFAULTS,e.data(),"object"==typeof t&&t);e.data("clockpicker",new s(e,c))}})}}(); \ No newline at end of file diff --git a/deployed/convertforms/media/plg_system_nrframework/js/vendor/jquery.rateyo.min.js b/deployed/convertforms/media/plg_system_nrframework/js/vendor/jquery.rateyo.min.js new file mode 100644 index 00000000..5a6c1668 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/js/vendor/jquery.rateyo.min.js @@ -0,0 +1,3 @@ +/*rateYo V2.2.0, A simple and flexible star rating plugin +prashanth pamidi (https://github.com/prrashi)*/ +!function(a){"use strict";function b(){var a=!1;return function(b){(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(b)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(b.substr(0,4)))&&(a=!0)}(navigator.userAgent||navigator.vendor||window.opera),a}function c(a,b,c){return a===b?a=b:a===c&&(a=c),a}function d(a,b,c){var d=a>=b&&a<=c;if(!d)throw Error("Invalid Rating, expected value between "+b+" and "+c);return a}function e(a){return"undefined"!=typeof a}function f(a,b,c){var d=(b-a)*(c/100);return d=Math.round(a+d).toString(16),1===d.length&&(d="0"+d),d}function g(a,b,c){if(!a||!b)return null;c=e(c)?c:0,a=q(a),b=q(b);var d=f(a.r,b.r,c),g=f(a.b,b.b,c),h=f(a.g,b.g,c);return"#"+d+h+g}function h(f,i){function k(a){e(a)||(a=i.rating),Z=a;var b=a/P,c=b*R;b>1&&(c+=(Math.ceil(b)-1)*T),r(i.ratedFill),c=i.rtl?100-c:c,X.css("width",c+"%")}function l(){U=Q*i.numStars+S*(i.numStars-1),R=Q/U*100,T=S/U*100,f.width(U),k()}function n(a){var b=i.starWidth=a;return Q=window.parseFloat(i.starWidth.replace("px","")),W.find("svg").attr({width:i.starWidth,height:b}),X.find("svg").attr({width:i.starWidth,height:b}),l(),f}function p(a){return i.spacing=a,S=parseFloat(i.spacing.replace("px","")),W.find("svg:not(:first-child)").css({"margin-left":a}),X.find("svg:not(:first-child)").css({"margin-left":a}),l(),f}function q(a){i.normalFill=a;var b=(i.rtl?X:W).find("svg");return b.attr({fill:i.normalFill}),f}function r(a){if(i.multiColor){var b=Z-Y,c=b/i.maxValue*100,d=i.multiColor||{},e=d.startColor||o.startColor,h=d.endColor||o.endColor;a=g(e,h,c)}else _=a;i.ratedFill=a;var j=(i.rtl?W:X).find("svg");return j.attr({fill:i.ratedFill}),f}function s(a){a=!!a,i.rtl=a,q(i.normalFill),k()}function t(a){i.multiColor=a,r(a?a:_)}function u(b){i.numStars=b,P=i.maxValue/i.numStars,W.empty(),X.empty();for(var c=0;ca&&C(a),k(),f}function w(a){return i.precision=a,C(i.rating),f}function x(a){return i.halfStar=a,f}function y(a){return i.fullStar=a,f}function z(a){var b=a%P,c=P/2,d=i.halfStar,e=i.fullStar;return e||d?(e||d&&b>c?a+=P-b:(a-=b,b>0&&(a+=c)),a):a}function A(a){var b=W.offset(),c=b.left,d=c+W.width(),e=i.maxValue,f=a.pageX,g=0;if(fd)g=e;else{var h=(f-c)/(d-c);if(S>0){h*=100;for(var j=h;j>0;)j>R?(g+=P,j-=R+T):(g+=j/R*P,j=0)}else g=h*i.maxValue;g=z(g)}return i.rtl&&(g=e-g),g}function B(a){return i.readOnly=a,f.attr("readonly",!0),N(),a||(f.removeAttr("readonly"),M()),f}function C(a){var b=a,e=i.maxValue;return"string"==typeof b&&("%"===b[b.length-1]&&(b=b.substr(0,b.length-1),e=100,v(e)),b=parseFloat(b)),d(b,Y,e),b=parseFloat(b.toFixed(i.precision)),c(parseFloat(b),Y,e),i.rating=b,k(),$&&f.trigger("rateyo.set",{rating:b}),f}function D(a){return i.onInit=a,f}function E(a){return i.onSet=a,f}function F(a){return i.onChange=a,f}function G(a){var b=A(a).toFixed(i.precision),d=i.maxValue;b=c(parseFloat(b),Y,d),k(b),f.trigger("rateyo.change",{rating:b})}function H(){b()||(k(),f.trigger("rateyo.change",{rating:i.rating}))}function I(a){var b=A(a).toFixed(i.precision);b=parseFloat(b),O.rating(b)}function J(a,b){i.onInit&&"function"==typeof i.onInit&&i.onInit.apply(this,[b.rating,O])}function K(a,b){i.onChange&&"function"==typeof i.onChange&&i.onChange.apply(this,[b.rating,O])}function L(a,b){i.onSet&&"function"==typeof i.onSet&&i.onSet.apply(this,[b.rating,O])}function M(){f.on("mousemove",G).on("mouseenter",G).on("mouseleave",H).on("click",I).on("rateyo.init",J).on("rateyo.change",K).on("rateyo.set",L)}function N(){f.off("mousemove",G).off("mouseenter",G).off("mouseleave",H).off("click",I).off("rateyo.init",J).off("rateyo.change",K).off("rateyo.set",L)}this.node=f.get(0);var O=this;f.empty().addClass("jq-ry-container");var P,Q,R,S,T,U,V=a("
    ").addClass("jq-ry-group-wrapper").appendTo(f),W=a("
    ").addClass("jq-ry-normal-group").addClass("jq-ry-group").appendTo(V),X=a("
    ").addClass("jq-ry-rated-group").addClass("jq-ry-group").appendTo(V),Y=0,Z=i.rating,$=!1,_=i.ratedFill;this.rating=function(a){return e(a)?(C(a),f):i.rating},this.destroy=function(){return i.readOnly||N(),h.prototype.collection=j(f.get(0),this.collection),f.removeClass("jq-ry-container").children().remove(),f},this.method=function(a){if(!a)throw Error("Method name not specified!");if(!e(this[a]))throw Error("Method "+a+" doesn't exist!");var b=Array.prototype.slice.apply(arguments,[]),c=b.slice(1),d=this[a];return d.apply(this,c)},this.option=function(a,b){if(!e(a))return i;var c;switch(a){case"starWidth":c=n;break;case"numStars":c=u;break;case"normalFill":c=q;break;case"ratedFill":c=r;break;case"multiColor":c=t;break;case"maxValue":c=v;break;case"precision":c=w;break;case"rating":c=C;break;case"halfStar":c=x;break;case"fullStar":c=y;break;case"readOnly":c=B;break;case"spacing":c=p;break;case"rtl":c=s;break;case"onInit":c=D;break;case"onSet":c=E;break;case"onChange":c=F;break;default:throw Error("No such option as "+a)}return e(b)?c(b):i[a]},u(i.numStars),B(i.readOnly),i.rtl&&s(i.rtl),this.collection.push(this),this.rating(i.rating,!0),$=!0,f.trigger("rateyo.init",{rating:i.rating})}function i(b,c){var d;return a.each(c,function(){if(b===this.node)return d=this,!1}),d}function j(b,c){return a.each(c,function(a){if(b===this.node){var d=c.slice(0,a),e=c.slice(a+1,c.length);return c=d.concat(e),!1}}),c}function k(b){var c=h.prototype.collection,d=a(this);if(0===d.length)return d;var e=Array.prototype.slice.apply(arguments,[]);if(0===e.length)b=e[0]={};else{if(1!==e.length||"object"!=typeof e[0]){if(e.length>=1&&"string"==typeof e[0]){var f=e[0],g=e.slice(1),j=[];return a.each(d,function(a,b){var d=i(b,c);if(!d)throw Error("Trying to set options before even initialization");var e=d[f];if(!e)throw Error("Method "+f+" does not exist!");var h=e.apply(d,g);j.push(h)}),j=1===j.length?j[0]:j}throw Error("Invalid Arguments")}b=e[0]}return b=a.extend({},n,b),a.each(d,function(){var d=i(this,c);if(!d)return new h(a(this),a.extend({},b))})}function l(){return k.apply(this,Array.prototype.slice.apply(arguments,[]))}var m='',n={starWidth:"32px",normalFill:"gray",ratedFill:"#f39c12",numStars:5,maxValue:5,precision:1,rating:0,fullStar:!1,halfStar:!1,readOnly:!1,spacing:"0px",rtl:!1,multiColor:null,onInit:null,onChange:null,onSet:null,starSvg:null},o={startColor:"#c0392b",endColor:"#f1c40f"},p=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i,q=function(a){if(!p.test(a))return null;var b=p.exec(a),c=parseInt(b[1],16),d=parseInt(b[2],16),e=parseInt(b[3],16);return{r:c,g:d,b:e}};h.prototype.collection=[],window.RateYo=h,a.fn.rateYo=l}(window.jQuery); diff --git a/deployed/convertforms/media/plg_system_nrframework/js/vendor/select2.min.js b/deployed/convertforms/media/plg_system_nrframework/js/vendor/select2.min.js new file mode 100644 index 00000000..1b208522 --- /dev/null +++ b/deployed/convertforms/media/plg_system_nrframework/js/vendor/select2.min.js @@ -0,0 +1 @@ +/*! Select2 4.0.6-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c.__cache={};var e=0;return c.GetUniqueElementId=function(a){var b=a.getAttribute("data-select2-id");return null==b&&(a.id?(b=a.id,a.setAttribute("data-select2-id",b)):(a.setAttribute("data-select2-id",++e),b=e.toString())),b},c.StoreData=function(a,b,d){var e=c.GetUniqueElementId(a);c.__cache[e]||(c.__cache[e]={}),c.__cache[e][b]=d},c.GetData=function(b,d){var e=c.GetUniqueElementId(b);return d?c.__cache[e]&&null!=c.__cache[e][d]?c.__cache[e][d]:a(b).data(d):c.__cache[e]},c.RemoveData=function(a){var b=c.GetUniqueElementId(a);null!=c.__cache[b]&&delete c.__cache[b]},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
      ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
    • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var c=this;this.data.current(function(d){var e=a.map(d,function(a){return a.id.toString()});c.$results.find(".select2-results__option[aria-selected]").each(function(){var c=a(this),d=b.GetData(this,"data"),f=""+d.id;null!=d.element&&d.element.selected||null==d.element&&a.inArray(f,e)>-1?c.attr("aria-selected","true"):c.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(c){var d=document.createElement("li");d.className="select2-results__option";var e={role:"treeitem","aria-selected":"false"};c.disabled&&(delete e["aria-selected"],e["aria-disabled"]="true"),null==c.id&&delete e["aria-selected"],null!=c._resultId&&(d.id=c._resultId),c.title&&(d.title=c.title),c.children&&(e.role="group",e["aria-label"]=c.text,delete e["aria-selected"]);for(var f in e){var g=e[f];d.setAttribute(f,g)}if(c.children){var h=a(d),i=document.createElement("strong");i.className="select2-results__group";a(i);this.template(c,i);for(var j=[],k=0;k",{class:"select2-results__options select2-results__options--nested"});n.append(j),h.append(i),h.append(n)}else this.template(c,d);return b.StoreData(d,"data",c),d},c.prototype.bind=function(c,d){var e=this,f=c.id+"-results";this.$results.attr("id",f),c.on("results:all",function(a){e.clear(),e.append(a.data),c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("results:append",function(a){e.append(a.data),c.isOpen()&&e.setClasses()}),c.on("query",function(a){e.hideMessages(),e.showLoading(a)}),c.on("select",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("unselect",function(){c.isOpen()&&(e.setClasses(),e.highlightFirstItem())}),c.on("open",function(){e.$results.attr("aria-expanded","true"),e.$results.attr("aria-hidden","false"),e.setClasses(),e.ensureHighlightVisible()}),c.on("close",function(){e.$results.attr("aria-expanded","false"),e.$results.attr("aria-hidden","true"),e.$results.removeAttr("aria-activedescendant")}),c.on("results:toggle",function(){var a=e.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),c.on("results:select",function(){var a=e.getHighlightedResults();if(0!==a.length){var c=b.GetData(a[0],"data");"true"==a.attr("aria-selected")?e.trigger("close",{}):e.trigger("select",{data:c})}}),c.on("results:previous",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var d=c-1;0===a.length&&(d=0);var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top,h=f.offset().top,i=e.$results.scrollTop()+(h-g);0===d?e.$results.scrollTop(0):h-g<0&&e.$results.scrollTop(i)}}),c.on("results:next",function(){var a=e.getHighlightedResults(),b=e.$results.find("[aria-selected]"),c=b.index(a),d=c+1;if(!(d>=b.length)){var f=b.eq(d);f.trigger("mouseenter");var g=e.$results.offset().top+e.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=e.$results.scrollTop()+h-g;0===d?e.$results.scrollTop(0):h>g&&e.$results.scrollTop(i)}}),c.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),c.on("results:message",function(a){e.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=e.$results.scrollTop(),c=e.$results.get(0).scrollHeight-b+a.deltaY,d=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=e.$results.height();d?(e.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(e.$results.scrollTop(e.$results.get(0).scrollHeight-e.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(c){var d=a(this),f=b.GetData(this,"data");if("true"===d.attr("aria-selected"))return void(e.options.get("multiple")?e.trigger("unselect",{originalEvent:c,data:f}):e.trigger("close",{}));e.trigger("select",{originalEvent:c,data:f})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(c){var d=b.GetData(this,"data");e.getHighlightedResults().removeClass("select2-results__option--highlighted"),e.trigger("results:focus",{data:d,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var c=a('');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),c.attr("title",this.$element.attr("title")),c.attr("tabindex",this._tabindex),this.$selection=c,c},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(c){a(document.body).on("mousedown.select2."+c.id,function(c){var d=a(c.target),e=d.closest(".select2");a(".select2.select2-container--open").each(function(){a(this),this!=e[0]&&b.GetData(this,"element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()})},e.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.attr("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
        '),a},d.prototype.bind=function(b,e){var f=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){f.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!f.options.get("disabled")){var d=a(this),e=d.parent(),g=c.GetData(e[0],"data");f.trigger("unselect",{originalEvent:b,data:g})}})},d.prototype.clear=function(){var a=this.$selection.find(".select2-selection__rendered");a.empty(),a.removeAttr("title")},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('
      • ×
      • ')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(a,b,c){function d(){}return d.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},d.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var d=this.$selection.find(".select2-selection__clear");if(0!==d.length){b.stopPropagation();var e=c.GetData(d[0],"data"),f=this.$element.val();this.$element.val(this.placeholder.id);var g={data:e};if(this.trigger("clear",g),g.prevented)return void this.$element.val(f);for(var h=0;h0||0===d.length)){var e=a('×');c.StoreData(e[0],"data",d),this.$selection.find(".select2-selection__rendered").prepend(e)}},d}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,d,e){var f=this;a.call(this,d,e),d.on("open",function(){f.$search.trigger("focus")}),d.on("close",function(){f.$search.val(""),f.$search.removeAttr("aria-activedescendant"),f.$search.trigger("focus")}),d.on("enable",function(){f.$search.prop("disabled",!1),f._transferTabIndex()}),d.on("disable",function(){f.$search.prop("disabled",!0)}),d.on("focus",function(a){f.$search.trigger("focus")}),d.on("results:focus",function(a){f.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){f.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){f._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),f.trigger("keypress",a),f._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===f.$search.val()){var d=f.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var e=b.GetData(d[0],"data");f.searchRemoveChoice(e),a.preventDefault()}}});var g=document.documentMode,h=g&&g<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(h)return void f.$selection.off("input.search input.searchcheck");f.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(h&&"input"===a.type)return void f.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&f.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],g=["opening","closing","selecting","unselecting","clearing"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){"status"in d&&(0===d.status||"0"===d.status)||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val(""),e.$search.blur()}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
      • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){b.StoreData(this,"select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(c){var d=b.GetData(this,"select2-scroll-position");a(this).scrollTop(d.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(!0,this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),d.GetData(a[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),d.StoreData(a[0],"data",d.GetData(a[0],"select2Tags")),d.StoreData(a[0],"tags",!0)),d.GetData(a[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",d.GetData(a[0],"ajaxUrl")),d.StoreData(a[0],"ajax-Url",d.GetData(a[0],"ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,d.GetData(a[0])):d.GetData(a[0]);var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,d){null!=c.GetData(a[0],"select2")&&c.GetData(a[0],"select2").destroy(),this.$element=a,this.id=this._generateId(a),d=d||{},this.options=new b(d,a),e.__super__.constructor.call(this);var f=a.attr("tabindex")||0;c.StoreData(a[0],"old-tabindex",f),a.attr("tabindex","-1");var g=this.options.get("dataAdapter");this.dataAdapter=new g(a,this.options);var h=this.render();this._placeContainer(h);var i=this.options.get("selectionAdapter");this.selection=new i(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,h);var j=this.options.get("dropdownAdapter");this.dropdown=new j(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,h);var k=this.options.get("resultsAdapter");this.results=new k(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){l.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),c.StoreData(a[0],"select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",c.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),c.RemoveData(this.$element[0]),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),c.StoreData(b[0],"element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(a,b,c,d,e){if(null==a.fn.select2){var f=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,g=Array.prototype.slice.call(arguments,1);return this.each(function(){var a=e.GetData(this,"select2");null==a&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=a[b].apply(a,g)}),a.inArray(b,f)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/deployed/convertforms/modules/mod_convertforms/language/en-GB/en-GB.mod_convertforms.ini b/deployed/convertforms/modules/mod_convertforms/language/en-GB/en-GB.mod_convertforms.ini new file mode 100644 index 00000000..769ff3c1 --- /dev/null +++ b/deployed/convertforms/modules/mod_convertforms/language/en-GB/en-GB.mod_convertforms.ini @@ -0,0 +1,15 @@ +;; Language File +;; +;; @package Convert Forms +;; @version 3.0.0 Free +;; +;; @author Tassos Marinos +;; @link http://www.tassos.gr +;; @copyright Copyright © 2020 Tassos Marinos All Rights Reserved +;; @license GNU GPLv3 or later + +MOD_CONVERTFORMS="Convert Forms" +MOD_CONVERTFORMS_DESC="This module displays a Form from the Convert Forms component." +CONVERTFORMS="Convert Forms Module" +MOD_CONVERTFORMS_FORM="Choose Form" +MOD_CONVERTFORMS_FORM_DESC="Choose Form" \ No newline at end of file diff --git a/deployed/convertforms/modules/mod_convertforms/language/en-GB/en-GB.mod_convertforms.sys.ini b/deployed/convertforms/modules/mod_convertforms/language/en-GB/en-GB.mod_convertforms.sys.ini new file mode 100644 index 00000000..249e4876 --- /dev/null +++ b/deployed/convertforms/modules/mod_convertforms/language/en-GB/en-GB.mod_convertforms.sys.ini @@ -0,0 +1,13 @@ +;; Language File +;; +;; @package Convert Forms +;; @version 3.0.0 Free +;; +;; @author Tassos Marinos +;; @link http://www.tassos.gr +;; @copyright Copyright © 2020 Tassos Marinos All Rights Reserved +;; @license GNU GPLv3 or later + +MOD_CONVERTFORMS="Convert Forms" +MOD_CONVERTFORMS_DESC="Convert Forms Module" +CONVERTFORMS="Convert Forms Module" \ No newline at end of file diff --git a/deployed/convertforms/modules/mod_convertforms/mod_convertforms.php b/deployed/convertforms/modules/mod_convertforms/mod_convertforms.php new file mode 100644 index 00000000..0d9a1a30 --- /dev/null +++ b/deployed/convertforms/modules/mod_convertforms/mod_convertforms.php @@ -0,0 +1,22 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +// Initialize Convert Forms Library +if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_convertforms/autoload.php')) +{ + return false; +} + +// Include some helper files +echo ConvertForms\Helper::renderFormById($params->get('form')); \ No newline at end of file diff --git a/deployed/convertforms/modules/mod_convertforms/mod_convertforms.xml b/deployed/convertforms/modules/mod_convertforms/mod_convertforms.xml new file mode 100644 index 00000000..d8219824 --- /dev/null +++ b/deployed/convertforms/modules/mod_convertforms/mod_convertforms.xml @@ -0,0 +1,75 @@ + + + mod_convertforms + MOD_CONVERTFORMS_DESC + 1.0 + October 2016 + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + script.install.php + + mod_convertforms.php + language + script.install.helper.php + mod_convertforms.xml + + + +
        + +
        +
        + + + + + + + + + + +
        +
        +
        +
        diff --git a/deployed/convertforms/modules/mod_convertforms/script.install.helper.php b/deployed/convertforms/modules/mod_convertforms/script.install.helper.php new file mode 100644 index 00000000..7f047371 --- /dev/null +++ b/deployed/convertforms/modules/mod_convertforms/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class Mod_ConvertformsInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '
        ', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/modules/mod_convertforms/script.install.php b/deployed/convertforms/modules/mod_convertforms/script.install.php new file mode 100644 index 00000000..ddcef234 --- /dev/null +++ b/deployed/convertforms/modules/mod_convertforms/script.install.php @@ -0,0 +1,22 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class Mod_ConvertFormsInstallerScript extends Mod_ConvertFormsInstallerScriptHelper +{ + public $name = 'CONVERTFORMS'; + public $alias = 'convertforms'; + public $extension_type = 'module'; +} diff --git a/deployed/convertforms/plugins/convertforms/acymailing/acymailing.php b/deployed/convertforms/plugins/convertforms/acymailing/acymailing.php new file mode 100644 index 00000000..02299d5d --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/acymailing.php @@ -0,0 +1,72 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class plgConvertFormsAcyMailing extends \ConvertForms\Plugin +{ + /** + * Main method to store data to service + * + * @return void + */ + public function subscribe() + { + // Make sure there's a list selected + if (!isset($this->lead->campaign->list) || empty($this->lead->campaign->list)) + { + throw new Exception(JText::_('PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED')); + } + + $lists = $this->lead->campaign->list; + $lists_v5 = []; + $lists_v6 = []; + + // Discover lists for each version. v6 lists starts with 6: prefix. + foreach ($lists as $list) + { + // Is a v5 list + if (strpos($list, '6:') === false) + { + $lists_v5[] = $list; + continue; + } + + // Is a v6 list + $lists_v6[] = str_replace('6:', '', $list); + } + + require_once __DIR__ . '/helper.php'; + + // Add user to AcyMailing 5 lists + if (!empty($lists_v5)) + { + ConvertFormsAcyMailingHelper::subscribe_v5($this->lead->email, $this->lead->params, $lists_v5, $this->lead->campaign->doubleoptin); + } + + // Add user to AcyMailing 6 lists + if (!empty($lists_v6)) + { + ConvertFormsAcyMailingHelper::subscribe_v6($this->lead->email, $this->lead->params, $lists_v6, $this->lead->campaign->doubleoptin); + } + } + + /** + * Disable service wrapper + * + * @return boolean + */ + protected function loadWrapper() + { + return true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/acymailing/acymailing.xml b/deployed/convertforms/plugins/convertforms/acymailing/acymailing.xml new file mode 100644 index 00000000..8d51ae97 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/acymailing.xml @@ -0,0 +1,20 @@ + + + PLG_CONVERTFORMS_ACYMAILING + PLG_CONVERTFORMS_ACYMAILING_DESC + 1.0 + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + Copyright (c) 2020 Tassos Marinos + GNU General Public License version 3, or later + November 2015 + script.install.php + + language + acymailing.php + form.xml + script.install.helper.php + helper.php + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/acymailing/form.xml b/deployed/convertforms/plugins/convertforms/acymailing/form.xml new file mode 100644 index 00000000..191241f0 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/form.xml @@ -0,0 +1,19 @@ + + +
        + + + + + +
        + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/acymailing/helper.php b/deployed/convertforms/plugins/convertforms/acymailing/helper.php new file mode 100644 index 00000000..b9e2d1d3 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/helper.php @@ -0,0 +1,161 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class ConvertFormsAcyMailingHelper +{ + /** + * Subscribe method for AcyMailing v6 + * + * @param array $lists + * + * @return void + */ + public static function subscribe_v6($email, $params, $lists, $doubleOptin = true) + { + if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_acym/helpers/helper.php')) + { + throw new Exception(JText::sprintf('PLG_CONVERTFORMS_ACYMAILING_HELPER_CLASS_ERROR', 6)); + } + + // Create user object + $user = new stdClass(); + $user->email = $email; + $user->confirmed = $doubleOptin ? false : true; + + $user_fields = array_change_key_case($params); + + $user->name = isset($user_fields['name']) ? $user_fields['name'] : ''; + + // Load User Class + $acym = acym_get('class.user'); + + // Check if exists + $existing_user = $acym->getOneByEmail($email); + + if ($existing_user) + { + $user->id = $existing_user->id; + } else + { + // Save user to database only if it's a new user. + if (!$user->id = $acym->save($user)) + { + throw new Exception(JText::_('PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER')); + } + } + + // Save Custom Fields + $fieldClass = acym_get('class.field'); + $acy_fields = $fieldClass->getAllfields(); + unset($user_fields['name']); // Name is already used during user creation. + + $fields_to_store = []; + + foreach ($user_fields as $paramKey => $paramValue) + { + // Check if paramKey it's a custom field + $field_found = array_filter($acy_fields, function($field) use($paramKey) { + return (strtolower($field->name) == $paramKey || $field->id == $paramKey); + }); + + if ($field_found) + { + // Get the 1st occurence + $field = array_shift($field_found); + + // AcyMailing 6 needs field's ID to recognize a field. + $fields_to_store[$field->id] = $paramValue; + + // $paramValue output: array(1) { [0]=> string(2) "gr" } + // AcyMailing will get the key as the value instead of "gr" + // We combine to remove the keys in order to keep the values + if (is_array($paramValue)) + { + $fields_to_store[$field->id] = array_combine($fields_to_store[$field->id], $fields_to_store[$field->id]); + } + } + } + + if ($fields_to_store) + { + $fieldClass->store($user->id, $fields_to_store); + } + + // Subscribe user to AcyMailing lists + return $acym->subscribe($user->id, $lists); + } + + /** + * Subscribe method for AcyMailing v5 + * + * @param array $lists + * + * @return void + */ + public static function subscribe_v5($email, $params, $lists, $doubleOptin = true) + { + if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_acymailing/helpers/helper.php')) + { + throw new Exception(JText::sprintf('PLG_CONVERTFORMS_ACYMAILING_HELPER_CLASS_ERROR', 5)); + } + + // Create user object + $user = new stdClass(); + $user->email = $email; + $user->confirmed = $doubleOptin ? false : true; + + // Get Custrom Fields + $db = JFactory::getDbo(); + + $customFields = $db->setQuery( + $db->getQuery(true) + ->select($db->quoteName('namekey')) + ->from($db->quoteName('#__acymailing_fields')) + )->loadColumn(); + + if (is_array($customFields) && count($customFields)) + { + foreach ($params as $key => $param) + { + if (in_array($key, $customFields)) + { + $user->$key = $param; + } + } + } + + $acymailing = acymailing_get('class.subscriber'); + $userid = $acymailing->subid($email); + + // AcyMailing sends account confirmation e-mails even if the user exists, so we need + // to run save() method only if the user actually is new. + if (is_null($userid)) + { + // Save user to database + if (!$userid = $acymailing->save($user)) + { + throw new Exception(JText::_('PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER')); + } + } + + // Subscribe user to AcyMailing lists + $lead = []; + foreach($lists as $listId) + { + $lead[$listId] = ['status' => 1]; + } + + return $acymailing->saveSubscription($userid, $lead); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/bg-BG/bg-BG.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/bg-BG/bg-BG.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..765eeabe --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/bg-BG/bg-BG.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Convert Forms – AcyMailing Integration" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms – интеграция с Acymailing Joomla! разширение." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="Списък ID" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Изберете списъците, за които потребителят трябва да се абонира." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="В две стъпки" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Трябва ли потребителят да щракне линка в имейла за потвърждение, преди да бъде считан за абонат?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Потребителят не може да бъде създаден." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Моля, изберете списък в настройките на кампанията" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/ca-ES/ca-ES.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/ca-ES/ca-ES.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..cb6eb592 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/ca-ES/ca-ES.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Integració Convert Forms - AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC="Integració entre Convert Forms i l'extensió de Joomla! AcyMailing." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="ID de llista" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Escull les llistes a les que s'hauria de subscriure l'usuari" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Doble confirmació d'entrada" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="L'usuari hauria de clicar a un correu de confirmació abans de ser considerat subscriptor?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="No es pot crear l'usuari." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Escull una llista a la configuració de la campanya" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/cs-CZ/cs-CZ.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/cs-CZ/cs-CZ.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..0461803c --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/cs-CZ/cs-CZ.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Convert Forms - integrace AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms - Integrace s rozšířením Acymailing pro Joomla!" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="Seznam ID" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Vyberte seznamy k jejiž odběru se uživatel přihlašuje." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Dvojité potvrzení souhlasu" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Měl by uživatel potvrdit kliknutím na odkaz v potvrzovacím e-mailu souhlas s odběrem?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Nevytvářet uživatele." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Prosím zvolte seznam v nastavení kampaní" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/de-DE/de-DE.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/de-DE/de-DE.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..8c5743c5 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/de-DE/de-DE.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Convert Forms - AcyMailing Integration" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms - Integration mit Acymailing Joomla! Erweiterung." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="ID Liste" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Wählen Sie die Listen aus für die der Benutzer als Abonnement registriert werden soll." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Doppelte Verifizierung" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Muss der Benutzer eine Bestätigungsmail anklicken bevor er als Abonnement registriert wird?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Benutzer kann nicht erstellt werden." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Bitte wählen Sie eine Liste in den Kampagneneinstellungen aus." diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/en-GB/en-GB.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/en-GB/en-GB.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..2f79dacc --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/en-GB/en-GB.plg_convertforms_acymailing.ini @@ -0,0 +1,17 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Convert Forms - AcyMailing Integration" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms - Integration with Acymailing Joomla! Extension." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="List ID" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Select the lists which the user should be subscribed to." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Double Optin" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Should the user have to click on a confirmation email before being considered as a subscriber?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Can't create user." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Please select a list in the campaign settings" +PLG_CONVERTFORMS_ACYMAILING_HELPER_CLASS_ERROR="AcyMailing %d helper class not found. Make sure AcyMailing is installed and you've selected the correct AcyMailing list in the campaign settings." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/en-GB/en-GB.plg_convertforms_acymailing.sys.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/en-GB/en-GB.plg_convertforms_acymailing.sys.ini new file mode 100644 index 00000000..191514e4 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/en-GB/en-GB.plg_convertforms_acymailing.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING="Convert Forms - AcyMailing Integration" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms - Integration with Acymailing Joomla! Extension." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/es-ES/es-ES.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/es-ES/es-ES.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..71b92264 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/es-ES/es-ES.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="Acymailing" +PLG_CONVERTFORMS_ACYMAILING=""_QQ_"Formas de conversión"_QQ_" - Integración con AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC=""_QQ_"Formularios de conversión"_QQ_" - Integrar con extensión de Joomla! Acymailing." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="Lista ID" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Selecciona las listas a la que el usuario debe estar suscrito." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Optin doble" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="¿Debe el usuario hacer click en un email de confirmación antes de ser considerado subscriptor?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="No se puede crear el usuario" +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Por favor, seleccione una lista en la configuración de campaña" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/fi-FI/fi-FI.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/fi-FI/fi-FI.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..a49578a4 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/fi-FI/fi-FI.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Convert Forms - AcyMailing liitäntä" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms -integrointi Acymailing Joomla! laajennukseen." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="Luettelo ID" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Valitse luettelo ID, jonka käyttäjän tulee tilata" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Tupla varmistus" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Pitääkö käyttäjän avata vahvistusviesti ennen kuin hänet hyväksytään tilaajana?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Käyttäjää ei voi luoda." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Valitse luettelosta kampanja-asetuksissa" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/fr-FR/fr-FR.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/fr-FR/fr-FR.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..8d3d9636 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/fr-FR/fr-FR.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Convertisseur de formulaires - Intégration de AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convertisseur de formulaires - Intégration avec l'extension Joomla! AcyMailing." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="ID de la liste" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Sélectionnez les listes auxquelles l'utilisateur doit s'abonner." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Vérification par mail" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="L'utilisateur doit-il cliquer sur un mail de confirmation avant d'être considéré comme abonné ?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Impossible de créer un utilisateur" +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Merci de choisir une liste dans les réglages de la campagne" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/it-IT/it-IT.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/it-IT/it-IT.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..412e59ef --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/it-IT/it-IT.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Integrazione Convert Forms - AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC="Integrazione Convert Forms con l'estensione di Joomla! Acymailing." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="ID elenco" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Seleziona le liste a cui l'utente dovrebbe essere iscritto." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Doppio Opt-in" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="L'utente dovrebbe fare clic su una mail di conferma prima di essere considerato un iscritto?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Non posso creare l'utente." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Seleziona una lista nelle impostazioni di campagna" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/ru-RU/ru-RU.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/ru-RU/ru-RU.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..4002ef8d --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/ru-RU/ru-RU.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Преобразовать формы - интеграция AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC="Преобразование форм - интеграция с расширением Joomla! Acymailing." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="Список идентификаторов" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Выберите списки, для которых пользователь должен быть зарегистрирован в качестве подписки." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Двойная проверка" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Нужно ли пользователю нажимать подтверждение по электронной почте перед регистрацией в качестве подписки?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Пользователь не может быть создан." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Пожалуйста, выберите список в настройках кампании." diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/sv-SE/sv-SE.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/sv-SE/sv-SE.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..bdce0be7 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/sv-SE/sv-SE.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="Acymailing" +PLG_CONVERTFORMS_ACYMAILING="Convert Forms - AcyMailing Integration" +PLG_CONVERTFORMS_ACYMAILING_DESC="Convert Forms - Integration med Acymailing Joomla! Komponent." +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="List ID" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Välj listan användaren skall bli prenumerant till." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Dubbel Optin" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Skall användaren behöva klicka på ett konfirmation email innan han anses bli en prenumerant?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Kan inte skapa användare." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Vänligen välj en lista i kampanj inställningen" diff --git a/deployed/convertforms/plugins/convertforms/acymailing/language/uk-UA/uk-UA.plg_convertforms_acymailing.ini b/deployed/convertforms/plugins/convertforms/acymailing/language/uk-UA/uk-UA.plg_convertforms_acymailing.ini new file mode 100644 index 00000000..0f8ea82c --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/language/uk-UA/uk-UA.plg_convertforms_acymailing.ini @@ -0,0 +1,16 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ACYMAILING_ALIAS="AcyMailing" +PLG_CONVERTFORMS_ACYMAILING="Перетворити форми - інтеграція AcyMailing" +PLG_CONVERTFORMS_ACYMAILING_DESC="Перетворити форми - інтеграція з розширенням Acymailing Joomla!" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID="Список ідентифікаторів" +PLG_CONVERTFORMS_ACYMAILING_LIST_ID_DESC="Виберіть списки, для яких користувач повинен бути зареєстрований як підписка." +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN="Подвійна перевірка" +PLG_CONVERTFORMS_ACYMAILING_DOUBLEOPTIN_DESC="Чи повинен користувач натиснути електронний лист для підтвердження, перш ніж зареєструватися як підписка?" +PLG_CONVERTFORMS_ACYMAILING_CANT_CREATE_USER="Користувача не можна створити." +PLG_CONVERTFORMS_ACYMAILING_NO_LIST_SELECTED="Виберіть список у налаштуваннях кампанії." diff --git a/deployed/convertforms/plugins/convertforms/acymailing/script.install.helper.php b/deployed/convertforms/plugins/convertforms/acymailing/script.install.helper.php new file mode 100644 index 00000000..e6b5ef70 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgConvertformsAcymailingInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/convertforms/acymailing/script.install.php b/deployed/convertforms/plugins/convertforms/acymailing/script.install.php new file mode 100644 index 00000000..b790d709 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/acymailing/script.install.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgConvertFormsAcyMailingInstallerScript extends PlgConvertFormsAcyMailingInstallerScriptHelper +{ + public $name = 'PLG_CONVERTFORMS_ACYMAILING'; + public $alias = 'acymailing'; + public $extension_type = 'plugin'; + public $plugin_folder = "convertforms"; + public $show_message = false; +} diff --git a/deployed/convertforms/plugins/convertforms/emails/emails.php b/deployed/convertforms/plugins/convertforms/emails/emails.php new file mode 100644 index 00000000..3dce5978 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/emails.php @@ -0,0 +1,278 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class plgConvertFormsEmails extends JPlugin +{ + /** + * Form Object + * + * @var object + */ + private $form; + + /** + * Auto loads the plugin language file + * + * @var boolean + */ + protected $autoloadLanguage = true; + + /** + * Add plugin fields to the form + * + * @param JForm $form + * @param object $data + * + * @return boolean + */ + public function onConvertFormsFormPrepareForm($form, $data) + { + $form->loadFile(__DIR__ . '/form/form.xml', false); + return true; + } + + /** + * Event triggered during fieldset rendering in the form editing page in the backend. + * + * @param string $fieldset_name The name of the fieldset is going to be rendered + * @param string $fieldset The HTML output of the fieldset + * + * @return void + */ + public function onConvertFormsBackendFormPrepareFieldset($fieldset_name, &$fieldset) + { + if ($this->_name != $fieldset_name) + { + return; + } + + // Proceed only if Mail Sending is disabled. + if ((bool) \JFactory::getConfig()->get('mailonline')) + { + return; + } + + $warning = ' +
        + ' . + \JText::_('PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED') . ' +
        '; + + $fieldset = $warning . $fieldset; + } + + /** + * Create the final credentials with the auth code + * + * @param string $context The context of the content passed to the plugin (added in 1.6) + * @param object $article A JTableContent object + * @param bool $isNew If the content has just been created + * + * @return boolean + */ + public function onContentBeforeSave($context, $form, $isNew) + { + if ($context != 'com_convertforms.form') + { + return; + } + + if (!is_object($form) || !isset($form->params)) + { + return; + } + + $params = json_decode($form->params); + + if (!isset($params->emails)) + { + return true; + } + + // Proceed only if Send Notifications option is enabled + if ($params->sendnotifications != '1') + { + return true; + } + + $this->form = clone $form; + $this->form->params = $params; + + foreach ($params->emails as $key => $email) + { + $keyToID = ((int) str_replace('emails', '', $key)) + 1; + $error = JText::_('COM_CONVERTFORMS_EMAILS') . ' #' . $keyToID . ' - '; + + $options = [ + 'recipient' => ['COM_CONVERTFORMS_EMAILS_RECIPIENT', true, true], + 'subject' => ['COM_CONVERTFORMS_EMAILS_SUBJECT', false, true], + 'from_name' => ['COM_CONVERTFORMS_EMAILS_FROM', false, true], + 'from_email' => ['COM_CONVERTFORMS_EMAILS_FROM_EMAIL', true, true], + 'reply_to' => ['COM_CONVERTFORMS_EMAILS_REPLY_TO', true, false], + 'reply_to_name' => ['COM_CONVERTFORMS_EMAILS_REPLY_TO_NAME', false, false], + 'body' => ['COM_CONVERTFORMS_EMAILS_BODY', false, true], + 'attachments' => ['COM_CONVERTFORMS_EMAILS_ATTACHMENT', false, false] + ]; + + foreach ($options as $key => $option) + { + $acceptsCommaSeparatedValues = $option[1]; + $optionValues = $acceptsCommaSeparatedValues ? explode(',', $email->$key) : (array) $email->$key; + + foreach ($optionValues as $optionValue) + { + $result = $this->validateOption($optionValue, $option[1], $option[2]); + + if (is_string($result)) + { + $form->setError($error . JText::_($option[0]) . ' - ' . $result); + return false; + break; + } + } + } + } + + return true; + } + + /** + * Validates string as an Email Notification option. + * + * @param string $string The option name as found in the xml file + * @param bool $validateAsEmail If enabled, the option should be validated as an Email Address + * @param bool $required If enabled, string should not be left blank + * + * @return void + */ + private function validateOption($string, $validateAsEmail = true, $required = true) + { + // Check if it's empty + if ($required && (empty($string) || is_null($string))) + { + return JText::sprintf('PLG_CONVERTFORMS_EMAILS_ERROR_BLANK', $string); + } + + $string = trim($string); + + // Check if has a valid field-based Smart Tag in the form: {field.field-name} + $pattern = "#{field.(.*?)}#s"; + preg_match_all($pattern, $string, $result); + + if (!empty($result[0]) && count($result[0]) > 0) + { + foreach ($result[0] as $key => $match) + { + if (!$this->formHasField($result[1][$key])) + { + return JText::sprintf('PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG', $match); + break; + } + } + + return true; + } + + // Check if has a valid Email Address info@mail.com + if ($validateAsEmail && !empty($string)) + { + // Check common email-based Smart Tags + if (in_array($string, ['{user.email}', '{site.email}'])) + { + return true; + } + + if (!ConvertForms\Validate::email($string)) + { + return JText::sprintf('PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS', $string); + } + } + + return true; + } + + /** + * Check if given name exists as a form field + * + * @param string $name + * + * @return bool + */ + private function formHasField($name) + { + $name = strtolower($name); + + foreach ($this->form->params->fields as $field) + { + if (!isset($field->name)) + { + continue; + } + + if (strtolower($field->name) == $name) + { + return true; + } + + // In case a sub Smart Tag is being used. Eg: {field.dropdown.label} to get dropdown's selected text. + if (stripos($name, $field->name . '.') !== false) + { + return true; + } + } + + return false; + } + + /** + * Content is passed by reference, but after the save, so no changes will be saved. + * Method is called right after the content is saved. + * + * @param string $lead The Conversion data + * @param bool $model The Conversions Model + * @param bool $isNew If the Conversion has just been created + * + * @return void + */ + public function onConvertFormsConversionAfterSave($lead, $model, $isNew) + { + if (!isset($lead->form->sendnotifications) || !$lead->form->sendnotifications) + { + return; + } + + if (!isset($lead->form->emails) || !is_array($lead->form->emails)) + { + return; + } + + // Send email queue + foreach ($lead->form->emails as $key => $email) + { + // Trigger Content Plugins + $email['body'] = \JHtml::_('content.prepare', $email['body']); + + // Replace {variables} + $email = ConvertForms\SmartTags::replace($email, $lead); + + // Send mail + $mailer = new NRFramework\Email($email); + + if (!$mailer->send()) + { + throw new \Exception($mailer->error); + } + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/emails/emails.xml b/deployed/convertforms/plugins/convertforms/emails/emails.xml new file mode 100644 index 00000000..455994bd --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/emails.xml @@ -0,0 +1,19 @@ + + + PLG_CONVERTFORMS_EMAILS + PLG_CONVERTFORMS_EMAILS_DESC + 1.0 + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + Copyright (c)2011-2016 Tassos Marinos + GNU General Public License version 3, or later + January 2017 + script.install.php + + language + form + emails.php + script.install.helper.php + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/emails/form/fields.xml b/deployed/convertforms/plugins/convertforms/emails/form/fields.xml new file mode 100644 index 00000000..4eb2dd85 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/form/fields.xml @@ -0,0 +1,57 @@ + +
        +
        + + + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/emails/form/fields/cfsubform.php b/deployed/convertforms/plugins/convertforms/emails/form/fields/cfsubform.php new file mode 100644 index 00000000..6405e84d --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/form/fields/cfsubform.php @@ -0,0 +1,47 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +JFormHelper::loadFieldClass('subform'); + +class JFormFieldCFSubform extends JFormFieldSubform +{ + /** + * Method to get the field input markup. + * + * @return string The field input markup. + * + * @since 3.6 + */ + protected function getInput() + { + // The following script toggles the required attribute for all Email Notification options. + JFactory::getDocument()->addScriptDeclaration(' + jQuery(function($) { + $("input[name=\'jform[sendnotifications]\']").on("change", function() { + var enabled = $(this).is(":checked"); + var exclude_fields = $("input[id*=reply_to], input[id$=attachments]"); + var fields = $("#behavior-emails .subform-repeatable-group").find("input, textarea").not(exclude_fields); + + if (enabled) { + fields.attr("required", "required").addClass("required"); + } else { + fields.removeAttr("required").removeClass("required"); + } + }); + }); + '); + + return parent::getInput(); + } +} diff --git a/deployed/convertforms/plugins/convertforms/emails/form/form.xml b/deployed/convertforms/plugins/convertforms/emails/form/form.xml new file mode 100644 index 00000000..7c094f39 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/form/form.xml @@ -0,0 +1,26 @@ + +
        +
        + + + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/emails/language/bg-BG/bg-BG.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/bg-BG/bg-BG.plg_convertforms_emails.ini new file mode 100644 index 00000000..ac903b12 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/bg-BG/bg-BG.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms – имейл нотификации" +PLG_CONVERTFORMS_EMAILS_DESC="Изпращайте известия по имейл, когато потребителите изпратят формуляр." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Задължително поле" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Неизвестен смарт таг: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Невалиден имейл адрес: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="Изпращането на поща е изключено!
        За да можете да изпращате имейли, опцията за изпращане на поща в глобалните настройките за поща на Joomla!, трябва да бъде активирана." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/ca-ES/ca-ES.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/ca-ES/ca-ES.plg_convertforms_emails.ini new file mode 100644 index 00000000..717e22ab --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/ca-ES/ca-ES.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - Notificacions per correu electrònic" +PLG_CONVERTFORMS_EMAILS_DESC="Envia notificacions per correu electrònic quan els usuaris responen a un formulari." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Camp requerit" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Etiqueta intel·ligent desconeguda: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Adreça de correu electrònic invàlida: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="L'enviament de correus electrònics està desactivat!
        Per poder enviar correus electrònics, la opció Enviar Correu electrònic dins la configuració Global de Joomla! ha d'estar activada." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/cs-CZ/cs-CZ.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/cs-CZ/cs-CZ.plg_convertforms_emails.ini new file mode 100644 index 00000000..46f93c57 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/cs-CZ/cs-CZ.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - E-mailová upozornění" +PLG_CONVERTFORMS_EMAILS_DESC="Poslat upozornění e-mailem, pokud uživatel odešle formulář" +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Pole je povinné" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Neznámý chytrý štítek: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Nemplatný e-mailová adresa: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="Odesílání e-mailů je vypnuté!
        Pokud chcete odesílání e-mailů zprovoznit, musíte aktivovat volbu Odesílat e-maily, kterou najdete v sekci Nastavení mailu v Globálním nastavení Joomla!" diff --git a/deployed/convertforms/plugins/convertforms/emails/language/de-DE/de-DE.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/de-DE/de-DE.plg_convertforms_emails.ini new file mode 100644 index 00000000..6ae85dc1 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/de-DE/de-DE.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - Email Benachrichtigung" +PLG_CONVERTFORMS_EMAILS_DESC="Email Benachrichtigung senden, wenn Benutzer ein Formular abschickt" +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Feld ist erforderlich" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Unbekanntes Smart Tag: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Ungültige E-Mail-Adresse: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED=" E-Mail-Versand ist deaktiviert!
        Um E-Mails versenden zu können, muss die Option E-Mail senden in den E-Mail-Einstellungen in der globalen Joomla! -Konfiguration aktiviert sein." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/en-GB/en-GB.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/en-GB/en-GB.plg_convertforms_emails.ini new file mode 100644 index 00000000..9b29619f --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/en-GB/en-GB.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - Email Notifications" +PLG_CONVERTFORMS_EMAILS_DESC="Send email notifications when users submit a form." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Field is required" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Unknown Smart Tag: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Invalid email address: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="Mail sending is turned off!
        In order to be able to send emails, the Send Mail option found under the Mail Settings in the Joomla! Global Configuration must be enabled." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/emails/language/en-GB/en-GB.plg_convertforms_emails.sys.ini b/deployed/convertforms/plugins/convertforms/emails/language/en-GB/en-GB.plg_convertforms_emails.sys.ini new file mode 100644 index 00000000..af8ca79d --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/en-GB/en-GB.plg_convertforms_emails.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - Email Notifications" +PLG_CONVERTFORMS_EMAILS_DESC="Send email notifications when users submit a form." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/emails/language/es-ES/es-ES.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/es-ES/es-ES.plg_convertforms_emails.ini new file mode 100644 index 00000000..09ce8db8 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/es-ES/es-ES.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS=""_QQ_"Formas de conversión"_QQ_" - Notificaciones por email" +PLG_CONVERTFORMS_EMAILS_DESC="Envíe notificación por email cuando los usuarios envíen un formulario." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Campo requerido" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Smart Tag desconocido «%s»" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Email incorrecto «%s»" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="¡El envío de correo está desactivado! Para poder enviar correos electrónicos, la opción Enviar correo se encuentra en la Configuración de correo en Joomla! La configuración global debe estar habilitada." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/fi-FI/fi-FI.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/fi-FI/fi-FI.plg_convertforms_emails.ini new file mode 100644 index 00000000..f00d1936 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/fi-FI/fi-FI.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - Sähköposti-ilmoitukset" +PLG_CONVERTFORMS_EMAILS_DESC="Lähetä sähköposti-ilmoitus, kun käyttäjä lähettää lomakkeen." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Kenttä vaaditaan" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Tuntematon Smart Tag: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Virheellinen sähköpostiosoite: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="Sähköpostien lähettäminen on kytketty pois päältä!
        Jotta voisit lähettää sähköpostia, Joomlan globaalit sähköpostiasetukset on otettava käyttöön." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/fr-FR/fr-FR.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/fr-FR/fr-FR.plg_convertforms_emails.ini new file mode 100644 index 00000000..81a2af49 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/fr-FR/fr-FR.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convertisseur de formulaires - Notifications par mail" +PLG_CONVERTFORMS_EMAILS_DESC="Envoyer une notification par mail aux utilisateurs complétant le formulaire." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Ce champ est requis" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Smart tag inconnu : %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Adresse de messagerie incorrecte : %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="L'envoi de mails est désactivé !
        Pour pouvoir les envoyer, vous devez activer l'option dans la Configuration générale de Joomla!" diff --git a/deployed/convertforms/plugins/convertforms/emails/language/it-IT/it-IT.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/it-IT/it-IT.plg_convertforms_emails.ini new file mode 100644 index 00000000..916f8b83 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/it-IT/it-IT.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - Notifiche Email" +PLG_CONVERTFORMS_EMAILS_DESC="Invia una notifica via email quando un utente invia un modulo." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Campo richiesto" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Smart Tag sconosciuta: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Indirizzo eMail errato: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="L'invio di email è disabilitato!Per abilitare la funzione di invio email, l'ozpione Invia Email deve essere attivata nel pannello di controllo di Joomla, alla voce Configurazione Globale." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/nl-NL/nl-NL.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/nl-NL/nl-NL.plg_convertforms_emails.ini new file mode 100644 index 00000000..087899b3 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/nl-NL/nl-NL.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Convert Forms - E-mail Notificaties" +PLG_CONVERTFORMS_EMAILS_DESC="Stuur e-mail notificaties als gebruikers een formulier inzenden." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Dit veld is vereist" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Onbekende Smart Tag: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Ongeldig e-mailadres: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="Sturen van mail is uitgeschakeld!
        Om e-mails te kunnen sturen moet de Send Mail optie in de Mail Instellingen in de Joomla! Global Configuration ingeschakeld zijn." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/pt-BR/pt-BR.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/pt-BR/pt-BR.plg_convertforms_emails.ini new file mode 100644 index 00000000..2c8d31f0 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/pt-BR/pt-BR.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Plugin Formulários de Conversão - Notificações de E-mail" +PLG_CONVERTFORMS_EMAILS_DESC="Envia notificações por e-mail quando os usuários enviarem um formulário." +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Campo obrigatório" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Smart Tag desconhecida: 1%s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Endereço de email inválido: 1%s" +; PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED="Mail sending is turned off!
        In order to be able to send emails, the Send Mail option found under the Mail Settings in the Joomla! Global Configuration must be enabled." diff --git a/deployed/convertforms/plugins/convertforms/emails/language/ru-RU/ru-RU.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/ru-RU/ru-RU.plg_convertforms_emails.ini new file mode 100644 index 00000000..d305c225 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/ru-RU/ru-RU.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Преобразовать формы - Уведомление по электронной почте" +PLG_CONVERTFORMS_EMAILS_DESC="Отправить уведомление по электронной почте, когда пользователь отправляет форму" +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Поле обязательно для заполнения" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Неизвестный смарт-тег: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Неверный адрес электронной почты: %s" +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED=" Отправка электронной почты деактивирована!
        Чтобы иметь возможность отправлять электронную почту, в настройках электронной почты в глобальной конфигурации Joomla! Должен быть установлен параметр Отправить электронную почту. быть активированным. " diff --git a/deployed/convertforms/plugins/convertforms/emails/language/uk-UA/uk-UA.plg_convertforms_emails.ini b/deployed/convertforms/plugins/convertforms/emails/language/uk-UA/uk-UA.plg_convertforms_emails.ini new file mode 100644 index 00000000..9ee26e83 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/language/uk-UA/uk-UA.plg_convertforms_emails.ini @@ -0,0 +1,13 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_EMAILS="Перетворити форми - повідомлення електронною поштою" +PLG_CONVERTFORMS_EMAILS_DESC="Надіслати сповіщення електронною поштою, коли користувач подає форму" +PLG_CONVERTFORMS_EMAILS_ERROR_BLANK="Поле обов'язкове" +PLG_CONVERTFORMS_EMAILS_ERROR_UNKNOWN_SMART_TAG="Невідомий смарт-тег: %s " +PLG_CONVERTFORMS_EMAILS_ERROR_INVALID_EMAIL_ADDRESS="Недійсна адреса електронної пошти: %s " +PLG_CONVERTFORMS_EMAILS_ERROR_MAIL_SENDING_DISABLED=" Електронна пошта вимкнена!
        Щоб мати змогу надсилати електронні листи, у глобальній конфігурації Joomla! Потрібно встановити параметр"_QQ_" Надіслати електронну пошту "_QQ_". бути активованим. " diff --git a/deployed/convertforms/plugins/convertforms/emails/script.install.helper.php b/deployed/convertforms/plugins/convertforms/emails/script.install.helper.php new file mode 100644 index 00000000..6cee2678 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgConvertformsEmailsInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/convertforms/emails/script.install.php b/deployed/convertforms/plugins/convertforms/emails/script.install.php new file mode 100644 index 00000000..48d75d27 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/emails/script.install.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgConvertFormsEmailsInstallerScript extends PlgConvertFormsEmailsInstallerScriptHelper +{ + public $name = 'PLG_CONVERTFORMS_EMAILS'; + public $alias = 'emails'; + public $extension_type = 'plugin'; + public $plugin_folder = "convertforms"; + public $show_message = false; +} diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/errorlogger.php b/deployed/convertforms/plugins/convertforms/errorlogger/errorlogger.php new file mode 100644 index 00000000..89e04ab0 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/errorlogger.php @@ -0,0 +1,84 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use NRFramework\WebClient; +use ConvertForms\Form; + +class plgConvertFormsErrorLogger extends JPlugin +{ + /** + * Joomla Application Object + * + * @var object + */ + protected $app; + + /** + * Add plugin fields to the form + * + * @param JForm $form + * @param object $data + * + * @return boolean + */ + public function onConvertFormsError($error, $category, $form_id, $data = null) + { + // Only on front-end + if ($this->app->isClient('administrator')) + { + return; + } + + if (isset($data['skip_error_logger'])) + { + return; + } + + $user = JFactory::getUser(); + + // Get form's name + $form_data = Form::load($form_id); + $form_name = isset($form_data['name']) ? $form_data['name'] : 'Unknown Form'; + $form_name .= ' (' . $form_id . ')'; + +$error_message = ' + +Identity +--------------------------------------------------------------------------- +Date Time: ' . JFactory::getDate() . ' +Error Category: ' . $category . ' +Error message: ' . $error . ' +Form: ' . $form_name . ' +Session ID: ' . JFactory::getSession()->getId() . ' +IP Address: ' . $this->app->input->server->get('REMOTE_ADDR') . ' +User Agent: ' . WebClient::getClient()->userAgent . ' +Device: ' . WebClient::getDeviceType() . ' +Logged In Username: ' . $user->username . ' +Logged In Name: ' . $user->name . ' + +Data +--------------------------------------------------------------------------- +' . print_r($data, true) . ' + +Request Headers +--------------------------------------------------------------------------- +' . print_r($this->app->input->server->getArray(), true) . ' +'; + + try { + JLog::add($error_message, JLog::ERROR, 'convertforms_errors'); + } catch (\Throwable $th) { + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/errorlogger.xml b/deployed/convertforms/plugins/convertforms/errorlogger/errorlogger.xml new file mode 100644 index 00000000..22c10ecc --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/errorlogger.xml @@ -0,0 +1,18 @@ + + + PLG_CONVERTFORMS_ERRORLOGGER + PLG_CONVERTFORMS_ERRORLOGGER_DESC + 1.0 + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + Copyright (c) 2011-2019 Tassos Marinos + GNU General Public License version 3, or later + January 2019 + script.install.php + + language + errorlogger.php + script.install.helper.php + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/bg-BG/bg-BG.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/bg-BG/bg-BG.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..4a0052d7 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/bg-BG/bg-BG.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms – Дневник на грешките" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Дневник на грешките при регистрация, грешки при подаване на формуляра и при показване на формуляр в сайта." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/ca-ES/ca-ES.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/ca-ES/ca-ES.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..66638d06 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/ca-ES/ca-ES.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Registre d'errors" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Registra els errors produïts durant la tramesa i el renderitzat de formularis a un arxiu de registre." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/cs-CZ/cs-CZ.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/cs-CZ/cs-CZ.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..e87fc94e --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/cs-CZ/cs-CZ.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Záznam chyb" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Logovat chyby, která nastanou v průběhu vyplňování nebo odesílání formuláře a ukládat je do souboru." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/de-DE/de-DE.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/de-DE/de-DE.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..c6c37045 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/de-DE/de-DE.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Formulare konvertieren - Fehlerprotokoll" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Fehler protokollieren, die beim Senden des Formulars und beim Rendern des Formulars in eine Fehlerprotokolldatei auftreten." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/en-GB/en-GB.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/en-GB/en-GB.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..5825a55a --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/en-GB/en-GB.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Error Logger" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Log errors errors produced during form submission and form rendering to an error log file." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/en-GB/en-GB.plg_convertforms_errorlogger.sys.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/en-GB/en-GB.plg_convertforms_errorlogger.sys.ini new file mode 100644 index 00000000..5825a55a --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/en-GB/en-GB.plg_convertforms_errorlogger.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Error Logger" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Log errors errors produced during form submission and form rendering to an error log file." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/es-ES/es-ES.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/es-ES/es-ES.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..ec53e4d3 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/es-ES/es-ES.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convertir formularios - Registro de errores" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Errores de registro de errores producidos durante el envío del formulario y la representación del formulario en un archivo de registro de errores." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/fi-FI/fi-FI.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/fi-FI/fi-FI.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..78135411 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/fi-FI/fi-FI.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Virherekisteröinti" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Virhelogiin liitetyt virheet, jotka on tuotettu lomakkeen lähettämisen ja lomakkeen palautuksen yhteydessä." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/fr-FR/fr-FR.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/fr-FR/fr-FR.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..8bcb43b3 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/fr-FR/fr-FR.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Enregistrement des erreurs" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Enregistre dans un fichier log les erreurs qui se produisent lors de la soumission ou du remplissage d'un formulaire." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/it-IT/it-IT.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/it-IT/it-IT.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..bad683d7 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/it-IT/it-IT.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Logger Errori" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Trascrive su un file gli errori che avvengono quando si inviano moduli." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/nl-NL/nl-NL.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/nl-NL/nl-NL.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..5557c02a --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/nl-NL/nl-NL.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Convert Forms - Fouten Logboek" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Fouten die zich voordoen bij de werking en bij het inzenden van een formulier worden in een logbestand bewaard. " diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/ru-RU/ru-RU.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/ru-RU/ru-RU.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..5ca41281 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/ru-RU/ru-RU.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Конструктор форм - Журнал ошибок" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Сохраняет в журнал ошибки, возникающие при отправке заявок или создании форм" diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/language/uk-UA/uk-UA.plg_convertforms_errorlogger.ini b/deployed/convertforms/plugins/convertforms/errorlogger/language/uk-UA/uk-UA.plg_convertforms_errorlogger.ini new file mode 100644 index 00000000..91510c39 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/language/uk-UA/uk-UA.plg_convertforms_errorlogger.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMS_ERRORLOGGER="Перетворити форми - журнал помилок" +PLG_CONVERTFORMS_ERRORLOGGER_DESC="Помилки журналу, які виникають під час подання форми та коли форма надається в файл журналу помилок." diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/script.install.helper.php b/deployed/convertforms/plugins/convertforms/errorlogger/script.install.helper.php new file mode 100644 index 00000000..442ca6b6 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgConvertformsErrorloggerInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/convertforms/errorlogger/script.install.php b/deployed/convertforms/plugins/convertforms/errorlogger/script.install.php new file mode 100644 index 00000000..8aa8d9c4 --- /dev/null +++ b/deployed/convertforms/plugins/convertforms/errorlogger/script.install.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgConvertFormsErrorLoggerInstallerScript extends PlgConvertFormsErrorLoggerInstallerScriptHelper +{ + public $name = 'PLG_CONVERTFORMS_ERRORLOGGER'; + public $alias = 'errorlogger'; + public $extension_type = 'plugin'; + public $plugin_folder = "convertforms"; + public $show_message = false; +} diff --git a/deployed/convertforms/plugins/convertformstools/calculations/calculations.php b/deployed/convertforms/plugins/convertformstools/calculations/calculations.php new file mode 100644 index 00000000..a677ed22 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/calculations.php @@ -0,0 +1,61 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class PlgConvertFormsToolsCalculations extends JPlugin +{ + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * Auto loads the plugin language file + * + * @var boolean + */ + protected $autoloadLanguage = true; + + /** + * We need to load our assets regardless if the form doesn't include a field that supports calculations because + * user may add a field later. Thus we ensure the Calculation Builder is properly rendered. + * + * @return void + */ + public function onConvertFormsBackendEditorDisplay() + { + JHtml::script('plg_convertformstools_calculations/calculation_builder.js', ['relative' => true, 'version' => 'auto']); + } + + /** + * Add plugin fields to the form + * + * @param JForm $form + * @param object $data + * + * @return boolean + */ + public function onConvertFormsBackendRenderOptionsForm($form, $field_type) + { + if (!in_array($field_type, ['text', 'number', 'hidden'])) + { + return; + } + + $form->loadFile(__DIR__ . '/form/form.xml'); + } + + +} diff --git a/deployed/convertforms/plugins/convertformstools/calculations/calculations.xml b/deployed/convertforms/plugins/convertformstools/calculations/calculations.xml new file mode 100644 index 00000000..ce65b3d4 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/calculations.xml @@ -0,0 +1,21 @@ + + + PLG_CONVERTFORMSTOOLS_CALCULATIONS + PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC + 1.0 + Apr 2019 + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + Tassos Marinos (Tassos.gr) + info@tassos.gr + http://www.tassos.gr + script.install.php + + calculations.php + script.install.helper.php + language + form + + + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/calculations/form/form.xml b/deployed/convertforms/plugins/convertformstools/calculations/form/form.xml new file mode 100644 index 00000000..a1ee3af8 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/form/form.xml @@ -0,0 +1,12 @@ + +
        +
        + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/bg-BG/bg-BG.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/bg-BG/bg-BG.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..bf120069 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/bg-BG/bg-BG.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms – калкулации на полета" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Калкулации на полета" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Извършвайте математически изчисления въз основа на стойности в полетата." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Активиране калкулации" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Добави поле" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Undo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Изчисти формула" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Добави" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Изваждане" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Делене" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Умножение" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Модул" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Започни група" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Крайна група" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Формула" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Въведете формула за изчисление." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Десетични знаци" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Точност десетична запетая " +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Разделител хилядни" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Десетичен разделител" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/ca-ES/ca-ES.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/ca-ES/ca-ES.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..a8746291 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/ca-ES/ca-ES.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Càlculs de camps" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Càlculs de camps" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Realitza càlculs matemàtics basats en els valors dels camps." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Activar càlculs" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Afegir camp" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Desfer" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Netejar fòrmula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Sumar" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Restar" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Dividir" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Multiplicar" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Modulus" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Iniciar grup" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Finalitzar grup" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Fòrmula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Escriu una fórmula de càlcul" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Nombre sdecimals" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Precisió dels decimals" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Separador de milers" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Separador decimals" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/cs-CZ/cs-CZ.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/cs-CZ/cs-CZ.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..679d2d86 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/cs-CZ/cs-CZ.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Výpočty v polích" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Výpočty v polích" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Provádí výpočty založené na hodnotách v polích." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Zapnout výpočty" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Přidat pole" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Zpět" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Odstranit vzorec" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Přidat" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Odečítání" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Dělení" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Násobení" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Modulus" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Začátek skupiny" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Konec skupiny" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Vzorec" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Zadejte vzorec pro výpočet." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Desetinná místa" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Zaokrouhlení na desetinná místa" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Oddělovač tisíců" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Oddělovač desítek" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/de-DE/de-DE.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/de-DE/de-DE.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..733d03c1 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/de-DE/de-DE.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Formulare konvertieren - Feldberechnungen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Feldberechnungen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Führen Sie mathematische Berechnungen basierend auf Feldwerten durch." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Berechnungen aktivieren" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Feld hinzufügen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Rückgängig machen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Formel löschen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Hinzufügen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Subtrahieren" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Teilen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Multiplizieren" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Modul" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Gruppe starten" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Endgruppe" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Formel" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Berechnungsformel eingeben." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Dezimalstellen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Genauigkeit der Dezimalstellen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Tausend Separator" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Dezimaltrennzeichen" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/en-GB/en-GB.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/en-GB/en-GB.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..1ed9f731 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/en-GB/en-GB.plg_convertformstools_calculations.ini @@ -0,0 +1,33 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Field Calculations" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Field Calculations" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Perform math calculations based on field values." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Enable Calculations" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Add Field" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Undo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Clear Formula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Add" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Subtract" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Divide" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Multiply" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Modulus" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Start Group" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="End Group" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Formula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Enter a calculation formula." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Decimal Places" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Decimal places precision" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Thousand Separator" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Decimal Separator" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PREFIX="Prefix" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PREFIX_DESC="Add text at the beginning of the calculated value. This is rather useful when you want the value to start with a currency symbol or a measurement unit. Eg: $150.00" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUFFIX="Suffix" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUFFIX_DESC="Add text at the end of the calculated value. This is rather useful when you want the value to end with a currency symbol or a measurement unit. Eg: 150.00 USD" \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/en-GB/en-GB.plg_convertformstools_calculations.sys.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/en-GB/en-GB.plg_convertformstools_calculations.sys.ini new file mode 100644 index 00000000..57a772d8 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/en-GB/en-GB.plg_convertformstools_calculations.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Field Calculations" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Perform math calculations based on field values." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/es-ES/es-ES.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/es-ES/es-ES.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..6c8bfcc0 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/es-ES/es-ES.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convertir formularios - Cálculo de Campos" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Cálculo de Campos" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Realizar cálculos matemáticos basados en los valores de los campos." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Habilitar Cálculos" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Añadir Campo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Deshacer" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Limpiar Fórmula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Añadir" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Restar" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Dividir" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Multiplicar" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Módulo" +; PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Start Group" +; PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="End Group" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Fórmula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Introducir fórmula de cálculo." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Cifras Decimales" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Precisión de las cifras decimales" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Separador de millares" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Separador de decimales" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/fi-FI/fi-FI.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/fi-FI/fi-FI.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..6a476ebd --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/fi-FI/fi-FI.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Kenttien laskenta" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Kenttien laskenta" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Suorita matemaattiset laskelmat kenttäarvojen perusteella." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Ota laskelmat käyttöön" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Lisää kenttä" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Kumoa" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Tyhjennä kaava" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Lisää" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Vähentää" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Jakaa" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Kertoa" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Moduli" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Aloita ryhmä" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Lopeta ryhmä" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Kaava" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Kirjoita laskentakaava." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Desimaalit" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Asettaa desimaalin tarkkuuden" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Tuhannen erotin" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Desimaalin erotin" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/fr-FR/fr-FR.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/fr-FR/fr-FR.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..5f2f22fa --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/fr-FR/fr-FR.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Calculs sur champ" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Calcul sur champ" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Permet des calculs mathématiques basés sur les valeurs des champs" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Activer les calculs" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Ajouter un champ" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Annuler" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Supprimer la formule" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Ajouter" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Soustraire" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Diviser" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Multiplier" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Modulus" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Groupe initial" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Groupe final" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Formule" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Saisissez une formule de calcul" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Décimales" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Précision de décimales" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Séparateur de milliers" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Séparateur décimal" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/it-IT/it-IT.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/it-IT/it-IT.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..ebd95c36 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/it-IT/it-IT.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Convert Forms - Calcoli nel campo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Calcoli nel campo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Esegui calcoli matematici basati sui valori dei campi" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Abilita calcoli" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Aggiungi campo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Annulla" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Pulisci formula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Aggiungi" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Sottrai" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Dividi" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Moltiplica" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Modulo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Inizia gruppo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Termina gruppo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Formula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Inserisci una formula" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Posizioni decimali" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Precisione posizioni decimali" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Separatore delle migliaia" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Separatore dei decimali" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/ru-RU/ru-RU.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/ru-RU/ru-RU.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..d005b40a --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/ru-RU/ru-RU.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Преобразовать формы - Полевые вычисления" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Расчеты на местах" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Выполнять математические вычисления на основе значений поля." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Включить вычисления" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Добавить поле" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Undo" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Очистить формулу" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Добавить" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Вычитание" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Разделить" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Умножить" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Модуль" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Начать группу" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Конечная группа" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Формула" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Введите формулу расчета." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Десятичные знаки" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Точность десятичных разрядов" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Разделитель тысяч" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Десятичный разделитель" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/language/uk-UA/uk-UA.plg_convertformstools_calculations.ini b/deployed/convertforms/plugins/convertformstools/calculations/language/uk-UA/uk-UA.plg_convertformstools_calculations.ini new file mode 100644 index 00000000..3c89a83c --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/language/uk-UA/uk-UA.plg_convertformstools_calculations.ini @@ -0,0 +1,29 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CALCULATIONS="Перетворити форми - обчислення поля" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ALIAS="Обчислення поля" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DESC="Виконувати математичні обчислення на основі значень поля." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ENABLE="Увімкнути обчислення" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD_FIELD="Додати поле" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_UNDO="Скасувати" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_CLEAR_FORMULAO="Очистити формулу" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_ADD="Додати" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_SUBTRACT="Віднімання" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DIVIDE="Розділити" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MULTIPLY="Помножити" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_MODULUS="Модуль" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_START_GROUP="Почати групу" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_END_GROUP="Кінцева група" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA="Формула" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_FORMULA_DESC="Введіть формулу обчислення." +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION="Десяткові місця" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_PRECISION_DESC="Десятична точність місць" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR="Тисяча роздільник" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_THOUSAND_SEPARATOR_DESC="" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR="Десятковий роздільник" +PLG_CONVERTFORMSTOOLS_CALCULATIONS_DECIMAL_SEPARATOR_DESC="" diff --git a/deployed/convertforms/plugins/convertformstools/calculations/script.install.helper.php b/deployed/convertforms/plugins/convertformstools/calculations/script.install.helper.php new file mode 100644 index 00000000..850c6fef --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgConvertformstoolsCalculationsInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/convertformstools/calculations/script.install.php b/deployed/convertforms/plugins/convertformstools/calculations/script.install.php new file mode 100644 index 00000000..c6480d19 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/calculations/script.install.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgConvertFormsToolsCalculationsInstallerScript extends PlgConvertFormsToolsCalculationsInstallerScriptHelper +{ + public $name = 'calculations'; + public $alias = 'calculations'; + public $extension_type = 'plugin'; + public $plugin_folder = 'convertformstools'; + public $show_message = false; +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/conditionallogic.php b/deployed/convertforms/plugins/convertformstools/conditionallogic/conditionallogic.php new file mode 100644 index 00000000..282bd22c --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/conditionallogic.php @@ -0,0 +1,45 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +class PlgConvertFormsToolsConditionalLogic extends JPlugin +{ + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * Auto loads the plugin language file + * + * @var boolean + */ + protected $autoloadLanguage = true; + + + + /** + * Add plugin fields to the form + * + * @param JForm $form + * @param object $data + * + * @return boolean + */ + public function onConvertFormsFormPrepareForm($form, $data) + { + $form->loadFile(__DIR__ . '/form/form.xml'); + } +} diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/conditionallogic.xml b/deployed/convertforms/plugins/convertformstools/conditionallogic/conditionallogic.xml new file mode 100644 index 00000000..0b52c905 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/conditionallogic.xml @@ -0,0 +1,21 @@ + + + PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC + PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC + 1.0 + April 2020 + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + Tassos Marinos (Tassos.gr) + info@tassos.gr + http://www.tassos.gr + script.install.php + + conditionallogic.php + script.install.helper.php + language + form + + + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/form/form.xml b/deployed/convertforms/plugins/convertformstools/conditionallogic/form/form.xml new file mode 100644 index 00000000..c22cfa12 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/form/form.xml @@ -0,0 +1,16 @@ + +
        +
        + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/ca-ES/ca-ES.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/ca-ES/ca-ES.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..77cab21b --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/ca-ES/ca-ES.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - Lògica condicional" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Crea formularis intel·ligents que canvien dinàmicament segons les seleccions de l'usuari en anar-los omplint." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Lògica condicional" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Camps condicionals" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Activar lògica condicional" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Escriu un títol" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Escriu un valor" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Afegeix condició" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Nova condició" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Esborrar condició" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Duplicar condició" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Encara no has afegit cap condició a aquest formulari" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Si la condició no es compleix" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Accions" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Fer" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Afegir acció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Escollir acció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Esborrar acció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Regles" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Quan" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Afegir grup de regles" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Afegir regla" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Esborrar regla" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Mostrar camp" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Amagar camp" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Canviar valor" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Escollir opció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Deseleccionar opció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Mostrar opció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Amagar opció" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Escollir operador" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Està buit" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="No està buit" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Iguals" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Ha seleccionat" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Conté" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Comença amb" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Acaba amb" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Concorda amb RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="No és igual" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="No ha seleccionat" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="No conté" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="No comença amb" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="No acaba amb" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="No concorda amb RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Menor que" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Menor o igual que" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Major que" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Major o igual que" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Està marcat" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="No està marcat" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Escull camp" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Configura condicions" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Procesa això quan" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/cs-CZ/cs-CZ.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/cs-CZ/cs-CZ.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..993e2140 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/cs-CZ/cs-CZ.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - podmíněná logika" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Vytváří chytré formuláře, které se dynamicky mění podle toho, jak uživatel vyplňuje formuláře." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Podmíněná logika" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Pole podmínek" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Zapnout podmíněnou logiku" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Zadejte název" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Zadejte hodnotu" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Zadejte podmínku" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Nová podmínka" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Smazat podmínku" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Duplikovat podmínku" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Zatím jste do tohoto formuláře nevložili žádnou podmínku" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Pokud není podmínka splněna" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Akce" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Provést" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Přidat akci" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Vyberte akci" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Smazat akci" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Pravidla" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Když" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Přidat skupinu rolí" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Přidat roli" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Smazat roli" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Zobrazit pole" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Skrýt pole" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Změnit hodnotu" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Vyberte možnost" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Zrušit výběr možnosti" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Zobrazit možnost" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Skrýt možnost" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Vyberte operátor" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Je prázdný" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="Není prázdný" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Odpovídá" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Vybral" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Obsahuje" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Začíná" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Končí" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Shoda RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Není rovno" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Nevybráno" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Neobsahuje" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Nezačíná na" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Nekončí na" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Neshoduje se s RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Menší než" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Menší nebo rovno" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Větší než" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Rovno nebo větší než" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Vybráno" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Nevybráno" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Vyberte pole" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Nastavit podmínky" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Zpracovat pokud" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/de-DE/de-DE.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/de-DE/de-DE.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..04aef6d1 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/de-DE/de-DE.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Formulare konvertieren - Bedingte Logik" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Erstellen Sie intelligente Formulare, die sich dynamisch ändern, basierend auf den Auswahlen, die der Benutzer beim Ausfüllen Ihrer Formulare trifft." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Bedingte Logik" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Bedingte Felder" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Bedingte Logik aktivieren" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Geben Sie einen Titel ein" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Geben Sie einen Wert ein" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Bedingung hinzufügen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Neue Bedingung" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Bedingung löschen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Doppelte Bedingung" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Sie haben diesem Formular noch keine Bedingungen hinzugefügt." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Wenn die Bedingung nicht erfüllt ist" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Aktionen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Do" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Aktion hinzufügen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Aktion auswählen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Aktion löschen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Regeln" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Wann" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Regelgruppe hinzufügen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Regel hinzufügen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Regel löschen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Feld anzeigen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Feld ausblenden" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Wert ändern" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Option auswählen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Option abwählen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Option anzeigen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Option ausblenden" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Operator auswählen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Ist leer" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="Ist nicht leer" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Gleich" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Wurde ausgewählt" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Enthält" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Beginnt mit" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Endet mit" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Entspricht RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Ist nicht gleich" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Nicht ausgewählt" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Enthält nicht" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Beginnt nicht mit" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Endet nicht mit" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Stimmt nicht mit RegEx überein" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Weniger als" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Kleiner oder gleich" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Größer als" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Größer oder gleich" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Wird überprüft" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Wird nicht überprüft" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Feld auswählen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Setup-Bedingungen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Verarbeiten, wenn" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/en-GB/en-GB.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/en-GB/en-GB.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..06dd1df1 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/en-GB/en-GB.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - Conditional Logic" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Create smart forms that dynamically change based on the selections the user makes while filling out your forms." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Conditional Logic" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Conditional Fields" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Enable Conditional Logic" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Enter a title" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Enter a value" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Add Condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="New Condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Delete Condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Duplicate Condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="You haven't added any conditions to this form yet" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="If the condition is not met" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Actions" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Do" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Add action" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Select action" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Delete action" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Rules" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="When" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Add Rule Group" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Add Rule" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Delete rule" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Show field" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Hide field" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Change value" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Select option" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Deselect option" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Show option" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Hide option" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Select Operator" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Is empty" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="Is not empty" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Equals" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Has selected" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Contains" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Starts with" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Ends with" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Matches RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Does not equal" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Does not have selected" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Does not contain" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Does not start with" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Does not end with" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Does not match RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Less than" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Less than or equal to" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Greater than" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Greater than or equal to" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Is checked" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Is not checked" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Select Field" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Setup Conditions" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Process this when" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/en-GB/en-GB.plg_convertformstools_conditionallogic.sys.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/en-GB/en-GB.plg_convertformstools_conditionallogic.sys.ini new file mode 100644 index 00000000..c68b9db7 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/en-GB/en-GB.plg_convertformstools_conditionallogic.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2019 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - Conditional Logic" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Create smart forms that dynamically change based on the selections the user makes while filling out your forms." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/fi-FI/fi-FI.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/fi-FI/fi-FI.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..059b917c --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/fi-FI/fi-FI.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - Ehdollinen logiikka" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Luo älykkäitä lomakkeita, jotka muuttuvat dynaamisesti käyttäjän tekemien valintojen perusteella täyttäessäsi lomakkeitasi." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Ehdollinen logiikka" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Ehdolliset kentät" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Käytä ehdollista logiikkaa" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Anna otsikko" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Anna arvo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Lisää ehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Uusi ehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Poista ehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Kopioi ehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Et ole vielä lisännyt ehtoja tähän lomakkeeseen" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Jos ehto ei täyty" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Toiminnot" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Tee" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Lisää toiminto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Valitse toiminto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Poista toiminto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Säännöt" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Kun" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Lisää sääntöryhmä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Lisää sääntö" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Poista sääntö" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Näytä kenttä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Piilota kenttä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Vaihda arvo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Valitse vaihtoehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Poista valinta" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Näytä vaihtoehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Piilota vaihtoehto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Valitse operaattori" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="on tyhjä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="ei ole tyhjä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Vastaa" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="On valinnut" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Sisältää" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Alkaa" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Päättyy" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Matches RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Ei ole sama" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Ei ole valinnut" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Ei sisällä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Ei ala" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Ei pääty" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Does not match RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Vähemmän kuin" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Pienempi tai yhtä suuri kuin" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Suurempi kuin" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Suurempi tai yhtä suuri kuin" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="On valittu" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Ei ole valittu" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Valitse kenttä" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Aseta ehdot" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Käsittele tämä kun" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/fr-FR/fr-FR.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/fr-FR/fr-FR.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..4b48ba11 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/fr-FR/fr-FR.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - Logique conditionnelle" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Crée des formulaires intelligents qui changent dynamiquement en fonction des sélections que l'utilisateur fait en les remplissant." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Logique conditionnelle" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Champs conditionnels" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Activer la logique conditionnelle" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Saisissez un titre" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Saisissez une valeur" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Ajouter une condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Nouvelle condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Supprimer la condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Dupliquer la condition" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Vous n'avez pas encore ajouté de condition à ce formulaire" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Si la condition n'est pas validée" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Actions" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Exécuter" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Ajouter une action" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Sélectionner une action" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Supprimer l'action" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Règles" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Quand" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Ajouter un groupe de règles" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Ajouter une règle" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Supprimer la règle" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Afficher le champ" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Masquer le champ" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Modifier la valeur" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Sélectionner le paramètre" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Désélectionner le paramètre" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Afficher le paramètre" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Masquer le paramètre" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Sélectionner l'opérande" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Est vide" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="N'est pas vide" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Egale" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="A sélectionné" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Contient" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Débute par" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Se termine par" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Correspond au RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="N'est pas égal" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="N'a pas été sélectionné" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Ne contient pas" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Ne commence pas par" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Ne se termine pas par" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Ne correspond pas au RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Inférieur à" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Inférieur ou égal à" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Supérieur à" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Supérieur ou égal à" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Est coché" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="N'est pas coché" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Sélectionner le champ" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Paramétrage des conditions" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Exécuter quand" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/it-IT/it-IT.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/it-IT/it-IT.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..9c030004 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/it-IT/it-IT.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Convert Forms - Logica condizionale" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Crea moduli intelligenti che cambiano dinamicamente basandosi sulle scelte fatte dali utenti mentre compilano i vostri moduli." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Logica condizionale" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Campi condizionali" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Abilita logica condizionale" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Inserisci un titolo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Inserisci un valore" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Aggiungi condizione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Nuova condizione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Cancella condizione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Duplica condizione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Non hai ancora aggiunto nessuna condizione a questo modulo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Nel caso in cui la condizione non venga soddisfatta" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Azioni" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Fai" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Aggiungi azione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Seleziona azione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Cancella azione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Regole" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Quando" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Aggiungi gruppo di regole" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Aggiungi regola" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Cancella regola" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Mostra campo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Nascondi campo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Cambia valore" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Seleziona opzione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Deseleziona opzione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Mostra opzione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Nascondi opzione" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Seleziona operatore" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="E' vuoto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="Non è vuoto" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="è uguale a" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Ha selezionato" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Contiene" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Inizia con" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Finisce con" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Corrisponde a RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Non è uguale a " +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Non ha selezionato" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Non contiene" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Non inizia con" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Non finisce con" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Non corrisponde a RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Meno di" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Meno di o uguale a" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Più grande di" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Più grande di o uguale a" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="E' spuntato" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Non è spuntato" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Seleziona campo" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Impostazione condizioni " +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Processa questo quando" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/ru-RU/ru-RU.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/ru-RU/ru-RU.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..75befb96 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/ru-RU/ru-RU.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Преобразовать формы - условная логика" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Создавать интеллектуальные формы, которые динамически изменяются в зависимости от выбора, который пользователь делает при заполнении ваших форм." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Условная логика" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Условные поля" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Включить условную логику" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Введите заголовок" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Введите значение" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Добавить условие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Новое условие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Удалить условие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Дублирующее условие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Вы еще не добавили никаких условий в эту форму" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Если условие не выполнено" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Действия" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Do" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Добавить действие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Выбрать действие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Удалить действие" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Правила" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Когда" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Добавить группу правил" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Добавить правило" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Удалить правило" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Показать поле" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Скрыть поле" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Изменить значение" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Выбрать вариант" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Отменить выбор" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Показать параметр" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Скрыть параметр" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Выбрать оператора" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Пусто" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="Не пусто" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Равно" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Выбрал" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="содержит" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Начинается с" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Заканчивается на" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Соответствует RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Не равно" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Не выбрал" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Не содержит" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Не начинается с" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Не заканчивается на" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Не соответствует RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Меньше чем" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Меньше или равно" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Больше чем" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Больше или равно" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Проверено" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Не проверено" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Выбрать поле" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Условия настройки" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Обработать это когда" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/language/uk-UA/uk-UA.plg_convertformstools_conditionallogic.ini b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/uk-UA/uk-UA.plg_convertformstools_conditionallogic.ini new file mode 100644 index 00000000..4ea05f17 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/language/uk-UA/uk-UA.plg_convertformstools_conditionallogic.ini @@ -0,0 +1,61 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC="Перетворити форми - умовна логіка" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESC="Створіть розумні форми, які динамічно змінюються на основі вибраних вами користувачем під час заповнення ваших форм." +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ALIAS="Умовна логіка" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_FIELDS="Умовні поля" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENABLE="Увімкнути умовну логіку" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_TITLE="Введіть назву" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENTER_VALUE="Введіть значення" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_CONDITION="Додати умову" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NEW_CONDITION="Нова умова" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_CONDITION="Видалити умову" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_COPY_CONDITION="Умова дублювання" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NO_CONDITIONS="Ви ще не додали жодних умов до цієї форми" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONDITION_ELSE="Якщо умова не виконується" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS="Дії" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ACTIONS_ALIAS="Зробити" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_ACTION="Додати дію" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_ACTION="Вибрати дію" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_ACTION="Видалити дію" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES="Правила" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_RULES_ALIAS="Коли" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE_GROUP="Додати групу правил" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ADD_RULE="Додати правило" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DELETE_RULE="Видалити правило" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_FIELD="Показати поле" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_FIELD="Сховати поле" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CHANGE_VALUE="Змінити значення" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPTION="Вибрати варіант" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_DESELECT_OPTION="Скасувати вибір" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SHOW_OPTION="Показати варіант" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HIDE_OPTION="Сховати параметр" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_OPERATOR="Вибрати оператора" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EMPTY="Порожня" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EMPTY="Не порожньо" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_EQUALS="Дорівнює" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_HAS_SELECTED="Вибрано" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_CONTAINS="Містить" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_STARTS_WITH="Починається з" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_ENDS_WITH="Закінчується" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_REGEX="Збіги RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_EQUALS="Не дорівнює" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_SELECTED="Не вибрано" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CONTAIN="Не містить" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_START_WITH="Не починається з" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_END_WITH="Не закінчується на" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_REGEX="Не відповідає RegEx" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN="Менше" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_LESS_THAN_EQUAL="Менше або рівне" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN="Більше" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_GREATER_THAN_EQUAL="Більше або дорівнює" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_IS_CHECKED="Перевірено" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_NOT_CHECKED="Не перевірено" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SELECT_FIELD="Вибрати поле" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_SETUP="Умови настройки" +PLG_CONVERTFORMSTOOLS_CONDITIONALLOGIC_PROCESS_THIS="Обробити це, коли" diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/script.install.helper.php b/deployed/convertforms/plugins/convertformstools/conditionallogic/script.install.helper.php new file mode 100644 index 00000000..b770341c --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgConvertformstoolsConditionallogicInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/convertformstools/conditionallogic/script.install.php b/deployed/convertforms/plugins/convertformstools/conditionallogic/script.install.php new file mode 100644 index 00000000..65485b00 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/conditionallogic/script.install.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgConvertFormsToolsConditionalLogicInstallerScript extends PlgConvertFormsToolsConditionalLogicInstallerScriptHelper +{ + public $name = 'conditionallogic'; + public $alias = 'conditionallogic'; + public $extension_type = 'plugin'; + public $plugin_folder = 'convertformstools'; + public $show_message = false; +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/pdf/form/form.xml b/deployed/convertforms/plugins/convertformstools/pdf/form/form.xml new file mode 100644 index 00000000..09218e8b --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/form/form.xml @@ -0,0 +1,17 @@ + +
        +
        + + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/bg-BG/bg-BG.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/bg-BG/bg-BG.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..27891800 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/bg-BG/bg-BG.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms – изпращане PDF формуляри" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Изпращане на PDF формуляри" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Генерирайте настроеваем PDF файл въз основа на предоставените от потребителя данни. Той може да бъде автоматично изпращан по имейл или да се показва като връзка в съобщението-благодарност след изпращане на формуляр." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Активиране изпращането на PDF формуляр" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="PDF шаблон" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Посочете съдържание, което ще се появява в PDF файла. Може да напишете свой HTML, да използвате Smart Tags, да добавите свои изображения, както и да приложите вградено CSS стилизиране.

        Забележка: За да добавите възможност за сваляне на PDF-а от заявката към потребителя, използвайте Smart Tag: {submit.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Префикс файлово име на PDF" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Задайте префикса на генерираното име на PDF файла.

        Забележки:
        - Към всеки PDF файл ще бъде прибавен с подчертаване, ID на заявката, както и .pdf суфикс. т.е. Submission_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="PDF папка" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Изберете къде ще се съхраняват генерираните PDF файлове." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Изтриване PDF файлове след" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Автоматично премахване на създадените PDF файлове от вашия сървър след X дни. Въведете 0, за да ги запазите завинаги.

        Ще трябва да настроите съответната задача cron job, както е описано в документацията." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Преглед на PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Свали PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/ca-ES/ca-ES.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/ca-ES/ca-ES.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..27d0e827 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/ca-ES/ca-ES.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - Tramesa de formulari PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Tramesa de formulari PDF" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Genera un PDF personalitzable basat en les dades subministrades per l'usuari que es pot enviar automàticament per correu electrònic o mostrar com un enllaç al missatge d'agraïment." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Activar la tramesa de formulari PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Plantilla PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Especifica el contingut real que apareixerà al PDF. Pots escriure el teu propi HTML, utilitzar Etiquetes Intel·ligents, afegir les teves pròpies imatges o utilitzar estils CSS inline.

        NOTA: Per afegir el PDF perquè el puguin descarregar els teus usuaris has d'utilitzar l'etiqueta intel·ligent: {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Prefix nom d'arxiu PDF" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Estableix el prefix del nom d'arxiu del PDF generat.

        NOTES:
        - A cada arxiu PDF se li afegirà un guió baix al final, l'ID de tramesa i l'extensió .pdf. Per exemple: resposta_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Carpeta PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Escull on es guardaran els PDF generats" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Esborrar arxiu PDF després de" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Esborra automàticament del teu servidor els arxius PDF creats pasats X dies. Escriu 0 per guardar-los per sempre.

        Hauràs de configurar el treball cron respectiu com es descriu a la pàgina de documentació." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="URL PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Veure PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Descarregar PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/cs-CZ/cs-CZ.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/cs-CZ/cs-CZ.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..8dbdd15c --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/cs-CZ/cs-CZ.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Zásuvný modul Odeslání v PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Export formulář jako PDF" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Generování přizpůsobitelného PDF založeného na uživatelem odeslaných informacích. Tento soubor může být zaslán e-mailem nebo odkaz ke stažení se může zobrazit na stránce s poděkováním." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Zapnout export formulář jako PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Šablona PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Upřesněte obsah PDF. Můžete vytvořit vlastní HTML, používat chytré štítky, vkládat vlastní obrázky a také CSS styly.

        Poznámka: To add the PDF submission for your users to download use the Smart Tag: {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Prefix souboru PDF" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Nastavte prefix názvů vytvářených PDF souborů.

        Poznámky:
        - Každý soubor bude doplněn podržítkem na ID a .pdf příponou. Například: Submission_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="PDF adresář" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Zvolte umístění pro ukládání generovaných PDF." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Smazat PDF soubory po" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Automatické odstranění vytvořených PDF ze serveru po uplynutí X dní. Zadejte 0, pokud je chcete uchovat navždy.

        Bude nutné nastavit úlohu pro cron, jak je uvedeno v na stránce s dokumentací." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Zobrazit PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Stáhnout PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/de-DE/de-DE.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/de-DE/de-DE.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..e6a1cc26 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/de-DE/de-DE.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Formulare konvertieren - PDF-Formular senden" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="PDF-Formular senden" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Generieren Sie anpassbare PDF-Dateien basierend auf den vom Benutzer übermittelten Daten, die automatisch per E-Mail gesendet oder als Link in der Dankesnachricht angezeigt werden können." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="PDF-Formularübermittlung aktivieren" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="PDF-Vorlage" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Geben Sie den tatsächlichen Inhalt an, der in der PDF-Datei angezeigt wird. Sie können Ihren eigenen HTML-Code schreiben, Smart Tags verwenden, eigene Bilder hinzufügen sowie das Inline-CSS-Styling verwenden.

        Hinweis: Zum Hinzufügen der PDF-Übermittlung Verwenden Sie zum Herunterladen Ihrer Benutzer das Smart Tag: {submit.pdf} " +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="PDF-Dateinamenpräfix" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Legen Sie das Präfix für den generierten PDF-Dateinamen fest.

        Hinweise:
        - Jede PDF-Datei wird mit einem Unterstrich, der Übermittlungs-ID sowie der .pdf
        Suffix, dh Übermittlung _100.pdf " +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="PDF-Ordner" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Wählen Sie aus, wo die generierten PDFs gespeichert werden sollen." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="PDF-Dateien löschen nach" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Entfernen Sie die erstellten PDF-Dateien nach X Tagen automatisch von Ihrem Server. Geben Sie 0 ein, um sie für immer zu behalten.

        Sie müssen den entsprechenden Cron-Job wie auf der Dokumentationsseite beschrieben einrichten." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF-URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="PDF anzeigen" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="PDF herunterladen" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/en-GB/en-GB.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/en-GB/en-GB.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..840ccf84 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/en-GB/en-GB.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - PDF Form Submission" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="PDF Form Submission" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Generate customisable PDF based on the user submitted data that can be automatically sent by email or displayed as a link in the Thank You message." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Enable PDF Form Submission" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="PDF Template" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Specify the actual content that will appear in the PDF. You can write your own HTML, use Smart Tags, add your own images as well as use inline CSS styling.

        Note: To add the PDF submission for your users to download use the Smart Tag: {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="PDF Filename Prefix" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Set the prefix on the generated PDF file name.

        Notes:
        - Each PDF file will be appended with an underscore, the submission ID as well as the .pdf suffix. i.e. Submission_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="PDF Folder" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Select where the generated PDFs will be stored." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Delete PDF files after" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Automatically remove the created PDFs from your server after X days. Enter 0 to keep them forever.

        You will need to setup the respective cron job as described in the documentation page." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="View PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Download PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/en-GB/en-GB.plg_convertformstools_pdf.sys.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/en-GB/en-GB.plg_convertformstools_pdf.sys.ini new file mode 100644 index 00000000..85e089eb --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/en-GB/en-GB.plg_convertformstools_pdf.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - PDF Form Submission" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Send form submitted data to your users via PDF format." \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/es-ES/es-ES.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/es-ES/es-ES.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..daf15c3a --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/es-ES/es-ES.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convertir Formularios - Envío de formulario PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Envío de formulario PDF" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Generar PDF personalizado basado en la información enviada por el usuario que pueden ser enviados automáticamente por email o mostrado como link in en mensaje de agradecimiento." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Habilitar envío de formulario PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Plantilla de PDF" +; PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Specify the actual content that will appear in the PDF. You can write your own HTML, use Smart Tags, add your own images as well as use inline CSS styling.

        Note: To add the PDF submission for your users to download use the Smart Tag: {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Prefijo del nombre del PDF" +; PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Set the prefix on the generated PDF file name.

        Notes:
        - Each PDF file will be appended with an underscore, the submission ID as well as the .pdf suffix. i.e. Submission_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Carpeta PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Seleccionar dónde se almacenarán los PDFs generados." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Eliminar archivos PDF después" +; PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Automatically remove the created PDFs from your server after X days. Enter 0 to keep them forever.

        You will need to setup the respective cron job as described in the documentation page." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="URL PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Ver PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Descargar PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/fi-FI/fi-FI.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/fi-FI/fi-FI.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..5e12f44a --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/fi-FI/fi-FI.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - PDF lomake lähetys" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="PDF lomake lähetys" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Luo muokattavissa oleva PDF lomake käyttäjän lähettämien tietojen perusteella, jotka voidaan lähettää automaattisesti sähköpostitse tai näyttää linkkinä kiitosviestissä." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Salli PDF lomake lähetys" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="PDF malli" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Määritä PDF-tiedostossa näkyvä todellinen sisältö. Voit kirjoittaa oman HTML-tiedoston, käyttää älykkäitä tunnisteita, lisätä omia kuviasi tai käyttää CSS-muotoilua

        Huomaa: Lisää PDF-lähetys käyttäjillesi ladattavaksi älykkäällä tunnisteella: {Submit.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="PDF-tiedostonimen etuliite" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Aseta etuliite luodun PDF-tiedoston nimeen.

        Huomautukset:
        - Jokaiseen PDF-tiedostoon liitetään alaviiva, lähetystunnus sekä .pdf pääte esim. Lahetys_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="PDF kansio" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Valitse, mihin luodut PDF-tiedostot tallennetaan." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Poista PDF-tiedostot sen jälkeen" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Poista luodut PDF-tiedostot automaattisesti palvelimelta X päivän kuluttua. Syötä 0 pitääksesi ne ikuisesti.

        Sinun on määritettävä vastaava cron-työ dokumentaatiosivulla kuvatulla tavalla." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Näytä PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Lataa PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/fr-FR/fr-FR.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/fr-FR/fr-FR.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..061925ae --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/fr-FR/fr-FR.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - PDF de la soumission du Formulaire " +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="PDF de la soumission du Formulaire " +PLG_CONVERTFORMSTOOLS_PDF_DESC="Génère un PDF personnalisable basé sur les données saisies par l'utilisateur, pouvant être expédié par e-mail ou proposé en tant que lien dans le message de remerciement." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Activer le PDF de la soumission du Formulaire " +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Template du PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Spécifiez le contenu à afficher dans le PDF. Vous pouvez créer votre propre code HTML, utiliser les Smart Tags, ajouter vos propres images et utiliser votre propre style CSS dans cette zone.

        Note : Pour proposer le téléchargement du PDF à votre utilisateur, utilisez le Smart Tag {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Préfixe du nom du PDF" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Définissez le préfixe du fichier PDF généré.

        Notes :
        - Chaque fichier PDF sera complété par un trait de soulignement, l'ID de soumission et le suffixe .pdf . i.e. Soumission_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Dossier des PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Définissez dans quel dossier les PDF doivent être enregistrés" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Supprimer les fichiers après" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Supprimer automatiquement les fichiers PDF du serveur après X jours. Saisissez 0 pour les conserver.

        Vous devrez définir les tâches cron respectives tel que décrit dans la documentation." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="URL du PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Voir le PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Télécharger le PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/it-IT/it-IT.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/it-IT/it-IT.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..b860d20f --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/it-IT/it-IT.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - Invio modulo in PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Invio modulo in PDF" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Genera un PDF personalizzato basato sui dati inviati dall'utente che può essere spedito via mail o visualizzato come link nel messaggio di ringraziamento." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Abilita invio modulo in PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Template PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Specifica il contenuto che apparirà sul PDF. Puoi scrivere il tuo codice HTML, usare gli Smart Tag, aggiungere le tue immagini così come usare stili CSS in linea.

        Nota: Per aggiungere l'invio in PDF da scaricare per i tuoi utenti usa lo Smart Tag: {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Prefisso nome file PDF " +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Imposta il prefisso sul nome del file PDF generato.

        Note:
        - Ogni file PDF verrà allegato con un trattino basso, così come l'ID di invio e il suffisso .pdf. ad es. Invio_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Cartella PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Scegli dove memorizzare i PDF generati" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Cancella file PDF dopo" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Rimuove automaticamente i PDF creati dal server dopo X giorni. Inserisci 0 per non rimuoverli mai.

        Dovrai assegnare il rispettivo cron job come descritto nella pagina di documentazione." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="URL PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Visualizza PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Scarica PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/pt-BR/pt-BR.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/pt-BR/pt-BR.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..15c8a584 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/pt-BR/pt-BR.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Convert Forms - Formulario de Registo PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Formulário de Registo PDF" +; PLG_CONVERTFORMSTOOLS_PDF_DESC="Generate customisable PDF based on the user submitted data that can be automatically sent by email or displayed as a link in the Thank You message." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Ativar o Formulário de Registo PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Template PDF" +; PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Specify the actual content that will appear in the PDF. You can write your own HTML, use Smart Tags, add your own images as well as use inline CSS styling.

        Note: To add the PDF submission for your users to download use the Smart Tag: {submission.pdf}" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Prefixo do nome PDF" +; PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Set the prefix on the generated PDF file name.

        Notes:
        - Each PDF file will be appended with an underscore, the submission ID as well as the .pdf suffix. i.e. Submission_100.pdf" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Pasta PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Escolha onde são armazenados os PDFs gerados" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Apagar ficheiros PDF depois" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Remover automáticamente os PDFs criados do teu servidor depois de X dias. Introduza 0 para manter para sempre. Necessitas de definir o respetivo cronograma e descrever a documentação da página" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Ver PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Download PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/ru-RU/ru-RU.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/ru-RU/ru-RU.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..4f54baf2 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/ru-RU/ru-RU.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Преобразовать формы - отправка форм PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Отправка формы PDF" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Создать настраиваемый PDF-файл на основе предоставленных пользователем данных, которые можно автоматически отправлять по электронной почте или отображать в виде ссылки в сообщении с благодарностью." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Включить отправку PDF-формы" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Шаблон PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Укажите фактическое содержимое, которое будет отображаться в PDF. Вы можете написать свой собственный HTML, использовать смарт-теги, добавлять свои собственные изображения, а также использовать встроенные стили CSS.

        Примечание. Чтобы добавить отправку в PDF для загрузки пользователями используйте смарт-тег: {submission.pdf} " +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Префикс имени файла PDF" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Установить префикс для имени сгенерированного файла PDF.

        Примечания:
        - каждый файл PDF будет сопровождаться подчеркиванием, идентификатором представления, а также < strong> .pdf суффикс. т.е. отправка _100.pdf " +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Папка PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Выберите место хранения сгенерированных PDF-файлов." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Удалить файлы PDF после" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Автоматически удалять созданные PDF-файлы с вашего сервера через X дней. Введите 0, чтобы сохранить их навсегда.

        Вам потребуется настроить соответствующее задание cron, как описано на странице документации." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="PDF URL" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Просмотреть PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Загрузить PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/language/uk-UA/uk-UA.plg_convertformstools_pdf.ini b/deployed/convertforms/plugins/convertformstools/pdf/language/uk-UA/uk-UA.plg_convertformstools_pdf.ini new file mode 100644 index 00000000..784c731e --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/language/uk-UA/uk-UA.plg_convertformstools_pdf.ini @@ -0,0 +1,23 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2020 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_CONVERTFORMSTOOLS_PDF="Перетворити форми - подання форми PDF" +PLG_CONVERTFORMSTOOLS_PDF_ALIAS="Подання форми PDF" +PLG_CONVERTFORMSTOOLS_PDF_DESC="Створення настроюваного PDF-файлу на основі даних, поданих користувачем, які можуть бути автоматично надіслані електронною поштою або відображені як посилання у повідомленні подяки." +PLG_CONVERTFORMSTOOLS_PDF_ENABLE="Увімкнути подання форми PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE="Шаблон PDF" +PLG_CONVERTFORMSTOOLS_PDF_TEMPLATE_DESC="Вкажіть фактичний вміст, який з’явиться у PDF. Ви можете написати свій власний HTML, використовувати Smart теги, додати власні зображення, а також використовувати вбудований CSS-стиль.

        Примітка: Щоб додати PDF-подання щоб ваші користувачі завантажували за допомогою смарт-тегу: {submit.pdf} " +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX="Префікс імені файлу PDF" +PLG_CONVERTFORMSTOOLS_PDF_FILENAME_PREFIX_DESC="Встановити префікс на створене ім'я файлу PDF.
        .pdf суфікс. тобто подання _100.pdf " +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER="Папка PDF" +PLG_CONVERTFORMSTOOLS_PDF_UPLOAD_FOLDER_DESC="Виберіть, де будуть зберігатися створені PDF-файли." +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER="Видалити файли PDF після" +PLG_CONVERTFORMSTOOLS_PDF_REMOVE_AFTER_DESC="Автоматично видаліть створені PDF-файли зі свого сервера через X днів. Введіть 0, щоб зберегти їх назавжди.

        Вам потрібно буде встановити відповідне завдання cron, як описано на сторінці документації." +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION="URL-адреса PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_VIEW_BTN="Переглянути PDF" +PLG_CONVERTFORMSTOOLS_PDF_SUBMISSION_DOWNLOAD_BTN="Завантажити PDF" +PLG_CONVERTFORMSTOOLS_PDF_LABEL="PDF" diff --git a/deployed/convertforms/plugins/convertformstools/pdf/pdf.php b/deployed/convertforms/plugins/convertformstools/pdf/pdf.php new file mode 100644 index 00000000..bb1733b2 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/pdf.php @@ -0,0 +1,51 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +JLoader::register('PDFHelper', __DIR__ . '/helper/pdfhelper.php'); + +class PlgConvertFormsToolsPDF extends JPlugin +{ + /** + * Application Object + * + * @var object + */ + protected $app; + + + + /** + * Auto loads the plugin language file + * + * @var boolean + */ + protected $autoloadLanguage = true; + + /** + * Add plugin fields to the form + * + * @param JForm $form + * @param object $data + * + * @return boolean + */ + public function onConvertFormsFormPrepareForm($form, $data) + { + $form->loadFile(__DIR__ . '/form/form.xml', false); + + + } + + +} diff --git a/deployed/convertforms/plugins/convertformstools/pdf/pdf.xml b/deployed/convertforms/plugins/convertformstools/pdf/pdf.xml new file mode 100644 index 00000000..b81feea2 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/pdf.xml @@ -0,0 +1,20 @@ + + + PLG_CONVERTFORMSTOOLS_PDF + PLG_CONVERTFORMSTOOLS_PDF_DESC + 1.0 + February 2020 + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + Tassos Marinos (Tassos.gr) + info@tassos.gr + http://www.tassos.gr + script.install.php + + pdf.php + script.install.helper.php + form + language + + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/convertformstools/pdf/script.install.helper.php b/deployed/convertforms/plugins/convertformstools/pdf/script.install.helper.php new file mode 100644 index 00000000..9745dea6 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgConvertformstoolsPdfInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/convertformstools/pdf/script.install.php b/deployed/convertforms/plugins/convertformstools/pdf/script.install.php new file mode 100644 index 00000000..fd768302 --- /dev/null +++ b/deployed/convertforms/plugins/convertformstools/pdf/script.install.php @@ -0,0 +1,25 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgConvertFormsToolsPDFInstallerScript extends PlgConvertFormsToolsPDFInstallerScriptHelper +{ + public $name = 'pdf'; + public $alias = 'pdf'; + public $extension_type = 'plugin'; + public $plugin_folder = 'convertformstools'; + public $show_message = false; + public $autopublish = true; +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/convertforms.php b/deployed/convertforms/plugins/editors-xtd/convertforms/convertforms.php new file mode 100644 index 00000000..0f85a016 --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/convertforms.php @@ -0,0 +1,53 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +class PlgButtonConvertforms extends JPlugin +{ + /** + * Load the language file on instantiation. + * + * @var boolean + */ + protected $autoloadLanguage = true; + + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * ConvertForms Button + * + * @param string $name The name of the button to add + * + * @return JObject The button object + */ + public function onDisplay($name) + { + $component = $this->app->input->getCmd('option'); + $basePath = $this->app->isClient('administrator') ? '' : 'administrator/'; + $link = $basePath . 'index.php?option=com_convertforms&view=editorbutton&layout=button&tmpl=component&e_name=' . $name . '&e_comp='. $component; + + $button = new JObject; + $button->modal = true; + $button->class = 'btn cf'; + $button->link = $link; + $button->text = JText::_('PLG_EDITORS-XTD_CONVERTFORMS_BUTTON_TEXT'); + $button->name = 'vcard'; + $button->options = "{handler: 'iframe', size: {x: 280, y: 200}}"; + + return $button; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/convertforms.xml b/deployed/convertforms/plugins/editors-xtd/convertforms/convertforms.xml new file mode 100644 index 00000000..dd76faef --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/convertforms.xml @@ -0,0 +1,19 @@ + + + PLG_EDITORS-XTD_CONVERTFORMS + PLG_EDITORS-XTD_CONVERTFORMS_DESC + June 2017 + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + 1.0 + script.install.php + + convertforms.php + script.install.helper.php + form.xml + language + + diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/form.xml b/deployed/convertforms/plugins/editors-xtd/convertforms/form.xml new file mode 100644 index 00000000..30732c65 --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/form.xml @@ -0,0 +1,10 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/en-GB.plg_editors-xtd_convertforms.ini b/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/en-GB.plg_editors-xtd_convertforms.ini new file mode 100644 index 00000000..6864ca7f --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/en-GB.plg_editors-xtd_convertforms.ini @@ -0,0 +1,14 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2017 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +CONVERTFORMS="ConvertForms" +PLG_EDITORS-XTD_CONVERTFORMS="Editor Button - ConvertForms" +PLG_EDITORS-XTD_CONVERTFORMS_DESC="ConvertForms Button Creator" +PLG_EDITORS-XTD_CONVERTFORMS_BUTTON_TEXT="ConvertForms" +PLG_EDITORS-XTD_CONVERTFORMS_SELECT_FORM="Choose the ConvertForm" +PLG_EDITORS-XTD_CONVERTFORMS_SELECT_FORM_DESC="Choose the ConvertForm you'd like to insert" +PLG_EDITORS-XTD_CONVERTFORMS_INSERTBUTTON="Insert the ConvertForm" \ No newline at end of file diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/en-GB.plg_editors-xtd_convertforms.sys.ini b/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/en-GB.plg_editors-xtd_convertforms.sys.ini new file mode 100644 index 00000000..a75cd3c3 --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/en-GB.plg_editors-xtd_convertforms.sys.ini @@ -0,0 +1,10 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2017 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +CONVERTFORMS="ConvertForms" +PLG_EDITORS-XTD_CONVERTFORMS="Editor Button - ConvertForms" +PLG_EDITORS-XTD_CONVERTFORMS_DESC="Editor Button - ConvertForms Button Creator" \ No newline at end of file diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/index.html b/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/language/en-GB/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/script.install.helper.php b/deployed/convertforms/plugins/editors-xtd/convertforms/script.install.helper.php new file mode 100644 index 00000000..c0ce59f0 --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgEditorsxtdConvertformsInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/editors-xtd/convertforms/script.install.php b/deployed/convertforms/plugins/editors-xtd/convertforms/script.install.php new file mode 100644 index 00000000..08130e7f --- /dev/null +++ b/deployed/convertforms/plugins/editors-xtd/convertforms/script.install.php @@ -0,0 +1,24 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgEditorsXtdConvertformsInstallerScript extends PlgEditorsXtdConvertformsInstallerScriptHelper +{ + public $name = 'CONVERTFORMS'; + public $alias = 'convertforms'; + public $extension_type = 'plugin'; + public $plugin_folder = 'editors-xtd'; + public $show_message = false; +} diff --git a/deployed/convertforms/plugins/system/convertforms/convertforms.php b/deployed/convertforms/plugins/system/convertforms/convertforms.php new file mode 100644 index 00000000..50f713f9 --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/convertforms.php @@ -0,0 +1,447 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +/** + * Convert Forms Plugin + */ +class PlgSystemConvertForms extends JPlugin +{ + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * Component's param object + * + * @var JRegistry + */ + private $param; + + /** + * The loaded indicator of helper + * + * @var boolean + */ + private $init; + + /** + * Log Object + * + * @var Object + */ + private $log; + + /** + * AJAX Response + * + * @var stdClass + */ + private $response; + + /** + * Plugin constructor + * + * @param mixed &$subject + * @param array $config + */ + public function __construct(&$subject, $config = array()) + { + $component = JComponentHelper::getComponent('com_convertforms', true); + + if (!$component->enabled) + { + return; + } + + $this->param = $component->params; + + // Load required classes + if (!$this->loadClasses()) + { + return; + } + + // Declare extension logger + JLog::addLogger( + array('text_file' => 'com_convertforms.php'), + JLog::ALL, + array('com_convertforms') + ); + + // execute parent constructor + parent::__construct($subject, $config); + } + + /** + * onAfterRoute Event + */ + public function onAfterRoute() + { + // Get Helper + if (!$this->getHelper()) + { + return; + } + } + + /** + * Handles the content preparation event fired by Joomla! + * + * @param mixed $context Unused in this plugin. + * @param stdClass $article An object containing the article being processed. + * @param mixed $params Unused in this plugin. + * @param int $limitstart Unused in this plugin. + * + * @return bool + */ + public function onContentPrepare($context, &$article, &$params, $limitstart = 0) + { + // Get Helper + if (!$this->getHelper()) + { + return true; + } + + // Check whether the plugin should process or not + if (Joomla\String\StringHelper::strpos($article->text, 'convertforms') === false) + { + return true; + } + + // Search for this tag in the content + $regex = "#{convertforms(\s)(\d+)(\s?)(.*?)}#s"; + $article->text = preg_replace_callback($regex, array('self', 'process'), $article->text); + } + + /** + * Callback to preg_replace_callback in the onContentPrepare event handler of this plugin. + * + * @param array $match A match to the {convertforms} plugin tag + * + * @return string The processed result + */ + private static function process($match) + { + $form_id = $match[2]; + $task = $match[4]; + + switch ($task) + { + case 'submissions_total': + return ConvertForms\Api::getFormSubmissionsTotal($form_id); + break; + + default: + return ConvertForms\Helper::renderFormById($form_id); + } + } + + /** + * Listens to AJAX requests on ?option=com_ajax&format=raw&plugin=convertforms + * Method aborts on invalid token or task + * + * @return void + */ + public function onAjaxConvertForms() + { + // Disable all PHP reporting to ensure a success AJAX response. + $debug = ConvertForms\Helper::getComponentParams()->get('debug', false); + if (!$debug) + { + error_reporting(E_ALL & ~E_NOTICE); + } + + $input = $this->app->input; + $form_id = isset($input->getArray()['cf']) ? $input->getArray()['cf']['form_id'] : 0; + + // Check if we have a valid task + $task = $input->get('task', null); + + if (is_null($task)) + { + die('Invalid task'); + } + + // An access token is required on all requests except on the API task which + // has a native authentication method through an API Key + if (!in_array($task, ['api']) && !JSession::checkToken('request')) + { + ConvertForms\Helper::triggerError(JText::_('JINVALID_TOKEN'), $task, $form_id, $input->request->getArray()); + jexit(JText::_('JINVALID_TOKEN')); + } + + // Cool access granted. + $componentPath = JPATH_ADMINISTRATOR . '/components/com_convertforms/'; + JModelLegacy::addIncludePath($componentPath . 'models'); + JTable::addIncludePath($componentPath . 'tables'); + + // Load component language file + NRFramework\Functions::loadLanguage('com_convertforms'); + + // Check if we have a valid method task + $taskMethod = 'ajaxTask' . $task; + + if (!method_exists($this, $taskMethod)) + { + die('Task not found'); + } + + // Success! Let's call the method. + $this->response = new stdClass(); + + try + { + $this->$taskMethod(); + } + catch (Exception $e) + { + ConvertForms\Helper::triggerError($e->getMessage(), $task, $form_id, $input->request->getArray()); + $this->response->error = $e->getMessage(); + } + + echo json_encode($this->response); + + // Stop execution + jexit(); + } + + # PRO-START + /** + * AJAX Method to retrieve service account lists + * + * Listens to requests on ?option=com_ajax&format=raw&plugin=convertforms&task=lists + * Required arguments: service=[SERVICENAME]&key=[APIKEY/ACCESSTOKEN] + * + * @return void + */ + private function ajaxTaskLists() + { + $campaignData = $this->app->input->get('jform', null, 'array'); + + if (is_null($campaignData) || empty($campaignData)) + { + die('No Campaign Data Found'); + } + + // Yeah! We have a service! Dispatcher call the plugins please! + JPluginHelper::importPlugin('convertforms'); + + $lists = JFactory::getApplication()->triggerEvent('onConvertFormsServiceLists', array($campaignData)); + + if (is_array($lists[0])) + { + $this->response->lists = $lists[0]; + } else + { + $this->response->error = $lists[0]; + } + } + + /** + * API Task help us query ConvertForms tables and output the result as JSON + * + * @return void + */ + private function ajaxTaskAPI() + { + // Run only if API is enabled + if (!ConvertForms\Helper::getComponentParams()->get('api', false)) + { + ConvertForms\Helper::log('JSON-API is disabled. Enable it through ConvertForms configuration page.'); + die(); + } + + $endpoint = $this->app->input->get('endpoint', 'forms'); + $apikey = $this->app->input->get('api_key'); + + $api = new ConvertForms\JsonApi($apikey); + + $this->response = $api->route($endpoint); + + // JFactory::getDocument()->setMimeEncoding('application/json'); doesn't work here + header('Content-Type: application/json'); + } + + # PRO-END + + /** + * Map onContentAfterSave event to onConvertFormsConversionAfterSave + * + * Content is passed by reference, but after the save, so no changes will be saved. + * Method is called right after the content is saved. + * + * @param string $context The context of the content passed to the plugin (added in 1.6) + * @param object $article A JTableContent object + * @param bool $isNew If the content has just been created + * + * @return void + */ + public function onContentAfterSave($context, $article, $isNew) + { + if ($context != 'com_convertforms.conversion' || $this->app->isClient('administrator')) + { + return; + } + + JPluginHelper::importPlugin('convertforms'); + JPluginHelper::importPlugin('convertformstools'); + + // Load item row + $model = JModelLegacy::getInstance('Conversion', 'ConvertFormsModel', array('ignore_request' => true)); + if (!$conversion = $model->getItem($article->id)) + { + return; + } + + JFactory::getApplication()->triggerEvent('onConvertFormsConversionAfterSave', array($conversion, $model, $isNew)); + } + + /** + * Prepare form. + * + * @param JForm $form The form to be altered. + * @param mixed $data The associated data for the form. + * + * @return boolean + */ + public function onContentPrepareForm($form, $data) + { + // Return if we are in frontend + if ($this->app->isClient('site')) + { + return true; + } + + // Check we have a form + if (!($form instanceof JForm)) + { + return false; + } + + // Check we have a valid form context + $validForms = array( + "com_convertforms.campaign", + "com_convertforms.form" + ); + + if (!in_array($form->getName(), $validForms)) + { + return true; + } + + // Load ConvertForms plugins + JPluginHelper::importPlugin('convertforms'); + JPluginHelper::importPlugin('convertformstools'); + + // Campaign Forms + if ($form->getName() == 'com_convertforms.campaign') + { + if (!isset($data->service) || !$service = $data->service) + { + return true; + } + + $result = \JFactory::getApplication()->triggerEvent('onConvertFormsCampaignPrepareForm', [$form, $data, $service]); + } + + // Form Editing Page + if ($form->getName() == 'com_convertforms.form') + { + $result = \JFactory::getApplication()->triggerEvent('onConvertFormsFormPrepareForm', [$form, $data]); + } + + return true; + } + + /** + * Silent load of Convert Forms and Framework classes + * + * @return boolean + */ + private function loadClasses() + { + // Initialize Convert Forms Library + if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_convertforms/autoload.php')) + { + return false; + } + + // Load Framework + if (!@include_once(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + return false; + } + + // Declare extension's error log file + JLog::addLogger( + [ + 'text_file' => 'convertforms_errors.php', + 'text_entry_format' => '{MESSAGE}' + ], + JLog::ERROR, + ['convertforms_errors'] + ); + + return true; + } + + /** + * Loads the helper classes of plugin + * + * @return bool + */ + private function getHelper() + { + // Return if is helper is already loaded + if ($this->init) + { + return true; + } + + // Return if we are not in frontend + if (!$this->app->isClient('site')) + { + return false; + } + + // Handle the component execution when the tmpl request paramter is overriden + if (!$this->param->get("executeoutputoverride", false) && $this->app->input->get('tmpl', null, "cmd") != null) + { + return false; + } + + // Handle the component execution when the format request paramter is overriden + if (!$this->param->get("executeonformat", false) && $this->app->input->get('format', "html", "cmd") != "html") + { + return false; + } + + // Return if document type is Feed + if (NRFramework\Functions::isFeed()) + { + return false; + } + + // Load language + JFactory::getLanguage()->load('com_convertforms', JPATH_ADMINISTRATOR . '/components/com_convertforms'); + + return ($this->init = true); + } +} diff --git a/deployed/convertforms/plugins/system/convertforms/convertforms.xml b/deployed/convertforms/plugins/system/convertforms/convertforms.xml new file mode 100644 index 00000000..b2fcdbc0 --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/convertforms.xml @@ -0,0 +1,18 @@ + + + PLG_SYSTEM_CONVERTFORMS + PLG_SYSTEM_CONVERTFORMS_DESC + 1.0 + September 2016 + Copyright © 2020 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + Tassos Marinos + info@tassos.gr + http://www.tassos.gr + script.install.php + + convertforms.php + script.install.helper.php + language + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/convertforms/language/en-GB/en-GB.plg_system_convertforms.ini b/deployed/convertforms/plugins/system/convertforms/language/en-GB/en-GB.plg_system_convertforms.ini new file mode 100644 index 00000000..d3c240e4 --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/language/en-GB/en-GB.plg_system_convertforms.ini @@ -0,0 +1,10 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +CONVERTFORMS="Convert Forms" +PLG_SYSTEM_CONVERTFORMS="System - Convert Forms" +PLG_SYSTEM_CONVERTFORMS_DESC="System - Convert Forms" \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/convertforms/language/en-GB/en-GB.plg_system_convertforms.sys.ini b/deployed/convertforms/plugins/system/convertforms/language/en-GB/en-GB.plg_system_convertforms.sys.ini new file mode 100644 index 00000000..c5f8cfdb --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/language/en-GB/en-GB.plg_system_convertforms.sys.ini @@ -0,0 +1,9 @@ +; @package Convert Forms +; @version 3.0.0 Free +; +; @author Tassos Marinos - http://www.tassos.gr/joomla-extensions +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +PLG_SYSTEM_CONVERTFORMS="System - Convert Forms" +PLG_SYSTEM_CONVERTFORMS_DESC="System - Convert Forms" \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/convertforms/language/en-GB/index.html b/deployed/convertforms/plugins/system/convertforms/language/en-GB/index.html new file mode 100644 index 00000000..fa6d84e8 --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/language/en-GB/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/convertforms/script.install.helper.php b/deployed/convertforms/plugins/system/convertforms/script.install.helper.php new file mode 100644 index 00000000..1283fc82 --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgSystemConvertformsInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/system/convertforms/script.install.php b/deployed/convertforms/plugins/system/convertforms/script.install.php new file mode 100644 index 00000000..d5621c8b --- /dev/null +++ b/deployed/convertforms/plugins/system/convertforms/script.install.php @@ -0,0 +1,23 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2020 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgSystemConvertFormsInstallerScript extends PlgSystemConvertFormsInstallerScriptHelper +{ + public $name = 'CONVERTFORMS'; + public $alias = 'convertforms'; + public $extension_type = 'plugin'; + public $show_message = false; +} diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignment.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignment.php new file mode 100644 index 00000000..4e3ef824 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignment.php @@ -0,0 +1,271 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework; + +defined('_JEXEC') or die; + +use \NRFramework\Cache; + +/** + * Assignment Class + */ +class Assignment +{ + /** + * Application Object + * + * @var object + */ + public $app; + + /** + * Document Object + * + * @var object + */ + public $doc; + + /** + * Date Object + * + * @var object + */ + public $date; + + /** + * Database Object + * + * @var object + */ + public $db; + + /** + * User Object + * + * @var object + */ + public $user; + + /** + * Assignment Selection + * + * @var mixed + */ + public $selection; + + /** + * Assignment Parameters + * + * @var mixed + */ + public $params; + + /** + * Assignment State (Include|Exclude) + * + * @var string + */ + public $assignment; + + /** + * Framework factory object + */ + public $factory; + + /** + * Class constructor + * + * @param object $assignment + * @param object $request + * @param object $date + */ + public function __construct($options = null, $factory = null) + { + // Save the factory object + $this->factory = is_null($factory) ? new \NRFramework\Factory() : $factory; + + // Set General Joomla Objects + $this->db = $this->factory->getDbo(); + $this->app = $this->factory->getApplication(); + $this->doc = $this->factory->getDocument(); + $this->user = $this->factory->getUser(); + + // Assignment options object is optional as there are Assignments such as the Component-based, which don't rely + // on user selection. For instance, in the SmartTags\Article, we need to check whether the user sees an Article, + // so we don't need any user selection. + if ($options) + { + $this->selection = $options->selection; + $this->assignment_state = isset($options->assignment_state) ? $options->assignment_state : 'include'; + $this->params = isset($options->params) ? $options->params : null; + } + } + + /** + * Base assignment check + * + * @return bool + */ + public function pass() + { + return $this->passSimple($this->value(), $this->selection); + } + + /** + * Checks if a value (needle) exists in an array (haystack) + * + * @param mixed $needle The searched value. + * @param array $haystack The array + * + * @return bool + */ + public function passSimple($needle, $haystack) + { + if (empty($haystack)) + { + return false; + } + + $needle = $this->makeArray($needle); + $pass = false; + + foreach ($needle as $value) + { + if (in_array(strtolower($value), array_map('strtolower', $haystack))) + { + $pass = true; + break; + } + } + + return $pass; + } + + /** + * Checks if an array of values (needle) exists in a text (haystack) + * + * @param array $needle The searched array of values. + * @param string $haystack The text + * + * @return bool + */ + public function passArrayInString($needle, $haystack) + { + if (empty($needle) || empty($haystack)) + { + return false; + } + + $needle = $this->splitKeywords($needle); + + return \NRFramework\Functions::strpos_arr($needle, $haystack); + } + + /** + * Makes array from object + * + * @param object $object + * + * @return array + */ + public function makeArray($object) + { + if (is_array($object)) + { + return $object; + } + + if (!is_array($object)) + { + $x = explode(' ', $object); + return $x; + } + } + + /** + * Returns all parent rows + * + * @param integer $id Row primary key + * @param string $table Table name + * @param string $parent Parent column name + * @param string $child Child column name + * + * @return array Array with IDs + */ + public function getParentIds($id = 0, $table = 'menu', $parent = 'parent_id', $child = 'id') + { + if (!$id) + { + return []; + } + + $cache = $this->factory->getCache(); + $hash = md5('getParentIds_' . $id . '_' . $table . '_' . $parent . '_' . $child); + + if ($cache->has($hash)) + { + return $cache->get($hash); + } + + $parent_ids = array(); + + while ($id) + { + $query = $this->db->getQuery(true) + ->select('t.' . $parent) + ->from('#__' . $table . ' as t') + ->where('t.' . $child . ' = ' . (int) $id); + $this->db->setQuery($query); + $id = $this->db->loadResult(); + + // Break if no parent is found or parent already found before for some reason + if (!$id || in_array($id, $parent_ids)) + { + break; + } + + $parent_ids[] = $id; + } + + return $cache->set($hash, $parent_ids); + } + + /** + * Splits a keyword string on commas and newlines + * + * @param string $keywords + * @return array + */ + protected function splitKeywords($keywords) + { + if (empty($keywords) || !is_string($keywords)) + { + return []; + } + + // replace newlines with commas + $keywords = str_replace("\r\n", ',', $keywords); + + // split keywords on commas + $keywords = explode(',', $keywords); + + // trim entries + $keywords = array_map(function($str) + { + return trim($str); + }, $keywords); + + // filter out empty strings and return the resulting array + return array_filter($keywords, function($str) + { + return !empty($str); + }); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments.php new file mode 100644 index 00000000..f6838881 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments.php @@ -0,0 +1,489 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework; + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); + +/** + * Novarain Framework Assignments Helper Class + */ +class Assignments +{ + /** + * Assignment Type Aliases + * + * @var array + */ + public $typeAliases = array( + 'device|devices' => 'Device', + 'urls|url' => 'URL', + 'os' => 'OS', + 'browsers|browser' => 'Browser', + 'referrer' => 'Referrer', + 'lang|language|languages' => 'Language', + 'php' => 'PHP', + 'timeonsite' => 'TimeOnSite', + 'usergroups|usergroup|user_groups' => 'GroupLevel', + 'pageviews|user_pageviews' => 'Pageviews', + 'user_id|userid' => 'UserID', + 'menu' => 'Menu', + 'datetime|daterange|date' => 'Date', + 'days|day' => 'Day', + 'months|month' => 'Month', + 'timerange|time' => 'Time', + 'acymailing' => 'AcyMailing', + 'akeebasubs' => 'AkeebaSubs', + 'components|component' => 'Component', + 'convertforms' => 'ConvertForms', + 'geo_country|country|countries' => 'Country', + 'geo_continent|continent|continents' => 'Continent', + 'geo_city|city|cities' => 'City', + 'geo_region|region|regions' => 'Region', + 'cookiename|cookie' => 'Cookie', + 'ip_addresses|iprange|ip' => 'IP', + 'k2_items|k2item' => 'Component\K2Item', + 'k2_cats|k2category' => 'Component\K2Category', + 'k2_tags|k2tag' => 'Component\K2Tag', + 'k2_pagetypes' => 'Component\K2Pagetype', + 'contentcats|category' => 'Component\ContentCategory', + 'contentarticles|article' => 'Component\ContentArticle', + 'contentview' => 'Component\ContentView', + 'eventbookingsingle' => 'Component\EventBookingSingle', + 'eventbookingcategory' => 'Component\EventBookingCategory', + 'j2storesingle' => 'Component\J2StoreSingle', + 'j2storecategory' => 'Component\J2StoreCategory', + 'hikashopsingle' => 'Component\HikashopSingle', + 'hikashopcategory' => 'Component\HikashopCategory', + 'sppagebuildersingle' => 'Component\SPPageBuilderSingle', + 'sppagebuildercategory' => 'Component\SPPageBuilderCategory', + 'virtuemartcategory' => 'Component\VirtueMartCategory', + 'virtuemartsingle' => 'Component\VirtueMartSingle', + 'jshoppingsingle' => 'Component\JShoppingSingle', + 'jshoppingcategory' => 'Component\JShoppingCategory', + 'rsblogsingle' => 'Component\RSBlogSingle', + 'rsblogcategory' => 'Component\RSBlogCategory', + 'easyblogcategory' => 'Component\EasyBlogCategory', + 'easyblogsingle' => 'Component\EasyBlogSingle', + 'zoosingle' => 'Component\ZooSingle', + 'zoocategory' => 'Component\ZooCategory', + 'eshopcategory' => 'Component\EshopCategory', + 'eshopsingle' => 'Component\EshopSingle', + 'djcatalog2category' => 'Component\DJCatalog2Category', + 'djcatalog2single' => 'Component\DJCatalog2Single', + 'quixsingle' => 'Component\QuixSingle', + 'djclassifiedssingle' => 'Component\DJClassifiedsSingle', + 'djclassifiedscategory' => 'Component\DJClassifiedsCategory', + 'sobiprocategory' => 'Component\SobiProCategory', + 'sobiprosingle' => 'Component\SobiProSingle', + 'gridboxcategory' => 'Component\GridboxCategory', + 'gridboxsingle' => 'Component\GridboxSingle', + 'djeventscategory' => 'Component\DJEventsCategory', + 'djeventssingle' => 'Component\DJEventsSingle', + 'jcalprocategory' => 'Component\JCalProCategory', + 'jcalprosingle' => 'Component\JCalProSingle' + ); + + /** + * Factory object + * + * @var \NRFramework\Factory + */ + protected $factory; + + /** + * ctor + */ + public function __construct($factory = null) + { + if (!$factory) + { + $factory = new \NRFramework\Factory(); + } + + $this->factory = $factory; + } + + /** + * Check all Assignments + * + * @param array|object $assignments_info Array/Object containing assignment info + * @param string $match_method The matching method (and|or) - Deprecated + * @param bool $debug Set to true to request additional debug information about assignments + * + * @return bool|array True if check passes. If $debug is set to true an array will be returned with + * the result in the first element and debug info in the second. + */ + public function passAll($assignments_info, $match_method = 'and', $debug = false) + { + if (!$assignments_info) + { + return true; + } + + // convert $assignments_info parameter from object (used by existing extensions) to array + if (is_object($assignments_info)) + { + $assignments_info = $this->prepareAssignmentsFromObject($assignments_info, $match_method); + } + + // prepare assignment data + $assignments = $this->prepareAssignments($assignments_info); + + $debug_info = []; + if ($debug) + { + $debug_info = $this->generateDebugInfo($assignments); + } + + // return true if no assignments are given + if (empty($assignments)) + { + return $debug ? [true, $debug_info] : true; + } + + $pass = false; + + foreach ($assignments as $group) + { + // Pass all assignments in the group + if ($pass = $this->passAnd($group)) + { + break; + } + } + + return $debug ? [$pass, $debug_info] : $pass; + } + + /** + * Check if all of the given assignments passes the check + * + * @param array $assignments The assignments array to check + * + * @return bool + */ + private function passAnd($assignments) + { + if (!is_array($assignments) || count($assignments) == 0) + { + return; + } + + foreach ($assignments as $assignment) + { + if (is_null($assignment) || !\property_exists($assignment, 'class') || is_null($assignment->class)) + { + return; + } + + $assignmentInstance = new $assignment->class($assignment->options, $this->factory); + $pass = $this->passStateCheck($assignmentInstance->pass(), $assignment->options->assignment_state); + + // Fail if any of the assignments doesn't pass the check. + if (!$pass) + { + return false; + } + } + + return true; + } + + /** + * Checks if an assignment exists + * + * @param string $assignment Assignment class name or alias + * @return bool + */ + public function exists($assignment) + { + if (!$assignment) + { + return false; + } + $assignment = strtolower($assignment); + + // search by Assignment name + if (array_search($assignment, $this->typeAliases) !== false) + { + return true; + } + + // search assignment aliases + foreach (array_keys($this->typeAliases) as $key) + { + if (strpos($key, $assignment) !== false) + { + return true; + } + } + return false; + } + + /** + * Returns the classname for a given assignment alias + * + * @param string $alias + * @return string|void + */ + public function aliasToClassname($alias) + { + $alias = strtolower($alias); + foreach ($this->typeAliases as $aliases => $type) + { + if (strtolower($type) == $alias) + { + return $type; + } + + $aliases = explode('|', strtolower($aliases)); + if (in_array($alias, $aliases)) + { + return $type; + } + } + + return null; + } + + /** + * Assignment pass check based on the assignment state + * + * @param boolean $pass + * @param string $assignment_state The assignment state + * + * @return boolean + */ + private function passStateCheck($pass = true, $assignment_state = null) + { + $assignment_state = $assignment_state ?: $this->assignment; + return $pass ? ($assignment_state == 'include') : ($assignment_state == 'exclude'); + } + + /** + * Checks and prepares the given array of assignment information + * + * @param array $assignments_info + * @return array + */ + protected function prepareAssignments($assignments_info) + { + $assignments = []; + foreach ($assignments_info as $group) + { + if (empty($group)) + { + continue; + } + + $newGroup = []; + + foreach ($group as $a) + { + // check if the object has the required properties + if (!is_object($a) ||!isset($a->alias) || !isset($a->value) || !isset($a->assignment_state)) + { + continue; + } + + $assignment = new \stdClass(); + + // check if the assignment type exists + if (!$this->exists($a->alias) || !$this->setTypeParams($assignment, $this->aliasToClassname($a->alias))) + { + $assignment->class = null; + } + + $assignment->options = (object) array( + 'alias' => $a->alias, + 'selection' => $a->value, + 'params' => isset($a->params) ? $a->params : new \stdClass(), + 'assignment_state' => $this->getAssignmentState($a->assignment_state) + ); + + $newGroup[] = $assignment; + } + + $assignments[] = $newGroup; + } + + return $assignments; + } + + /** + * Converts an object of assignment information to an array of groups + * Used by existing extensions + * + * @param object $assignments_info + * @param string $matching_method + * + * @return array of objects + */ + public function prepareAssignmentsFromObject($assignments_info, $match_method) + { + if (!isset($assignments_info->params)) + { + return []; + } + + $params = json_decode($assignments_info->params); + + if (!is_object($params)) + { + return []; + } + + $assignments_info = []; + + foreach ($this->typeAliases as $aliases => $type) + { + $aliases = explode('|', $aliases); + + foreach ($aliases as $alias) + { + if (!isset($params->{'assign_' . $alias}) || !$params->{'assign_' . $alias}) + { + continue; + } + + // Discover assignment params + $assignment_params = new \stdClass(); + foreach ($params as $key => $value) + { + if (strpos($key, "assign_" . $alias . "_param") !== false) + { + $key = str_replace("assign_" . $alias . "_param_", "", $key); + $assignment_params->$key = $value; + } + } + + $assignments_info[] = (object) array( + 'alias' => $alias, + 'assignment_state' => $this->getAssignmentState($params->{'assign_' . $alias}), + 'value' => isset($params->{'assign_' . $alias . '_list'}) ? $params->{'assign_' . $alias . '_list'} : [], + 'params' => $assignment_params + ); + } + } + + if ($match_method === 'or') + { + // each assignemnt belongs to a separate group + $res = []; + foreach($assignments_info as $assignment) + { + $res[] = [$assignment]; + } + return $res; + } + else + { + // every assignment belongs to the same group + return [$assignments_info]; + } + } + + /** + * Returns assignment's state by ID + * 1: Include + * 2: Exclude + * 3, -1: None + * + * @param integer $state_id Assignment's state ID + * + * @return string Assignment's state name + */ + private function getAssignmentState($state_id) + { + switch ($state_id) + { + case 1: + case 'include': + $assignment_state = 'include'; + break; + case 2: + case 'exclude': + $assignment_state = 'exclude'; + break; + case 3: + case -1: + case 'none': + $assignment_state = 'none'; + break; + default: + $assignment_state = 'all'; + break; + } + + return $assignment_state; + } + + /** + * Sets proper assignment class and method name + * + * @param object &$assignment The assignment object + * @param string $type The assignment type + * + * @return bool True if the class and method exist, false otherwise + */ + public function setTypeParams(&$assignment, $type = '') + { + $class = __NAMESPACE__ . '\\Assignments\\' . $type; + if (!class_exists($class)) + { + return false; + } + + $assignment->class = $class; + + return true; + } + + /** + * Checks assignments and returns debug information + * + * @param array $assignments + * + * @return array + */ + protected function generateDebugInfo($assignments) + { + $debug_info = []; + foreach ($assignments as $group) + { + $debugGroup = []; + foreach($group as $assignment) + { + if (!property_exists($assignment, 'class') || is_null($assignment->class)) + { + $assignment->pass = null; + $assignment->name = 'Unknown Assignment'; + } + else + { + $inst = new $assignment->class($assignment->options, $this->factory); + $passed = $inst->pass(); + $assignment->pass = $this->passStateCheck( + $passed, + $assignment->options->assignment_state + ); + $assignment->value = $inst->value(); + $assignment->name = \preg_replace('/.*\\\\(.*)$/', "$1", $assignment->class); + } + $debugGroup[] = $assignment; + } + $debug_info[] = $debugGroup; + } + + return $debug_info; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/AcyMailing.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/AcyMailing.php new file mode 100644 index 00000000..ea58ab12 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/AcyMailing.php @@ -0,0 +1,60 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class AcyMailing extends Assignment +{ + /** + * Returns the assignment's value + * + * @return array AcyMailing lists + */ + public function value() + { + return $this->getSubscribedLists(); + } + + /** + * Returns all AcyMailing lists the user is subscribed to + * + * @return array AcyMailing lists + */ + private function getSubscribedLists() + { + if (!$user = $this->user->id) + { + return false; + } + + // Get a db connection. + $db = $this->db; + + // Create a new query object. + $query = $db->getQuery(true); + + $query + ->select(array('list.listid')) + ->from($db->quoteName('#__acymailing_listsub', 'list')) + ->join('INNER', $db->quoteName('#__acymailing_subscriber', 'sub') . ' ON (' . $db->quoteName('list.subid') . '=' . $db->quoteName('sub.subid') . ')') + ->where($db->quoteName('list.status') . ' = 1') + ->where($db->quoteName('sub.userid') . ' = ' . $user) + ->where($db->quoteName('sub.confirmed') . ' = 1') + ->where($db->quoteName('sub.enabled') . ' = 1'); + + // Reset the query using our newly populated query object. + $db->setQuery($query); + + return $db->loadColumn(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/AkeebaSubs.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/AkeebaSubs.php new file mode 100644 index 00000000..993da2b8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/AkeebaSubs.php @@ -0,0 +1,71 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class AkeebaSubs extends Assignment +{ + /** + * Returns the assignment's value + * + * @return array Akeeba Subscriptions + */ + public function value() + { + return $this->getlevels(); + } + + /** + * Returns all user's active subscriptions + * + * @param int $userid User's id + * + * @return array Akeeba Subscriptions + */ + private function getLevels() + { + if (!$user = $this->user->id) + { + return false; + } + + if (!defined('FOF30_INCLUDED') && !@include_once(JPATH_LIBRARIES . '/fof30/include.php')) + { + return false; + } + + // Get the Akeeba Subscriptions container. Also includes the autoloader. + $container = \FOF30\Container\Container::getInstance('com_akeebasubs'); + + $subscriptionsModel = $container->factory->model('Subscriptions')->tmpInstance(); + + $items = $subscriptionsModel + ->user_id($user) + ->enabled(1) + ->get(); + + if (!$items->count()) + { + return false; + } + + $levels = array(); + + foreach ($items as $subscription) + { + $levels[] = $subscription->akeebasubs_level_id; + } + + return array_unique($levels); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Browser.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Browser.php new file mode 100644 index 00000000..b9f4f072 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Browser.php @@ -0,0 +1,27 @@ + or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Browser extends Assignment +{ + /** + * Returns the assignment's value + * + * @return string Browser name + */ + public function value() + { + return $this->factory->getBrowser()['name']; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/City.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/City.php new file mode 100644 index 00000000..70b8d92f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/City.php @@ -0,0 +1,27 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\GeoIPBase; + +class City extends GeoIPBase +{ + /** + * Returns the assignment's value + * + * @return string City name + */ + public function value() + { + return $this->geo->getCity(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component.php new file mode 100644 index 00000000..bbe74b58 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component.php @@ -0,0 +1,27 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Component extends Assignment +{ + /** + * Returns the assignment's value + * + * @return string The component's name + */ + public function value() + { + return $this->app->input->get('option'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ComponentBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ComponentBase.php new file mode 100644 index 00000000..2f55b61e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ComponentBase.php @@ -0,0 +1,251 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +use \NRFramework\Assignment; + +/** + * Base class used by component-based assignments. Class properties defaults to com_content. + */ +abstract class ComponentBase extends Assignment +{ + /** + * The component's Category Page view name + * + * @var string + */ + protected $viewCategory = 'category'; + + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'article'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_content'; + + /** + * Request information + * + * @var mixed + */ + protected $request = null; + + /** + * Class Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options = null, $factory = null) + { + parent::__construct($options, $factory); + + $request = new \stdClass; + + $request->view = $this->app->input->get('view'); + $request->task = $this->app->input->get('task'); + $request->option = $this->app->input->get('option'); + $request->layout = $this->app->input->get('layout'); + $request->id = $this->app->input->getInt('id'); + + $this->request = $request; + } + + /** + * Returns the assignment's value + * + * @return array Category IDs + */ + public function value() + { + return $this->getCategoryIds(); + } + + /** + * Indicates whether the current view concerns a Category view + * + * @return boolean + */ + protected function isCategoryPage() + { + return ($this->request->view == $this->viewCategory); + } + + /** + * Indicates whether the current view concerncs a Single Page view + * + * @return boolean + */ + public function isSinglePage() + { + return ($this->request->view == $this->viewSingle); + } + + /** + * Check if we are in the right context and we're manipulating the correct component + * + * @return bool + */ + protected function passContext() + { + return ($this->request->option == $this->component_option); + } + + /** + * Returns category IDs based + * + * @return array + */ + protected function getCategoryIDs() + { + $id = $this->request->id; + + // Make sure we have an ID. + if (empty($id)) + { + return; + } + + // If this is a Category page, return the Category ID from the Query String + if ($this->isCategoryPage()) + { + return (array) $id; + } + + // If this is a Single Page, return all assosiated Category IDs. + if ($this->isSinglePage()) + { + return $this->getSinglePageCategories($id); + } + } + + /** + * Checks whether the current page is within the selected categories + * + * @param string $ref_table The referenced table + * @param string $ref_parent_column The name of the parent column in the referenced table + * + * @return boolean + */ + protected function passCategories($ref_table = 'categories', $ref_parent_column = 'parent_id') + { + if (empty($this->selection) || !$this->passContext()) + { + return false; + } + + // Include Children switch: 0 = No, 1 = Yes, 2 = Child Only + $inc_children = $this->params->inc_children; + + // Setup supported views + $view_single = isset($this->params->view_single) ? (bool) $this->params->view_single : true; + $view_category = isset($this->params->view_category) ? (bool) $this->params->view_category : false; + + // Compatibility Break: Support old view parameters (EngageBox, ACF) here. + if (isset($this->params->inc)) + { + if (!is_array($this->params->inc)) + { + $this->params->inc = (array) $this->params->inc; + } + + $view_category = in_array('inc_categories', $this->params->inc); + $view_single = in_array('inc_items', $this->params->inc) || in_array('inc_articles', $this->params->inc); + } + + // Check if we are in a valid context + if (!($view_category && $this->isCategoryPage()) && !($view_single && $this->isSinglePage())) + { + return false; + } + + // Start Checks + $pass = false; + + // Get current page assosiated category IDs. It can be a single ID of the current Category view or multiple IDs assosiated to active item. + $catids = $this->getCategoryIds(); + $catids = is_array($catids) ? $catids : (array) $catids; + + foreach ($catids as $catid) + { + $pass = in_array($catid, $this->selection); + + if ($pass) + { + // If inc_children is either disabled or set to 'Also on Childs', there's no need for further checks. + // The condition is already passed. + if (in_array($this->params->inc_children, [0, 1])) + { + break; + } + + // We are here because we need childs only. Disable pass and continue checking parent IDs. + $pass = false; + } + + // Pass check for child items + if (!$pass && $this->params->inc_children) + { + $parent_ids = $this->getParentIDs($catid, $ref_table, $ref_parent_column); + + foreach ($parent_ids as $id) + { + if (in_array($id, $this->selection)) + { + $pass = true; + break 2; + } + } + + unset($parent_ids); + } + } + + return $pass; + } + + /** + * Check whether this page passes the validation + * + * @return void + */ + protected function passSinglePage() + { + // Make sure we are in the right context + if (empty($this->selection) || !$this->passContext() || !$this->isSinglePage()) + { + return false; + } + + if (!is_array($this->selection)) + { + $this->selection = $this->splitKeywords($this->selection); + } + + return parent::pass(); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * @return array + */ + abstract protected function getSinglePageCategories($id); +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentArticle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentArticle.php new file mode 100644 index 00000000..f9234b9e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentArticle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ContentArticle extends ContentBase +{ + /** + * Pass check for Joomla! Articles + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int Article ID + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentBase.php new file mode 100644 index 00000000..ec736a98 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentBase.php @@ -0,0 +1,78 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ContentBase extends ComponentBase +{ + /** + * Get single page's assosiated categories + * + * @param integer The Single Page id + * + * @return integer + */ + protected function getSinglePageCategories($id) + { + // If the article is not assigned to any menu item, the cat id should be available in the query string. Let's check it. + if ($requestCatID = $this->app->input->getInt('catid', null)) + { + return $requestCatID; + } + + // Apparently, the catid is not available in the Query String. Let's ask Article model. + $item = $this->getItem($id); + + if (is_object($item) && isset($item->catid)) + { + return $item->catid; + } + } + + /** + * Load a Joomla article data object. + * + * @return object + */ + public function getItem($id = null) + { + $id = is_null($id) ? $this->request->id : $id; + $hash = md5('contentItem' . $id); + $cache = $this->factory->getCache(); + + if ($cache->has($hash)) + { + return $cache->get($hash); + } + + // Setup model + if (defined('nrJ4')) + { + $model = new \Joomla\Component\Content\Site\Model\ArticleModel(['ignore_request' => true]); + $model->setState('article.id', $id); + $model->setState('params', $this->app->getParams()); + } else + { + require_once JPATH_SITE . '/components/com_content/models/article.php'; + $model = \JModelLegacy::getInstance('Article', 'ContentModel'); + } + + try + { + $item = $model->getItem($id); + return $cache->set($hash, $item); + } + catch (\JException $e) + { + return null; + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentCategory.php new file mode 100644 index 00000000..cc8be10f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentCategory.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ContentCategory extends ContentBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentView.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentView.php new file mode 100644 index 00000000..d0c1039e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ContentView.php @@ -0,0 +1,39 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ContentView extends ContentBase +{ + /** + * Pass check for Joomla! Articles + * + * @return bool + * @return bool + */ + public function pass() + { + // Make sure we are in the right context + if (empty($this->selection) || !$this->passContext()) + { + return false; + } + + // In the Joomla Content component, the 'view' query parameter equals to 'category' in both Category List and Category Blog views. + // In order to distinguish them we are using the 'layout' parameter as well. + if ($this->request->view == 'category' && $this->request->layout) + { + $this->request->view .= '_' . $this->request->layout; + } + + return $this->passSimple($this->request->view, $this->selection); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Base.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Base.php new file mode 100644 index 00000000..e1ff27d4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Base.php @@ -0,0 +1,57 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJCatalog2Base extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'item'; + + /** + * The component's Category Page view name + * + * @var string + */ + protected $viewCategory = 'items'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_djcatalog2'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select($db->quoteName('category_id')) + ->from($db->quoteName('#__djc2_items_categories')) + ->where($db->quoteName('item_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Category.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Category.php new file mode 100644 index 00000000..6ed2c5ce --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Category.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJCatalog2Category extends DJCatalog2Base +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('djc2_categories'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Single.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Single.php new file mode 100644 index 00000000..5c60bb2e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJCatalog2Single.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJCatalog2Single extends DJCatalog2Base +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsBase.php new file mode 100644 index 00000000..d5a6fe66 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJClassifiedsBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'item'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_djclassifieds'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('cat_id') + ->from('#__djcf_items') + ->where($db->quoteName('id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsCategory.php new file mode 100644 index 00000000..31600c72 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJClassifiedsCategory extends DJClassifiedsBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('djcf_categories', 'parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsSingle.php new file mode 100644 index 00000000..33bc72fa --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJClassifiedsSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJClassifiedsSingle extends DJClassifiedsBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsBase.php new file mode 100644 index 00000000..0bbdb247 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJEventsBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'event'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_djevents'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('cat_id') + ->from('#__djev_events') + ->where($db->quoteName('id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsCategory.php new file mode 100644 index 00000000..56d27c62 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJEventsCategory extends DJEventsBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('djev_cats', 'parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsSingle.php new file mode 100644 index 00000000..d758e180 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/DJEventsSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class DJEventsSingle extends DJEventsBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogBase.php new file mode 100644 index 00000000..5c5161b7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EasyBlogBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'entry'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_easyblog'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__easyblog_post') + ->where($db->quoteName('id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogCategory.php new file mode 100644 index 00000000..4dd63560 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EasyBlogCategory extends EasyBlogBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('easyblog_category', 'parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogSingle.php new file mode 100644 index 00000000..e002c211 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EasyBlogSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EasyBlogSingle extends EasyBlogBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopBase.php new file mode 100644 index 00000000..5d5bc5d3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EshopBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'product'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_eshop'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__eshop_productcategories') + ->where($db->quoteName('product_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopCategory.php new file mode 100644 index 00000000..f743d8c6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EshopCategory extends EshopBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('eshop_categories', 'category_parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopSingle.php new file mode 100644 index 00000000..425f4f54 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EshopSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EshopSingle extends EshopBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingBase.php new file mode 100644 index 00000000..2582b156 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EventBookingBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'event'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_eventbooking'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__eb_event_categories') + ->where($db->quoteName('event_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingCategory.php new file mode 100644 index 00000000..2de52d4d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingCategory.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EventBookingCategory extends EventBookingBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('eb_categories', 'parent'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingSingle.php new file mode 100644 index 00000000..c931fbd8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/EventBookingSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class EventBookingSingle extends EventBookingBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxBase.php new file mode 100644 index 00000000..6aaf0a22 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class GridboxBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'page'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_gridbox'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('page_category') + ->from('#__gridbox_pages') + ->where($db->quoteName('id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxCategory.php new file mode 100644 index 00000000..5b7a2106 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class GridboxCategory extends GridboxBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('gridbox_categories', 'parent'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxSingle.php new file mode 100644 index 00000000..bd0d577d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/GridboxSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class GridboxSingle extends GridboxBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopBase.php new file mode 100644 index 00000000..a665d304 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopBase.php @@ -0,0 +1,62 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class HikaShopBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'product'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_hikashop'; + + /** + * Class Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + $this->request->id = $this->app->input->get('cid', $this->app->input->get('product_id')); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__hikashop_product_category') + ->where($db->quoteName('product_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopCategory.php new file mode 100644 index 00000000..d9696252 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopCategory.php @@ -0,0 +1,40 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class HikashopCategory extends HikashopBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('hikashop_category', 'category_parent_id'); + } + + /** + * Returns all parent rows + * + * @param integer $id Row primary key + * @param string $table Table name + * @param string $parent Parent column name + * @param string $child Child column name + * + * @return array Array with IDs + */ + public function getParentIds($id = 0, $table = 'hikashop_category', $parent = 'category_parent_id', $child = 'category_id') + { + return parent::getParentIds($id, $table, $parent, $child); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopSingle.php new file mode 100644 index 00000000..a9a3baa5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/HikashopSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class HikashopSingle extends HikashopBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreBase.php new file mode 100644 index 00000000..14108465 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreBase.php @@ -0,0 +1,70 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class J2StoreBase extends ComponentBase +{ + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_j2store'; + + /** + * Indicates whether the page is a category page + * + * @return boolean + */ + protected function isCategory() + { + return is_null($this->request->task); + } + + /** + * Indicates whether the page is a single page + * + * @return boolean + */ + public function isSinglePage() + { + return (in_array($this->request->view, ['products', 'producttags']) && $this->request->task == 'view'); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + // Get product information + require_once JPATH_ADMINISTRATOR . '/components/com_j2store/helpers/product.php'; + + // Make sure J2Store is loaded + if (!class_exists('J2Product')) + { + return; + } + + $item = \J2Product::getInstance()->setId($this->request->id)->getProduct(); + + if (!is_object($item) || !isset($item->source)) + { + return; + } + + return $item->source->catid; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreCategory.php new file mode 100644 index 00000000..eec8f673 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreCategory.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class J2StoreCategory extends J2StoreBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreSingle.php new file mode 100644 index 00000000..466e95e0 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/J2StoreSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class J2StoreSingle extends J2StoreBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProBase.php new file mode 100644 index 00000000..5d4926e6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class JCalProBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'event'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_jcalpro'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__jcalpro_event_categories') + ->where($db->quoteName('event_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProCategory.php new file mode 100644 index 00000000..5dfe0db7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class JCalProCategory extends JCalProBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('categories', 'parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProSingle.php new file mode 100644 index 00000000..ccd3983f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JCalProSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class JCalProSingle extends JCalProBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingBase.php new file mode 100644 index 00000000..4f29abc4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingBase.php @@ -0,0 +1,63 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class JShoppingBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'product'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_jshopping'; + + /** + * Class Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + $this->request->view = $this->app->input->get('view', $this->app->input->get('controller')); + $this->request->id = $this->app->input->get('product_id'); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__jshopping_products_to_categories') + ->where($db->quoteName('product_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingCategory.php new file mode 100644 index 00000000..488feec3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingCategory.php @@ -0,0 +1,40 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class JShoppingCategory extends JShoppingBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('jshopping_categories', 'category_parent_id'); + } + + /** + * Returns all parent rows + * + * @param integer $id Row primary key + * @param string $table Table name + * @param string $parent Parent column name + * @param string $child Child column name + * + * @return array Array with IDs + */ + public function getParentIds($id = 0, $table = 'jshopping_categories', $parent = 'category_parent_id', $child = 'category_id') + { + return parent::getParentIds($id, $table, $parent, $child); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingSingle.php new file mode 100644 index 00000000..69328183 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/JShoppingSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class JShoppingSingle extends JShoppingBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Base.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Base.php new file mode 100644 index 00000000..674f2e41 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Base.php @@ -0,0 +1,130 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class K2Base extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'item'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_k2'; + + /** + * Get single page's assosiated categories + * + * @param integer The Single Page id + * + * @return integer + */ + protected function getSinglePageCategories($id) + { + $item = $this->getK2Item(); + + return isset($item->catid) ? $item->catid : null; + } + + /** + * Indicates whether the current view concerns a Category view + * + * @return boolean + */ + protected function isCategoryPage() + { + return ($this->request->layout == 'category' || $this->request->task == 'category' || $this->request->view == 'latest'); + } + + /** + * Returns a K2 item + * + * @return object|null + */ + public function getK2Item() + { + $cache = $this->factory->getcache(); + $hash = md5('k2assitem'); + + if ($cache->has($hash)) + { + return $cache->get($hash); + } + + return $cache->set($hash, \JModelLegacy::getInstance('Item', 'K2Model')->getData()); + } + + /** + * Return tags of a K2 item + * + * @param int $id K2 item ID + * + * @return array + */ + public function getK2tags($id = null) + { + $id = is_null($id) ? $this->request->id : $id; + + $cache = $this->factory->getcache(); + $hash = md5('k2_item_tags' . $id); + + if ($cache->has($hash)) + { + return $cache->get($hash); + } + + $q = $this->db->getQuery(true) + ->select('t.id') + ->from('#__k2_tags_xref AS tx') + ->join('LEFT', '#__k2_tags AS t ON t.id = tx.tagID') + ->where('tx.itemID = ' . $id) + ->where('t.published = 1'); + + $this->db->setQuery($q); + + return $cache->set($hash, $this->db->loadColumn()); + } + + /** + * Get current view layout string + * + * @return string + */ + public function getPageType() + { + $view = $this->request->view; + $layout = $this->request->layout; + + if (is_null($layout)) + { + switch ($view) + { + case 'item': + $layout = 'item'; + break; + default: + $layout = $this->request->task; + break; + } + } + + $pagetype = $view . '_' . $layout; + + return $pagetype; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Category.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Category.php new file mode 100644 index 00000000..b730d880 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Category.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class K2Category extends K2Base +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('k2_categories', 'parent'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Item.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Item.php new file mode 100644 index 00000000..20f17a5a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Item.php @@ -0,0 +1,65 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class K2Item extends K2Base +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + $pass = $this->passSinglePage(); + + // Keywords Checking + $contentKeywords = isset($this->params->cont_keywords) ? $this->params->cont_keywords : ''; + $metaKeywords = isset($this->params->meta_keywords) ? $this->params->meta_keywords : ''; + + // If both are empty, do not maky any further check + if (empty($contentKeywords) && empty($metaKeywords)) + { + return $pass; + } + + // Load current K2 Item object + if (!$item = $this->getK2Item()) + { + return false; + } + + // check items's text + if (!empty($contentKeywords)) + { + $pass = $this->passArrayInString($contentKeywords, $item->introtext . $item->fulltext); + } + + // check item's metakeywords + if (!empty($metaKeywords)) + { + $pass = $this->passArrayInString($metaKeywords, $item->metakey); + } + + return $pass; + } + + /** + * Returns the assignment's value + * + * @return int Article ID + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Pagetype.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Pagetype.php new file mode 100644 index 00000000..a8903e88 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Pagetype.php @@ -0,0 +1,40 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class K2Pagetype extends K2Base +{ + /** + * Pass check for K2 page types + * + * @return bool + */ + public function pass() + { + if (empty($this->selection) || !$this->passContext()) + { + return false; + } + + return parent::pass(); + } + + /** + * Returns the assignment's value + * + * @return string Pagetype + */ + public function value() + { + return $this->getPageType(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Tag.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Tag.php new file mode 100644 index 00000000..adafc51c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/K2Tag.php @@ -0,0 +1,40 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class K2Tag extends K2Base +{ + /** + * Pass check for K2 Tags + * + * @return bool + */ + public function pass() + { + if (empty($this->selection) || !$this->passContext()) + { + return false; + } + + return parent::pass(); + } + + /** + * Returns the assignment's value + * + * @return array K2 item tags + */ + public function value() + { + return $this->getK2tags(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/QuixBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/QuixBase.php new file mode 100644 index 00000000..13b5a1e5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/QuixBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class QuixBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'page'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_quix'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('catid') + ->from('#__quix') + ->where($db->quoteName('id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/QuixSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/QuixSingle.php new file mode 100644 index 00000000..41376d53 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/QuixSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class QuixSingle extends QuixBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogBase.php new file mode 100644 index 00000000..643f6c8b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class RSBlogBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'post'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_rsblog'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('cat_id') + ->from('#__rsblog_posts_categories') + ->where($db->quoteName('post_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogCategory.php new file mode 100644 index 00000000..44dd4370 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class RSBlogCategory extends RSBlogBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('rsblog_categories', 'parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogSingle.php new file mode 100644 index 00000000..995c6a4c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/RSBlogSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class RSBlogSingle extends RSBlogBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderBase.php new file mode 100644 index 00000000..21b32b0a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderBase.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class SPPageBuilderBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'page'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_sppagebuilder'; + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('catid') + ->from('#__sppagebuilder') + ->where($db->quoteName('id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderCategory.php new file mode 100644 index 00000000..e98a8ad7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class SPPageBuilderCategory extends SPPageBuilderBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('categories', 'parent_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderSingle.php new file mode 100644 index 00000000..046812c3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SPPageBuilderSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class SPPageBuilderSingle extends SPPageBuilderBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProBase.php new file mode 100644 index 00000000..52712c29 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProBase.php @@ -0,0 +1,82 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class SobiProBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'entry'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_sobipro'; + + /** + * Class Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + $this->request->view = 'entry'; + + // Make sure SPRequest is loaded + if (!class_exists('SPRequest')) + { + return; + } + + $this->request->id = \SPRequest::sid(); + } + + /** + * Indicates whether the page is a single page + * + * @return boolean + */ + public function isSinglePage() + { + return (parent::isSinglePage() && $this->request->task == 'entry.details'); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + + $db = $this->db; + + $query = $db->getQuery(true) + ->select('pid') + ->from('#__sobipro_relations') + ->where($db->quoteName('id') . '=' . $id) + ->where($db->quoteName('oType') . " = 'entry'"); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProCategory.php new file mode 100644 index 00000000..3a839898 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class SobiProCategory extends SobiProBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('sobipro_relations', 'id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProSingle.php new file mode 100644 index 00000000..45cffe5a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/SobiProSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class SobiProSingle extends SobiProBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartBase.php new file mode 100644 index 00000000..ce3c5f60 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartBase.php @@ -0,0 +1,62 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class VirtueMartBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'productdetails'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_virtuemart'; + + /** + * Class Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + $this->request->id = $this->app->input->get('virtuemart_product_id'); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('virtuemart_category_id') + ->from('#__virtuemart_product_categories') + ->where($db->quoteName('virtuemart_product_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartCategory.php new file mode 100644 index 00000000..dee311c3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartCategory.php @@ -0,0 +1,26 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class VirtueMartCategory extends VirtueMartBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('virtuemart_product_categories', 'virtuemart_category_id'); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartSingle.php new file mode 100644 index 00000000..5b50c752 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/VirtueMartSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class VirtueMartSingle extends VirtueMartBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooBase.php new file mode 100644 index 00000000..6836770e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooBase.php @@ -0,0 +1,68 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ZooBase extends ComponentBase +{ + /** + * The component's Single Page view name + * + * @var string + */ + protected $viewSingle = 'item'; + + /** + * The component's option name + * + * @var string + */ + protected $component_option = 'com_zoo'; + + /** + * Class Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + + $this->request->view = $this->app->input->get('view', $this->app->input->get('task')); + + // Normally the item's id can be read by the request parameters BUT if the item + // is assosiated to a menu item the item_id parameter is not yet available and + // we can only find it out through the menu's parameters. + $this->request->id = (int) $this->app->input->get('item_id', $this->app->getMenu()->getActive()->getParams()->get('item_id')); + } + + /** + * Get single page's assosiated categories + * + * @param Integer The Single Page id + * + * @return array + */ + protected function getSinglePageCategories($id) + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('category_id') + ->from('#__zoo_category_item') + ->where($db->quoteName('item_id') . '=' . $id); + + $db->setQuery($query); + + return $db->loadColumn(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooCategory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooCategory.php new file mode 100644 index 00000000..216441d6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooCategory.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ZooCategory extends ZooBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passCategories('zoo_category', 'parent'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooSingle.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooSingle.php new file mode 100644 index 00000000..9cb8cb3d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Component/ZooSingle.php @@ -0,0 +1,35 @@ + or later +*/ + +namespace NRFramework\Assignments\Component; + +defined('_JEXEC') or die; + +class ZooSingle extends ZooBase +{ + /** + * Pass check + * + * @return bool + */ + public function pass() + { + return $this->passSinglePage(); + } + + /** + * Returns the assignment's value + * + * @return int + */ + public function value() + { + return $this->request->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Continent.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Continent.php new file mode 100644 index 00000000..d1f18504 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Continent.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\GeoIPBase; + +class Continent extends GeoIPBase +{ + /** + * Continent check + * + * @return bool + */ + public function pass() + { + /// try to convert continent names to codes + $this->selection = array_map(function($c) { + if (strlen($c) > 2) + { + $c = \NRFramework\Continents::getCode($c); + } + return $c; + }, $this->selection); + + return $this->passSimple($this->value(), $this->selection); + } + + /** + * Returns the assignment's value + * + * @return string Continent code + */ + public function value() + { + return $this->geo->getContinentCode(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/ConvertForms.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/ConvertForms.php new file mode 100644 index 00000000..b5767c67 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/ConvertForms.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class ConvertForms extends Assignment +{ + /** + * Returns the assignment's value + * + * @return array List of campaign IDs + */ + public function value() + { + return $this->getCampaigns(); + } + + /** + * Returns campaigns list visitor is subscribed to + * If the user is logged in, we try to get the campaigns by user's ID + * Otherwise, the visitor cookie ID will be used instead + * + * @return array List of campaign IDs + */ + private function getCampaigns() + { + @include_once JPATH_ADMINISTRATOR . '/components/com_convertforms/helpers/convertforms.php'; + + if (!class_exists('ConvertFormsHelper')) + { + return; + } + + return \ConvertFormsHelper::getVisitorCampaigns(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Cookie.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Cookie.php new file mode 100644 index 00000000..06614272 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Cookie.php @@ -0,0 +1,71 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Cookie extends Assignment +{ + public function pass() + { + $pass = false; + $cookie_data = $this->value(); + $user_content = empty($this->params->content) ? '' : $this->params->content; + // return false if the cookie is not found + if($cookie_data === null) + { + return false; + } + + // return true if the user selected the 'exists' option + if ($this->selection === 'exists') + { + return true; + } + + switch ($this->selection) + { + case 'equal': + $pass = $user_content === $cookie_data; + break; + case 'contains': + if ($user_content !== '' && strpos($cookie_data, $user_content) !== FALSE) + { + $pass = true; + } + break; + case 'starts': + if ($user_content !== '' && substr($cookie_data, 0, strlen($user_content)) === $user_content) + { + $pass = true; + } + break; + case 'ends': + if ($user_content !== '' && substr($cookie_data, -strlen($user_content)) === $user_content) + { + $pass = true; + } + break; + } + + return $pass; + } + + /** + * Returns the assignment's value + * + * @return string Cookie data + */ + public function value() + { + return $this->app->input->cookie->get($this->params->name); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Country.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Country.php new file mode 100644 index 00000000..25c1b00b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Country.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\GeoIPBase; + +class Country extends GeoIPBase +{ + /** + * Country check + * + * @return bool + */ + public function pass() + { + // try to convert country names to codes + $this->selection = array_map(function($c) { + if (strlen($c) > 2) + { + $c = \NRFramework\Countries::getCode($c); + } + return $c; + }, $this->selection); + + return $this->passSimple($this->value(), $this->selection); + } + + /** + * Returns the assignment's value + * + * @return string Country code + */ + public function value() + { + return $this->geo->getCountryCode(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Date.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Date.php new file mode 100644 index 00000000..8916b6b4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Date.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\DateTimeBase; + +class Date extends DateTimeBase +{ + /** + * Checks if current date passes the given date range. + * Dates must be always passed in format: Y-m-d H:i:s + * + * @return bool + */ + public function pass() + { + // No valid dates + if (!$this->params->publish_up && !$this->params->publish_down) + { + return false; + } + + $up = $this->params->publish_up ? $this->getDate($this->params->publish_up) : null; + $down = $this->params->publish_down ? $this->getDate($this->params->publish_down) : null; + + return $this->checkRange($up, $down); + } + + /** + * Returns the assignment's value + * + * @return \Date Current date + */ + public function value() + { + return $this->date; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTime.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTime.php new file mode 100644 index 00000000..8437da40 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTime.php @@ -0,0 +1,171 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class DateTime extends Assignment +{ + /** + * Server's Timezone + * + * @var DateTimeZone + */ + private $tz; + + /** + * Class constructor + * + * @param object $assignment + */ + public function __construct($assignment) + { + parent::__construct($assignment); + + $this->tz = new \DateTimeZone($this->app->getCfg('offset')); + } + /** + * Checks if current date passes the date range + * + * @return bool + */ + function passDate() + { + // No valid dates + if (!$this->params->publish_up && !$this->params->publish_down) + { + return false; + } + $format = 'Y-m-d H:i:s'; + $up = $this->params->publish_up; + $down = $this->params->publish_down; + + // fix the date string + \NRFramework\Functions::fixDate($up); + \NRFramework\Functions::fixDate($down); + + $up = $up ? \JDate::createFromFormat($format, $up, $this->tz) : null; + $down = $down ? \JDate::createFromFormat($format, $down, $this->tz) : null; + + return $this->checkRange($up, $down); + } + + /** + * Checks if current time passes the given time range + * + * @return bool + */ + public function passTimeRange() + { + if (!is_null($this->params->publish_up)) + { + list($up_hours, $up_mins) = explode(':', $this->params->publish_up); + } + + if (!is_null($this->params->publish_down)) + { + list($down_hours, $down_mins) = explode(':', $this->params->publish_down); + } + + // do comparison using time only + $up = is_null($this->params->publish_up) ? null : \JFactory::getDate()->setTimezone($this->tz)->setTime($up_hours, $up_mins); + $down = is_null($this->params->publish_down) ? null : \JFactory::getDate()->setTimezone($this->tz)->setTime($down_hours, $down_mins); + + return $this->checkRange($up, $down); + } + + /** + * Check current weekday + * + * @return bool + */ + public function passDays() + { + if (is_array($this->selection) && !empty($this->selection)) + { + // convert 'weekdays' and 'weekend' values to day ids + foreach ($this->selection as $d) + { + if (preg_match('/^weekdays?$/', trim($d))) + { + $this->selection = array_merge($this->selection, range(1, 5)); + continue; + } + + if ($d === 'weekend') + { + $this->selection = array_merge($this->selection, [6, 7]); + } + } + $this->selection = array_unique($this->selection); + + // 'N' -> week day + // 'l' -> fulltext week day + // http://php.net/manual/en/function.date.php + $today = $this->date->format('N'); + $todayText = $this->date->format('l'); + + if (in_array($today, $this->selection) || + in_array($todayText, $this->selection)) + { + return true; + } + } + + return false; + } + + /** + * Check current month + * + * @return void + */ + public function passMonths() + { + if (is_array($this->selection) && !empty($this->selection)) + { + // 'n' -> month number (1 to 12) + // 'F' -> full-text month name + // http://php.net/manual/en/function.date.php + $month = $this->date->format('n'); + $monthText = $this->date->format('F'); + + if (in_array($month, $this->selection) || + in_array($monthText, $this->selection)) + { + return true; + } + } + + return false; + } + + /** + * Checks if the current datetime is between the specified range + * + * @param JDate &$up_date + * @param JDate &$down_date + * + * @return bool + */ + private function checkRange(&$up_date, &$down_date) + { + $now = $this->date->getTimestamp(); + + if (((bool)$up_date && $up_date->getTimestamp() > $now) || + ((bool)$down_date && $down_date->getTimestamp() < $now)) + { + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTime/Scheduler.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTime/Scheduler.php new file mode 100644 index 00000000..782cfbf8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTime/Scheduler.php @@ -0,0 +1,253 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments\DateTime; + +defined('_JEXEC') or die; + +/** + * DateTime Assignment Scheduling helper + */ +class Scheduler +{ + /** + * Starting date + * + * @var object \DateTime + */ + protected $start_date; + + /** + * Ending date + * + * @var object \DateTime + */ + protected $end_date; + + /** + * Date to test against + * + * @var object \DateTime + */ + protected $current_date; + + /** + * @var string + */ + protected $repetitionFrequency; + + /** + * @var int + */ + protected $repetitionStep; + + /** + * Used by 'weekly' repetition frequency + * + * @var array + */ + protected $weekdays; + + /** + * The interval between the starting and current date + * http://php.net/manual/en/class.dateinterval.php + * + * @var object \DateInterval + */ + protected $interval; + + + /** + * Scheduler constructor + * + * @param array $options: Scheduling options + * start_date: + * end_date: + * current_date: + * repetitionFrequency: one of 'daily', 'weekly', 'monthly', 'yearly' + * repetitionStep: integer (1,2,3,...) + * weekdays: Array, used with 'weekly' repetitionFrequency, any of 'Monday', 'Tuesday', etc. + * Defaults to start_date's day name if empty + */ + public function __construct($options) + { + $this->start_date = $options['start_date']; + $this->end_date = array_key_exists('end_date', $options) ? $options['end_date'] : null; + $this->current_date = $options['current_date']; + $this->repetitionFrequency = $options['repetitionFrequency']; + $this->repetitionStep = $options['repetitionStep']; + $this->weekdays = array_key_exists('weekdays', $options) ? + array_map('ucfirst', $options['weekdays']) : + null; + + //create a DateInterval object from current and start dates + $this->interval = $this->start_date->diff($this->current_date); + } + + /** + * @return bool + */ + public function repeat() + { + //check if we are within the start/end date range (inclusive) + if (!$this->checkDateRange()) + { + return false; + } + + $result = false; + + // + switch ($this->repetitionFrequency) + { + case 'daily': + $result = $this->repeatDaily(); + break; + case 'weekly': + $result = $this->repeatWeekly(); + break; + case 'monthly': + $result = $this->repeatMonthly(); + break; + case 'yearly': + $result = $this->repeatYearly(); + break; + } + + return $result; + } + + /** + * Daily repetition check + * + * @return bool + */ + protected function repeatDaily() + { + //get the number of days that have passed since start_date + $num_days = $this->interval->days; + + if ($num_days % $this->repetitionStep !== 0) { + return false; + } + + return true; + } + + /** + * Weekly repetition check + * + * @return bool + */ + protected function repeatWeekly() + { + //get current_date's day name + $today_name = $this->current_date->format('l'); + + // if $this->weekdays is empty use start_date's day name + if (empty($this->weekdays)) + { + $start_day_name = $this->start_date->format('l'); + if ($start_day_name !== $today_name) + { + return false; + } + } + else + { + if (!in_array($today_name, $this->weekdays)) + { + return false; + } + } + + //get the number of weeks that passed since start_date + $num_weeks = floor($this->interval->days / 7); + + if ($num_weeks % $this->repetitionStep !== 0) + { + return false; + } + + return true; + } + + /** + * Monthly repetition check + * + * @return bool + */ + protected function repeatMonthly() + { + //check if we are on the same day of the month + $start_day = $this->start_date->format('d'); + $current_day = $this->current_date->format('d'); + + if ($start_day !== $current_day) + { + return false; + } + + //get the number of months that have passed since start_date + $num_months = ($this->interval->y * 12) + $interval->m; + + if ($num_months % $this->repetitionStep !== 0) + { + return false; + } + + return true; + } + + /** + * Yearly repetition check + * + * @return bool + */ + protected function repeatYearly() + { + //check if we are on the same month and day + $start_day_month = $this->start_date->format('d-m'); + $current_day_month = $this->current_date->format('d-m'); + + if ($start_day_month !== $current_day_month) + { + return false; + } + + //get the number of years that have passed since start_date + $num_years = $this->interval->y; + + if ($num_years % $this->repetitionStep !== 0) + { + return false; + } + + return true; + } + + /** + * Checks if the current date is between the start/end range (inclusive) + * + * @return bool + */ + protected function checkDateRange() + { + if ($this->start_date > $this->current_date) + { + return false; + } + + if (!empty($this->end_date) && $this->end_date < $this->current_date) + { + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTimeBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTimeBase.php new file mode 100644 index 00000000..b78e8437 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/DateTimeBase.php @@ -0,0 +1,111 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class DateTimeBase extends Assignment +{ + /** + * Server's Timezone + * + * @var DateTimeZone + */ + protected $tz; + + /** + * If set to True, dates will be constructed with modified offset based on the passed timezone + * + * @var Boolean + */ + protected $modify_offset = true; + + /** + * Class constructor + * + * @param object $assignment + */ + public function __construct($assignment, $factory) + { + parent::__construct($assignment, $factory); + + // Set timezone + if (property_exists($assignment->params, 'timezone') && !empty($assignment->params->timezone)) + { + $this->tz = new \DateTimeZone($assignment->params->timezone); + } + else + { + $this->tz = new \DateTimeZone($this->app->getCfg('offset', 'GMT')); + } + + // Set modify offset switch + if (property_exists($this->params, 'modify_offset')) + { + $this->modify_offset = (bool) $this->params->modify_offset; + } + + // Set now date + $now = property_exists($assignment->params, 'now') ? $assignment->params->now : 'now'; + $this->date = $this->getDate($now); + } + + /** + * Checks if the current datetime is between the specified range + * + * @param JDate &$up_date + * @param JDate &$down_date + * + * @return bool + */ + protected function checkRange(&$up_date, &$down_date) + { + if (!$up_date && !$down_date) + { + return false; + } + + $now = $this->date->getTimestamp(); + + if (((bool)$up_date && $up_date->getTimestamp() > $now) || + ((bool)$down_date && $down_date->getTimestamp() < $now)) + { + return false; + } + + return true; + } + + /** + * Create a date object based on the given string and apply timezone. + * + * @param String $date + * + * @return void + */ + protected function getDate($date = 'now') + { + // Fix the date string + \NRFramework\Functions::fixDate($date); + + if ($this->modify_offset) + { + // Create date, set timezone and modify offset + $date = $this->factory->getDate($date)->setTimeZone($this->tz); + } else + { + // Create date and set timezone without modifyig offset + $date = $this->factory->getDate($date, $this->tz); + } + + return $date; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Day.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Day.php new file mode 100644 index 00000000..bb69c8a1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Day.php @@ -0,0 +1,72 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\DateTimeBase; + +class Day extends DateTimeBase +{ + /** + * Check current weekday + * + * @return bool + */ + public function pass() + { + if (is_array($this->selection) && !empty($this->selection)) + { + // convert selection values to lowercase + $this->selection = array_map("strtolower", $this->selection); + + // convert 'weekdays' and 'weekend' values to day ids + foreach ($this->selection as $d) + { + if (preg_match('/^weekdays?$/', trim($d))) + { + $this->selection = array_merge($this->selection, range(1, 5)); + continue; + } + + if ($d === 'weekend') + { + $this->selection = array_merge($this->selection, [6, 7]); + } + } + $this->selection = array_unique($this->selection); + + // 'N' -> week day + // 'l' -> fulltext week day + // 'D' -> Abbreviated day name (Mon to Sun) + // http://php.net/manual/en/function.date.php + $today = $this->date->format('N'); + $todayText = strtolower($this->date->format('l')); + $todayTextAbbrv = strtolower($this->date->format('D')); + if (in_array($today, $this->selection) || + in_array($todayText, $this->selection) || + in_array($todayTextAbbrv, $this->selection)) + { + return true; + } + } + + return false; + } + + /** + * Returns the assignment's value + * + * @return string Name of the current day + */ + public function value() + { + return $this->date->format('l'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Device.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Device.php new file mode 100644 index 00000000..8d870f49 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Device.php @@ -0,0 +1,27 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Device extends Assignment +{ + /** + * Returns the assignment's value + * + * @return string Device type + */ + public function value() + { + return $this->factory->getDevice(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/GeoIPBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/GeoIPBase.php new file mode 100644 index 00000000..04be028b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/GeoIPBase.php @@ -0,0 +1,80 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +/** + * IP addresses sample + * + * Greece / Dodecanese: 94.67.238.3 + * Belgium / Flanders: 37.62.255.255 + * USA / New York: 72.229.28.185 + */ +class GeoIPBase extends Assignment +{ + /** + * GeoIP Class + * + * @var class + */ + protected $geo; + + /** + * Class constructor + * + * @param object $assignment + * @param object $factory + */ + public function __construct($assignment, $factory) + { + // Load Geo Class + $ip = isset($assignment->params->ip) ? $assignment->params->ip : null; + $this->loadGeo($ip); + + if (!$this->geo) + { + return false; + } + + parent::__construct($assignment, $factory); + + // Convert a comma/newline separated selection string into an array + if (!is_array($this->selection)) + { + $this->selection = $this->splitKeywords($this->selection); + } + } + + /** + * Load GeoIP Classes + * + * @return void + */ + private function loadGeo($ip) + { + if (!class_exists('TGeoIP')) + { + $path = JPATH_PLUGINS . '/system/tgeoip'; + + if (@file_exists($path . '/helper/tgeoip.php')) + { + if (@include_once($path . '/vendor/autoload.php')) + { + @include_once $path . '/helper/tgeoip.php'; + } + } + } + + $this->geo = new \TGeoIP($ip); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/GroupLevel.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/GroupLevel.php new file mode 100644 index 00000000..f5fc88a1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/GroupLevel.php @@ -0,0 +1,100 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class GroupLevel extends Assignment +{ + /** + * md5 hash used for caching the groups map + * + * @var string + */ + protected $_groupsHash; + + /** + * Constructor + * + * @param object $options + * @param object $factory + */ + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + + $_groupsHash = md5('NRFramework\Assignments\User_groupsHash'); + } + + /** + * Check user grouplevel + * + * @return bool Returns true if the Referrer URL contains any of the selection URLs + */ + public function pass() + { + $groups = $this->getGroups(); + + // replace group names with ids in selection + foreach ($this->selection as $key => $id) + { + if (!is_numeric($id)) + { + $this->selection[$key] = array_search(strtolower($id), $groups); + } + } + + return $this->passSimple($this->value(), $this->selection); + } + + /** + * Returns the assignment's value + * + * @return array User groups + */ + public function value() + { + return !empty($this->user->groups) ? array_values($this->user->groups) : $this->user->getAuthorisedGroups(); + } + + /** + * Returns User Groups map (ID => Name) + * + * @return array + */ + protected function getGroups() + { + $cache = $this->factory->getCache(); + if ($cache->has($this->_groupsHash)) + { + return $cache->get($this->_groupsHash); + } + + $db = $this->factory->getDbo(); + $query = $db->getQuery(true); + + $query + ->select('id, title') + ->from('#__usergroups'); + $db->setQuery($query); + + $res = $db->loadObjectList(); + $groups = []; + foreach ($res as $r) + { + $groups[$r->id] = strtolower($r->title); + } + $cache->set($this->_groupsHash, $groups); + + return $groups; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/IP.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/IP.php new file mode 100644 index 00000000..d2eb8d70 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/IP.php @@ -0,0 +1,140 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; +use NRFramework\User; + +class IP extends Assignment +{ + /** + * Checks if the user's ip address is within the specified ranges + * + * @return bool + */ + public function pass() + { + // get the user's ip address + $user_ip = $this->value(); + + // get the supplied ip addresses/ranges as an array + $ip_ranges = $this->prepareRanges($this->selection); + foreach ($ip_ranges as $range) + { + if ($this->isInRange($user_ip, $range)) + { + return true; + } + } + return false; + } + + /** + * Returns the assignment's value + * + * @return string User IP + */ + public function value() + { + return User::getIP(); + } + + /** + * Prepare an array of IP addresses/ranges + * from a a list(string) of IPs + * + * @param string $ip_list + * @return array + */ + protected function prepareRanges($ip_list) + { + if (is_array($ip_list)) + { + $ip_list = implode(',', $ip_list); + } + // replace newlines with commas + $ip_list = preg_replace('/\s+/',',',trim($ip_list)); + + // strip out empty values, reorder array keys and return ip ranges as an array + return array_values(array_filter(explode(',', $ip_list))); + } + + /** + * Checks if an IP address falls within an IP range + * Todo: factor out common logic... + * @param string $user_ip + * @param string $range + * @return boolean + */ + protected function isInRange($user_ip, $range) + { + if (empty($user_ip) || empty($range)) + { + return false; + } + + // break ip addresses/ranges into parts + $user_ip_parts = explode('.', $user_ip); + $ip_range_parts = explode('.', $range); + + for ($i = 0; $i < count($ip_range_parts); $i++) + { + $r = $ip_range_parts[$i]; + + // parse and check range + if (strpos($r, '-') !== FALSE) + { + list($range_start, $range_end) = explode('-', $r); + + // format checks... + if (!is_numeric($range_start) || !is_numeric($range_end)) + { + return false; + } + // cast strings to integers + $range_start = (int) $range_start; + $range_end = (int) $range_end; + + if ($range_start > $range_end || $range_start < 0 || $range_end > 255) + { + return false; + } + + if ((int)$user_ip_parts[$i] < $range_start || (int)$user_ip_parts[$i] > $range_end) + { + return false; + } + } + else + { + // format checks... + if (!is_numeric($r)) + { + return false; + } + + $r = (int)$r; + + if ($r < 0 || $r > 255) + { + return false; + } + + if ((int)$user_ip_parts[$i] !== $r) + { + return false; + } + } + } //for loop + + return true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Language.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Language.php new file mode 100644 index 00000000..f4d9a702 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Language.php @@ -0,0 +1,35 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Language extends Assignment +{ + /** + * Returns the assignment's value + * + * @return array Language strings + */ + public function value() + { + return $this->getLanguage(); + } + + public function getLanguage() + { + $lang_strings = $this->factory->getLanguage()->getLocale(); + $lang_strings[] = $this->factory->getLanguage()->getTag(); + + return $lang_strings; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Menu.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Menu.php new file mode 100644 index 00000000..2978fb12 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Menu.php @@ -0,0 +1,110 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Menu extends Assignment +{ + protected $itemID = null; + + public function __construct($options, $factory) + { + parent::__construct($options, $factory); + + if (!is_array($this->selection)) + { + $this->selection = $this->splitKeywords($this->selection); + } + + $this->itemID = $this->app->input->getInt('Itemid', 0); + } + + /** + * Pass check for menu items + * + * @return bool + */ + public function pass() + { + $includeChildren = isset($this->params->inc_children) ? $this->params->inc_children : false; + $includeNoItemID = isset($this->params->noitem) ? $this->params->noitem : false; + // Pass if selection is empty or the itemid is missing + if (!$this->itemID || empty($this->selection)) + { + return $includeNoItemID; + } + + // return true if menu type is in selection + $menutype = 'type.' . $this->getMenuType(); + if (in_array($menutype, $this->selection)) + { + return true; + } + + // return true if menu is in selection and we are not including child items only + if (in_array($this->itemID, $this->selection)) + { + return ($includeChildren != 2); + } + + // Let's discover child items. + // Obviously if the option is disabled return false. + if (!$includeChildren) + { + return false; + } + + // Get menu item parents + $parent_ids = $this->getParentIds($this->itemID); + $parent_ids = array_diff($parent_ids, array('1')); + + foreach ($parent_ids as $id) + { + if (!in_array($id, $this->selection)) + { + continue; + } + + return true; + } + + return false; + } + + /** + * Returns the assignment's value + * + * @return integer Menu ID + */ + public function value() + { + return $this->itemID; + } + + /** + * Get active menu items's menu type + * + * @return bool False on failure, string on success + */ + private function getMenuType() + { + if (empty($this->itemID)) + { + return; + } + + $menu = $this->app->getMenu()->getItem((int) $this->itemID); + + return isset($menu->menutype) ? $menu->menutype : false; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Month.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Month.php new file mode 100644 index 00000000..d2197c4c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Month.php @@ -0,0 +1,56 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\DateTimeBase; + +class Month extends DateTimeBase +{ + /** + * Check current month + * + * @return void + */ + public function pass() + { + if (is_array($this->selection) && !empty($this->selection)) + { + // convert selection values to lowercase + $this->selection = array_map("strtolower", $this->selection); + + // 'n' -> month number (1 to 12) + // 'F' -> full-text month name + // 'M' -> Abbreviated month name (Jan to Dec) + // http://php.net/manual/en/function.date.php + $month = $this->date->format('n'); + $monthText = strtolower($this->date->format('F')); + $monthTextAbbrv = strtolower($this->date->format('M')); + if (in_array($month, $this->selection) || + in_array($monthText, $this->selection) || + in_array($monthTextAbbrv, $this->selection)) + { + return true; + } + } + + return false; + } + + /** + * Returns the assignment's value + * + * @return string Name of the current month + */ + public function value() + { + return $this->date->format('F'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/OS.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/OS.php new file mode 100644 index 00000000..873672d7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/OS.php @@ -0,0 +1,50 @@ + or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; +use NRFramework\WebClient; + +class OS extends Assignment +{ + /** + * Check the client's operating system + * + * @return bool + */ + public function pass() + { + // backwards compatibility check + // replace 'iphone' and 'ipad' selection values with 'ios' + $this->selection = array_map(function($os_selection) + { + if ($os_selection === 'iphone' || $os_selection === 'ipad') + { + return 'ios'; + } + return $os_selection; + }, + $this->selection); + + return $this->passSimple($this->value(), $this->selection); + } + + /** + * Returns the assignment's value + * + * @return string OS name + */ + public function value() + { + return WebClient::getOS(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/PHP.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/PHP.php new file mode 100644 index 00000000..43f4147c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/PHP.php @@ -0,0 +1,36 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class PHP extends Assignment +{ + /** + * Pass check Custom PHP + * + * @return bool + */ + public function pass() + { + return (bool) $this->value(); + } + + public function value() + { + // Enable buffer output + ob_start(); + $pass = $this->factory->getExecuter($this->selection)->run(); + ob_end_clean(); + + return $pass; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Pageviews.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Pageviews.php new file mode 100644 index 00000000..8543583f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Pageviews.php @@ -0,0 +1,69 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class Pageviews extends Assignment +{ + /** + * Check the number of pageviews + * + * @return bool + */ + public function pass() + { + if (is_null($this->params->views) || !is_numeric($this->params->views)) + { + return; + } + + $pageviews = intval($this->params->views); + $visits = $this->getVisits(); + $pass = false; + + switch ($this->selection) + { + case 'fewer': + $pass = $visits < $pageviews; + break; + case 'greater': + $pass = $visits > $pageviews; + break; + default: // 'exactly' + $pass = $visits === $pageviews; + break; + } + + return $pass; + } + + /** + * Returns the assignment's value + * + * @return int Number of page visits + */ + public function value() + { + return $this->getVisits(); + } + + /** + * Returns the number of page visits + * + * @return int + */ + public function getVisits() + { + return $this->factory->getSession()->get('session.counter', 0); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Referrer.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Referrer.php new file mode 100644 index 00000000..42d802c1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Referrer.php @@ -0,0 +1,43 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\URLBase; + +class Referrer extends URLBase +{ + /** + * Pass Referrer URL. + * + * @return bool Returns true if the Referrer URL contains any of the selection URLs + */ + public function pass() + { + // Make sure the referer server variable is available + if (!isset($_SERVER['HTTP_REFERER'])) + { + return; + } + + return $this->passURL($_SERVER['HTTP_REFERER']); + } + + /** + * Returns the assignment's value + * + * @return string Referrer URL + */ + public function value() + { + return $_SERVER['HTTP_REFERER']; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Region.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Region.php new file mode 100644 index 00000000..96f5c9db --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Region.php @@ -0,0 +1,57 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\GeoIPBase; + +class Region extends GeoIPBase +{ + /** + * Returns the assignment's value + * + * @return string Region codes + */ + public function value() + { + return $this->getRegionCodes(); + } + + /** + * Get list of all ISO 3611 Country Region Codes + * + * @return array + */ + private function getRegionCodes() + { + $regionCodes = []; + $record = $this->geo->getRecord(); + + if ($record === false || is_null($record)) + { + return $regionCodes; + } + + // Skip if no regions found + if (!$regions = $record->subdivisions) + { + return $regionCodes; + } + + foreach ($regions as $key => $region) + { + // Prepend country isocode to the region code + $regionCodes[] = $record->country->isoCode . '-' . $region->isoCode; + } + + return $regionCodes; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Time.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Time.php new file mode 100644 index 00000000..068bf6f1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/Time.php @@ -0,0 +1,49 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\DateTimeBase; + +class Time extends DateTimeBase +{ + /** + * If set to True, dates will be constructed with modified offset based on the passed timezone + * + * @var Boolean + */ + protected $modify_offset = false; + + /** + * Checks if current time passes the given time range + * + * @return bool + */ + public function pass() + { + $up = $this->date->format('Y-m-d', true) . ' ' . $this->params->publish_up; + $down = $this->date->format('Y-m-d', true) . ' ' . $this->params->publish_down; + + $up = $this->factory->getDate((string) $up, $this->tz); + $down = $this->factory->getDate((string) $down, $this->tz); + + return $this->checkRange($up, $down); + } + + /** + * Returns the assignment's value + * + * @return \Date Current date + */ + public function value() + { + return $this->date; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/TimeOnSite.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/TimeOnSite.php new file mode 100644 index 00000000..963aad99 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/TimeOnSite.php @@ -0,0 +1,89 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class TimeOnSite extends Assignment +{ + /** + * Pass - Check User's Time on Site + * + * @return bool + */ + public function pass() + { + $pass = false; + + $diffInSeconds = $this->getTimeOnSite(); + if (!$diffInSeconds) + { + return $pass; + } + + if (intval($this->selection) <= $diffInSeconds) + { + $pass = true; + } + + return $pass; + } + + /** + * Returns the assignment's value + * + * @return int Time on site in seconds + */ + public function value() + { + return $this->getTimeOnSite(); + } + + /** + * Returns the user's time on site in seconds + * + * @return int + */ + public function getTimeOnSite() + { + $sessionStartTime = strtotime($this->getSessionStartTime()); + + if (!$sessionStartTime) + { + return; + } + + $dateTimeNow = strtotime(\NRFramework\Functions::dateTimeNow()); + return $dateTimeNow - $sessionStartTime; + } + + /** + * Returns the sessions start time + * + * @return string + */ + private function getSessionStartTime() + { + $session = $this->factory->getSession(); + + $var = 'starttime'; + $sessionStartTime = $session->get($var); + + if (!$sessionStartTime) + { + $date = \NRFramework\Functions::dateTimeNow(); + $session->set($var, $date); + } + + return $session->get($var); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/URL.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/URL.php new file mode 100644 index 00000000..2a675092 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/URL.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignments\URLBase; + +class URL extends URLBase +{ + /** + * Pass URL. + * + * @return bool Returns true if the current URL contains any of the selection URLs + */ + public function pass() + { + return $this->passURL(); + } + + /** + * Returns the assignment's value + * + * @return string Current URL + */ + public function value() + { + return $this->factory->getURL(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/URLBase.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/URLBase.php new file mode 100644 index 00000000..b3ec59d6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/URLBase.php @@ -0,0 +1,92 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class URLBase extends Assignment +{ + /** + * Pass URL + * + * @param mixed $url If null, the current URL will be used. Otherwise we need a valid absolute URL. + * + * @return bool Returns true if the URL contains any of the selection URLs + */ + public function passURL($url = null) + { + // Get the current URL if none is passed + $url = is_null($url) ? $this->factory->getURL() : $url; + + // Create an array with all possible values of the URL + $urls = array( + html_entity_decode(urldecode($url), ENT_COMPAT, 'UTF-8'), + urldecode($url), + html_entity_decode($url, ENT_COMPAT, 'UTF-8'), + $url + ); + + // Remove duplicates and invalid URLs + $urls = array_filter(array_unique($urls)); + + // Validate Selection + if (!is_array($this->selection)) + { + $this->selection = $this->splitKeywords($this->selection); + } + + $regex = isset($this->params->regex) ? (bool)$this->params->regex : false; + $pass = false; + + foreach ($urls as $url) + { + foreach ($this->selection as $s) + { + // Skip empty selection URLs + $s = trim($s); + if (empty($s)) + { + continue; + } + + // Regular expression check + if ($regex) + { + $url_part = str_replace(array('#', '&'), array('\#', '(&|&)'), $s); + $s = '#' . $url_part . '#si'; + + if (@preg_match($s . 'u', $url) || @preg_match($s, $url)) + { + $pass = true; + break; + } + + continue; + } + + // String check + if (strpos($url, $s) !== false) + { + $pass = true; + break; + } + } + + if ($pass) + { + break; + } + } + + return $pass; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/UserID.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/UserID.php new file mode 100644 index 00000000..902ce0cf --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Assignments/UserID.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework\Assignments; + +defined('_JEXEC') or die; + +use NRFramework\Assignment; + +class UserID extends Assignment +{ + /** + * Check User ID + * + * @return bool + */ + public function pass() + { + $this->selection = is_array($this->selection) ? $this->selection : explode(',', $this->selection); + + // prepare an array(of ints) from the supplied IDs(string) + $ids = array_map('intval', array_map('trim', $this->selection)); + + if (in_array($this->user->id, $ids)) + { + return true; + } + + return false; + } + + /** + * Returns the assignment's value + * + * @return int User ID + */ + public function value() + { + return $this->user->id; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Cache.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Cache.php new file mode 100644 index 00000000..4129e704 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Cache.php @@ -0,0 +1,92 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +/** + * This file is deprecated. Use CacheManager instead of Cache. + */ + +namespace NRFramework; + +defined('_JEXEC') or die; + +use \NRFramework\CacheManager; +/** + * Caching mechanism + */ +class Cache +{ + /** + * Check if has alrady exists in memory + * + * @param string $hash The hash string + * + * @return boolean + */ + static public function has($hash) + { + $cache = CacheManager::getInstance(\JFactory::getCache('novarain', '')); + return $cache->has($hash); + } + + /** + * Returns hash value + * + * @param string $hash The hash string + * + * @return mixed False on error, Object on success + */ + static public function get($hash) + { + $cache = CacheManager::getInstance(\JFactory::getCache('novarain', '')); + return $cache->get($hash); + } + + /** + * Sets on memory the hash value + * + * @param string $hash The hash string + * @param mixed $data Can be string or object + * + * @return mixed + */ + static public function set($hash, $data) + { + $cache = CacheManager::getInstance(\JFactory::getCache('novarain', '')); + return $cache->set($hash, $data); + } + + /** + * Reads hash value from memory or file + * + * @param string $hash The hash string + * @param boolean $force If true, the filesystem will be used as well on the /cache/ folder + * + * @return mixed The hash object valuw + */ + static public function read($hash, $force = false) + { + $cache = CacheManager::getInstance(\JFactory::getCache('novarain', '')); + return $cache->read($hash, $force); + } + + /** + * Writes hash value in cache folder + * + * @param string $hash The hash string + * @param mixed $data Can be string or object + * @param integer $ttl Expiration duration in milliseconds + * + * @return mixed The hash object value + */ + static public function write($hash, $data, $ttl = 0) + { + $cache = CacheManager::getInstance(\JFactory::getCache('novarain', '')); + return $cache->write($hash, $data, $ttl); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/CacheManager.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/CacheManager.php new file mode 100644 index 00000000..85e94c01 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/CacheManager.php @@ -0,0 +1,142 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined('_JEXEC') or die; + +/** + * Cache Manager + * + * Singleton + */ +class CacheManager +{ + /** + * 'static' cache array + * @var array + */ + protected $cache = []; + + /** + * Cache mechanism object + * @var object + */ + protected $cache_mechanism = null; + + /** + * Construct + */ + protected function __construct($cache_mechanism) + { + $this->cache_mechanism = $cache_mechanism; + } + + static public function getInstance($cache_mechanism) + { + static $instance = null; + + if ($instance === null) + { + $instance = new CacheManager($cache_mechanism); + } + + return $instance; + } + + /** + * Check if a hash already exists in memory + * + * @param string $hash The hash string + * + * @return boolean + */ + public function has($hash) + { + return isset($this->cache[$hash]); + } + + /** + * Returns a hash's value + * + * @param string $hash The hash string + * + * @return mixed False on error, Object on success + */ + public function get($hash) + { + if (!$this->has($hash)) + { + return false; + } + + return is_object($this->cache[$hash]) ? clone $this->cache[$hash] : $this->cache[$hash]; + } + + /** + * Sets a hash value + * + * @param string $hash The hash string + * @param mixed $data Can be string or object + * + * @return mixed + */ + public function set($hash, $data) + { + $this->cache[$hash] = $data; + return $data; + } + + /** + * Reads a hash value from memory or file + * + * @param string $hash The hash string + * @param boolean $force If true, the filesystem will be used as well on the /cache/ folder + * + * @return mixed The hash object value + */ + public function read($hash, $force = false) + { + if ($this->has($hash)) + { + return $this->get($hash); + } + + if ($force) + { + $this->cache_mechanism->setCaching(true); + } + + return $this->cache_mechanism->get($hash); + } + + /** + * Writes hash value in cache folder + * + * @param string $hash The hash string + * @param mixed $data Can be string or object + * @param integer $ttl Expiration duration in milliseconds + * + * @return mixed The hash object value + */ + public function write($hash, $data, $ttl = 0) + { + if ($ttl) + { + $this->cache_mechanism->setLifeTime($ttl * 60); + } + + $this->cache_mechanism->setCaching(true); + $this->cache_mechanism->store($data, $hash); + + $this->set($hash, $data); + + return $data; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/ConditionBuilder.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/ConditionBuilder.php new file mode 100644 index 00000000..37a0d331 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/ConditionBuilder.php @@ -0,0 +1,93 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined('_JEXEC') or die; + +use NRFramework\Extension; + +class ConditionBuilder +{ + public static function render($id, $loadData = array(), $conditions_list = array()) + { + // Condition Builder relies on com_ajax for AJAX requests. + if (!Extension::componentIsEnabled('ajax')) + { + \JFactory::getApplication()->enqueueMessage(\JText::_('AJAX Component is not enabled.'), 'error'); + } + + // Initialize a new empty condition + if (empty($loadData)) + { + $loadData = [0 => ['']]; + } else + { + // Fix indexes + $loadData = array_values($loadData); + } + + $options = [ + 'id' => $id, + 'data' => $loadData, + 'conditions_list' => $conditions_list, + 'maxIndex' => count($loadData) - 1 + ]; + + return self::getLayout('conditionbuilder', $options); + } + + public static function add($controlGroup, $groupKey, $conditionKey, $condition = null, $conditions_list = array()) + { + $controlGroup_ = $controlGroup . "[$groupKey][$conditionKey]"; + $form = self::getForm('/conditionbuilder/base.xml', $controlGroup_, $condition); + $form->setFieldAttribute('name', 'conditions_list', is_array($conditions_list) ? implode(',', $conditions_list) : $conditions_list); + + $options = [ + 'toolbar' => $form, + 'conditionKey' => $conditionKey, + 'options' => '' + ]; + + if (isset($condition['name'])) + { + $optionsHTML = self::renderOptions($condition['name'], $controlGroup_, $condition); + $options['options'] = $optionsHTML; + } + + return self::getLayout('conditionbuilder_row', $options); + } + + public static function renderOptions($name, $controlGroup = null, $formData = null) + { + $form = self::getForm('/conditions/' . $name . '.xml', $controlGroup, $formData); + return $form->renderFieldset('general'); + } + + private static function getLayout($name, $data) + { + $layout = new \JLayoutFile($name, JPATH_PLUGINS . '/system/nrframework/layouts'); + return $layout->render($data); + } + + private static function getForm($name, $controlGroup, $data = null) + { + $form = new \JForm('cb', ['control' => $controlGroup]); + + $form->addFieldPath(JPATH_PLUGINS . '/system/nrframework/fields'); + $form->loadFile(JPATH_PLUGINS . '/system/nrframework/xml/' . $name); + + if (!is_null($data)) + { + $form->bind($data); + } + + return $form; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Continents.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Continents.php new file mode 100644 index 00000000..8cda8145 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Continents.php @@ -0,0 +1,54 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Helper class to work with continent names/codes + */ +class Continents +{ + /** + * Return a continent code from it's name + * + * @param string $cont + * @return string|void + */ + public static function getCode($cont) + { + $cont = \ucwords(strtolower($cont)); + foreach (self::getContinentsList() as $key => $value) + { + if (strpos($value, $cont) !== false) + { + return $key; + } + } + return null; + } + + /** + * Returns a list of continents + * + * @return array + */ + public static function getContinentsList() + { + return [ + 'AF' => \JText::_('NR_CONTINENT_AF'), + 'AS' => \JText::_('NR_CONTINENT_AS'), + 'EU' => \JText::_('NR_CONTINENT_EU'), + 'NA' => \JText::_('NR_CONTINENT_NA'), + 'SA' => \JText::_('NR_CONTINENT_SA'), + 'OC' => \JText::_('NR_CONTINENT_OC'), + 'AN' => \JText::_('NR_CONTINENT_AN'), + ]; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Countries.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Countries.php new file mode 100644 index 00000000..531c8a6e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Countries.php @@ -0,0 +1,596 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Helper class to work with country names/codes + */ +class Countries +{ + /** + * Countries List + * + * @deprecated: Use getCountriesData(); + * + * @const array + */ + public static $map = [ + 'AF' => "Afghanistan", + 'AX' => "Aland Islands", + 'AL' => "Albania", + 'DZ' => "Algeria", + 'AS' => "American Samoa", + 'AD' => "Andorra", + 'AO' => "Angola", + 'AI' => "Anguilla", + 'AQ' => "Antarctica", + 'AG' => "Antigua and Barbuda", + 'AR' => "Argentina", + 'AM' => "Armenia", + 'AW' => "Aruba", + 'AU' => "Australia", + 'AT' => "Austria", + 'AZ' => "Azerbaijan", + 'BS' => "Bahamas", + 'BH' => "Bahrain", + 'BD' => "Bangladesh", + 'BB' => "Barbados", + 'BY' => "Belarus", + 'BE' => "Belgium", + 'BZ' => "Belize", + 'BJ' => "Benin", + 'BM' => "Bermuda", + 'BQ-BO' => "Bonaire", + 'BQ-SA' => "Saba", + 'BQ-SE' => "Sint Eustatius", + 'BT' => "Bhutan", + 'BO' => "Bolivia", + 'BA' => "Bosnia and Herzegovina", + 'BW' => "Botswana", + 'BV' => "Bouvet Island", + 'BR' => "Brazil", + 'IO' => "British Indian Ocean Territory", + 'BN' => "Brunei Darussalam", + 'BG' => "Bulgaria", + 'BF' => "Burkina Faso", + 'BI' => "Burundi", + 'KH' => "Cambodia", + 'CM' => "Cameroon", + 'CA' => "Canada", + 'CV' => "Cape Verde", + 'KY' => "Cayman Islands", + 'CF' => "Central African Republic", + 'TD' => "Chad", + 'CL' => "Chile", + 'CN' => "China", + 'CX' => "Christmas Island", + 'CC' => "Cocos (Keeling) Islands", + 'CO' => "Colombia", + 'KM' => "Comoros", + 'CG' => "Congo", + 'CD' => "Congo, The Democratic Republic of the", + 'CK' => "Cook Islands", + 'CR' => "Costa Rica", + 'CI' => "Cote d'Ivoire", + 'HR' => "Croatia", + 'CU' => "Cuba", + 'CW' => "Curaçao", + 'CY' => "Cyprus", + 'CZ' => "Czech Republic", + 'DK' => "Denmark", + 'DJ' => "Djibouti", + 'DM' => "Dominica", + 'DO' => "Dominican Republic", + 'EC' => "Ecuador", + 'EG' => "Egypt", + 'SV' => "El Salvador", + 'GQ' => "Equatorial Guinea", + 'ER' => "Eritrea", + 'EE' => "Estonia", + 'ET' => "Ethiopia", + 'FK' => "Falkland Islands (Malvinas)", + 'FO' => "Faroe Islands", + 'FJ' => "Fiji", + 'FI' => "Finland", + 'FR' => "France", + 'GF' => "French Guiana", + 'PF' => "French Polynesia", + 'TF' => "French Southern Territories", + 'GA' => "Gabon", + 'GM' => "Gambia", + 'GE' => "Georgia", + 'DE' => "Germany", + 'GH' => "Ghana", + 'GI' => "Gibraltar", + 'GR' => "Greece", + 'GL' => "Greenland", + 'GD' => "Grenada", + 'GP' => "Guadeloupe", + 'GU' => "Guam", + 'GT' => "Guatemala", + 'GG' => "Guernsey", + 'GN' => "Guinea", + 'GW' => "Guinea-Bissau", + 'GY' => "Guyana", + 'HT' => "Haiti", + 'HM' => "Heard Island and McDonald Islands", + 'VA' => "Holy See (Vatican City State)", + 'HN' => "Honduras", + 'HK' => "Hong Kong", + 'HU' => "Hungary", + 'IS' => "Iceland", + 'IN' => "India", + 'ID' => "Indonesia", + 'IR' => "Iran, Islamic Republic of", + 'IQ' => "Iraq", + 'IE' => "Ireland", + 'IM' => "Isle of Man", + 'IL' => "Israel", + 'IT' => "Italy", + 'JM' => "Jamaica", + 'JP' => "Japan", + 'JE' => "Jersey", + 'JO' => "Jordan", + 'KZ' => "Kazakhstan", + 'KE' => "Kenya", + 'KI' => "Kiribati", + 'KP' => "Korea, Democratic People's Republic of", + 'KR' => "Korea, Republic of", + 'KW' => "Kuwait", + 'KG' => "Kyrgyzstan", + 'LA' => "Lao People's Democratic Republic", + 'LV' => "Latvia", + 'LB' => "Lebanon", + 'LS' => "Lesotho", + 'LR' => "Liberia", + 'LY' => "Libyan Arab Jamahiriya", + 'LI' => "Liechtenstein", + 'LT' => "Lithuania", + 'LU' => "Luxembourg", + 'MO' => "Macao", + 'MK' => "Macedonia", + 'MG' => "Madagascar", + 'MW' => "Malawi", + 'MY' => "Malaysia", + 'MV' => "Maldives", + 'ML' => "Mali", + 'MT' => "Malta", + 'MH' => "Marshall Islands", + 'MQ' => "Martinique", + 'MR' => "Mauritania", + 'MU' => "Mauritius", + 'YT' => "Mayotte", + 'MX' => "Mexico", + 'FM' => "Micronesia, Federated States of", + 'MD' => "Moldova, Republic of", + 'MC' => "Monaco", + 'MN' => "Mongolia", + 'ME' => "Montenegro", + 'MS' => "Montserrat", + 'MA' => "Morocco", + 'MZ' => "Mozambique", + 'MM' => "Myanmar", + 'NA' => "Namibia", + 'NR' => "Nauru", + 'NP' => "Nepal", + 'NL' => "Netherlands", + 'AN' => "Netherlands Antilles", + 'NC' => "New Caledonia", + 'NZ' => "New Zealand", + 'NI' => "Nicaragua", + 'NE' => "Niger", + 'NG' => "Nigeria", + 'NU' => "Niue", + 'NF' => "Norfolk Island", + 'NM' => "North Macedonia", + 'MP' => "Northern Mariana Islands", + 'NO' => "Norway", + 'OM' => "Oman", + 'PK' => "Pakistan", + 'PW' => "Palau", + 'PS' => "Palestinian Territory", + 'PA' => "Panama", + 'PG' => "Papua New Guinea", + 'PY' => "Paraguay", + 'PE' => "Peru", + 'PH' => "Philippines", + 'PN' => "Pitcairn", + 'PL' => "Poland", + 'PT' => "Portugal", + 'PR' => "Puerto Rico", + 'QA' => "Qatar", + 'RE' => "Reunion", + 'RO' => "Romania", + 'RU' => "Russian Federation", + 'RW' => "Rwanda", + 'SH' => "Saint Helena", + 'KN' => "Saint Kitts and Nevis", + 'LC' => "Saint Lucia", + 'PM' => "Saint Pierre and Miquelon", + 'VC' => "Saint Vincent and the Grenadines", + 'WS' => "Samoa", + 'SM' => "San Marino", + 'ST' => "Sao Tome and Principe", + 'SA' => "Saudi Arabia", + 'SN' => "Senegal", + 'RS' => "Serbia", + 'SC' => "Seychelles", + 'SL' => "Sierra Leone", + 'SG' => "Singapore", + 'SK' => "Slovakia", + 'SI' => "Slovenia", + 'SB' => "Solomon Islands", + 'SO' => "Somalia", + 'ZA' => "South Africa", + 'GS' => "South Georgia and the South Sandwich Islands", + 'ES' => "Spain", + 'LK' => "Sri Lanka", + 'SD' => "Sudan", + 'SS' => "South Sudan", + 'SR' => "Suriname", + 'SJ' => "Svalbard and Jan Mayen", + 'SZ' => "Swaziland", + 'SE' => "Sweden", + 'CH' => "Switzerland", + 'SY' => "Syrian Arab Republic", + 'TW' => "Taiwan", + 'TJ' => "Tajikistan", + 'TZ' => "Tanzania, United Republic of", + 'TH' => "Thailand", + 'TL' => "Timor-Leste", + 'TG' => "Togo", + 'TK' => "Tokelau", + 'TO' => "Tonga", + 'TT' => "Trinidad and Tobago", + 'TN' => "Tunisia", + 'TR' => "Turkey", + 'TM' => "Turkmenistan", + 'TC' => "Turks and Caicos Islands", + 'TV' => "Tuvalu", + 'UG' => "Uganda", + 'UA' => "Ukraine", + 'AE' => "United Arab Emirates", + 'GB' => "United Kingdom", + 'US' => "United States", + 'UM' => "United States Minor Outlying Islands", + 'UY' => "Uruguay", + 'UZ' => "Uzbekistan", + 'VU' => "Vanuatu", + 'VE' => "Venezuela", + 'VN' => "Vietnam", + 'VG' => "Virgin Islands, British", + 'VI' => "Virgin Islands, U.S.", + 'WF' => "Wallis and Futuna", + 'EH' => "Western Sahara", + 'YE' => "Yemen", + 'ZM' => "Zambia", + 'ZW' => "Zimbabwe", + ]; + + /** + * Get information for given country + * + * @param string $countryCode + * + * @return array An assosiative array with country information + */ + public static function getCountry($countryCode) + { + $countries = self::getCountriesData(); + $countryCode = \strtoupper($countryCode); + + if (!isset($countries[$countryCode])) + { + return; + } + + return $countries[$countryCode]; + } + + /** + * Return a country code from it's name + * + * @param string $country + * @return string|void + */ + public static function getCode($country) + { + $country = \ucwords(strtolower($country)); + foreach (self::getCountriesList() as $key => $value) + { + if (strpos($value, $country) !== false) + { + return $key; + } + } + return null; + } + + /** + * Returns translatable countries list + * + * @return array + */ + public static function getCountriesList() + { + $countries = []; + + foreach (self::getCountriesData() as $key => $country) + { + $countries[$key] = $country['name']; + } + + return $countries; + } + + /** + * Holds the following data for each country: + * - Name + * - Code + * - Calling Code + * - Currency Code + * - Curency Name + * - Currency Symbol + * + * @return array + */ + public static function getCountriesData() + { + return [ + 'AF' => [ 'name' => \JText::_('NR_COUNTRY_AF'), 'calling_code' => '93', 'currency_code' => 'AFN', 'currency_name' => 'Afghan Afghani', 'currency_symbol' => '؋' ], + 'AX' => [ 'name' => \JText::_('NR_COUNTRY_AX'), 'calling_code' => '35818', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'AL' => [ 'name' => \JText::_('NR_COUNTRY_AL'), 'calling_code' => '355', 'currency_code' => 'ALL', 'currency_name' => 'Lek', 'currency_symbol' => 'Lek' ], + 'DZ' => [ 'name' => \JText::_('NR_COUNTRY_DZ'), 'calling_code' => '213', 'currency_code' => 'DZD', 'currency_name' => 'Dinar', 'currency_symbol' => 'دج' ], + 'AS' => [ 'name' => \JText::_('NR_COUNTRY_AS'), 'calling_code' => '1684', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'AD' => [ 'name' => \JText::_('NR_COUNTRY_AD'), 'calling_code' => '376', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'AO' => [ 'name' => \JText::_('NR_COUNTRY_AO'), 'calling_code' => '244', 'currency_code' => 'AOA', 'currency_name' => 'Kwanza', 'currency_symbol' => 'Kz' ], + 'AI' => [ 'name' => \JText::_('NR_COUNTRY_AI'), 'calling_code' => '1264', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'AQ' => [ 'name' => \JText::_('NR_COUNTRY_AQ'), 'calling_code' => '672', 'currency_code' => '', 'currency_name' => '', 'currency_symbol' => '' ], + 'AG' => [ 'name' => \JText::_('NR_COUNTRY_AG'), 'calling_code' => '1268', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'AR' => [ 'name' => \JText::_('NR_COUNTRY_AR'), 'calling_code' => '54', 'currency_code' => 'ARS', 'currency_name' => 'Peso', 'currency_symbol' => '$' ], + 'AM' => [ 'name' => \JText::_('NR_COUNTRY_AM'), 'calling_code' => '374', 'currency_code' => 'AMD', 'currency_name' => 'Dram', 'currency_symbol' => '֏' ], + 'AW' => [ 'name' => \JText::_('NR_COUNTRY_AW'), 'calling_code' => '297', 'currency_code' => 'AWG', 'currency_name' => 'Guilder', 'currency_symbol' => 'ƒ' ], + 'AU' => [ 'name' => \JText::_('NR_COUNTRY_AU'), 'calling_code' => '61', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'AT' => [ 'name' => \JText::_('NR_COUNTRY_AT'), 'calling_code' => '43', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'AZ' => [ 'name' => \JText::_('NR_COUNTRY_AZ'), 'calling_code' => '994', 'currency_code' => 'AZN', 'currency_name' => 'Manat', 'currency_symbol' => 'ман' ], + 'BS' => [ 'name' => \JText::_('NR_COUNTRY_BS'), 'calling_code' => '1242', 'currency_code' => 'BSD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BH' => [ 'name' => \JText::_('NR_COUNTRY_BH'), 'calling_code' => '973', 'currency_code' => 'BHD', 'currency_name' => 'Dinar', 'currency_symbol' => 'د.ب' ], + 'BD' => [ 'name' => \JText::_('NR_COUNTRY_BD'), 'calling_code' => '880', 'currency_code' => 'BDT', 'currency_name' => 'Taka', 'currency_symbol' => '৳' ], + 'BB' => [ 'name' => \JText::_('NR_COUNTRY_BB'), 'calling_code' => '1246', 'currency_code' => 'BBD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BY' => [ 'name' => \JText::_('NR_COUNTRY_BY'), 'calling_code' => '375', 'currency_code' => 'BYR', 'currency_name' => 'Ruble', 'currency_symbol' => 'p.' ], + 'BE' => [ 'name' => \JText::_('NR_COUNTRY_BE'), 'calling_code' => '32', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'BZ' => [ 'name' => \JText::_('NR_COUNTRY_BZ'), 'calling_code' => '501', 'currency_code' => 'BZD', 'currency_name' => 'Dollar', 'currency_symbol' => 'BZ$' ], + 'BJ' => [ 'name' => \JText::_('NR_COUNTRY_BJ'), 'calling_code' => '229', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'BM' => [ 'name' => \JText::_('NR_COUNTRY_BM'), 'calling_code' => '1441', 'currency_code' => 'BMD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BQ-BO' => [ 'name' => \JText::_('NR_COUNTRY_BQ_BO'), 'calling_code' => '599-7', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BQ-SA' => [ 'name' => \JText::_('NR_COUNTRY_BQ_SA'), 'calling_code' => '599-4', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BQ-SE' => [ 'name' => \JText::_('NR_COUNTRY_BQ_SE'), 'calling_code' => '599-3', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BT' => [ 'name' => \JText::_('NR_COUNTRY_BT'), 'calling_code' => '975', 'currency_code' => 'BTN', 'currency_name' => 'Ngultrum', 'currency_symbol' => 'Nu.' ], + 'BO' => [ 'name' => \JText::_('NR_COUNTRY_BO'), 'calling_code' => '591', 'currency_code' => 'BOB', 'currency_name' => 'Boliviano', 'currency_symbol' => '$b' ], + 'BA' => [ 'name' => \JText::_('NR_COUNTRY_BA'), 'calling_code' => '387', 'currency_code' => 'BAM', 'currency_name' => 'Marka', 'currency_symbol' => 'KM' ], + 'BW' => [ 'name' => \JText::_('NR_COUNTRY_BW'), 'calling_code' => '267', 'currency_code' => 'BWP', 'currency_name' => 'Pula', 'currency_symbol' => 'P' ], + 'BV' => [ 'name' => \JText::_('NR_COUNTRY_BV'), 'calling_code' => '', 'currency_code' => 'NOK', 'currency_name' => 'Krone', 'currency_symbol' => 'kr' ], + 'BR' => [ 'name' => \JText::_('NR_COUNTRY_BR'), 'calling_code' => '55', 'currency_code' => 'BRL', 'currency_name' => 'Real', 'currency_symbol' => 'R$' ], + 'IO' => [ 'name' => \JText::_('NR_COUNTRY_IO'), 'calling_code' => '', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'VG' => [ 'name' => \JText::_('NR_COUNTRY_VG'), 'calling_code' => '1284', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BN' => [ 'name' => \JText::_('NR_COUNTRY_BN'), 'calling_code' => '673', 'currency_code' => 'BND', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'BG' => [ 'name' => \JText::_('NR_COUNTRY_BG'), 'calling_code' => '359', 'currency_code' => 'BGN', 'currency_name' => 'Lev', 'currency_symbol' => 'лв' ], + 'BF' => [ 'name' => \JText::_('NR_COUNTRY_BF'), 'calling_code' => '226', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'BI' => [ 'name' => \JText::_('NR_COUNTRY_BI'), 'calling_code' => '257', 'currency_code' => 'BIF', 'currency_name' => 'Franc', 'currency_symbol' => 'FBu' ], + 'KH' => [ 'name' => \JText::_('NR_COUNTRY_KH'), 'calling_code' => '855', 'currency_code' => 'KHR', 'currency_name' => 'Riels', 'currency_symbol' => '៛' ], + 'CM' => [ 'name' => \JText::_('NR_COUNTRY_CM'), 'calling_code' => '237', 'currency_code' => 'XAF', 'currency_name' => 'Franc', 'currency_symbol' => 'FCF' ], + 'CA' => [ 'name' => \JText::_('NR_COUNTRY_CA'), 'calling_code' => '1', 'currency_code' => 'CAD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'CV' => [ 'name' => \JText::_('NR_COUNTRY_CV'), 'calling_code' => '238', 'currency_code' => 'CVE', 'currency_name' => 'Escudo', 'currency_symbol' => '$' ], + 'KY' => [ 'name' => \JText::_('NR_COUNTRY_KY'), 'calling_code' => '1345', 'currency_code' => 'KYD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'CF' => [ 'name' => \JText::_('NR_COUNTRY_CF'), 'calling_code' => '236', 'currency_code' => 'XAF', 'currency_name' => 'Franc', 'currency_symbol' => 'FCF' ], + 'TD' => [ 'name' => \JText::_('NR_COUNTRY_TD'), 'calling_code' => '235', 'currency_code' => 'XAF', 'currency_name' => 'Franc', 'currency_symbol' => 'FCFA' ], + 'CL' => [ 'name' => \JText::_('NR_COUNTRY_CL'), 'calling_code' => '56', 'currency_code' => 'CLP', 'currency_name' => 'Peso', 'currency_symbol' => '$' ], + 'CN' => [ 'name' => \JText::_('NR_COUNTRY_CN'), 'calling_code' => '86', 'currency_code' => 'CNY', 'currency_name' => 'YuanRenminbi', 'currency_symbol' => '¥' ], + 'CX' => [ 'name' => \JText::_('NR_COUNTRY_CX'), 'calling_code' => '61', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'CC' => [ 'name' => \JText::_('NR_COUNTRY_CC'), 'calling_code' => '61', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'CO' => [ 'name' => \JText::_('NR_COUNTRY_CO'), 'calling_code' => '57', 'currency_code' => 'COP', 'currency_name' => 'Peso', 'currency_symbol' => '$' ], + 'KM' => [ 'name' => \JText::_('NR_COUNTRY_KM'), 'calling_code' => '269', 'currency_code' => 'KMF', 'currency_name' => 'Franc', 'currency_symbol' => 'CF' ], + 'CK' => [ 'name' => \JText::_('NR_COUNTRY_CK'), 'calling_code' => '682', 'currency_code' => 'NZD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'CR' => [ 'name' => \JText::_('NR_COUNTRY_CR'), 'calling_code' => '506', 'currency_code' => 'CRC', 'currency_name' => 'Colon', 'currency_symbol' => '₡' ], + 'HR' => [ 'name' => \JText::_('NR_COUNTRY_HR'), 'calling_code' => '385', 'currency_code' => 'HRK', 'currency_name' => 'Kuna', 'currency_symbol' => 'kn' ], + 'CU' => [ 'name' => \JText::_('NR_COUNTRY_CU'), 'calling_code' => '53', 'currency_code' => 'CUP', 'currency_name' => 'Peso', 'currency_symbol' => '₱' ], + 'CW' => [ 'name' => \JText::_('NR_COUNTRY_CW'), 'calling_code' => '5999', 'currency_code' => 'ANG', 'currency_name' => 'Guilder', 'currency_symbol' => 'ƒ' ], + 'CY' => [ 'name' => \JText::_('NR_COUNTRY_CY'), 'calling_code' => '357', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'CZ' => [ 'name' => \JText::_('NR_COUNTRY_CZ'), 'calling_code' => '420', 'currency_code' => 'CZK', 'currency_name' => 'Koruna', 'currency_symbol' => 'Kč' ], + 'CD' => [ 'name' => \JText::_('NR_COUNTRY_CD'), 'calling_code' => '243', 'currency_code' => 'CDF', 'currency_name' => 'Franc', 'currency_symbol' => 'FC' ], + 'DK' => [ 'name' => \JText::_('NR_COUNTRY_DK'), 'calling_code' => '45', 'currency_code' => 'DKK', 'currency_name' => 'Krone', 'currency_symbol' => 'kr' ], + 'DJ' => [ 'name' => \JText::_('NR_COUNTRY_DJ'), 'calling_code' => '253', 'currency_code' => 'DJF', 'currency_name' => 'Franc', 'currency_symbol' => 'Fdj' ], + 'DM' => [ 'name' => \JText::_('NR_COUNTRY_DM'), 'calling_code' => '1767', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'DO' => [ 'name' => \JText::_('NR_COUNTRY_DO'), 'calling_code' => '1809', 'currency_code' => 'DOP', 'currency_name' => 'Peso', 'currency_symbol' => 'RD$' ], + 'TL' => [ 'name' => \JText::_('NR_COUNTRY_TL'), 'calling_code' => '670', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'EC' => [ 'name' => \JText::_('NR_COUNTRY_EC'), 'calling_code' => '593', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'EG' => [ 'name' => \JText::_('NR_COUNTRY_EG'), 'calling_code' => '20', 'currency_code' => 'EGP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'SV' => [ 'name' => \JText::_('NR_COUNTRY_SV'), 'calling_code' => '503', 'currency_code' => 'SVC', 'currency_name' => 'Colone', 'currency_symbol' => '$' ], + 'GQ' => [ 'name' => \JText::_('NR_COUNTRY_GQ'), 'calling_code' => '240', 'currency_code' => 'XAF', 'currency_name' => 'Franc', 'currency_symbol' => 'FCF' ], + 'ER' => [ 'name' => \JText::_('NR_COUNTRY_ER'), 'calling_code' => '291', 'currency_code' => 'ERN', 'currency_name' => 'Nakfa', 'currency_symbol' => 'Nfk' ], + 'EE' => [ 'name' => \JText::_('NR_COUNTRY_EE'), 'calling_code' => '372', 'currency_code' => 'EEK', 'currency_name' => 'Kroon', 'currency_symbol' => 'kr' ], + 'ET' => [ 'name' => \JText::_('NR_COUNTRY_ET'), 'calling_code' => '251', 'currency_code' => 'ETB', 'currency_name' => 'Birr', 'currency_symbol' => 'Br' ], + 'FK' => [ 'name' => \JText::_('NR_COUNTRY_FK'), 'calling_code' => '500', 'currency_code' => 'FKP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'FO' => [ 'name' => \JText::_('NR_COUNTRY_FO'), 'calling_code' => '298', 'currency_code' => 'DKK', 'currency_name' => 'Krone', 'currency_symbol' => 'kr' ], + 'FJ' => [ 'name' => \JText::_('NR_COUNTRY_FJ'), 'calling_code' => '679', 'currency_code' => 'FJD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'FI' => [ 'name' => \JText::_('NR_COUNTRY_FI'), 'calling_code' => '358', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'FR' => [ 'name' => \JText::_('NR_COUNTRY_FR'), 'calling_code' => '33', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'GF' => [ 'name' => \JText::_('NR_COUNTRY_GF'), 'calling_code' => '594', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'PF' => [ 'name' => \JText::_('NR_COUNTRY_PF'), 'calling_code' => '689', 'currency_code' => 'XPF', 'currency_name' => 'Franc', 'currency_symbol' => 'F' ], + 'TF' => [ 'name' => \JText::_('NR_COUNTRY_TF'), 'calling_code' => '262', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'GA' => [ 'name' => \JText::_('NR_COUNTRY_GA'), 'calling_code' => '241', 'currency_code' => 'XAF', 'currency_name' => 'Franc', 'currency_symbol' => 'FCF' ], + 'GM' => [ 'name' => \JText::_('NR_COUNTRY_GM'), 'calling_code' => '220', 'currency_code' => 'GMD', 'currency_name' => 'Dalasi', 'currency_symbol' => 'D' ], + 'GE' => [ 'name' => \JText::_('NR_COUNTRY_GE'), 'calling_code' => '995', 'currency_code' => 'GEL', 'currency_name' => 'Lari', 'currency_symbol' => '₾' ], + 'DE' => [ 'name' => \JText::_('NR_COUNTRY_DE'), 'calling_code' => '49', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'GH' => [ 'name' => \JText::_('NR_COUNTRY_GH'), 'calling_code' => '233', 'currency_code' => 'GHC', 'currency_name' => 'Cedi', 'currency_symbol' => '¢' ], + 'GI' => [ 'name' => \JText::_('NR_COUNTRY_GI'), 'calling_code' => '350', 'currency_code' => 'GIP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'GR' => [ 'name' => \JText::_('NR_COUNTRY_GR'), 'calling_code' => '30', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'GL' => [ 'name' => \JText::_('NR_COUNTRY_GL'), 'calling_code' => '299', 'currency_code' => 'DKK', 'currency_name' => 'Krone', 'currency_symbol' => 'kr' ], + 'GD' => [ 'name' => \JText::_('NR_COUNTRY_GD'), 'calling_code' => '1473', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'GP' => [ 'name' => \JText::_('NR_COUNTRY_GP'), 'calling_code' => '590', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'GU' => [ 'name' => \JText::_('NR_COUNTRY_GU'), 'calling_code' => '1671', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'GT' => [ 'name' => \JText::_('NR_COUNTRY_GT'), 'calling_code' => '502', 'currency_code' => 'GTQ', 'currency_name' => 'Quetzal', 'currency_symbol' => 'Q' ], + 'GN' => [ 'name' => \JText::_('NR_COUNTRY_GN'), 'calling_code' => '224', 'currency_code' => 'GNF', 'currency_name' => 'Franc', 'currency_symbol' => 'FG' ], + 'GW' => [ 'name' => \JText::_('NR_COUNTRY_GW'), 'calling_code' => '245', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'GY' => [ 'name' => \JText::_('NR_COUNTRY_GY'), 'calling_code' => '592', 'currency_code' => 'GYD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'HT' => [ 'name' => \JText::_('NR_COUNTRY_HT'), 'calling_code' => '509', 'currency_code' => 'HTG', 'currency_name' => 'Gourde', 'currency_symbol' => 'G' ], + 'HM' => [ 'name' => \JText::_('NR_COUNTRY_HM'), 'calling_code' => '', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'HN' => [ 'name' => \JText::_('NR_COUNTRY_HN'), 'calling_code' => '504', 'currency_code' => 'HNL', 'currency_name' => 'Lempira', 'currency_symbol' => 'L' ], + 'HK' => [ 'name' => \JText::_('NR_COUNTRY_HK'), 'calling_code' => '852', 'currency_code' => 'HKD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'HU' => [ 'name' => \JText::_('NR_COUNTRY_HU'), 'calling_code' => '36', 'currency_code' => 'HUF', 'currency_name' => 'Forint', 'currency_symbol' => 'Ft' ], + 'IS' => [ 'name' => \JText::_('NR_COUNTRY_IS'), 'calling_code' => '354', 'currency_code' => 'ISK', 'currency_name' => 'Krona', 'currency_symbol' => 'kr' ], + 'IN' => [ 'name' => \JText::_('NR_COUNTRY_IN'), 'calling_code' => '91', 'currency_code' => 'INR', 'currency_name' => 'Rupee', 'currency_symbol' => '₹' ], + 'ID' => [ 'name' => \JText::_('NR_COUNTRY_ID'), 'calling_code' => '62', 'currency_code' => 'IDR', 'currency_name' => 'Rupiah', 'currency_symbol' => 'Rp' ], + 'IR' => [ 'name' => \JText::_('NR_COUNTRY_IR'), 'calling_code' => '98', 'currency_code' => 'IRR', 'currency_name' => 'Rial', 'currency_symbol' => '﷼' ], + 'IQ' => [ 'name' => \JText::_('NR_COUNTRY_IQ'), 'calling_code' => '964', 'currency_code' => 'IQD', 'currency_name' => 'Dinar', 'currency_symbol' => 'د.ع' ], + 'IE' => [ 'name' => \JText::_('NR_COUNTRY_IE'), 'calling_code' => '353', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'IM' => [ 'name' => \JText::_('NR_COUNTRY_IM'), 'calling_code' => '44', 'currency_code' => 'GBP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'IL' => [ 'name' => \JText::_('NR_COUNTRY_IL'), 'calling_code' => '972', 'currency_code' => 'ILS', 'currency_name' => 'Shekel', 'currency_symbol' => '₪' ], + 'IT' => [ 'name' => \JText::_('NR_COUNTRY_IT'), 'calling_code' => '39', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'CI' => [ 'name' => \JText::_('NR_COUNTRY_CI'), 'calling_code' => '225', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'JM' => [ 'name' => \JText::_('NR_COUNTRY_JM'), 'calling_code' => '1876', 'currency_code' => 'JMD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'JP' => [ 'name' => \JText::_('NR_COUNTRY_JP'), 'calling_code' => '81', 'currency_code' => 'JPY', 'currency_name' => 'Yen', 'currency_symbol' => '¥' ], + 'JO' => [ 'name' => \JText::_('NR_COUNTRY_JO'), 'calling_code' => '962', 'currency_code' => 'JOD', 'currency_name' => 'Dinar', 'currency_symbol' => 'د.أ' ], + 'KZ' => [ 'name' => \JText::_('NR_COUNTRY_KZ'), 'calling_code' => '7', 'currency_code' => 'KZT', 'currency_name' => 'Tenge', 'currency_symbol' => 'лв' ], + 'KE' => [ 'name' => \JText::_('NR_COUNTRY_KE'), 'calling_code' => '254', 'currency_code' => 'KES', 'currency_name' => 'Shilling', 'currency_symbol' => 'KSh' ], + 'KI' => [ 'name' => \JText::_('NR_COUNTRY_KI'), 'calling_code' => '686', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'KW' => [ 'name' => \JText::_('NR_COUNTRY_KW'), 'calling_code' => '965', 'currency_code' => 'KWD', 'currency_name' => 'Dinar', 'currency_symbol' => 'د.ك' ], + 'KG' => [ 'name' => \JText::_('NR_COUNTRY_KG'), 'calling_code' => '996', 'currency_code' => 'KGS', 'currency_name' => 'Som', 'currency_symbol' => 'лв' ], + 'LA' => [ 'name' => \JText::_('NR_COUNTRY_LA'), 'calling_code' => '856', 'currency_code' => 'LAK', 'currency_name' => 'Kip', 'currency_symbol' => '₭' ], + 'LV' => [ 'name' => \JText::_('NR_COUNTRY_LV'), 'calling_code' => '371', 'currency_code' => 'LVL', 'currency_name' => 'Lat', 'currency_symbol' => 'Ls' ], + 'LB' => [ 'name' => \JText::_('NR_COUNTRY_LB'), 'calling_code' => '961', 'currency_code' => 'LBP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'LS' => [ 'name' => \JText::_('NR_COUNTRY_LS'), 'calling_code' => '266', 'currency_code' => 'LSL', 'currency_name' => 'Loti', 'currency_symbol' => 'L' ], + 'LR' => [ 'name' => \JText::_('NR_COUNTRY_LR'), 'calling_code' => '231', 'currency_code' => 'LRD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'LY' => [ 'name' => \JText::_('NR_COUNTRY_LY'), 'calling_code' => '218', 'currency_code' => 'LYD', 'currency_name' => 'Dinar', 'currency_symbol' => 'ل.د' ], + 'LI' => [ 'name' => \JText::_('NR_COUNTRY_LI'), 'calling_code' => '423', 'currency_code' => 'CHF', 'currency_name' => 'Franc', 'currency_symbol' => 'CHF' ], + 'LT' => [ 'name' => \JText::_('NR_COUNTRY_LT'), 'calling_code' => '370', 'currency_code' => 'LTL', 'currency_name' => 'Litas', 'currency_symbol' => 'Lt' ], + 'LU' => [ 'name' => \JText::_('NR_COUNTRY_LU'), 'calling_code' => '352', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'MO' => [ 'name' => \JText::_('NR_COUNTRY_MO'), 'calling_code' => '853', 'currency_code' => 'MOP', 'currency_name' => 'Pataca', 'currency_symbol' => 'MOP' ], + 'MK' => [ 'name' => \JText::_('NR_COUNTRY_MK'), 'calling_code' => '389', 'currency_code' => 'MKD', 'currency_name' => 'Denar', 'currency_symbol' => 'ден' ], + 'MG' => [ 'name' => \JText::_('NR_COUNTRY_MG'), 'calling_code' => '261', 'currency_code' => 'MGA', 'currency_name' => 'Ariary', 'currency_symbol' => 'Ar' ], + 'MW' => [ 'name' => \JText::_('NR_COUNTRY_MW'), 'calling_code' => '265', 'currency_code' => 'MWK', 'currency_name' => 'Kwacha', 'currency_symbol' => 'MK' ], + 'MY' => [ 'name' => \JText::_('NR_COUNTRY_MY'), 'calling_code' => '60', 'currency_code' => 'MYR', 'currency_name' => 'Ringgit', 'currency_symbol' => 'RM' ], + 'MV' => [ 'name' => \JText::_('NR_COUNTRY_MV'), 'calling_code' => '960', 'currency_code' => 'MVR', 'currency_name' => 'Rufiyaa', 'currency_symbol' => 'Rf' ], + 'ML' => [ 'name' => \JText::_('NR_COUNTRY_ML'), 'calling_code' => '223', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'MT' => [ 'name' => \JText::_('NR_COUNTRY_MT'), 'calling_code' => '356', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'MH' => [ 'name' => \JText::_('NR_COUNTRY_MH'), 'calling_code' => '692', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'MQ' => [ 'name' => \JText::_('NR_COUNTRY_MQ'), 'calling_code' => '596', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'MR' => [ 'name' => \JText::_('NR_COUNTRY_MR'), 'calling_code' => '222', 'currency_code' => 'MRO', 'currency_name' => 'Ouguiya', 'currency_symbol' => 'UM' ], + 'MU' => [ 'name' => \JText::_('NR_COUNTRY_MU'), 'calling_code' => '230', 'currency_code' => 'MUR', 'currency_name' => 'Rupee', 'currency_symbol' => '₨' ], + 'YT' => [ 'name' => \JText::_('NR_COUNTRY_YT'), 'calling_code' => '262', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'MX' => [ 'name' => \JText::_('NR_COUNTRY_MX'), 'calling_code' => '52', 'currency_code' => 'MXN', 'currency_name' => 'Peso', 'currency_symbol' => '$' ], + 'FM' => [ 'name' => \JText::_('NR_COUNTRY_FM'), 'calling_code' => '691', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'MD' => [ 'name' => \JText::_('NR_COUNTRY_MD'), 'calling_code' => '373', 'currency_code' => 'MDL', 'currency_name' => 'Leu', 'currency_symbol' => 'L' ], + 'MC' => [ 'name' => \JText::_('NR_COUNTRY_MC'), 'calling_code' => '377', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'MN' => [ 'name' => \JText::_('NR_COUNTRY_MN'), 'calling_code' => '976', 'currency_code' => 'MNT', 'currency_name' => 'Tugrik', 'currency_symbol' => '₮' ], + 'ME' => [ 'name' => \JText::_('NR_COUNTRY_ME'), 'calling_code' => '382', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'MS' => [ 'name' => \JText::_('NR_COUNTRY_MS'), 'calling_code' => '1664', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'MA' => [ 'name' => \JText::_('NR_COUNTRY_MA'), 'calling_code' => '212', 'currency_code' => 'MAD', 'currency_name' => 'Dirham', 'currency_symbol' => 'DH' ], + 'MZ' => [ 'name' => \JText::_('NR_COUNTRY_MZ'), 'calling_code' => '258', 'currency_code' => 'MZN', 'currency_name' => 'Meticail', 'currency_symbol' => 'MT' ], + 'MM' => [ 'name' => \JText::_('NR_COUNTRY_MM'), 'calling_code' => '95', 'currency_code' => 'MMK', 'currency_name' => 'Kyat', 'currency_symbol' => 'K' ], + 'NA' => [ 'name' => \JText::_('NR_COUNTRY_NA'), 'calling_code' => '264', 'currency_code' => 'NAD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'NR' => [ 'name' => \JText::_('NR_COUNTRY_NR'), 'calling_code' => '674', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'NP' => [ 'name' => \JText::_('NR_COUNTRY_NP'), 'calling_code' => '977', 'currency_code' => 'NPR', 'currency_name' => 'Rupee', 'currency_symbol' => '₨' ], + 'NL' => [ 'name' => \JText::_('NR_COUNTRY_NL'), 'calling_code' => '31', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'NC' => [ 'name' => \JText::_('NR_COUNTRY_NC'), 'calling_code' => '687', 'currency_code' => 'XPF', 'currency_name' => 'Franc', 'currency_symbol' => 'F' ], + 'NZ' => [ 'name' => \JText::_('NR_COUNTRY_NZ'), 'calling_code' => '64', 'currency_code' => 'NZD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'NI' => [ 'name' => \JText::_('NR_COUNTRY_NI'), 'calling_code' => '505', 'currency_code' => 'NIO', 'currency_name' => 'Cordoba', 'currency_symbol' => 'C$' ], + 'NE' => [ 'name' => \JText::_('NR_COUNTRY_NE'), 'calling_code' => '227', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'NG' => [ 'name' => \JText::_('NR_COUNTRY_NG'), 'calling_code' => '234', 'currency_code' => 'NGN', 'currency_name' => 'Naira', 'currency_symbol' => '₦' ], + 'NU' => [ 'name' => \JText::_('NR_COUNTRY_NU'), 'calling_code' => '683', 'currency_code' => 'NZD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'NF' => [ 'name' => \JText::_('NR_COUNTRY_NF'), 'calling_code' => '672', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'KP' => [ 'name' => \JText::_('NR_COUNTRY_KP'), 'calling_code' => '850', 'currency_code' => 'KPW', 'currency_name' => 'Won', 'currency_symbol' => '₩' ], + 'MP' => [ 'name' => \JText::_('NR_COUNTRY_MP'), 'calling_code' => '1670', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'NO' => [ 'name' => \JText::_('NR_COUNTRY_NO'), 'calling_code' => '47', 'currency_code' => 'NOK', 'currency_name' => 'Krone', 'currency_symbol' => 'kr' ], + 'OM' => [ 'name' => \JText::_('NR_COUNTRY_OM'), 'calling_code' => '968', 'currency_code' => 'OMR', 'currency_name' => 'Rial', 'currency_symbol' => '﷼' ], + 'PK' => [ 'name' => \JText::_('NR_COUNTRY_PK'), 'calling_code' => '92', 'currency_code' => 'PKR', 'currency_name' => 'Rupee', 'currency_symbol' => '₨' ], + 'PW' => [ 'name' => \JText::_('NR_COUNTRY_PW'), 'calling_code' => '680', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'PS' => [ 'name' => \JText::_('NR_COUNTRY_PS'), 'calling_code' => '970', 'currency_code' => 'ILS', 'currency_name' => 'Shekel', 'currency_symbol' => '₪' ], + 'PA' => [ 'name' => \JText::_('NR_COUNTRY_PA'), 'calling_code' => '507', 'currency_code' => 'PAB', 'currency_name' => 'Balboa', 'currency_symbol' => 'B/.' ], + 'PG' => [ 'name' => \JText::_('NR_COUNTRY_PG'), 'calling_code' => '675', 'currency_code' => 'PGK', 'currency_name' => 'Kina', 'currency_symbol' => 'K' ], + 'PY' => [ 'name' => \JText::_('NR_COUNTRY_PY'), 'calling_code' => '595', 'currency_code' => 'PYG', 'currency_name' => 'Guarani', 'currency_symbol' => 'Gs' ], + 'PE' => [ 'name' => \JText::_('NR_COUNTRY_PE'), 'calling_code' => '51', 'currency_code' => 'PEN', 'currency_name' => 'Sol', 'currency_symbol' => 'S/.' ], + 'PH' => [ 'name' => \JText::_('NR_COUNTRY_PH'), 'calling_code' => '63', 'currency_code' => 'PHP', 'currency_name' => 'Peso', 'currency_symbol' => 'Php' ], + 'PN' => [ 'name' => \JText::_('NR_COUNTRY_PN'), 'calling_code' => '870', 'currency_code' => 'NZD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'PL' => [ 'name' => \JText::_('NR_COUNTRY_PL'), 'calling_code' => '48', 'currency_code' => 'PLN', 'currency_name' => 'Zloty', 'currency_symbol' => 'zł' ], + 'PT' => [ 'name' => \JText::_('NR_COUNTRY_PT'), 'calling_code' => '351', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'PR' => [ 'name' => \JText::_('NR_COUNTRY_PR'), 'calling_code' => '1', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'QA' => [ 'name' => \JText::_('NR_COUNTRY_QA'), 'calling_code' => '974', 'currency_code' => 'QAR', 'currency_name' => 'Rial', 'currency_symbol' => '﷼' ], + 'CG' => [ 'name' => \JText::_('NR_COUNTRY_CG'), 'calling_code' => '242', 'currency_code' => 'XAF', 'currency_name' => 'Franc', 'currency_symbol' => 'FCF' ], + 'RE' => [ 'name' => \JText::_('NR_COUNTRY_RE'), 'calling_code' => '262', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'RO' => [ 'name' => \JText::_('NR_COUNTRY_RO'), 'calling_code' => '40', 'currency_code' => 'RON', 'currency_name' => 'Leu', 'currency_symbol' => 'lei' ], + 'RU' => [ 'name' => \JText::_('NR_COUNTRY_RU'), 'calling_code' => '7', 'currency_code' => 'RUB', 'currency_name' => 'Ruble', 'currency_symbol' => 'руб' ], + 'RW' => [ 'name' => \JText::_('NR_COUNTRY_RW'), 'calling_code' => '250', 'currency_code' => 'RWF', 'currency_name' => 'Franc', 'currency_symbol' => 'FRw' ], + 'SH' => [ 'name' => \JText::_('NR_COUNTRY_SH'), 'calling_code' => '290', 'currency_code' => 'SHP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'KN' => [ 'name' => \JText::_('NR_COUNTRY_KN'), 'calling_code' => '1869', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'LC' => [ 'name' => \JText::_('NR_COUNTRY_LC'), 'calling_code' => '1758', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'PM' => [ 'name' => \JText::_('NR_COUNTRY_PM'), 'calling_code' => '508', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'VC' => [ 'name' => \JText::_('NR_COUNTRY_VC'), 'calling_code' => '1784', 'currency_code' => 'XCD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'WS' => [ 'name' => \JText::_('NR_COUNTRY_WS'), 'calling_code' => '685', 'currency_code' => 'WST', 'currency_name' => 'Tala', 'currency_symbol' => 'WS$' ], + 'SM' => [ 'name' => \JText::_('NR_COUNTRY_SM'), 'calling_code' => '378', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'ST' => [ 'name' => \JText::_('NR_COUNTRY_ST'), 'calling_code' => '239', 'currency_code' => 'STD', 'currency_name' => 'Dobra', 'currency_symbol' => 'Db' ], + 'SA' => [ 'name' => \JText::_('NR_COUNTRY_SA'), 'calling_code' => '966', 'currency_code' => 'SAR', 'currency_name' => 'Rial', 'currency_symbol' => '﷼' ], + 'SN' => [ 'name' => \JText::_('NR_COUNTRY_SN'), 'calling_code' => '221', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'RS' => [ 'name' => \JText::_('NR_COUNTRY_RS'), 'calling_code' => '381', 'currency_code' => 'RSD', 'currency_name' => 'Dinar', 'currency_symbol' => 'Дин' ], + 'SC' => [ 'name' => \JText::_('NR_COUNTRY_SC'), 'calling_code' => '248', 'currency_code' => 'SCR', 'currency_name' => 'Rupee', 'currency_symbol' => '₨' ], + 'SL' => [ 'name' => \JText::_('NR_COUNTRY_SL'), 'calling_code' => '232', 'currency_code' => 'SLL', 'currency_name' => 'Leone', 'currency_symbol' => 'Le' ], + 'SG' => [ 'name' => \JText::_('NR_COUNTRY_SG'), 'calling_code' => '65', 'currency_code' => 'SGD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'SK' => [ 'name' => \JText::_('NR_COUNTRY_SK'), 'calling_code' => '421', 'currency_code' => 'SKK', 'currency_name' => 'Koruna', 'currency_symbol' => 'Sk' ], + 'SI' => [ 'name' => \JText::_('NR_COUNTRY_SI'), 'calling_code' => '386', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'SB' => [ 'name' => \JText::_('NR_COUNTRY_SB'), 'calling_code' => '677', 'currency_code' => 'SBD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'SO' => [ 'name' => \JText::_('NR_COUNTRY_SO'), 'calling_code' => '252', 'currency_code' => 'SOS', 'currency_name' => 'Shilling', 'currency_symbol' => 'S' ], + 'ZA' => [ 'name' => \JText::_('NR_COUNTRY_ZA'), 'calling_code' => '27', 'currency_code' => 'ZAR', 'currency_name' => 'Rand', 'currency_symbol' => 'R' ], + 'GS' => [ 'name' => \JText::_('NR_COUNTRY_GS'), 'calling_code' => '500', 'currency_code' => 'GBP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'KR' => [ 'name' => \JText::_('NR_COUNTRY_KR'), 'calling_code' => '82', 'currency_code' => 'KRW', 'currency_name' => 'Won', 'currency_symbol' => '₩' ], + 'ES' => [ 'name' => \JText::_('NR_COUNTRY_ES'), 'calling_code' => '34', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'LK' => [ 'name' => \JText::_('NR_COUNTRY_LK'), 'calling_code' => '94', 'currency_code' => 'LKR', 'currency_name' => 'Rupee', 'currency_symbol' => '₨' ], + 'SD' => [ 'name' => \JText::_('NR_COUNTRY_SD'), 'calling_code' => '249', 'currency_code' => 'SDD', 'currency_name' => 'Dinar', 'currency_symbol' => 'ج.س' ], + 'SS' => [ 'name' => \JText::_('NR_COUNTRY_SS'), 'calling_code' => '211', 'currency_code' => 'SSP', 'currency_name' => 'Pound', 'currency_symbol' => 'SS£' ], + 'SR' => [ 'name' => \JText::_('NR_COUNTRY_SR'), 'calling_code' => '597', 'currency_code' => 'SRD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'SJ' => [ 'name' => \JText::_('NR_COUNTRY_SJ'), 'calling_code' => '47', 'currency_code' => 'NOK', 'currency_name' => 'Krone', 'currency_symbol' => 'kr' ], + 'SZ' => [ 'name' => \JText::_('NR_COUNTRY_SZ'), 'calling_code' => '268', 'currency_code' => 'SZL', 'currency_name' => 'Lilangeni', 'currency_symbol' => 'L' ], + 'SE' => [ 'name' => \JText::_('NR_COUNTRY_SE'), 'calling_code' => '46', 'currency_code' => 'SEK', 'currency_name' => 'Krona', 'currency_symbol' => 'kr' ], + 'CH' => [ 'name' => \JText::_('NR_COUNTRY_CH'), 'calling_code' => '41', 'currency_code' => 'CHF', 'currency_name' => 'Franc', 'currency_symbol' => 'CHF' ], + 'SY' => [ 'name' => \JText::_('NR_COUNTRY_SY'), 'calling_code' => '963', 'currency_code' => 'SYP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'TW' => [ 'name' => \JText::_('NR_COUNTRY_TW'), 'calling_code' => '886', 'currency_code' => 'TWD', 'currency_name' => 'Dollar', 'currency_symbol' => 'NT$' ], + 'TJ' => [ 'name' => \JText::_('NR_COUNTRY_TJ'), 'calling_code' => '992', 'currency_code' => 'TJS', 'currency_name' => 'Somoni', 'currency_symbol' => 'SM' ], + 'TZ' => [ 'name' => \JText::_('NR_COUNTRY_TZ'), 'calling_code' => '255', 'currency_code' => 'TZS', 'currency_name' => 'Shilling', 'currency_symbol' => 'TSh' ], + 'TH' => [ 'name' => \JText::_('NR_COUNTRY_TH'), 'calling_code' => '66', 'currency_code' => 'THB', 'currency_name' => 'Baht', 'currency_symbol' => '฿' ], + 'TG' => [ 'name' => \JText::_('NR_COUNTRY_TG'), 'calling_code' => '228', 'currency_code' => 'XOF', 'currency_name' => 'Franc', 'currency_symbol' => 'CFA' ], + 'TK' => [ 'name' => \JText::_('NR_COUNTRY_TK'), 'calling_code' => '690', 'currency_code' => 'NZD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'TO' => [ 'name' => \JText::_('NR_COUNTRY_TO'), 'calling_code' => '676', 'currency_code' => 'TOP', 'currency_name' => 'Paanga', 'currency_symbol' => 'T$' ], + 'TT' => [ 'name' => \JText::_('NR_COUNTRY_TT'), 'calling_code' => '1868', 'currency_code' => 'TTD', 'currency_name' => 'Dollar', 'currency_symbol' => 'TT$' ], + 'TN' => [ 'name' => \JText::_('NR_COUNTRY_TN'), 'calling_code' => '216', 'currency_code' => 'TND', 'currency_name' => 'Dinar', 'currency_symbol' => 'د.ت' ], + 'TR' => [ 'name' => \JText::_('NR_COUNTRY_TR'), 'calling_code' => '90', 'currency_code' => 'TRY', 'currency_name' => 'Lira', 'currency_symbol' => 'YTL' ], + 'TM' => [ 'name' => \JText::_('NR_COUNTRY_TM'), 'calling_code' => '993', 'currency_code' => 'TMM', 'currency_name' => 'Manat', 'currency_symbol' => 'm' ], + 'TC' => [ 'name' => \JText::_('NR_COUNTRY_TC'), 'calling_code' => '1649', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'TV' => [ 'name' => \JText::_('NR_COUNTRY_TV'), 'calling_code' => '688', 'currency_code' => 'AUD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'VI' => [ 'name' => \JText::_('NR_COUNTRY_VI'), 'calling_code' => '1340', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'UG' => [ 'name' => \JText::_('NR_COUNTRY_UG'), 'calling_code' => '256', 'currency_code' => 'UGX', 'currency_name' => 'Shilling', 'currency_symbol' => 'USh' ], + 'UA' => [ 'name' => \JText::_('NR_COUNTRY_UA'), 'calling_code' => '380', 'currency_code' => 'UAH', 'currency_name' => 'Hryvnia', 'currency_symbol' => '₴' ], + 'AE' => [ 'name' => \JText::_('NR_COUNTRY_AE'), 'calling_code' => '971', 'currency_code' => 'AED', 'currency_name' => 'Dirham', 'currency_symbol' => 'د.إ' ], + 'GB' => [ 'name' => \JText::_('NR_COUNTRY_GB'), 'calling_code' => '44', 'currency_code' => 'GBP', 'currency_name' => 'Pound', 'currency_symbol' => '£' ], + 'US' => [ 'name' => \JText::_('NR_COUNTRY_US'), 'calling_code' => '1', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'UM' => [ 'name' => \JText::_('NR_COUNTRY_UM'), 'calling_code' => '246', 'currency_code' => 'USD', 'currency_name' => 'Dollar', 'currency_symbol' => '$' ], + 'UY' => [ 'name' => \JText::_('NR_COUNTRY_UY'), 'calling_code' => '598', 'currency_code' => 'UYU', 'currency_name' => 'Peso', 'currency_symbol' => '$U' ], + 'UZ' => [ 'name' => \JText::_('NR_COUNTRY_UZ'), 'calling_code' => '998', 'currency_code' => 'UZS', 'currency_name' => 'Som', 'currency_symbol' => 'лв' ], + 'VU' => [ 'name' => \JText::_('NR_COUNTRY_VU'), 'calling_code' => '678', 'currency_code' => 'VUV', 'currency_name' => 'Vatu', 'currency_symbol' => 'Vt' ], + 'VA' => [ 'name' => \JText::_('NR_COUNTRY_VA'), 'calling_code' => '39', 'currency_code' => 'EUR', 'currency_name' => 'Euro', 'currency_symbol' => '€' ], + 'VE' => [ 'name' => \JText::_('NR_COUNTRY_VE'), 'calling_code' => '58', 'currency_code' => 'VEF', 'currency_name' => 'Bolivar', 'currency_symbol' => 'Bs' ], + 'VN' => [ 'name' => \JText::_('NR_COUNTRY_VN'), 'calling_code' => '84', 'currency_code' => 'VND', 'currency_name' => 'Dong', 'currency_symbol' => '₫' ], + 'WF' => [ 'name' => \JText::_('NR_COUNTRY_WF'), 'calling_code' => '681', 'currency_code' => 'XPF', 'currency_name' => 'Franc', 'currency_symbol' => 'F' ], + 'EH' => [ 'name' => \JText::_('NR_COUNTRY_EH'), 'calling_code' => '212', 'currency_code' => 'MAD', 'currency_name' => 'Dirham', 'currency_symbol' => 'DH' ], + 'YE' => [ 'name' => \JText::_('NR_COUNTRY_YE'), 'calling_code' => '967', 'currency_code' => 'YER', 'currency_name' => 'Rial', 'currency_symbol' => '﷼' ], + 'ZM' => [ 'name' => \JText::_('NR_COUNTRY_ZM'), 'calling_code' => '260', 'currency_code' => 'ZMK', 'currency_name' => 'Kwacha', 'currency_symbol' => 'ZK' ], + 'ZW' => [ 'name' => \JText::_('NR_COUNTRY_ZW'), 'calling_code' => '263', 'currency_code' => 'ZWD', 'currency_name' => 'Dollar', 'currency_symbol' => 'Z$' ] + ]; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Email.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Email.php new file mode 100644 index 00000000..79084ff8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Email.php @@ -0,0 +1,239 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined('_JEXEC') or die('Restricted access'); + +/** + * Novarain Framework Emailer + */ +class Email +{ + /** + * Indicates the last error + * + * @var string + */ + public $error; + + /** + * Email Object + * + * @var email data to be sent + */ + private $email; + + /** + * Required elements for a valid email object + * + * @var array + */ + private $requiredKeys = array( + 'from_email', + 'from_name', + 'recipient', + 'subject', + 'body' + ); + + /** + * Class constructor + */ + public function __construct($email) + { + $this->email = $email; + } + + /** + * Validates Email Object + * + * @param array $email The email object + * + * @return boolean Returns true if the email object is valid + */ + public function validate() + { + // Validate email object + if (!$this->email || !is_array($this->email) || !count($this->email)) + { + $this->setError('Invalid email object.'); + return; + } + + // Check for missing properties + foreach ($this->requiredKeys as $key) + { + if (!isset($this->email[$key]) || empty($this->email[$key])) + { + $this->setError("The $key field is either missing or invalid."); + return; + } + } + + // Validate recipient email addresses. Pass multiple recipients separated by comma. + $recipients = explode(',', $this->email['recipient']); + + // Remove spaces and duplicate email addresses to prevent issues with PHPMailer addRecipient() method. + $recipients = array_unique(array_filter(array_map('trim', $recipients))); + + foreach ($recipients as $recipient) + { + if (!$this->validateEmailAddress($recipient)) + { + $this->setError("Invalid recipient email address: $recipient"); + return; + } + } + + $this->email['recipient'] = $recipients; + + // Validate sender email address + if (!$this->validateEmailAddress($this->email['from_email'])) + { + $this->setError('Invalid sender email address: ' . $this->email['from_email']); + return; + } + + // Convert special HTML entities back to characters on non text-only properties. + // For instance, the subject line of an email is not parsed as HTML, it's just pure text. + // Because of this an HTML entity like & it will be displayed as encoded. + // To prevent this from happening we need decode the values. + $this->email['subject'] = htmlspecialchars_decode($this->email['subject']); + $this->email['from_name'] = htmlspecialchars_decode($this->email['from_name']); + $this->email['reply_to_name'] = htmlspecialchars_decode($this->email['reply_to_name']); + + return true; + } + + /** + * Sending emails + * + * @param array $email The mail objecta + * + * @return mixed Returns true on success. Throws exeption on fail. + */ + public function send() + { + // Proceed only if Mail Sending is enabled. + if (!\JFactory::getConfig()->get('mailonline')) + { + $this->error = \JText::_('NR_ERROR_EMAIL_IS_DISABLED'); + return; + } + + // Validate first the email object + if (!$this->validate($this->email)) + { + return; + } + + $email = $this->email; + $mailer = \JFactory::getMailer(); + $mailer->CharSet = 'UTF-8'; + + // Email Sender + $mailer->setSender( + array( + $email['from_email'], + $email['from_name'] + ) + ); + + // Reply-to + if (isset($email['reply_to']) && !empty($email['reply_to'])) + { + $name = (isset($email['reply_to_name']) && !empty($email['reply_to_name'])) ? $email['reply_to_name'] : ''; + $mailer->addReplyTo($email['reply_to'], $name); + } + + // Convert all relative paths found in and elements to absolute URLs + $email['body'] = \NRFramework\URLHelper::relativePathsToAbsoluteURLs($email['body']); + + $mailer + ->addRecipient($email['recipient']) + ->isHTML(true) + ->setSubject($email['subject']) + ->setBody($email['body']); + + $mailer->AltBody = strip_tags(str_ireplace(['
        ', '
        ', '
        '], "\r\n", $email['body'])); + + // Attachments + if (!empty($email['attachments'])) + { + if (!is_array($email['attachments'])) + { + $attachments = explode(',', $email['attachments']); + } + + foreach ($attachments as $attachment) + { + $file_path = $this->toRelativePath($attachment); + $mailer->addAttachment($file_path); + } + } + + // Send mail + $send = $mailer->Send(); + + if ($send !== true) + { + $this->setError($send->__toString()); + return; + } + + return true; + } + + /** + * Set Class Error + * + * @param string $error The error message + */ + private function setError($error) + { + $this->error = 'Error sending email: ' . $error; + Functions::log($error); + } + + /** + * Removes all illegal characters and validates an email address + * + * @param string $email Email address string + * + * @return bool + */ + private function validateEmailAddress($email) + { + $email = filter_var($email, FILTER_SANITIZE_EMAIL); + return filter_var($email, FILTER_VALIDATE_EMAIL); + } + + /** + * Attempts to transform an absolute URL to path relative to the site's root. + * + * @param string $url + * + * @return string + */ + private function toRelativePath($url) + { + $needles = [ + \JURI::root(), + JPATH_SITE, + JPATH_ROOT + ]; + + $path = str_replace($needles, '', $url); + + $path = \JPath::clean($path); + + return $path; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Executer.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Executer.php new file mode 100644 index 00000000..b7b38f1a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Executer.php @@ -0,0 +1,278 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ +namespace NRFramework; + +use Joomla\Registry\Registry; + +defined('_JEXEC') or die; + +/** + * Cleverly evaluate php code using a temporary file and without using the evil eval() PHP method + */ +class Executer +{ + /** + * The php code is going to be executed + * + * @var string + */ + private $php_code; + + /** + * The data object passed as argument to function + * + * @var mixed + */ + private $payload; + + /** + * Executer configuration + * + * @var object + */ + private $options; + + /** + * Class constructor + * + * @param string $php_code The php code is going to be executed + */ + public function __construct($php_code = null, &$payload = null, $options = array()) + { + $this->setPhpCode($php_code); + $this->setPayload($payload); + + // Default options + $defaults = [ + 'forbidden_php_functions' => [ + 'fopen', + 'popen', + 'unlink', + 'rmdir', + 'dl', + 'escapeshellarg', + 'escapeshellcmd', + 'exec', + 'passthru', + 'proc_close', + 'proc_open', + 'shell_exec', + 'symlink', + 'system', + 'pcntl_exec', + 'eval', + 'create_function' + ] + ]; + + $options = array_merge($defaults, $options); + $this->options = new Registry($options); + } + + /** + * Payload contains the variables passed as argumentse into the PHP code + * + * @param mixed $data + * + * @return void + */ + public function setPayload(&$data) + { + $this->payload = &$data; + return $this; + } + + /** + * Set forbidden PHP functions. If any found, the whole PHP block won't run. + * + * @param array $functions + * + * @return void + */ + public function setForbiddenPHPFunctions($functions) + { + if (empty($functions)) + { + return $this; + } + + if (is_string($functions)) + { + $functions = explode(',', $functions); + } + + $this->options->set('forbidden_php_functions', $functions); + return $this; + } + + /** + * Helper method to set the php code is about to be executed + * + * @param string $php_code + * + * @return void + */ + public function setPhpCode($php_code) + { + $this->php_code = $php_code; + return $this; + } + + /** + * Checks if given PHP code is valid and it's allowed to run. + * + * @return bool + */ + private function allowedToRun() + { + // Check for forbidden PHP functions + $re = '/(' . implode('|', $this->options->get('forbidden_php_functions')) . ')(\s*\(|\s+[\'"])/mi'; + preg_match_all($re, $this->php_code, $matches); + if (!empty($matches[0])) + { + return false; + } + + // Check for backticks `` + if ($has_back_ticks = preg_match('/`(.*?)`/s', $this->php_code)) + { + return false; + } + + return true; + } + + /** + * Run function + * + * @return function + */ + public function run() + { + if (!$this->allowedToRun()) + { + return; + } + + $function_name = $this->getFunctionName(); + + // Function doesn't exist. Let's create it. + if (!function_exists($function_name)) + { + if (!$this->createFunction()) + { + return; + } + } + + return $function_name($this->payload); + } + + /** + * Creates a temporary function in memory + * + * @return void + */ + private function createFunction() + { + $function_name = $this->getFunctionName(); + $function_content = $this->getFunctionContent(); + $temp_file = $this->getTempPath() . '/' . $function_name; + + // Write function's content to a temporary file + \JFile::write($temp_file, $function_content); + + // Include file + include_once $temp_file; + + // Delete file + if (!defined('JDEBUG') || !JDEBUG) + { + @chmod($temp_file, 0777); + @unlink($temp_file); + } + + return function_exists($function_name); + } + + /** + * Get temporary file content + * + * @return string + */ + private function getFunctionContent() + { + $function_name = $this->getFunctionName(); + $variables = $this->getFunctionVariables(); + + $contents = [ + 'php_code, + ';return true;}' + ]; + + $contents = implode("\n", $contents); + + // Remove Zero Width spaces / (non-)joiners + $contents = str_replace( + [ + "\xE2\x80\x8B", + "\xE2\x80\x8C", + "\xE2\x80\x8D", + ], + '', + $contents + ); + + return $contents; + } + + /** + * Make user's life easier by initializing some Joomla helpful variables + * + * @return array + */ + protected function getFunctionVariables() + { + return [ + '$app = $mainframe = JFactory::getApplication();', + '$document = $doc = JFactory::getDocument();', + '$database = $db = JFactory::getDbo();', + '$user = JFactory::getUser();', + '$Itemid = $app->input->getInt(\'Itemid\');' + ]; + } + + /** + * Construct a temporary function name + * + * @return string + */ + private function getFunctionName() + { + return 'tassos_php_' . md5($this->php_code); + } + + /** + * Return Joomla temporary path + * + * @return void + */ + private function getTempPath() + { + return \JFactory::getConfig()->get('tmp_path', JPATH_ROOT . '/tmp'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Extension.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Extension.php new file mode 100644 index 00000000..408d8f28 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Extension.php @@ -0,0 +1,505 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +use NRFramework\Cache; +use Joomla\Registry\Registry; + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +class Extension +{ + /** + * Indicates the base url of Tassos.gr Joomla Extensions + * + * @var string + */ + public static $product_base_url = 'https://www.tassos.gr/joomla-extensions'; + + /** + * Array including already loaded extensions + * + * @var array + */ + public static $cache = []; + + /** + * Get extension ID + * + * @param string $element The extension element name + * @param string $type The extension type: component, plugin, library e.t.c + * @param mixed $folder The plugin folder: system, content e.t.c + * + * @return mixed False on failure, Integer on success + */ + public static function getID($element, $type = 'component', $folder = null) + { + if (!$extension = self::get($element, $type, $folder)) + { + return false; + } + + return (int) $extension['extension_id']; + } + + /** + * Get extension data by ID + * + * @param string $extension_id The extension primary key + * + * @return void + */ + public static function getByID($extension_id) + { + // Check if element is already cached + if (isset(self::$cache[$extension_id])) + { + return self::$cache[$extension_id]; + } + + // Let's call the database + $db = \JFactory::getDBO(); + + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('extension_id') . ' = ' . $extension_id); + + $db->setQuery($query); + + return self::$cache[$extension_id] = $db->loadAssoc(); + } + + /** + * Get extension information from database + * + * @param string $element The extension element name + * @param string $type The extension type: component, plugin, library e.t.c + * @param mixed $folder The plugin folder: system, content e.t.c + * + * @return array + */ + public static function get($element, $type = 'component', $folder = null) + { + // Check if element is already cached + $hash = md5($element . '_' . $type . '_' . $folder); + if (isset(self::$cache[$hash])) + { + return self::$cache[$hash]; + } + + // Let's call the database + $db = \JFactory::getDBO(); + + switch ($type) + { + case 'component': + $element = 'com_' . str_replace('com_', '', $element); + break; + case 'module': + $element = 'mod_' . str_replace('mod_', '', $element); + break; + } + + $query = $db->getQuery(true) + ->select('*') + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($element)) + ->where($db->quoteName('type') . ' = ' . $db->quote($type)); + + if (!is_null($folder)) + { + $query->where($db->quoteName('folder') . ' = ' . $db->quote($folder)); + } + + $db->setQuery($query); + + return self::$cache[$hash] = $db->loadAssoc(); + } + + /** + * Helper method to check if a plugin is enabled + * + * @param string $element The extension element name + * @param string $type The extension type: component, plugin, library e.t.c + * + * @return boolean + */ + public static function pluginIsEnabled($element, $folder = 'system') + { + return self::isEnabled($element, 'plugin', $folder); + } + + /** + * Helper method to check if a component is enabled + * + * @param string $element The component element name + * + * @return boolean + */ + public static function componentIsEnabled($element) + { + return self::isEnabled($element); + } + + /** + * Checks if an extension is enabled + * + * @param string $element The extension element name + * @param string $type The extension type: component, plugin, library e.t.c + * @param mixed $folder The plugin folder: system, content e.t.c + * + * @return boolean + */ + public static function isEnabled($element, $type = 'component', $folder = 'system') + { + switch ($type) + { + case 'component': + if (!$extension = self::get($element)) + { + return false; + } + + return (bool) $extension['enabled']; + break; + + case 'plugin': + if (!$extension = self::get($element, $type = 'plugin', $folder)) + { + return false; + } + + return (bool) $extension['enabled']; + break; + } + } + + /** + * Checks if an extension is installed + * + * @param string $extension The extension element name + * @param string $type The extension's type + * @param string $folder Plugin folder + * + * @return boolean Returns true if extension is installed + */ + public static function isInstalled($extension, $type = 'component', $folder = 'system') + { + $db = \JFactory::getDbo(); + + switch ($type) + { + case 'component': + $extension_data = self::get('com_' . str_replace('com_', '', $extension)); + return isset($extension_data['extension_id']); + break; + + case 'plugin': + return \JFile::exists(JPATH_PLUGINS . '/' . $folder . '/' . $extension . '/' . $extension . '.php'); + + case 'module': + return (\JFile::exists(JPATH_ADMINISTRATOR . '/modules/mod_' . $extension . '/' . $extension . '.php') + || \JFile::exists(JPATH_ADMINISTRATOR . '/modules/mod_' . $extension . '/mod_' . $extension . '.php') + || \JFile::exists(JPATH_SITE . '/modules/mod_' . $extension . '/' . $extension . '.php') + || \JFile::exists(JPATH_SITE . '/modules/mod_' . $extension . '/mod_' . $extension . '.php') + ); + + case 'library': + return \JFolder::exists(JPATH_LIBRARIES . '/' . $extension); + } + + return false; + } + + /** + * Discover extension's name based on the query string + * + * @param boolean $translate If set to yes, the name will be returned translated + * + * @return string + */ + public static function getExtensionNameByRequest($translate = false) + { + $input = \JFactory::getApplication()->input; + $option = $input->get('option'); + + switch ($option) + { + case 'com_fields': + $name = 'plg_system_acf'; + break; + case 'com_plugins': + $plugin = self::getByID($input->get('extension_id')); + + if (is_array($plugin)) + { + $name = $plugin['name']; + } + break; + default: + $name = $option; + break; + } + + if ($translate) + { + $name = explode(' - ', \JText::_($name)); + return end($name); + } + + return $name; + } + + /** + * Returns Tassos.gr extension checkout URL + * + * @param string $name The extension's element name + * + * @return string + */ + public static function getTassosExtensionUpgradeURL($name = null) + { + $name = is_null($name) ? strtolower(self::getExtensionNameByRequest()) : $name; + + switch ($name) + { + case 'com_gsd': + $path = 'google-structured-data-markup/subscribe/google-structured-data-professional'; + break; + case 'com_rstbox': + $path = 'engagebox/subscribe/engagebox-professional'; + break; + case 'com_convertforms': + $path = 'convert-forms/subscribe/convert-forms-professional'; + break; + case 'plg_system_tweetme': + $path = 'tweetme/subscribe/tweetme-professional'; + break; + case 'plg_system_acf': + $path = 'advanced-custom-fields/subscribe/advanced-custom-fields-professional'; + break; + default: + $path = ''; + } + + // Google Analytics UTM Parameters + $utm = 'utm_source=Joomla&utm_medium=upgradebutton&utm_campaign=freeversion'; + + return self::$product_base_url . '/' . $path . '/sign-up?coupon_code=FREE2PRO&' . $utm; + } + + public static function getProductAlias($extension) + { + $extension = is_null($extension) ? self::getExtensionNameByRequest() : $extension; + + switch ($extension) + { + case 'com_gsd': case 'plg_system_gsd': return 'google-structured-data-markup'; + case 'com_rstbox': return 'engagebox'; + case 'com_convertforms': return 'convert-forms'; + case 'plg_system_tweetme': return 'tweetme'; + case 'plg_system_acf': return 'advanced-custom-fields'; + case 'plg_system_restrictcontent': + case 'com_restrictcontent': return 'restrict-conten'; + } + } + + public static function getProductURL($extension) + { + return self::$product_base_url . '/' . self::getProductAlias($extension); + } + + public static function getPath($element) + { + $parts = explode('_', $element); + + switch ($parts[0]) + { + case 'com': + return JPATH_ADMINISTRATOR . '/components/' . $element; + case 'plg': + return JPATH_SITE . '/plugins/' . $parts[1] . '/' . $parts[2]; + } + } + + public static function getVersion($extension, $include_type = false) + { + $xml = self::getXML($extension); + + if (!$xml || !isset($xml->version)) + { + return; + } + + $version = (string) $xml->version; + + // If enabled, it returns EngageBox Pro + if ($include_type) + { + $isPro = self::isPro($extension); + $version_type = $isPro ? 'Pro' : 'Free'; + $version .= ' ' . $version_type; + } + + return $version; + } + + public static function elementToAlias($element) + { + $parts = explode('_', $element); + return end($parts); + } + + public static function getXML($element) + { + if (!$path = self::getPath($element)) + { + return; + } + + $extension_alias = self::elementToAlias($element); + $xml = $path . '/' . $extension_alias . '.xml'; + + return \JFactory::getXML($xml); + } + + /** + * Returns a URL where we can check for extension updates. + * + * @param strong $extension + * + * @return mixed Null of fail, String on success + */ + public static function getUpdateServer($extension) + { + $xml = self::getXML($extension); + + if (!$xml || !isset($xml->updateservers)) + { + return; + } + + $updateserver = trim($xml->updateservers->server); + + // Remove unwanted string added by Free / Pro versions + $pp = strpos($updateserver, '@'); + if ($pp !== false) + { + $updateserver = substr($updateserver, 0, $pp); + } + + return $updateserver; + } + + /** + * Get the latest extension version from the remote update server + * + * @param string $extension + * + * @return mixed Null on failure, String on success + */ + public static function getLatestVersion($extension) + { + // Get the extension's update server URL + if (!$updateserver = self::getUpdateServer($extension)) + { + return; + } + + // Call the Update Server and make sure the response is valid + $response = \JHttpFactory::getHttp()->get($updateserver); + + if ($response->code != 200 || strpos($response->body, '') === false) + { + return; + } + + $body = new \SimpleXMLElement($response->body); + $version = (string) $body->update[0]->version; + + return $version; + } + + /** + * Check if we have the Pro version of the extension + * + * @param string $element + * + * @return bool + */ + public static function isPro($element) + { + if (!$path = self::getPath($element)) + { + return false; + } + + $versionFile = $path . '/version.php'; + + // If version file does not exist we assume a PRO version + if (!\JFile::exists($versionFile)) + { + return true; + } + + require $versionFile; + + // If the NR_PRO variable is not set we're probably under development mode. Assume a Pro version. + if (!isset($NR_PRO)) + { + return true; + } + + return (bool) $NR_PRO; + } + + /** + * Checks whether an extension is outdated. + * + * @param string $extension + * @param int $days_old + * + * @return bool + */ + public static function isOutdated($extension, $days_old = 120) + { + $versionFile = Functions::getExtensionPath($extension) . "/version.php"; + + if (!file_exists($versionFile)) + { + return false; + } + + require $versionFile; + + if (!isset($RELEASE_DATE)) + { + return false; + } + + if (!$then = strtotime($RELEASE_DATE)) + { + return false; + } + + $days_old = (int) $days_old; + $now = time(); + $diff = $now - $then; + $days_diff = round($diff / (60 * 60 * 24)); + + if ($days_diff <= $days_old) + { + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Factory.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Factory.php new file mode 100644 index 00000000..17d07e1c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Factory.php @@ -0,0 +1,88 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework; + +use \NRFramework\WebClient; +use \NRFramework\CacheManager; + +defined('_JEXEC') or die; + +/** +* Framework Factory Class +* +* Used to decouple the framework from it's dependencies and make unit testing easier. +*/ +class Factory +{ + public function getDbo() + { + return \JFactory::getDbo(); + } + + public function getApplication() + { + return \JFactory::getApplication(); + } + + public function getDocument() + { + return \JFactory::getDocument(); + } + + public function getUser($id = null) + { + return \NRFramework\User::get($id); + } + + public function getCache() + { + return CacheManager::getInstance(\JFactory::getCache('novarain', '')); + } + + public function getDate($date = 'now', $tz = null) + { + return \JFactory::getDate($date, $tz); + } + + public function getURI() + { + return \JURI::getInstance(); + } + + public function getURL() + { + return \JURI::getInstance()->toString(); + } + + public function getLanguage() + { + return \JFactory::getLanguage(); + } + + public function getSession() + { + return \JFactory::getSession(); + } + + public function getDevice() + { + return WebClient::getDeviceType(); + } + + public function getBrowser() + { + return WebClient::getBrowser(); + } + + public function getExecuter($php_code) + { + return new \NRFramework\Executer($php_code); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/File.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/File.php new file mode 100644 index 00000000..3e6f77b9 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/File.php @@ -0,0 +1,270 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +use NRFramework\Mimes; + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +class File +{ + /** + * Upload file + * + * @param array $file The request file as posted by form + * @param string $upload_folder The upload folder where the file must be uploaded + * @param string $allowed_file_types A comma separated list of allowed file types like: .jpg, .gif, .png + * @param bool $allow_unsafe Allow the upload of unsafe files. See JFilterInput::isSafeFile() method. + * @param bool $random_prefix If is set to true, the filename will get a random unique prefix + * + * @return mixed String on success, Null on failure + */ + public static function upload($file, $upload_folder = null, $allowed_file_types = [], $allow_unsafe = false, $random_prefix = null) + { + // Make sure we have a valid file array + if (!isset($file['name']) || !isset($file['tmp_name'])) + { + throw new \Exception(\JText::sprintf('NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE', $file['name'])); + } + + // Check file type + self::checkMimeOrDie($allowed_file_types, $file); + + /** + * Try transiterating the file name using the native php function + * + * This is used in 4.0 version of makeSafe but not in 3.X. + * + * If the given filename is non-latin, then all characters will be removed from the filename via makeSafe and thus + * we wont be able to upload the file. + * + * @see https://github.com/joomla/joomla-cms/pull/27974 + */ + if (!defined('nrJ4') && function_exists('transliterator_transliterate') && function_exists('iconv')) + { + // Using iconv to ignore characters that can't be transliterated + $file['name'] = iconv("UTF-8", "ASCII//TRANSLIT//IGNORE", transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $file['name'])); + } + + // Sanitize filename + $filename = \JFile::makeSafe($file['name']); + + if (!is_null($random_prefix)) + { + $filename = uniqid($random_prefix) . '_' . $filename; + } + + $filename = str_replace(' ', '_', $filename); + + // Setup the full file name + $upload_folder = is_null($upload_folder) ? self::getTempFolder() : $upload_folder; + $destination_file = implode(DIRECTORY_SEPARATOR, [$upload_folder, $filename]); + + // If file exists, rename to copy_X + self::uniquefy($destination_file); + + $destination_file = \JPath::clean($destination_file); + + if (!\JFile::upload($file['tmp_name'], $destination_file, false, $allow_unsafe)) + { + throw new \Exception(\JText::sprintf('NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE', $file['name'])); + } + + return $destination_file; + } + + /** + * Moves a file from one directory to another. Destination directories will be created if they are not exist. + * + * @param [type] $source_file The source file path + * @param [type] $destination_file The destination file path + * @param bool $replace_existing Replace same files names, otherwise create a copy in the format copy_X + * + * @return mixed String on success + */ + public static function move($source_file, $destination_file, $replace_existing = false) + { + $destination_folder = dirname($destination_file); + + // Create destination folders recursively + if (!self::createDirs($destination_folder)) + { + throw new \Exception(\JText::sprintf('NR_CANNOT_CREATE_FOLDER', $destination_folder)); + } + + // Don't replace files with the same name. Instead, append copy_x to this one. + if (!$replace_existing) + { + self::uniquefy($destination_file); + } + + // Move file to the destination folder + if (!\JFile::move($source_file, $destination_file)) + { + throw new \Exception(\JText::sprintf('NR_CANNOT_MOVE_FILE', $destination_file)); + } + + return \JPath::clean($destination_file); + } + + /** + * Reads (and checks) the temp Joomla folder + * + * @return string + */ + public static function getTempFolder() + { + $ds = DIRECTORY_SEPARATOR; + + $tmpdir = \JFactory::getConfig()->get('tmp_path'); + + if (realpath($tmpdir) == $ds . 'tmp') + { + $tmpdir = JPATH_SITE . $ds . 'tmp'; + } + + elseif (!\JFolder::exists($tmpdir)) + { + $tmpdir = JPATH_SITE . $ds . 'tmp'; + } + + return \JPath::clean(trim($tmpdir) . $ds); + } + + /** + * Checks if the path exists. If not creates the folders as well as subfolders. + * + * @param string $path The folder path + * @param string $protect If set to true, each folder will be protected by disabling PHP engine and preventing folder browsing + * + * @return bool + */ + public static function createDirs($path, $protect = true) + { + if (!\JFolder::exists($path)) + { + mkdir($path, 0755, true); + + // New folder created. Let's protect it. + if ($protect) + { + self::writeHtaccessFile($path); + self::writeIndexHtmlFile($path); + } + } + + // Make sure the folder is writable + return @is_writable($path); + } + + /** + * Checks whether a file type is in an allowed list + * + * @param mixed $allowed_types Array or a comma separated list of allowed file extensions or mime types. Eg: .jpg, .png, applicaton/pdf + * @param string $file_object The uploaded file as appears in the $_FILES array + * + * @return bool + */ + public static function checkMimeOrDie($allowed_types, $file_object) + { + $file_path = $file_object['tmp_name']; + $file_name = isset($file_object['name']) ? $file_object['name'] : basename($file_path); + + // Do we have a mime type detected? + if (!$mime_type = Mimes::detectFileType($file_path)) + { + throw new \Exception(\JText::sprintf('NR_UPLOAD_NO_MIME_TYPE', $file_name)); + } + + if (!Mimes::check($allowed_types, $mime_type)) + { + throw new \Exception(\JText::sprintf('NR_UPLOAD_INVALID_FILE_TYPE', $file_name, $mime_type, $allowed_types)); + } + } + + /** + * Add an .htaccess file to the folder in order to disable PHP engine entirely + * + * @param string $path The path where to write the file + * + * @return void + */ + public static function writeHtaccessFile($path) + { + $content = ' + # Block direct PHP access + + deny from all + + '; + + \JFile::write($path . '/.htaccess', $content); + } + + /** + * Creates an empty index.html file to prevent directory listing + * + * @param string $path The path where to write the file + * + * @return void + */ + public static function writeIndexHtmlFile($path) + { + \JFile::write($path . '/index.html', ''); + } + + /** + * Generates a unique filename in case the give name already exists by appending copy_X suffix to filename. + * + * @param strimg $path + * + * @return void + */ + public static function uniquefy(&$path) + { + $path_parts = self::pathinfo($path); + + $dir = $path_parts['dirname']; + $ext = $path_parts['extension']; + $actual_name = $path_parts['filename']; + + $original_name = $actual_name; + + $i = 1; + + while(\JFile::exists($dir . '/' . $actual_name . '.' . $ext)) + { + $actual_name = (string) $original_name . '_copy_' . $i; + $path = $dir . '/' . $actual_name . '.' . $ext; + $i++; + } + } + + /** + * Returns information about a file path with multi-byte support + * + * @param string $path The path to be parsed. + * + * @return array + */ + public static function pathinfo($path) + { + // Store temporary the currenty locale + $currentLocale = setlocale(LC_ALL, 0); + + setlocale(LC_ALL, 'C.UTF-8'); + $pathinfo = pathinfo($path); + + // Set back to previus value + setlocale(LC_ALL, $currentLocale); + + return $pathinfo; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Fonts.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Fonts.php new file mode 100644 index 00000000..a30cb461 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Fonts.php @@ -0,0 +1,131 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +/** + * Fonts Class + */ +class Fonts +{ + /** + * Classic Fonts + * + * @var array + */ + private static $classic = array( + 'Arial', + 'Arial Black', + 'Georgia', + 'Tahoma', + 'Franklin Gothic Medium', + 'Calibri', + 'Cambria', + 'Century Gothic', + 'Consolas', + 'Corbel', + 'Courier New', + 'Times New Roman', + 'Impact', + 'Lucida Console', + 'Palatino Linotype', + 'Trebuchet MS', + 'Verdana' + ); + + /** + * Google Fonts List + * + * @var array + */ + private static $google = array( + 'Roboto', + 'Staatliches', + 'Thasadith', + 'Open Sans', + 'Sarabun', + 'Slabo 27px', + 'Lato', + 'Oswald', + 'Charm', + 'Roboto Condensed', + 'Source Sans Pro', + 'Montserrat', + 'Raleway', + 'PT Sans', + 'Poppins', + 'Roboto Slab', + 'Lora', + 'Droid Sans', + 'Merriweather', + 'Ubuntu', + 'Droid Serif', + 'Arimo', + 'Noto Sans', + 'PT Sans Narro' + ); + + /** + * Returns all font groups alphabetically sorted + * + * @return array + */ + public static function getFontGroups() + { + return array( + 'Google Fonts' => self::getFontGroup('google'), + 'Classic' => self::getFontGroup('classic') + ); + } + + /** + * Returns a font group alphabetically sorted + * + * @param string $name The Font Group + * + * @return array + */ + public static function getFontGroup($name) + { + $fonts = self::$$name; + sort($fonts); + return $fonts; + } + + /** + * Loads Google font to the document + * + * @param mixed $name The Google font name + * + * @return void + */ + public static function loadFont($names) + { + if (!$names) + { + return; + } + + if (!is_array($names)) + { + $names = array($names); + } + + foreach ($names as $key => $value) + { + // If font is a Google Font then load it into the document + if (in_array($value, self::$google)) + { + \JFactory::getDocument()->addStylesheet('//fonts.googleapis.com/css?family=' . urlencode($value)); + } + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Functions.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Functions.php new file mode 100644 index 00000000..5e947d79 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Functions.php @@ -0,0 +1,501 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +use Joomla\Registry\Registry; + +class Functions +{ + /** + * Return the real site base URL by ignoring the live_site configuration option. + * + * @param bool $ignore_admin If enabled and we are browsing administrator, we will get the front-end site root URL. + * + * @return string + */ + public static function getRootURL($ignore_admin = true) + { + $factory = \JFactory::getConfig(); + + // Store the original live_site value + $live_site_original = $factory->get('live_site', ''); + + // If we live_site is not set, do not proceed further. Return the default website base URL. + if (empty($live_site_original)) + { + return $ignore_admin ? \JURI::root() : \JURI::base(); + } + + // Remove the live site + $factory->set('live_site', ''); + + // Remove all cached JURI instances + \JURI::reset(); + + // Get a new URL. The live_site option should be ignored. + $base_url = $ignore_admin ? \JURI::root() : \JURI::base(); + + // Set back the original live_site + $factory->set('live_site', $live_site_original); + \JURI::reset(); + + return $base_url; + } + + /** + * Insert an associative array into a specific position in an array + * + * @param $original array The original array to add to + * @param $new array The new array of values to insert into the original + * @param $offset int The position in the array ( 0 index ) where the new array should go + * + * @return array The new combined array + */ + public static function array_splice_assoc($original,$new,$offset) + { + return array_slice($original, 0, $offset, true) + $new + array_slice($original, $offset, NULL, true); + } + + public static function renderField($fieldname) + { + $fieldname = strtolower($fieldname); + + require_once JPATH_PLUGINS . '/system/nrframework/fields/' . $fieldname . '.php'; + + $classname = '\JFormField' . $fieldname; + + $field = new $classname(); + + $element = new \SimpleXMLElement(' + '); + + $field->setup($element, null); + + return $field->__get('input'); + } + + /** + * Checks if an array of values (needle) exists in a text (haystack) + * + * @param array $needle The searched array of values. + * @param string $haystack The text + * @param bool $case_insensitive Indicates whether the letter case plays any role + * + * @return bool + */ + public static function strpos_arr($needles, $haystack, $case_insensitive = false) + { + $needles = !is_array($needles) ? (array) $needles : $needles; + $haystack = $case_insensitive ? strtolower($haystack) : $haystack; + + foreach ($needles as $needle) + { + $needle = $case_insensitive ? strtolower($needle) : $needle; + + if (strpos($haystack, $needle) !== false) + { + // stop on first true result + return true; + } + } + + return false; + } + + /** + * Log message to framework's log file + * + * @param mixed $data Log message + * + * @return void + */ + public static function log($data) + { + $data = (is_object($data) || is_array($data)) ? print_r($data, true) : $data; + + try { + \JLog::add($data, \JLog::DEBUG, 'nrframework'); + } catch (\Throwable $th) { + } + } + + /** + * Return's a URL with the Google Analytics Campaign Parameters appended to the end + * + * @param string $url The URL + * @param string $medium Campaign Medium + * @param string $campaign Campaign Name + * + * @return string + */ + public static function getUTMURL($url, $medium = "upgradebutton", $campaign = "freeversion") + { + if (!$url) + { + return; + } + + $utm = 'utm_source=Joomla&utm_medium=' . $medium . '&utm_campaign=' . $campaign; + $char = strpos($url, "?") === false ? "?" : "&"; + + return $url . $char . $utm; + } + + /** + * Returns user's Download Key + * + * @return string + */ + public static function getDownloadKey() + { + $class = new Updatesites(); + return $class->getDownloadKey(); + } + + /** + * Adds a script or a stylesheet to the document + * + * @param Mixed $files The files to be to added to the document + * @param boolean $appendVersion Adds file versioning based on extension's version + * + * @return void + */ + public static function addMedia($files, $extension = "plg_system_nrframework", $appendVersion = true) + { + $doc = \JFactory::getDocument(); + $version = self::getExtensionVersion($extension); + $mediaPath = \JURI::root(true) . "/media/" . $extension; + + if (!is_array($files)) + { + $files = array($files); + } + + foreach ($files as $key => $file) + { + $fileExt = \JFile::getExt($file); + $filename = $mediaPath . "/" . $fileExt . "/" . $file; + $filename = ($appendVersion) ? $filename . "?v=" . $version : $filename; + + if ($fileExt == "js") + { + $doc->addScript($filename); + } + + if ($fileExt == "css") + { + $doc->addStylesheet($filename); + } + } + } + + /** + * Get the Framework version + * + * @return string The framework version + */ + public static function getVersion() + { + return self::getExtensionVersion("plg_system_nrframework"); + } + + /** + * Checks if document is a feed document (xml, rss, atom) + * + * @return boolean + */ + public static function isFeed() + { + return ( + \JFactory::getDocument()->getType() == 'feed' + || \JFactory::getDocument()->getType() == 'xml' + || \JFactory::getApplication()->input->getWord('format') == 'feed' + || \JFactory::getApplication()->input->getWord('type') == 'rss' + || \JFactory::getApplication()->input->getWord('type') == 'atom' + ); + } + + public static function loadLanguage($extension = 'plg_system_nrframework', $basePath = '') + { + if ($basePath && \JFactory::getLanguage()->load($extension, $basePath)) + { + return true; + } + + $basePath = self::getExtensionPath($extension, $basePath, 'language'); + + return \JFactory::getLanguage()->load($extension, $basePath); + } + + /** + * Returns extension ID + * + * @param string $extension Extension name + * + * @return integer + * + * @deprecated Use \NRFramework\Extension::getID instead + */ + public static function getExtensionID($extension, $folder = null) + { + $type = is_null($folder) ? 'component' : 'plugin'; + return \NRFramework\Extension::getID($extension, $type, $folder); + } + + /** + * Checks if extension is installed + * + * @param string $extension The extension element name + * @param string $type The extension's type + * @param string $folder Plugin folder * + * + * @return boolean Returns true if extension is installed + * + * @deprecated Use \NRFramework\Extension::isInstalled instead + */ + public static function extensionInstalled($extension, $type = 'component', $folder = 'system') + { + return \NRFramework\Extension::isInstalled($extension, $type, $folder); + } + + /** + * Returns the version number from the extension's xml file + * + * @param string $extension The extension element name + * + * @return string Extension's version number + */ + public static function getExtensionVersion($extension, $type = false) + { + $hash = MD5($extension . "_" . ($type ? "1" : "0")); + $cache = Cache::read($hash); + + if ($cache) + { + return $cache; + } + + $xml = self::getExtensionXMLFile($extension); + + if (!$xml) + { + return false; + } + + $xml = \JInstaller::parseXMLInstallFile($xml); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + $version = $xml['version']; + + if ($type) + { + $extType = Extension::isPro($extension) ? 'Pro' : 'Free'; + $version = $xml["version"] . " " . $extType; + } + + return Cache::set($hash, $version); + } + + public static function getExtensionXMLFile($extension, $basePath = JPATH_ADMINISTRATOR) + { + $alias = explode("_", $extension); + $alias = end($alias); + + $filename = (strpos($extension, 'mod_') === 0) ? "mod_" . $alias : $alias; + $file = self::getExtensionPath($extension, $basePath) . "/" . $filename . ".xml"; + + if (\JFile::exists($file)) + { + return $file; + } + + return false; + } + + /** + * @deprecated // Use Extension::isPro(); + */ + public static function extensionHasProInstalled($extension) + { + return Extension::isPro($extension); + } + + public static function getExtensionPath($extension = 'plg_system_nrframework', $basePath = JPATH_ADMINISTRATOR, $check_folder = '') + { + switch (true) + { + case (strpos($extension, 'com_') === 0): + $path = 'components/' . $extension; + break; + + case (strpos($extension, 'mod_') === 0): + $path = 'modules/' . $extension; + break; + + case (strpos($extension, 'plg_system_') === 0): + $path = 'plugins/system/' . substr($extension, strlen('plg_system_')); + break; + + case (strpos($extension, 'plg_editors-xtd_') === 0): + $path = 'plugins/editors-xtd/' . substr($extension, strlen('plg_editors-xtd_')); + break; + } + + $check_folder = $check_folder ? '/' . $check_folder : ''; + $basePath = empty($basePath) ? JPATH_ADMINISTRATOR : $basePath; + + if (is_dir($basePath . '/' . $path . $check_folder)) + { + return $basePath . '/' . $path; + } + + if (is_dir(JPATH_ADMINISTRATOR . '/' . $path . $check_folder)) + { + return JPATH_ADMINISTRATOR . '/' . $path; + } + + if (is_dir(JPATH_SITE . '/' . $path . $check_folder)) + { + return JPATH_SITE . '/' . $path; + } + + return $basePath; + } + + public static function loadModule($id, $moduleStyle = null) + { + // Return if no module id passed + if (!$id) + { + return; + } + + // Fetch module from db + $db = \JFactory::getDBO(); + $query = $db->getQuery(true) + ->select('*') + ->from('#__modules') + ->where('id='.$db->q($id)); + + $db->setQuery($query); + + // Return if no modules found + if (!$module = $db->loadObject()) + { + return; + } + + // Success! Return module's html + return \JModuleHelper::renderModule($module, $moduleStyle); + } + + public static function fixDate(&$date) + { + if (!$date) + { + $date = null; + + return; + } + + $date = trim($date); + + // Check if date has correct syntax: 00-00-00 00:00:00 + if (preg_match('#^[0-9]+-[0-9]+-[0-9]+( [0-9][0-9]:[0-9][0-9]:[0-9][0-9])$#', $date)) + { + return; + } + + // Check if date has syntax: 00-00-00 00:00 + // If so, add :00 (seconds) + if (preg_match('#^[0-9]+-[0-9]+-[0-9]+ [0-9][0-9]:[0-9][0-9]$#', $date)) + { + $date .= ':00'; + + return; + } + + // Check if date has a prepending date syntax: 00-00-00 ... + // If so, add 00:00:00 (hours:mins;secs) + if (preg_match('#^([0-9]+-[0-9]+-[0-9]+)#', $date, $match)) + { + $date = $match[1] . ' 00:00:00'; + + return; + } + + // Date format is not correct, so return null + $date = null; + } + + public static function fixDateOffset(&$date) + { + if ($date <= 0) + { + $date = 0; + + return; + } + + $date = \JFactory::getDate($date, \JFactory::getUser()->getParam('timezone', \JFactory::getConfig()->get('offset'))); + $date->setTimezone(new \DateTimeZone('UTC')); + + $date = $date->format('Y-m-d H:i:s', true, false); + } + + // Text + public static function clean($string) + { + $string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. + return preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. + } + + public static function dateTimeNow() + { + return \JFactory::getDate()->format("Y-m-d H:i:s"); + } + + /** + * Get framework plugin's parameters + * + * @return JRegistry The plugin parameters + */ + public static function params() + { + $hash = md5('frameworkParams'); + + if (Cache::has($hash)) + { + return Cache::read($hash); + } + + $db = \JFactory::getDBO(); + + $result = $db->setQuery( + $db->getQuery(true) + ->select('params') + ->from('#__extensions') + ->where('element = ' . $db->quote('nrframework')) + )->loadResult(); + + return Cache::set($hash, new Registry($result)); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/HTML.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/HTML.php new file mode 100644 index 00000000..b9542821 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/HTML.php @@ -0,0 +1,477 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +// No direct access +defined('_JEXEC') or die; + +use NRFramework\Cache; +use NRFramework\Functions; +use NRFramework\Extension; +use Joomla\CMS\Language\Text; + +class HTML +{ + /** + * Display field help text as tooltip in Joomla 4 + * + * @return void + */ + public static function fixFieldTooltips() + { + // Run once + static $run; + + if ($run) + { + return; + } + + $run = true; + + \JHtml::_('bootstrap.popover'); + + $doc = \JFactory::getDocument(); + + $doc->addStyleDeclaration(' + .form-text, .form-control-feedback { + display:none; + } + .tooltip .arrow:before { + border-top-color:#444; + border-bottom-color:#444; + } + .tooltip-inner { + text-align: left; + background-color: #444; + padding: 7px 9px; + max-width:300px; + } + '); + + $doc->addScriptDeclaration(' + document.addEventListener("DOMContentLoaded", function() { + initPopover(); + + document.addEventListener("joomla:updated", initPopover); + + function initPopover(event) { + var target = event && event.target ? event.target : document; + var fields = target.querySelectorAll(".control-group"); + + fields.forEach(function(field) { + var desc = field.querySelector(".form-text"); + + if (desc) { + var label = field.querySelector("label"); + + if (label) { + label.classList.add("tTooltip"); + label.setAttribute("title", desc.innerHTML); + } + } + }); + + jQuery(target).find(".tTooltip").tooltip({ + placement: "top", + html: true, + delay: { + show: 200 + } + }); + } + }); + '); + } + + public static function updateNotification($extension) + { + $version_installed = Extension::getVersion($extension); + $version_latest = Extension::getLatestVersion($extension); + + if (!$needsUpdate = version_compare($version_latest, $version_installed, 'gt')) + { + return; + } + + // Load extension's language file + Functions::loadLanguage($extension); + + // Extension Title + $title = Text::_($extension); + $title = str_replace('System -', '', $title); // Remove plugin folder prefix from plugins + + // Render Layout + $data = [ + 'title' => $title, + 'version_installed' => $version_installed, + 'version_latest' => $version_latest, + 'ispro' => Extension::isPro($extension), + 'upgradeurl' => Extension::getTassosExtensionUpgradeURL($extension), + 'product_url' => Extension::getProductURL($extension) + ]; + + return \JLayoutHelper::render('updatechecker', $data, JPATH_PLUGINS . '/system/nrframework/layouts'); + } + + /** + * Displays a warning when an extension is outdated. + * + * @param string $extension + * @param int $days_old + * + * @return mixed + */ + public static function checkForOutdatedExtension($extension, $days_old = 120) + { + if (!Extension::isOutdated($extension, $days_old)) + { + return; + } + + // Load extension's language file + Functions::loadLanguage($extension); + + $payload = [ + 'extension' => \JText::_($extension), + 'days_old' => $days_old + ]; + + // load template + return \JLayoutHelper::render('outdated_extension', $payload, dirname(__DIR__) . '/layouts'); + } + + /** + * Checks if the given extension has a newer version available through an AJAX request. + * + * @param string $element + * + * @return string + */ + public static function checkForUpdates($element) + { + \JHtml::script('plg_system_nrframework/updatechecker.js', ['relative' => true, 'version' => true]); + \JHtml::stylesheet('plg_system_nrframework/updatechecker.css', ['relative' => true, 'version' => true]); + + return ' +
        +
        + '; + } + + /** + * Renders Pro Button + * + * @param string $feature_label The text that will be used as the modal popup feature + * + * @return void + */ + public static function renderProButton($feature_label = null) + { + include_once JPATH_PLUGINS . '/system/nrframework/fields/pro.php'; + + $field = new \JFormFieldNR_PRO; + $element = new \SimpleXMLElement(' + '); + + $field->setup($element, null); + + echo $field->__get('input'); + } + + /** + * Renders a modal that will be shown on Pro only features + * + * @return void + */ + public static function renderProOnlyModal() + { + $hash = 'proOnlyModal'; + + // Render modal once + if (Cache::get($hash)) + { + return; + } + + $options = [ + 'extension_name' => Extension::getExtensionNameByRequest(true), + 'upgrade_url' => Extension::getTassosExtensionUpgradeURL() + ]; + + $html = \JLayoutHelper::render('proonlymodal', $options, dirname(__DIR__) . '/layouts'); + + echo \JHtml::_('bootstrap.renderModal', 'proOnlyModal', ['backdrop' => 'static'], $html); + + Cache::set($hash, true); + } + + public static function smartTagsBox($options = array()) + { + \JHtml::_('jquery.framework'); + + include_once JPATH_PLUGINS . '/system/nrframework/fields/smarttagsbox.php'; + + $field = new \JFormFieldSmartTagsBox; + $element = new \SimpleXMLElement(''); + + $field->setup($element, null); + + return $field->__get('input'); + } + + /** + * Construct the HTML for the input field in a tree + * Logic from administrator\components\com_modules\views\module\tmpl\edit_assignment.php + */ + public static function treeselect(&$options, $name, $value, $id, $size = 300, $simple = 0) + { + Functions::loadLanguage('com_menus', JPATH_ADMINISTRATOR); + Functions::loadLanguage('com_modules', JPATH_ADMINISTRATOR); + + if (empty($options)) + { + return '
        ' . \JText::_('NR_NO_ITEMS_FOUND') . '
        '; + } + + if (!is_array($value)) + { + $value = explode(',', $value); + } + + $count = 0; + if ($options != -1) + { + foreach ($options as $option) + { + $count++; + if (isset($option->links)) + { + $count += count($option->links); + } + } + } + + if ($options == -1) + { + if (is_array($value)) + { + $value = implode(',', $value); + } + if (!$value) + { + $input = ''; + } + else + { + $input = ''; + } + + return '
        ' . $input . '
        '; + } + + if ($simple) + { + $attr = 'style="width: ' . $size . 'px" multiple="multiple"'; + + $html = \JHtml::_('select.genericlist', $options, $name, trim($attr), 'value', 'text', $value, $id); + + return $html; + } + + \JHtml::script('plg_system_nrframework/treeselect.js', ['relative' => true, 'version' => true]); + \JHtml::stylesheet('plg_system_nrframework/treeselect.css', ['relative' => true, 'version' => true]); + + $html = array(); + + $html[] = '
        '; + $html[] = ' + '; + + $o = array(); + foreach ($options as $option) + { + $option->level = isset($option->level) ? $option->level : 0; + $o[] = $option; + if (isset($option->links)) + { + foreach ($option->links as $link) + { + $link->level = $option->level + (isset($link->level) ? $link->level : 1); + $o[] = $link; + } + } + } + + $html[] = '
          '; + $prevlevel = 0; + + foreach ($o as $i => $option) + { + if ($prevlevel < $option->level) + { + // correct wrong level indentations + $option->level = $prevlevel + 1; + + $html[] = '
            '; + } + else if ($prevlevel > $option->level) + { + $html[] = str_repeat('
          ', $prevlevel - $option->level); + } + else if ($i) + { + $html[] = ''; + } + + $labelclass = trim('pull-left ' . (isset($option->labelclass) ? $option->labelclass : '')); + + $html[] = '
        • '; + + $item = '
          '; + if (isset($option->title)) + { + $labelclass .= ' nav-header'; + } + + if (isset($option->title) && (!isset($option->value) || !$option->value)) + { + $item .= ''; + } + else + { + $selected = in_array($option->value, $value) ? ' checked="checked"' : ''; + $disabled = (isset($option->disable) && $option->disable) ? ' readonly="readonly" style="visibility:hidden"' : ''; + + $item .= ' + '; + } + $item .= '
          '; + $html[] = $item; + + if (!isset($o[$i + 1]) && $option->level > 0) + { + $html[] = str_repeat('
        ', (int) $option->level); + } + $prevlevel = $option->level; + } + $html[] = ''; + $html[] = ' + '; + $html[] = '
        '; + + $html = implode('', $html); + return $html; + } + + public static function treeselectSimple(&$options, $name, $value, $id, $size = 300) + { + return self::treeselect($options, $name, $value, $id, $size, 1); + } + + /** + * Wrapper for the JHtml::script method to support old method signatures in Joomla < 3.7.0. + * + * @param string $path + * + * @deprecated Since we no longer support 3.7.0, use JHtml::script directly. + * @return void + */ + public static function script($path) + { + if (version_compare(JVERSION, '3.7.0', 'lt')) + { + \JHtml::script($path, false, true); + } else + { + \JHtml::script($path, ['relative' => true, 'version' => 'auto']); + } + } + + /** + * Wrapper for the JHtml::stylesheet method to support old method signatures in Joomla < 3.7.0. + * + * @param string $path + * + * @return void + * @deprecated Since we no longer support 3.7.0, use JHtml::script directly. + */ + public static function stylesheet($path) + { + if (version_compare(JVERSION, '3.7.0', 'lt')) + { + \JHtml::stylesheet($path, false, true); + } else + { + \JHtml::stylesheet($path, ['relative' => true, 'version' => 'auto']); + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ActiveCampaign.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ActiveCampaign.php new file mode 100644 index 00000000..84d3d1c5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ActiveCampaign.php @@ -0,0 +1,417 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class ActiveCampaign extends Integration +{ + /** + * Create a new instance + * @param array $options The service's required options + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options); + $this->setEndpoint($options['endpoint'] . '/api/3'); + $this->options->set('headers.Api-Token', $this->key); + } + + /** + * Subscribe user to ActiveCampaign List + * + * https://developers.activecampaign.com/v3/reference#create-contact + * + * @param string $email The Email of the Contact + * @param string $name The name of the Contact (Name can be also declared in Custom Fields) + * @param string $list List ID + * @param string $tags Tags for this contact (comma-separated). Example: "tag1, tag2, etc" + * @param array $customfields Custom Fields + * @param boolean $updateexisting Update Existing User + * + * @return void + */ + public function subscribe($email, $name = null, $lists, $tags = '', $customfields = array(), $updateexisting) + { + // Detect name + $name = (is_null($name) || empty($name)) ? $this->getNameFromCustomFields($customfields) : explode(' ', $name, 2); + $apiAction = ($updateexisting) ? 'contact/sync' : 'contacts'; + + $data = [ + 'contact' => [ + 'email' => $email, + 'firstName' => isset($name[0]) ? $name[0] : null, + 'lastName' => isset($name[1]) ? $name[1] : null, + 'phone' => $this->getCustomFieldValue('phone', $customfields) + ], + ]; + + $this->post($apiAction, $data); + + if (!$this->request_successful) + { + return; + } + + // Retrive the contact's ID + $contact_id = $this->getContactIDFromResponse(); + + // Add Lists to Contact + $this->addListsToContact($contact_id, $lists); + + // Add Tags to Contact + if (!empty($tags)) + { + $tags = is_array($tags) ? $tags : explode(',', $tags); + + $tag_ids = $this->convertTagNamesToIDs($tags); + + if ($tag_ids && !empty($tag_ids)) + { + $this->addTagsToContact($tag_ids, $contact_id); + } + } + + // Add Custom Fields to Contact + $this->addCustomFieldsToContact($customfields, $contact_id); + } + + /** + * Update Custom Field Values for a Contact + * + * API Reference: https://developers.activecampaign.com/v3/reference#fieldvalues + * + * @param array $custom_fields Array of custom field values + * @param integer $contact_id The contact's ID + * + * @return mixed Null on failure, void on success + */ + private function addCustomFieldsToContact($custom_fields, $contact_id) + { + if (empty($custom_fields)) + { + return; + } + + $custom_fields = array_change_key_case($custom_fields); + + if (!$all_custom_fields = $this->getAllCustomFields()) + { + return; + } + + foreach ($custom_fields as $custom_field_key => $custom_field_value) + { + if (empty($custom_field_value)) + { + continue; + } + + $custom_field = strtolower(trim($custom_field_key)); + + if (!array_key_exists($custom_field, $all_custom_fields)) + { + continue; + } + + // Let's add Custom Field to our contact + $custom_field_data = $all_custom_fields[$custom_field]; + + // Radio buttons expect a string. Not an array. + if ($custom_field_data['type'] == 'checkbox' && is_array($custom_field_value)) + { + $custom_field_value = implode('||', $custom_field_value); + $custom_field_value = '||' . $custom_field_value . '||'; + } + + $this->post('fieldValues', [ + 'fieldValue' => [ + 'contact' => $contact_id, + 'field' => $custom_field_data['id'], + 'value' => $custom_field_value + ] + ]); + } + } + + /** + * Add tags to contact + * + * API Reference: https://developers.activecampaign.com/v3/reference#create-contact-tag + * + * @param array $tag_ids Array of tag IDs + * @param integer $contact_id The contact's ID + * + * @return void + */ + private function addTagsToContact($tag_ids, $contact_id) + { + foreach ($tag_ids as $tag_id) + { + $this->post('contactTags', [ + 'contactTag' => [ + 'contact' => $contact_id, + 'tag' => $tag_id, + ] + ]); + } + } + + /** + * Convert a list of tag names to tag IDs + * + * @param array $tags Array ot tag names + * + * @return mixed Null on failure, assosiative tag name-based array on success. + */ + private function convertTagNamesToIDs($tags) + { + if (!$account_tags = $this->getAllTags()) + { + return; + } + + $account_tags = array_map('strtolower', $account_tags); + + $tag_ids = []; + + foreach ($tags as $tag) + { + if (empty($tag)) + { + continue; + } + + $tag = strtolower(trim($tag)); + + if (!$tag_id = array_search($tag, $account_tags)) + { + continue; + } + + $tag_ids[] = $tag_id; + } + + return $tag_ids; + } + + /** + * Retrieve all contact-based tags + * + * API Reference: https://developers.activecampaign.com/v3/reference#list-all-tasks + * + * @return mixed Null on failure, assosiative array on success + */ + private function getAllTags() + { + $tags = $this->get('tags'); + + if (!$tags || !is_array($tags) || !isset($tags['tags'])) + { + return; + } + + $tags_ = []; + + foreach ($tags['tags'] as $tag) + { + if ($tag['tagType'] != 'contact') + { + continue; + } + + $tags_[$tag['id']] = $tag['tag']; + } + + return $tags_; + } + + /** + * Add lists to contact + * + * @param integer $contact_id The Active Campaign Contact ID + * @param mixed $lists The list ID to add the contact to. + * + * @return void + */ + private function addListsToContact($contact_id, $lists) + { + $lists = is_array($lists) ? $lists : explode(',', $lists); + + foreach ($lists as $list) + { + $this->post('contactLists', [ + 'contactList' => [ + 'list' => $list, + 'contact' => $contact_id, + 'status' => 1 + ] + ]); + } + } + + /** + * Determine the newly created contact's ID + * + * @return string + */ + private function getContactIDFromResponse() + { + $response = $this->last_response; + + if (isset($response->body) && isset($response->body['contact']) && isset($response->body['contact']['id'])) + { + return $response->body['contact']['id']; + } + } + + /** + * Search for First Name and Last Name in Custom Fields and return an array with both values. + * + * @param array $customfields The Custom Fields array passed by the user. + * + * @return array + */ + private function getNameFromCustomFields($customfields) + { + return [ + (string) $this->getCustomFieldValue(['first_name', 'First Name'], $customfields), + (string) $this->getCustomFieldValue(['last_name', 'Last Name'], $customfields) + ]; + } + + /** + * Retrieve all account lists + * + * API Reference: https://developers.activecampaign.com/v3/reference#retrieve-all-lists + * + * @return mixed Null on failure, Array on success + */ + public function getLists() + { + $data = $this->get('lists'); + + if (!$data || !isset($data['lists']) || count($data['lists']) == 0) + { + return; + } + + $lists = []; + + foreach ($data['lists'] as $list) + { + $lists[] = [ + 'id' => $list['id'], + 'name' => $list['name'] + ]; + } + + return $lists; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * API Reference: https://developers.activecampaign.com/v3/reference#errors + * + * @return string + */ + public function getLastError() + { + $error_code = $this->last_response->code; + $error_message = 'Active Campaign Error'; + + switch ((int) $error_code) + { + case 403: + $error_message = 'The request could not be authenticated or the authenticated user is not authorized to access the requested resource.'; + break; + case 404: + $error_message = 'The requested resource does not exist.'; + break; + case 422: + $error_message = 'The request could not be processed, usually due to a missing or invalid parameter.'; + + if (isset($this->last_response->body['errors']) && isset($this->last_response->body['errors'][0])) + { + $error_message = $this->last_response->body['errors'][0]['title']; + } + + break; + } + + return $error_message; + } + + /** + * Returns the Active Campaign Account's Custom Fields + * + * API Reference: https://developers.activecampaign.com/v3/reference#retrieve-fields-1 + * + * @return array + */ + public function getAllCustomFields() + { + $fields = $this->get('fields'); + + if (!$fields || !isset($fields['fields'])) + { + return; + } + + + // Make our life easier by creating a title-based assosiative array + $f = []; + + foreach ($fields['fields'] as $key => $field) + { + if (!$field || !isset($field['title'])) + { + continue; + } + + $key = strtolower(trim($field['title'])); + + $f[$key] = $field; + } + + return $f; + } + + /** + * Make an HTTP GET request for retrieving data. + * + * ActiveCampaign has a limit of max 100 results per page. + * https://developers.activecampaign.com/reference#pagination + * + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (usually your data) + * + * @return array|false Assoc array of API response, decoded from JSON + */ + public function get($method, $args = array()) + { + $args['limit'] = isset($args['limit']) ? $args['limit'] : 100; + $args['offset'] = isset($args['offset']) ? $args['offset'] : 0; + + $response = parent::get($method, $args); + + if ($args['offset'] < (int) $response['meta']['total']) + { + $args['offset'] += $args['limit']; + $response_next = $this->get($method, $args); + $response[$method] = array_merge($response[$method], $response_next[$method]); + } + + return $response; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/CampaignMonitor.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/CampaignMonitor.php new file mode 100644 index 00000000..bbd44e1f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/CampaignMonitor.php @@ -0,0 +1,205 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class CampaignMonitor extends Integration +{ + /** + * Create a new instance + * + * @param array $options The service's required options + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options); + $this->setEndpoint('https://api.createsend.com/api/v3.1'); + $this->options->set('userauth', $this->key); + $this->options->set('passwordauth', 'nopass'); + } + + /** + * Subscribe user to Campaign Monitor + * + * API References: + * https://www.campaignmonitor.com/api/subscribers/#importing_many_subscribers + * Reminder: + * The classic add_subscriber method of Campaign Monitor's API is NOT instantaneous! + * It is suggested to use their import method for instantaneous subscriptions! + * + * @param string $email User's email address + * @param string $name User's Name + * @param string $list The Campaign Monitor list unique ID + * @param array $custom_fields Custom Fields + * + * @return void + */ + public function subscribe($email, $name, $list, $customFields = array()) + { + $data = array( + 'Subscribers' => array( + array( + 'EmailAddress' => $email, + 'Name' => $name, + 'Resubscribe' => true, + ), + ), + ); + + if (is_array($customFields) && count($customFields)) + { + $data['Subscribers'][0]['CustomFields'] = $this->validateCustomFields($customFields, $list); + } + + $this->post('subscribers/' . $list . '/import.json', $data); + + return true; + } + + /** + * Returns a new array with valid only custom fields + * + * @param array $formCustomFields Array of custom fields + * + * @return array Array of valid only custom fields + */ + public function validateCustomFields($formCustomFields, $list) + { + $fields = array(); + + if (!is_array($formCustomFields)) + { + return $fields; + } + + $listCustomFields = $this->get('lists/' . $list . '/customfields.json'); + + if (!$this->request_successful) + { + return $fields; + } + + $formCustomFieldsKeys = array_keys($formCustomFields); + + foreach ($listCustomFields as $listCustomField) + { + $field_name = $listCustomField['FieldName']; + + if (!in_array($field_name, $formCustomFieldsKeys)) + { + continue; + } + + $value = $formCustomFields[$field_name]; + + // Always convert custom field value to array, to support multiple values in a custom field. + $value = is_array($value) ? $value : (array) $value; + + foreach ($value as $val) + { + $fields[] = array( + 'Key' => $field_name, + 'Value' => $val, + ); + } + } + + return $fields; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + $message = ''; + + if (isset($body['Message'])) + { + $message = $body['Message']; + } + + if (isset($body['ResultData']['FailureDetails'][0]['Message'])) + { + $message .= ' - ' . $body['ResultData']['FailureDetails'][0]['Message']; + } + + return $message; + } + + /** + * Returns all Client lists + * + * https://www.campaignmonitor.com/api/clients/#getting-subscriber-lists + * + * @return array + */ + public function getLists() + { + $clients = $this->getClients(); + + if (!is_array($clients)) + { + return; + } + + $lists = array(); + + foreach ($clients as $key => $client) + { + if (!isset($client['ClientID'])) + { + continue; + } + + $clientLists = $this->get('/clients/' . $client['ClientID'] . '/lists.json'); + + if (!is_array($clientLists)) + { + continue; + } + + foreach ($clientLists as $key => $clientList) + { + $lists[] = array( + 'id' => $clientList['ListID'], + 'name' => $clientList['Name'] + ); + } + } + + return $lists; + } + + /** + * Get Clients + * + * https://www.campaignmonitor.com/api/account/ + * + * @return mixed Array on success, Null on fail + */ + private function getClients() + { + $clients = $this->get('/clients.json'); + + if (!$this->success()) + { + return; + } + + return $clients; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ConvertKit.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ConvertKit.php new file mode 100644 index 00000000..d59c1783 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ConvertKit.php @@ -0,0 +1,161 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +use Joomla\String\StringHelper; + +class ConvertKit extends Integration +{ + /** + * Create a new instance + * + * @param string $api_key Your ConvertKit API Key + */ + public function __construct($api_key) + { + parent::__construct(); + + $this->setKey($api_key); + $this->setEndpoint('https://api.convertkit.com/v3'); + } + + /** + * Subscribe a user to a ConvertKit Form + * + * API Reference: + * http://help.convertkit.com/article/33-api-documentation-v3 + * + * @param string $email The subscriber's email + * @param string $formid The account owner's form id + * @param array $params The form's parameters + * + * @return boolean + */ + public function subscribe($email, $formid, $params) + { + $first_name = (isset($params['first_name'])) ? $params['first_name'] : ''; + $tags = (isset($params['tags'])) ? $this->convertTagnamesToTagIDs($params['tags']) : ''; + $fields = $this->validateCustomFields($params); + + $data = array( + 'api_key' => $this->key, + 'email' => $email, + 'first_name' => $first_name, + 'tags' => $tags, + 'fields' => $fields, + ); + + $this->post('forms/' . $formid . '/subscribe', $data); + + return true; + } + + /** + * Converts tag names to tag IDs for the subscribe method + * + * @param string $tagnames comma separated list of tagnames + * + * @return string comma separated list of tag IDs + */ + public function convertTagnamesToTagIDs($tagnames) + { + if (empty($tagnames)) + { + return; + } + + $tagArray = !is_array($tagnames) ? explode(',', $tagnames) : $tagnames; + $tagnames = array_map('trim', $tagArray); + $accountTags = $this->get('tags', array('api_key' => $this->key)); + + if (empty($accountTags) || !$this->request_successful) + { + return; + } + + $tagIDs = array(); + + foreach ($accountTags['tags'] as $tag) + { + foreach ($tagnames as $tagname) + { + if (StringHelper::strcasecmp($tag['name'], $tagname) == 0) + { + $tagIDs[] = $tag['id']; + break; + } + } + } + + return implode(',', $tagIDs); + } + + /** + * Returns a new array with valid only custom fields + * + * @param array $formCustomFields Array of custom fields + * + * @return array Array of valid only custom fields + */ + public function validateCustomFields($formCustomFields) + { + if (!is_array($formCustomFields)) + { + return; + } + + $customFields = $this->get('custom_fields', array('api_key' => $this->key)); + + if (!$this->request_successful) + { + return; + } + + $fields = array(); + + $formCustomFieldsKeys = array_keys($formCustomFields); + + foreach ($customFields['custom_fields'] as $customField) + { + if (in_array($customField['key'], $formCustomFieldsKeys)) + { + $fields[$customField['key']] = $formCustomFields[$customField['key']]; + } + } + + return $fields; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + $message = ''; + + if (isset($body['error']) && !empty($body['error'])) + { + $message = $body['error']; + } + + if (isset($body['message']) && !empty($body['message'])) + { + $message .= ' - ' . $body['message']; + } + + return $message; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Drip.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Drip.php new file mode 100644 index 00000000..dc85c788 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Drip.php @@ -0,0 +1,285 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class Drip extends Integration +{ + /** + * Create a new instance + * + * @param string $key Your Drip API key + * @param string $account_id Your Drip Account ID + */ + public function __construct($options) + { + parent::__construct(); + + if (!(isset($options['api']) && isset($options['account_id']))) { + return; + } + + $this->setKey($options['api']); + $this->setEndpoint('http://api.getdrip.com/v2/' . $options['account_id']); + $this->options->set('headers.Authorization', 'Basic ' . base64_encode($this->key)); + } + + /** + * Subscribe user to Drip + * + * API References: + * https://developer.drip.com/#create-or-update-a-subscriber + * + * @param string $email User's email address + * @param string $campaign_id The Campaign ID + * @param string $name The name of the Contact (Name can be also declared in Custom Fields) + * @param Object $custom_fields Custom Fields + * @param mixed $tags Tags for this contact (comma-separated). Example: 'tag1, tag2, etc' + * @param boolean $update_existing Update existing user + * @param boolean $double_optin Send MailChimp confirmation email? + * + * @return void + */ + public function subscribe($email, $campaign_id, $name = null, $custom_fields = array(), $tags = '', $update_existing = true, $double_optin = false) + { + // Detect name + $name = (is_null($name) || empty($name)) ? $this->getNameFromCustomFields($custom_fields) : explode(' ', $name, 2); + + // We use this boolean to see if the user has subscribed the campaign + // This is used for the `update_existing` parameter + $subscriber_exists = $this->subscriberIsInCampaign($email, $campaign_id); + + // Check if we need to update the user + if ($update_existing == false && $subscriber_exists) + { + throw new \Exception(\JText::_('PLG_CONVERTFORMS_DRIP_SUBSCRIBER_ALREADY_EXISTS'), 1); + } + + // Remove tags from custom fields + $custom_fields_parse = $custom_fields; + if (isset($custom_fields_parse['tags'])) + { + unset($custom_fields_parse['tags']); + } + + // Create or Update a Subscriber + $data = [ + 'subscribers' => [ + [ + 'email' => $email, + 'first_name' => isset($name[0]) ? $name[0] : '', + 'last_name' => isset($name[1]) ? $name[1] : '', + 'address1' => $this->getCustomFieldValue('address1', $custom_fields), + 'address2' => $this->getCustomFieldValue('address2', $custom_fields), + 'city' => $this->getCustomFieldValue('city', $custom_fields), + 'state' => $this->getCustomFieldValue('state', $custom_fields), + 'zip' => $this->getCustomFieldValue('zip', $custom_fields), + 'country' => $this->getCustomFieldValue('country', $custom_fields), + 'phone' => $this->getCustomFieldValue('phone', $custom_fields), + 'custom_fields' => $custom_fields_parse, + 'tags' => $this->getTags($tags) + ] + ] + ]; + + $this->post('subscribers', $data); + + // If we are updating a user, dont try re-assigning him to a campaign + // If we are updating a user but he just subscribed, then assign him to a campaign + if ($update_existing == false || $subscriber_exists == false) + { + // Assign the newly created subscriber to the campaign + $this->assignSubscriberToCampaign($email, $campaign_id, $double_optin); + } + + + return true; + } + + /** + * Assign a Subscriber to a Campaign + * + * https://developer.drip.com/?shell#subscribe-someone-to-a-campaign + * + * @return void + */ + private function assignSubscriberToCampaign($email, $campaign_id, $double_optin) + { + + // Subscribe user to a campaign + $campaignSubAPI = 'campaigns/' . $campaign_id . '/subscribers'; + + $data = [ + 'subscribers' => [ + [ + 'email' => $email, + 'double_optin' => (bool) $double_optin + ] + ] + ]; + + $this->post($campaignSubAPI, $data); + } + + /** + * Returns an array of tags or an empty string if no tags provided + * + * @return mixed + */ + private function getTags($tags) { + + if (empty($tags)) + { + return; + } + + if (is_string($tags)) + { + $tags = array_map('trim', explode(',', $tags)); + } + + return $tags; + } + + /** + * Returns whether the subscriber is in a campaign + * + * https://developer.drip.com/?shell#list-all-of-a-subscriber-39-s-campaign-subscriptions + * + * @return bool + */ + private function subscriberIsInCampaign($email, $campaign_id) + { + $found_campaign = false; + + $subscriber_id = $this->getSubscriberIdFromEmail($email); + + // Use does not exist in Drip + if (empty($subscriber_id)) + { + return false; + } + + $subscriber_campaigns = $this->getSubscriberCampaigns($subscriber_id); + + foreach ($subscriber_campaigns as $c) + { + if ($c['campaign_id'] == $campaign_id) + { + $found_campaign = true; + break; + } + } + + return $found_campaign; + + } + + /** + * Returns the ID of the subscriber from email + * + * https://developer.drip.com/?shell#fetch-a-subscriber + * + * @return string + */ + private function getSubscriberIdFromEmail($email) + { + $data = $this->get('subscribers/' . $email); + + return isset($data['subscribers']) ? $data['subscribers'][0]['id'] : ''; + } + + /** + * Returns all subscriber's campaigns + * + * https://developer.drip.com/?javascript#list-all-of-a-subscriber-39-s-campaign-subscriptions + * + * @return array + */ + private function getSubscriberCampaigns($subscriberId) + { + $data = $this->get('subscribers/' . $subscriberId . '/campaign_subscriptions'); + + return isset($data['campaign_subscriptions']) ? $data['campaign_subscriptions'] : array(); + } + + /** + * Returns all available Drip campaigns + * + * https://developer.drip.com/?shell#list-all-campaigns + * + * @return array + */ + public function getLists() + { + $data = $this->get('campaigns'); + + if (!$this->success()) + { + return; + } + + if (!isset($data['campaigns']) || !is_array($data['campaigns'])) + { + return; + } + + $campaigns = []; + + foreach ($data['campaigns'] as $key => $campaign) + { + $campaigns[] = array( + 'id' => $campaign['id'], + 'name' => $campaign['name'] + ); + } + + return $campaigns; + } + + /** + * Search for First Name and Last Name in Custom Fields and return an array with both values. + * + * @param array $custom_fields The Custom Fields array passed by the user. + * + * @return array + */ + private function getNameFromCustomFields($custom_fields) + { + return [ + (string) $this->getCustomFieldValue(['first_name', 'First Name'], $custom_fields), + (string) $this->getCustomFieldValue(['last_name', 'Last Name'], $custom_fields) + ]; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + + $messages = ''; + + if (isset($body['errors'])) + { + foreach ($body['errors'] as $error) + { + $messages .= ' - ' . $error['message']; + } + } + + return $messages; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ElasticEmail.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ElasticEmail.php new file mode 100644 index 00000000..b307902d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ElasticEmail.php @@ -0,0 +1,182 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class ElasticEmail extends Integration +{ + protected $endpoint = 'https://api.elasticemail.com/v2'; + + /** + * Create a new instance + * + * @param array $options The service's required options + * @throws \Exception + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options); + } + + /** + * Subscribe user to ElasticEmail + * + * API References: + * http://api.elasticemail.com/public/help#Contact_Add + * http://api.elasticemail.com/public/help#Contact_Update + * + * @param string $email User's email address + * @param string $list The ElasticEmail List unique ID + * @param string $publicAccountID The ElasticEmail PublicAccountID + * @param array $params The form's parameters + * @param boolean $update_existing Update existing user + * @param boolean $double_optin Send ElasticEmail confirmation email? + * + * @return void + */ + public function subscribe($email, $list, $publicAccountID, $params = array(), $update_existing = true, $double_optin = false) + { + $data = array( + 'apikey' => $this->key, + 'email' => $email, + 'publicAccountID' => $publicAccountID, + 'publicListID' => $list, + 'sendActivation' => $double_optin ? 'true' : 'false', + 'consentIP' => \NRFramework\User::getIP() + ); + + if (is_array($params) && count($params)) + { + foreach ($params as $param_key => $param_value) + { + $data[$param_key] = (is_array($param_value)) ? implode(',', $param_value) : $param_value; + } + } + + if (!$update_existing) + { + return $this->get('/contact/add', $data); + } + + if ($this->getContact($email)) + { + $data['clearRestOfFields'] = 'false'; + $this->get('/contact/update', $data); + } + else + { + $this->get('/contact/add', $data); + } + + return true; + } + + /** + * Returns all available ElasticEmail lists + * + * http://api.elasticemail.com/public/help#List_list + * + * @return array + */ + public function getLists() + { + $data = $this->get('/list/list', array('apikey' => $this->key)); + + if (!$this->success()) + { + return; + } + + $lists = array(); + + if (!isset($data['data']) || !is_array($data['data'])) + { + return $lists; + } + + foreach ($data['data'] as $key => $list) + { + $lists[] = array( + 'id' => $list['publiclistid'], + 'name' => $list['listname'] + ); + } + + return $lists; + } + + /** + * Check to see if a contact exists + * + * @param string $email The contact's email + * + * @return boolean + */ + public function getContact($email) + { + $contact = $this->get('/contact/loadcontact', array('apikey' => $this->key, 'email' => $email)); + + return (bool) $contact['success']; + } + + /** + * Get the Elastic Email Public Account ID + * + * @return string + */ + public function getPublicAccountID() + { + $data = $this->get('/account/load', array('apikey' => $this->key)); + + if (isset($data['data']['publicaccountid'])) + { + return $data['data']['publicaccountid']; + } + + throw new \Exception(\JText::_('PLG_CONVERTFORMS_ELASTICEMAIL_UNRETRIEVABLE_PUBLICACCOUNTID'), 1); + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + + if (isset($body['error'])) + { + return $body['error']; + } + } + + /** + * Check if the response was successful or a failure. If it failed, store the error. + * + * @return bool If the request was successful + */ + protected function determineSuccess() + { + $code = $this->last_response->code; + $body = $this->last_response->body; + + if ($code >= 200 && $code <= 299 && !isset($body['error'])) + { + return ($this->request_successful = true); + } + + $this->last_error = 'Unknown error, call getLastResponse() to find out what happened.'; + return false; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/GetResponse.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/GetResponse.php new file mode 100644 index 00000000..621f30a5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/GetResponse.php @@ -0,0 +1,202 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class GetResponse extends Integration +{ + /** + * Create a new instance + * + * @param array $options The service's required options + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options); + $this->endpoint = 'https://api.getresponse.com/v3'; + $this->options->set('headers.X-Auth-Token', 'api-key ' . $this->key); + $this->options->set('headers.Accept-Encoding', 'gzip,deflate'); + } + + /** + * Subscribe user to GetResponse Campaign + * + * https://apidocs.getresponse.com/v3/resources/contacts#contacts.create + * + * TODO: Update existing contact + * + * @param string $email Email of the Contact + * @param string $name The name of the Contact + * @param object $campaign Campaign ID + * @param object $customFields Collection of custom fields + * @param object $update_existing Update existing contact + * + * @return void + */ + public function subscribe($email, $name, $campaign, $customFields, $update_existing) + { + $data = array( + 'email' => $email, + 'name' => $name, + 'dayOfCycle' => 0, + 'campaign' => ['campaignId' => $campaign], + 'customFieldValues' => $this->validateCustomFields($customFields), + 'ipAddress' => \NRFramework\User::getIP() + ); + + if (empty($name) || is_null($name)) + { + unset($data['name']); + } + + if ($update_existing) + { + $contactId = $this->getContact($email); + } + + if (!empty($contactId)) + { + return $this->post('contacts/' . $contactId, $data); + } + + $this->post('contacts', $data); + } + + /** + * Returns a new array with valid only custom fields + * + * @param array $customFields Array of custom fields + * + * @return array Array of valid only custom fields + */ + public function validateCustomFields($customFields) + { + $fields = array(); + + if (!is_array($customFields)) + { + return $fields; + } + + $accountCustomFields = $this->get('custom-fields'); + + if (!$this->request_successful) + { + return $fields; + } + + foreach ($accountCustomFields as $key => $customField) + { + if (!isset($customFields[$customField['name']])) + { + continue; + } + + $fields[] = array( + 'customFieldId' => $customField['customFieldId'], + 'value' => array($customFields[$customField['name']]) + ); + } + + return $fields; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * If something didn't work, this should contain the string describing the problem. + * + * @return string describing the error + */ + public function getLastError() + { + $body = $this->last_response->body; + + if (!isset($body['context']) || !isset($body['context'][0])) + { + return $body['codeDescription'] . ' - ' . $body['message']; + } + + $error = $body['context'][0]; + + if (is_array($error) && isset($error['fieldName'])) + { + $errorFieldName = is_array($error['fieldName']) ? implode(' ', $error['fieldName']) : $error['fieldName']; + return $errorFieldName . ': ' . $error['errorDescription']; + } + + return (is_array($error)) ? implode(' ', $error) : $error; + + } + + /** + * Returns all available GetResponse campaigns + * + * https://apidocs.getresponse.com/v3/resources/campaigns#campaigns.get.all + * + * @return array + */ + public function getLists() + { + $data = $this->get('campaigns'); + + if (!$this->success()) + { + return; + } + + if (!is_array($data) || !count($data)) + { + return; + } + + $lists = array(); + + foreach ($data as $key => $list) + { + $lists[] = array( + 'id' => $list['campaignId'], + 'name' => $list['name'] + ); + } + + return $lists; + } + + /** + * Get the Contact resource + * + * @param string $email The email of the contact which we want to retrieve + * + * @return string The Contact ID + */ + public function getContact($email) + { + if (!isset($email)) + { + return; + } + + $data = $this->get('contacts', array('query[email]' => $email)); + + if (empty($data)) + { + return; + } + + // the returned data is an array with only one contact + $contactId = $data[0]['contactId']; + + return ($contactId) ? $contactId : null; + + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/HCaptcha.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/HCaptcha.php new file mode 100644 index 00000000..edb2de5e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/HCaptcha.php @@ -0,0 +1,108 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +/** + * The HCaptcha Wrapper + */ +class HCaptcha extends Integration +{ + /** + * Service Endpoint + * + * @var string + */ + protected $endpoint = 'https://hcaptcha.com/siteverify'; + + /** + * Create a new instance + * + * @param array $options + * + * @throws \Exception + */ + public function __construct($options = []) + { + parent::__construct(); + + if (!array_key_exists('secret', $options)) + { + $this->setError('NR_RECAPTCHA_INVALID_SECRET_KEY'); + throw new \Exception($this->getLastError()); + } + + $this->setKey($options['secret']); + } + + /** + * Calls the hCaptcha siteverify API to verify whether the user passes hCaptcha test. + * + * @param string $response Response string from hCaptcha verification. + * @param string $remoteip IP address of end user + * + * @return bool Returns true if the user passes hCaptcha test + */ + public function validate($response, $remoteip = null) + { + if (empty($response) || is_null($response)) + { + return $this->setError('NR_RECAPTCHA_PLEASE_VALIDATE'); + } + + // remove these headers in order for hCaptcha to be abl to process the request + $this->options->remove('headers.Accept'); + $this->options->remove('headers.Content-Type'); + + // do not encode request + $this->setEncode(false); + + $data = [ + 'secret' => $this->key, + 'response' => $response, + 'remoteip' => $remoteip ?: \NRFramework\User::getIP(), + ]; + + $this->post('', $data); + + return true; + } + + /** + * Check if the response was successful or a failure. If it failed, store the error. + * + * @return bool If the request was successful + */ + protected function determineSuccess() + { + $success = parent::determineSuccess(); + $body = $this->last_response->body; + + if ($body['success'] == false && array_key_exists('error-codes', $body) && count($body['error-codes']) > 0) + { + $success = $this->setError(implode(', ', $body['error-codes'])); + } + + return ($this->request_successful = $success); + } + + /** + * Set wrapper error text + * + * @param String $error The error message to display + */ + private function setError($error) + { + $this->last_error = \JText::_('NR_HCAPTCHA') . ': ' . \JText::_($error); + return false; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/HubSpot.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/HubSpot.php new file mode 100644 index 00000000..ed9813d5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/HubSpot.php @@ -0,0 +1,140 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class HubSpot extends Integration +{ + /** + * Create a new instance + * + * @param string $key Your HubSpot API key + */ + public function __construct($options) + { + parent::__construct(); + + $this->setKey(is_array($options) ? $options['api'] : $options); + $this->setEndpoint('https://api.hubapi.com'); + } + + /** + * Subscribe user to HubSpot + * + * API References: + * http://developers.hubspot.com/docs/methods/contacts/update_contact-by-email + * + * @param string $email User's email address + * @param string $params The forms extra fields + * + * @return void + */ + public function subscribe($email, $params) + { + $fields = $this->validateCustomFields($params); + + $fields[] = array('property' => 'email', 'value' => $email); + + $data = array( + 'properties' => $fields + ); + + $this->post('contacts/v1/contact/createOrUpdate/email/' . $email . '/?hapikey=' . $this->key, $data); + + return true; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * API References: + * http://developers.hubspot.com/docs/faq/api-error-responses + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + + $message = ''; + + if ((isset($body['status'])) && ($body['status'] == 'error')) + { + $message = $body['message']; + } + + if (isset($body['validationResults']) && is_array($body['validationResults']) && count($body['validationResults'])) + { + foreach ($body['validationResults'] as $key => $validation) + { + if ($validation['isValid'] === false) + { + $message .= ' - ' . $validation['message']; + } + } + } + + return $message; + } + + /** + * Returns a new array with valid only custom fields + * + * API References: + * http://developers.hubspot.com/docs/methods/contacts/v2/get_contacts_properties + * + * @param array $formCustomFields Array of custom fields + * + * @return array Array of valid only custom fields + */ + public function validateCustomFields($formCustomFields) + { + + $fields = array(); + + if (!is_array($formCustomFields)) + { + return $fields; + } + + $accountFields = $this->get('properties/v1/contacts/properties?hapikey='.$this->key); + + if (!$this->request_successful) + { + return $fields; + } + + $accountFieldsNames = array_map( + function ($ar) + { + return $ar['name']; + }, $accountFields + ); + + $formCustomFieldsKeys = array_keys($formCustomFields); + + foreach ($accountFieldsNames as $accountFieldsName) + { + if (!in_array($accountFieldsName, $formCustomFieldsKeys)) + { + continue; + } + + $fields[] = array( + "property" => $accountFieldsName, + "value" => $formCustomFields[$accountFieldsName], + ); + } + + return $fields; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/IContact.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/IContact.php new file mode 100644 index 00000000..9c618e4b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/IContact.php @@ -0,0 +1,207 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class IContact extends Integration +{ + public $accountID; + + public $clientFolderID; + + /** + * Create a new instance + * @param array $options The service's required options + */ + public function __construct($options) + { + parent::__construct(); + $this->endpoint = 'https://app.icontact.com/icp/a'; + $this->options->set('headers.API-Version', '2.2'); + $this->options->set('headers.API-AppId', $options['appID']); + $this->options->set('headers.API-Username', $options['username']); + $this->options->set('headers.API-Password', $options['appPassword']); + $this->setAccountID($options['accountID']); + $this->setClientFolderID($options['clientFolderID']); + } + + /** + * Finds and sets the iContact AccountID + * + * @param mixed $accountID + */ + public function setAccountID($accountID = false) + { + if ($accountID) + { + $this->accountID = $accountID; + } + + $accounts = $this->get(''); + + if (!$this->success()) + { + throw new \Exception($this->getLastError()); + } + + // Make sure the account is active + if (intval($accounts['accounts'][0]['enabled']) === 1) + { + $this->accountID = (integer) $accounts['accounts'][0]['accountId']; + } + else + { + throw new \Exception(\JText::_('NR_ICONTACT_ACCOUNTID_ERROR'), 1); + } + } + + /** + * Finds and sets the iContact ClientFolderID + * + * @param mixed $clientFolderID + */ + public function setClientFolderID($clientFolderID = false) + { + if ($clientFolderID) + { + $this->clientFolderID = $clientFolderID; + } + + // We need an existant accountID + if (empty($this->accountID)) + { + try + { + $this->setAccountID(); + } + catch (Exception $e) + { + throw $e; + } + } + + if ($clientFolder = $this->get($this->accountID . '/c/')) + { + $this->clientFolderID = $clientFolder['clientfolders'][0]['clientFolderId']; + } + } + + /** + * Subscribes a user to an iContact List + * + * API REFERENCE + * https://www.icontact.com/developerportal/documentation/contacts + * + * @param string $email + * @param object $params The extra form fields + * @param mixed $list The iContact List ID + * + * @return boolean + */ + public function subscribe($email, $params, $list) + { + $data = array('contact' => array_merge(array('email' => $email, 'status' => 'normal'), (array) $params)); + + try + { + $contact = $this->post($this->accountID .'/c/' . $this->clientFolderID . '/contacts', $data); + } + catch (Exception $e) + { + throw $e; + } + + if ((isset($contact['contacts'])) && (is_array($contact['contacts'])) && (count($contact['contacts']) > 0)) + { + $this->addToList($list, $contact['contacts'][0]['contactId']); + } + + return true; + } + + /** + * Adds a contact to an iContact List + * + * API REFERENCE + * https://www.icontact.com/developerportal/documentation/subscriptions + * + * @param string $listID + * @param string $contactID + */ + public function addToList($listID, $contactID) + { + $data = array( + array( + 'contactId' => $contactID, + 'listId' => $listID, + 'status' => 'normal' + ) + ); + $this->post($this->accountID .'/c/' . $this->clientFolderID . '/subscriptions',$data); + } + + /** + * Returns all Client lists + * + * API REFERENCE + * https://www.icontact.com/developerportal/documentation/lists + * + * @return array + */ + public function getLists() + { + $data = $this->get($this->accountID .'/c/' . $this->clientFolderID . '/lists'); + + if (!$this->success()) + { + return; + } + + $lists = array(); + + if (!isset($data["lists"]) || !is_array($data["lists"])) + { + return $lists; + } + + foreach ($data["lists"] as $key => $list) + { + $lists[] = array( + 'id' => $list['listId'], + 'name' => $list['name'] + ); + } + + return $lists; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * If something didn't work, this should contain the string describing the problem. + * + * @return string describing the error + */ + public function getLastError() + { + $body = $this->last_response->body; + $message = ''; + + if (isset($body['errors'])) + { + foreach ($body['errors'] as $error) { + $message .= $error . ' '; + } + } + + return trim($message); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Integration.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Integration.php new file mode 100644 index 00000000..fda7f253 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Integration.php @@ -0,0 +1,351 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +jimport('joomla.log.log'); + +use Joomla\Registry\Registry; + +class Integration +{ + protected $key; + protected $endpoint; + protected $request_successful = false; + protected $last_error = ''; + protected $last_response = []; + protected $last_request = []; + protected $timeout = 60; + protected $options; + protected $encode = true; + protected $response_type = 'json'; + + public function __construct() + { + $this->options = new \JRegistry; + $this->options->set('timeout', $this->timeout); + $this->options->set('headers.Accept', 'application/json'); + $this->options->set('headers.Content-Type', 'application/json'); + } + + /** + * Setter method for the API Key or Access Token + * + * @param string $apiKey + */ + public function setKey($apiKey) + { + $apiKey = is_array($apiKey) && isset($apiKey['api']) ? $apiKey['api'] : $apiKey; + + if (!is_string($apiKey) || empty($apiKey) || is_null($apiKey)) + { + throw new \Exception('Invalid API Key supplied.'); + } + + $this->key = trim($apiKey); + } + + /** + * Setter method for the endpoint + * @param string $url The URL which is set in the account's developer settings + * @throws \Exception + */ + public function setEndpoint($url) + { + if (!empty($url)) + { + $this->endpoint = $url; + } + else + { + throw new \Exception("Invalid Endpoint URL `{$url}` supplied."); + } + } + + /** + * Was the last request successful? + * @return bool True for success, false for failure + */ + public function success() + { + return $this->request_successful; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * If something didn't work, this should contain the string describing the problem. + * @return array|false describing the error + */ + public function getLastError() + { + return $this->last_error ?: false; + } + + /** + * Get an array containing the HTTP headers and the body of the API response. + * @return array Assoc array with keys 'headers' and 'body' + */ + public function getLastResponse() + { + return $this->last_response; + } + + /** + * Get an array containing the HTTP headers and the body of the API request. + * @return array Assoc array + */ + public function getLastRequest() + { + return $this->last_request; + } + + /** + * Make an HTTP DELETE request - for deleting data + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (if any) + * @return array|false Assoc array of API response, decoded from JSON + */ + public function delete($method, $args = []) + { + return $this->makeRequest('delete', $method, $args); + } + + /** + * Make an HTTP GET request - for retrieving data + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (usually your data) + * @return array|false Assoc array of API response, decoded from JSON + */ + public function get($method, $args = []) + { + return $this->makeRequest('get', $method, $args); + } + + /** + * Make an HTTP PATCH request - for performing partial updates + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (usually your data) + * @return array|false Assoc array of API response, decoded from JSON + */ + public function patch($method, $args = []) + { + return $this->makeRequest('patch', $method, $args); + } + + /** + * Make an HTTP POST request - for creating and updating items + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (usually your data) + * @return array|false Assoc array of API response, decoded from JSON + */ + public function post($method, $args = []) + { + return $this->makeRequest('post', $method, $args); + } + + /** + * Make an HTTP PUT request - for creating new items + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (usually your data) + * @return array|false Assoc array of API response, decoded from JSON + */ + public function put($method, $args = []) + { + return $this->makeRequest('put', $method, $args); + } + + /** + * Performs the underlying HTTP request. Not very exciting. + * @param string $http_verb The HTTP verb to use: get, post, put, patch, delete + * @param string $method The API method to be called + * @param array $args Assoc array of parameters to be passed + * @return array|false Assoc array of decoded result + * @throws \Exception + */ + protected function makeRequest($http_verb, $method, $args = []) + { + $url = $this->endpoint; + + if (!empty($method) && !is_null($method) && strpos($url, '?') === false) + { + $url .= '/' . $method; + } + + $this->last_error = ''; + $this->request_successful = false; + $this->last_response = []; + $this->last_request = [ + 'method' => $http_verb, + 'path' => $method, + 'url' => $url, + 'body' => '', + 'timeout' => $this->timeout, + ]; + + $http = \JHttpFactory::getHttp($this->options); + + switch ($http_verb) + { + case 'post': + $this->attachRequestPayload($args); + $response = $http->post($url, $this->last_request['body']); + break; + + case 'get': + $query = http_build_query($args, '', '&'); + $this->last_request['body'] = $query; + $response = (strpos($url,'?') !== false) ? $http->get($url . '&' . $query) : $http->get($url . '?' . $query); + break; + + case 'delete': + $response = $http->delete($url); + break; + + case 'patch': + $this->attachRequestPayload($args); + $response = $http->patch($url, $this->last_request['body']); + break; + + case 'put': + $this->attachRequestPayload($args); + $response = $http->put($url, $this->last_request['body']); + break; + } + + // Convert body JSON - Do we really need this line? + $response->body = $this->convertResponse($response->body); + + // Format response object to array + $this->last_response = $response; + $this->determineSuccess(); + + // Log request if debug is enabled. + if (JDEBUG) + { + $this->logRequest(); + } + + return $this->last_response->body; + } + + /** + * Log API request to framework's log file to help troubleshoot issues. + * + * @return void + */ + private function logRequest() + { + $output = ' + Request + --------------------------------------------------------------------------- + ' . print_r($this->last_request, true) . ' + + Response + --------------------------------------------------------------------------- + ' . print_r($this->last_response, true) . ' + '; + + try { + \JLog::add($output, \JLog::DEBUG, 'nrframework'); + } catch (\Throwable $th) { + } + } + + /** + * Encode the data and attach it to the request + * @param array $data Assoc array of data to attach + */ + protected function attachRequestPayload($data) + { + if (!$this->encode) + { + $this->last_request['body'] = http_build_query($data); + return; + } + + $this->last_request['body'] = json_encode($data); + } + + /** + * Check if the response was successful or a failure. If it failed, store the error. + * + * @return bool If the request was successful + */ + protected function determineSuccess() + { + $status = $this->last_response->code; + $success = ($status >= 200 && $status <= 299) ? true : false; + + return ($this->request_successful = $success); + } + + /** + * Converts the HTTP Call response to a traversable type + * + * @param json|xml $response + * + * @return array|object + */ + protected function convertResponse($response) + { + switch ($this->response_type) + { + case 'json': + return json_decode($response, true); + case 'xml': + return new \SimpleXMLElement($response); + case 'text': + return $response; + } + } + + /** + * Search Custom Fields declared by the user for a specific custom field. If exists return its value. + * + * @param array $needles The custom field names + * @param array $haystack The custom fields array + * + * @return string The value of the custom field or an empty string if not found + */ + protected function getCustomFieldValue($needles, $haystack) + { + $needles = is_array($needles) ? $needles : (array) $needles; + $haystack = array_change_key_case($haystack); + + $found = ''; + + foreach ($needles as $needle) + { + $needle = strtolower($needle); + + if (array_key_exists($needle, $haystack)) + { + $found = trim($haystack[$needle]); + break; + } + } + + return $found; + } + + /** + * Set encode + * + * @param boolean $encode + * + * @return void + */ + public function setEncode($encode) + { + $this->encode = $encode; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/MailChimp.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/MailChimp.php new file mode 100644 index 00000000..2a2f99b8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/MailChimp.php @@ -0,0 +1,340 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class MailChimp extends Integration +{ + /** + * MailChimp Endpoint URL + * + * @var string + */ + protected $endpoint = 'https://.api.mailchimp.com/3.0'; + + /** + * Create a new instance + * + * @param array $options The service's required options + * @throws \Exception + */ + public function __construct($options) + { + parent::__construct(); + + $this->setKey($options); + + list(, $data_center) = explode('-', $this->key); + $this->endpoint = str_replace('', $data_center, $this->endpoint); + + $this->options->set('headers.Authorization', 'apikey ' . $this->key); + } + + /** + * Subscribe user to MailChimp + * + * API References: + * https://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#edit-put_lists_list_id_members_subscriber_hash + * https://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#create-post_lists_list_id_members + * + * @param string $email User's email address + * @param string $list The MailChimp list unique ID + * @param Object $merge_fields Merge Fields + * @param boolean $update_existing Update existing user + * @param boolean $double_optin Send MailChimp confirmation email? + * + * @return void + */ + public function subscribe($email, $list, $merge_fields = array(), $update_existing = true, $double_optin = false) + { + $data = array( + 'email_address' => $email, + 'status' => $double_optin ? 'pending' : 'subscribed' + ); + + // add support for tags + if ($tags = $this->getTags($merge_fields)) + { + $data['tags'] = $tags; + } + + if (is_array($merge_fields) && count($merge_fields)) + { + foreach ($merge_fields as $merge_field_key => $merge_field_value) + { + $value = is_array($merge_field_value) ? implode(',', $merge_field_value) : (string) $merge_field_value; + $data['merge_fields'][$merge_field_key] = $value; + } + } + + $interests = $this->validateInterestCategories($list, $merge_fields); + + if (!empty($interests)) + { + $data = array_merge($data, array('interests' => $interests)); + } + + if ($update_existing) + { + // Get subscriber information. + $subscriberHash = md5(strtolower($email)); + $subscriberInfo = $this->get('lists/' . $list . '/members/' . $subscriberHash); + + // Skip double opt-in if the subscriber exists and it's confirmed + if (isset($subscriberInfo['status']) && $subscriberInfo['status'] == 'subscribed') + { + $data['status'] = $subscriberInfo['status']; + } + + $this->put('lists/' . $list . '/members/' . $subscriberHash, $data); + } else + { + $this->post('lists/' . $list . '/members', $data); + } + + return true; + } + + /** + * Find and return all unique tags + * + * @param array $merge_fields + * + * @return array + */ + private function getTags($merge_fields) + { + $tags = []; + + // ensure tags are added in the form + if (!isset($merge_fields['tags'])) + { + return $tags; + } + + $mergeFieldsTags = $merge_fields['tags']; + + // make string array + if (is_string($mergeFieldsTags)) + { + $tags = explode(',', $mergeFieldsTags); + } + + // ensure we have array to manipulate + if (is_array($mergeFieldsTags) || is_object($mergeFieldsTags)) + { + $tags = (array) $mergeFieldsTags; + } + + // remove empty values, keep uniques and reset keys + $tags = array_filter($tags); + $tags = array_unique($tags); + $tags = array_values($tags); + + return $tags; + } + + /** + * Returns all available MailChimp lists + * + * https://developer.mailchimp.com/documentation/mailchimp/reference/lists/#read-get_lists + * + * @return array + */ + public function getLists() + { + $data = $this->get('/lists'); + + if (!$this->success()) + { + return; + } + + if (!isset($data['lists']) || !is_array($data['lists'])) + { + return; + } + + $lists = []; + + foreach ($data['lists'] as $key => $list) + { + $lists[] = array( + 'id' => $list['id'], + 'name' => $list['name'] + ); + } + + return $lists; + } + + /** + * Gets the Interest Categories from MailChimp + * + * @param string $listID The List ID + * + * @return array + */ + public function getInterestCategories($listID) + { + if (!$listID) + { + return; + } + + $data = $this->get('/lists/' . $listID . '/interest-categories'); + + if (!$this->success()) + { + return; + } + + if (isset($data['total_items']) && $data['total_items'] == 0) + { + return; + } + + return $data['categories']; + } + + /** + * Gets the values accepted for the particular Interest Category + * + * @param string $listID The List ID + * @param string $interestCategoryID The Interest Category ID + * + * @return array + */ + public function getInterestCategoryValues($listID, $interestCategoryID) + { + if (!$interestCategoryID || !$listID) + { + return array(); + } + + $data = $this->get('/lists/' . $listID . '/interest-categories/' . $interestCategoryID . '/interests'); + + if (isset($data['total_items']) && $data['total_items'] == 0) + { + return array(); + } + + return $data['interests']; + } + + /** + * Filters the interests categories through the form fields + * and constructs the interests array for the subscribe method + * + * @param string $listID The List ID + * @param array $params The Form fields + * + * @return array + */ + public function validateInterestCategories($listID, $params) + { + if (!$params || !$listID) + { + return array(); + } + + $interestCategories = $this->getInterestCategories($listID); + + if (!$interestCategories) + { + return array(); + } + + $categories = array(); + + foreach ($interestCategories as $category) + { + if (array_key_exists($category['title'], $params)) + { + $categories[] = array('id' => $category['id'], 'title' => $category['title']); + } + } + + if (empty($categories)) + { + return array(); + } + + $interests = array(); + + foreach ($categories as $category) + { + $data = $this->getInterestCategoryValues($listID, $category['id']); + + if (isset($data['total_items']) && $data['total_items'] == 0) + { + continue; + } + + foreach ($data as $interest) + { + if (in_array($interest['name'], (array) $params[$category['title']])) + { + $interests[$interest['id']] = true; + } + else + { + $interests[$interest['id']] = false; + } + } + } + + return $interests; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + + if (isset($body['errors'])) + { + $error = $body['errors'][0]; + return $error['field'] . ': ' . $error['message']; + } + + if (isset($body['detail'])) + { + return $body['detail']; + } + } + + /** + * The get() method overridden so that it handles + * the default item paging of MailChimp which is 10 + * + * @param string $method URL of the API request method + * @param array $args Assoc array of arguments (usually your data) + * @return array|false Assoc array of API response, decoded from JSON + */ + public function get($method, $args = array()) + { + $data = $this->makeRequest('get', $method, $args); + + if ($data && isset($data['total_items']) && (int) $data['total_items'] > 10) + { + $args['count'] = $data['total_items']; + return $this->makeRequest('get', $method, $args); + } + + return $data; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ReCaptcha.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ReCaptcha.php new file mode 100644 index 00000000..d1b8ce03 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ReCaptcha.php @@ -0,0 +1,101 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +/** + * The reCAPTCHA Wrapper + */ +class ReCaptcha extends Integration +{ + /** + * Service Endpoint + * + * @var string + */ + protected $endpoint = 'https://www.google.com/recaptcha/api/siteverify'; + + /** + * Create a new instance + * + * @param array $options + * + * @throws \Exception + */ + public function __construct($options = array()) + { + parent::__construct(); + + if (!array_key_exists('secret', $options)) + { + $this->setError('NR_RECAPTCHA_INVALID_SECRET_KEY'); + throw new \Exception($this->getLastError()); + } + + $this->setKey($options['secret']); + } + + /** + * Calls the reCAPTCHA siteverify API to verify whether the user passes reCAPTCHA test. + * + * @param string $response Response string from recaptcha verification. + * @param string $remoteip IP address of end user + * + * @return bool Returns true if the user passes reCAPTCHA test + */ + public function validate($response, $remoteip = null) + { + if (empty($response) || is_null($response)) + { + return $this->setError('NR_RECAPTCHA_PLEASE_VALIDATE'); + } + + $data = array( + 'secret' => $this->key, + 'response' => $response, + 'remoteip' => $remoteip ?: \NRFramework\User::getIP(), + ); + + $this->get('', $data); + + return true; + } + + /** + * Check if the response was successful or a failure. If it failed, store the error. + * + * @return bool If the request was successful + */ + protected function determineSuccess() + { + $success = parent::determineSuccess(); + $body = $this->last_response->body; + + if ($body['success'] == false && array_key_exists('error-codes', $body) && count($body['error-codes']) > 0) + { + $success = $this->setError(implode(', ', $body['error-codes'])); + } + + return ($this->request_successful = $success); + } + + /** + * Set wrapper error text + * + * @param String $error The error message to display + */ + private function setError($error) + { + $this->last_error = \JText::_('NR_RECAPTCHA') . ': ' . \JText::_($error); + return false; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Salesforce.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Salesforce.php new file mode 100644 index 00000000..a2713c3c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Salesforce.php @@ -0,0 +1,96 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class SalesForce extends Integration +{ + /** + * Service API Endpoint + * + * @var string + */ + protected $endpoint = 'https://webto.salesforce.com/servlet/servlet.WebToLead?encoding=UTF-8'; + + /** + * Encode data before sending the request + * + * @var boolean + */ + protected $encode = false; + + /** + * Create a new instance + * @param string $organizationID Your SalesForce Organization ID + * @throws \Exception + */ + public function __construct($organization_id) + { + parent::__construct(); + $organization_id = is_array($organization_id) ? $organization_id['api'] : $organization_id; + $this->setKey($organization_id); + $this->options->set('headers.Content-Type', 'application/x-www-form-urlencoded'); + } + + /** + * Subscribe user to SalesForce + * + * API References: + * https://developer.salesforce.com/page/Wordpress-to-lead + * + * @param string $email User's email address + * @param array $params All the form fields + * + * @return void + */ + public function subscribe($email, $params) + { + $data = array( + "email" => $email, + "oid" => $this->key + ); + + if (is_array($params) && count($params)) + { + $data = array_merge($data, $params); + } + + $this->post('', $data); + + return true; + } + + /** + * Determine if the Lead has been stored successfully in SalesForce + * + * @return string + */ + public function determineSuccess() + { + $status = $this->last_response->code; + + if ($status < 200 && $status > 299) + { + return false; + } + + $headers = $this->last_response->headers; + + if (isset($headers['Is-Processed']) && (strpos($headers['Is-Processed'], 'Exception') !== false)) + { + $this->last_error = \JText::_('PLG_CONVERTFORMS_SALESFORCE_ERROR'); + return false; + } + + return ($this->request_successful = true); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/SendInBlue.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/SendInBlue.php new file mode 100644 index 00000000..695d06b4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/SendInBlue.php @@ -0,0 +1,114 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class SendInBlue extends Integration +{ + /** + * Create a new instance + * @param array $options The service's required options + * @throws \Exception + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options['api']); + $this->setEndpoint('https://api.sendinblue.com/v2.0'); + $this->options->set('headers.api-key', $this->key); + } + + /** + * Subscribes a user to a SendinBlue Account + * + * API Reference: + * https://apidocs.sendinblue.com/user/#1 + * + * @param string $email The user's email + * @param array $params All the form fields + * @param string $listid The List ID + * + * @return boolean + */ + public function subscribe($email, $params, $listid = false) + { + $data = array( + 'email' => $email, + 'attributes' => $params, + ); + + if ($listid) + { + $data['listid'] = array($listid); + } + + $this->post('user/createdituser', $data); + + return true; + } + + /** + * Returns all Campaign lists + * + * https://apidocs.sendinblue.com/list/#1 + * + * @return array + */ + public function getLists() + { + $data = array( + 'page' => 1, + 'page_limit' => 50 + ); + + $lists = array(); + + $data = $this->get('/list', $data); + + if (!isset($data['data']['lists']) || !is_array($data['data']['lists']) || $data['data']['total_list_records'] == 0) + { + return $lists; + } + + foreach ($data['data']['lists'] as $key => $list) + { + $lists[] = array( + 'id' => $list['id'], + 'name' => $list['name'] + ); + } + + return $lists; + + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * API Reference: + * https://apidocs.sendinblue.com/response/ + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + $message = ''; + + if (isset($body['code']) && ($body['code'] == 'failure')) + { + $message = $body['message']; + } + + return $message; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/SendInBlue3.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/SendInBlue3.php new file mode 100644 index 00000000..f30d04e5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/SendInBlue3.php @@ -0,0 +1,118 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2018 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class SendInBlue3 extends Integration +{ + /** + * Create a new instance + * @param array $options The service's required options + * @throws \Exception + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options['api']); + $this->setEndpoint('https://api.sendinblue.com/v3'); + $this->options->set('headers.api-key', $this->key); + } + + /** + * Subscribes a user to a SendinBlue Account + * + * API Reference v3: + * https://developers.sendinblue.com/reference#createcontact + * + * @param string $email The user's email + * @param array $params All the form fields + * @param string $listid The List ID + * @param boolean $update_existing Whether to update the existing contact (Only in v3) + * + * @return boolean + */ + public function subscribe($email, $params, $listid = false, $update_existing = true) + { + $data = [ + 'email' => $email, + 'attributes' => (object) $params, + 'updateEnabled' => $update_existing + ]; + + if ($listid) + { + $data['listIds'] = [(int) $listid]; + } + + $this->post('contacts', $data); + + return true; + } + + /** + * Returns all Campaign lists + * + * API Reference v3: + * https://developers.sendinblue.com/reference#getlists-1 + * + * @return array + */ + public function getLists() + { + $data = [ + 'page' => 1, + 'page_limit' => 50 + ]; + + $lists = []; + + $data = $this->get('contacts/lists', $data); + + // sanity check + if (!isset($data['lists']) || !is_array($data['lists']) || $data['count'] == 0) + { + return $lists; + } + + foreach ($data['lists'] as $key => $list) + { + $lists[] = [ + 'id' => $list['id'], + 'name' => $list['name'] + ]; + } + + return $lists; + + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * API Reference: + * https://developers.sendinblue.com/docs/how-it-works#error-codes + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + $message = ''; + + if (!isset($body['code'])) + { + return $message; + } + + return $body['message']; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Zoho.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Zoho.php new file mode 100644 index 00000000..c223bbc1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/Zoho.php @@ -0,0 +1,169 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class Zoho extends Integration +{ + /** + * Create a new instance + * + * @param array $options The service's required options + * @throws \Exception + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options['api']); + $this->endpoint = 'https://campaigns.zoho.com/api'; + } + + /** + * Subscribe user to ZoHo + * + * https://www.zoho.com/campaigns/help/api/contact-subscribe.html + * + * @param string $email User's email address + * @param string $list The ZoHo list unique ID + * @param Object $customFields Collection of custom fields + * + * @return void + */ + public function subscribe($email, $list, $customFields = array()) + { + + $contactinfo = json_encode(array_merge(array("Contact Email" => $email), $customFields)); + + $data = array( + "authtoken" => $this->key, + "scope" => "CampaignsAPI", + "version" => "1", + "resfmt" => "JSON", + "listkey" => $list, + "contactinfo" => $contactinfo + ); + + $this->get('json/listsubscribe', $data); + + return true; + } + + /** + * Returns all available ZoHo lists + * + * https://www.zoho.com/campaigns/help/api/get-mailing-lists.html + * + * @return array + */ + public function getLists() + { + if (!$this->key) + { + return; + } + + $data = array( + 'authtoken' => $this->key, + 'scope' => 'CampaignsAPI', + 'sort' => 'asc', + 'resfmt' => 'JSON', + 'range' => '1000' //ambiguously large range of total results to overwrite the default range which is 20 + ); + + $data = $this->get("getmailinglists", $data); + + if (!$this->success()) + { + return; + } + + $lists = array(); + + if (!isset($data["list_of_details"]) || !is_array($data["list_of_details"])) + { + return $lists; + } + + foreach ($data["list_of_details"] as $key => $list) + { + $lists[] = array( + "id" => $list["listkey"], + "name" => $list["listname"] + ); + } + + return $lists; + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + + if (isset($body['message'])) + { + return $body['message']; + } + + return 'An unspecified error occured'; + } + + /** + * Check if the response was successful or a failure. If it failed, store the error. + * + * @return bool If the request was successful + */ + protected function determineSuccess() + { + $status = $this->findHTTPStatus(); + + // check if the status is equal to the arbitrary success codes of ZoHo + if (in_array($status, array(0, 200, 6101, 6201))) + { + return ($this->request_successful = true); + } + + return false; + } + + /** + * Find the HTTP status code from the headers or API response body + * + * @return int HTTP status code + */ + protected function findHTTPStatus() + { + $status = $this->last_response->code; + $success = ($status >= 200 && $status <= 299) ? true : false; + + if (!$success) + { + return 418; + } + + // ZoHo sometimes uses "Code" instead of "code" + // also they don't use HTTP status codes + // instead they store their own status code inside the response body + $data = array_change_key_case($this->last_response->body); + + if (isset($data['code'])) + { + return (int) $data['code']; + } + + return 418; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ZohoCRM.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ZohoCRM.php new file mode 100644 index 00000000..2ee69026 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Integrations/ZohoCRM.php @@ -0,0 +1,156 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +namespace NRFramework\Integrations; + +// No direct access +defined('_JEXEC') or die; + +class ZohoCRM extends Integration +{ + /** + * Response Type + * + * @var string + */ + protected $response_type = 'xml'; + + /** + * Data Center API Endpoint + * + * @var string + */ + private $datacenter = 'crm.zoho.com'; + + /** + * Create a new instance + * + * @param array $options The service's required options + */ + public function __construct($options) + { + parent::__construct(); + $this->setKey($options['authenticationToken']); + + if (isset($options['datacenter']) && !is_null($options['datacenter']) && !empty($options['datacenter'])) + { + $this->datacenter = $options['datacenter']; + } + } + + /** + * Subscribe user to ZohoCRM + * + * https://www.zoho.eu/crm/help/api/insertrecords.html#Insert_records_into_Zoho_CRM_from_third-party_applications + * + * @param string $email User's email address + * @param array $fields Available form fields + * @param string $module Zoho module to be used + * @param boolean $update_existing Update existing users + * @param string $workflow Trigger the workflow rule while inserting record + * @param string $approve Approve records (Supports: Leads, Contacts, and Cases modules) + * + * @return void + */ + public function subscribe($email, $fields, $module = 'leads', $update_existing = true, $workflow = false, $approve = false) + { + $data = array( + 'authtoken' => $this->key, + 'scope' => 'crmapi', + 'xmlData' => $this->buildModuleXML($email, $fields, $module), + 'duplicateCheck' => $update_existing ? '2' : '1', + 'wfTrigger' => $workflow ? 'true' : 'false', + 'isApproval' => $approve ? 'true' : 'false', + 'version' => '4' + ); + + $this->endpoint = 'https://' . $this->datacenter . '/crm/private/xml/' . ucfirst($module) . '/insertRecords?' . http_build_query($data); + + $this->post(''); + } + + /** + * Build the XML for each module + * + * @param string $email User's email address + * @param array $fields Form fields + * @param string $module Module to be used + * + * @return string The XML + */ + private function buildModuleXML($email, $fields, $module) + { + $xml = new SimpleXMLElement('<' . ucfirst($module) . '/>'); + $row = $xml->addChild('row'); + $row->addAttribute('no', '1'); + + $xmlField = $row->addChild('FL', $email); + $xmlField->addAttribute('val', 'Email'); + + if (is_array($fields) && count($fields)) + { + foreach ($fields as $field_key => $field_value) + { + $field_value = is_array($field_value) ? implode(',', $field_value) : $field_value; + + $xmlField = $row->addChild('FL', $field_value); + $xmlField->addAttribute('val', $field_key); + } + } + + return $xml->asXML(); + } + + /** + * Get the last error returned by either the network transport, or by the API. + * + * @return string + */ + public function getLastError() + { + $body = $this->last_response->body; + + if (isset($body->error)) + { + return $body->error->message; + } + + if (isset($body->result->row->error)) + { + return $body->result->row->error->details; + } + + return 'Unknown error'; + } + + /** + * Check if the response was successful or a failure. If it failed, store the error. + * + * @return bool If the request was successful + */ + public function determineSuccess() + { + $status = $this->last_response->code; + $success = ($status >= 200 && $status <= 299) ? true : false; + + if (!$success) + { + return false; + } + + $body = $this->last_response->body; + + if (!isset($body->result->row->success)) + { + return false; + } + + return ($this->request_successful = true); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Mimes.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Mimes.php new file mode 100644 index 00000000..56161c86 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Mimes.php @@ -0,0 +1,599 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + * @credits https://github.com/codeigniter4/CodeIgniter4/blob/develop/app/Config/Mimes.php +*/ + +namespace NRFramework; + +// No direct access +defined('_JEXEC') or die; + +class Mimes +{ + /** + * Map of extensions to mime types. + * + * @var array + */ + public static $mimes = [ + 'hqx' => [ + 'application/mac-binhex40', + 'application/mac-binhex', + 'application/x-binhex40', + 'application/x-mac-binhex40', + ], + 'cpt' => 'application/mac-compactpro', + 'csv' => [ + 'text/csv', + 'text/x-comma-separated-values', + 'text/comma-separated-values', + 'application/vnd.ms-excel', + 'application/x-csv', + 'text/x-csv', + 'application/csv', + 'application/excel', + 'application/vnd.msexcel', + 'text/plain', + ], + 'bin' => [ + 'application/macbinary', + 'application/mac-binary', + 'application/octet-stream', + 'application/x-binary', + 'application/x-macbinary', + ], + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => [ + 'application/octet-stream', + 'application/x-msdownload', + ], + 'class' => 'application/octet-stream', + 'psd' => [ + 'application/x-photoshop', + 'image/vnd.adobe.photoshop', + ], + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => [ + 'application/pdf', + 'application/force-download', + 'application/x-download', + ], + 'ai' => [ + 'application/pdf', + 'application/postscript', + ], + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => [ + 'application/vnd.ms-excel', + 'application/msexcel', + 'application/x-msexcel', + 'application/x-ms-excel', + 'application/x-excel', + 'application/x-dos_ms_excel', + 'application/xls', + 'application/x-xls', + 'application/excel', + 'application/download', + 'application/vnd.ms-office', + 'application/msword', + ], + 'ppt' => [ + 'application/vnd.ms-powerpoint', + 'application/powerpoint', + 'application/vnd.ms-office', + 'application/msword', + ], + 'pptx' => [ + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/x-zip', + 'application/zip', + ], + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'gzip' => 'application/x-gzip', + 'php' => [ + 'application/x-php', + 'application/x-httpd-php', + 'application/php', + 'text/php', + 'text/x-php', + 'application/x-httpd-php-source', + ], + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => [ + 'application/x-javascript', + 'text/plain', + ], + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => [ + 'application/x-tar', + 'application/x-gzip-compressed', + ], + 'z' => 'application/x-compress', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => [ + 'application/x-zip', + 'application/zip', + 'application/x-zip-compressed', + 'application/s-compressed', + 'multipart/x-zip', + ], + 'rar' => [ + 'application/vnd.rar', + 'application/x-rar', + 'application/rar', + 'application/x-rar-compressed', + ], + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => [ + 'audio/mpeg', + 'audio/mpg', + 'audio/mpeg3', + 'audio/mp3', + ], + 'aif' => [ + 'audio/x-aiff', + 'audio/aiff', + ], + 'aiff' => [ + 'audio/x-aiff', + 'audio/aiff', + ], + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => [ + 'audio/x-wav', + 'audio/wave', + 'audio/wav', + ], + 'bmp' => [ + 'image/bmp', + 'image/x-bmp', + 'image/x-bitmap', + 'image/x-xbitmap', + 'image/x-win-bitmap', + 'image/x-windows-bmp', + 'image/ms-bmp', + 'image/x-ms-bmp', + 'application/bmp', + 'application/x-bmp', + 'application/x-win-bitmap', + ], + 'gif' => 'image/gif', + 'jpg' => [ + 'image/jpeg', + 'image/pjpeg', + ], + 'jpeg' => [ + 'image/jpeg', + 'image/pjpeg', + ], + 'jpe' => [ + 'image/jpeg', + 'image/pjpeg', + ], + 'jp2' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'j2k' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'jpf' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'jpg2' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'jpx' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'jpm' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'mj2' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'mjp2' => [ + 'image/jp2', + 'video/mj2', + 'image/jpx', + 'image/jpm', + ], + 'png' => [ + 'image/png', + 'image/x-png', + ], + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'css' => [ + 'text/css', + 'text/plain', + ], + 'html' => [ + 'text/html', + 'text/plain', + ], + 'htm' => [ + 'text/html', + 'text/plain', + ], + 'shtml' => [ + 'text/html', + 'text/plain', + ], + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => [ + 'text/plain', + 'text/x-log', + ], + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => [ + 'application/xml', + 'text/xml', + 'text/plain', + ], + 'xsl' => [ + 'application/xml', + 'text/xsl', + 'text/xml', + ], + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => [ + 'video/x-msvideo', + 'video/msvideo', + 'video/avi', + 'application/x-troff-msvideo', + ], + 'movie' => 'video/x-sgi-movie', + 'doc' => [ + 'application/msword', + 'application/vnd.ms-office', + ], + 'docx' => [ + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/zip', + 'application/msword', + 'application/x-zip', + ], + 'dot' => [ + 'application/msword', + 'application/vnd.ms-office', + ], + 'dotx' => [ + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/zip', + 'application/msword', + ], + 'xlsx' => [ + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/zip', + 'application/vnd.ms-excel', + 'application/msword', + 'application/x-zip', + ], + 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12', + 'xlsm' => 'application/vnd.ms-excel.sheet.macroEnabled.12', + 'word' => [ + 'application/msword', + 'application/octet-stream', + ], + 'xl' => 'application/excel', + 'eml' => 'message/rfc822', + 'json' => [ + 'application/json', + 'text/json', + ], + 'pem' => [ + 'application/x-x509-user-cert', + 'application/x-pem-file', + 'application/octet-stream', + ], + 'p10' => [ + 'application/x-pkcs10', + 'application/pkcs10', + ], + 'p12' => 'application/x-pkcs12', + 'p7a' => 'application/x-pkcs7-signature', + 'p7c' => [ + 'application/pkcs7-mime', + 'application/x-pkcs7-mime', + ], + 'p7m' => [ + 'application/pkcs7-mime', + 'application/x-pkcs7-mime', + ], + 'p7r' => 'application/x-pkcs7-certreqresp', + 'p7s' => 'application/pkcs7-signature', + 'crt' => [ + 'application/x-x509-ca-cert', + 'application/x-x509-user-cert', + 'application/pkix-cert', + ], + 'crl' => [ + 'application/pkix-crl', + 'application/pkcs-crl', + ], + 'der' => 'application/x-x509-ca-cert', + 'kdb' => 'application/octet-stream', + 'pgp' => 'application/pgp', + 'gpg' => 'application/gpg-keys', + 'sst' => 'application/octet-stream', + 'csr' => 'application/octet-stream', + 'rsa' => 'application/x-pkcs7', + 'cer' => [ + 'application/pkix-cert', + 'application/x-x509-ca-cert', + ], + '3g2' => 'video/3gpp2', + '3gp' => [ + 'video/3gp', + 'video/3gpp', + ], + 'mp4' => 'video/mp4', + 'm4a' => 'audio/x-m4a', + 'f4v' => [ + 'video/mp4', + 'video/x-f4v', + ], + 'flv' => 'video/x-flv', + 'webm' => 'video/webm', + 'aac' => 'audio/x-acc', + 'm4u' => 'application/vnd.mpegurl', + 'm3u' => 'text/plain', + 'xspf' => 'application/xspf+xml', + 'vlc' => 'application/videolan', + 'wmv' => [ + 'video/x-ms-wmv', + 'video/x-ms-asf', + ], + 'au' => 'audio/x-au', + 'ac3' => 'audio/ac3', + 'flac' => 'audio/x-flac', + 'ogg' => [ + 'audio/ogg', + 'video/ogg', + 'application/ogg', + ], + 'kmz' => [ + 'application/vnd.google-earth.kmz', + 'application/zip', + 'application/x-zip', + ], + 'kml' => [ + 'application/vnd.google-earth.kml+xml', + 'application/xml', + 'text/xml', + ], + 'ics' => 'text/calendar', + 'ical' => 'text/calendar', + 'zsh' => 'text/x-scriptzsh', + '7zip' => [ + 'application/x-compressed', + 'application/x-zip-compressed', + 'application/zip', + 'multipart/x-zip', + ], + 'cdr' => [ + 'application/cdr', + 'application/coreldraw', + 'application/x-cdr', + 'application/x-coreldraw', + 'image/cdr', + 'image/x-cdr', + 'zz-application/zz-winassoc-cdr', + ], + 'wma' => [ + 'audio/x-ms-wma', + 'video/x-ms-asf', + ], + 'jar' => [ + 'application/java-archive', + 'application/x-java-application', + 'application/x-jar', + 'application/x-compressed', + ], + 'svg' => [ + 'image/svg+xml', + 'image/svg', + 'application/xml', + 'text/xml', + ], + 'vcf' => 'text/x-vcard', + 'srt' => [ + 'text/srt', + 'text/plain', + ], + 'vtt' => [ + 'text/vtt', + 'text/plain', + ], + 'ico' => [ + 'image/x-icon', + 'image/x-ico', + 'image/vnd.microsoft.icon', + ], + 'stl' => [ + 'application/sla', + 'application/vnd.ms-pki.stl', + 'application/x-navistyle', + ], + ]; + + /** + * Attempts to determine the best mime type for the given file extension. + * + * @param string $extension + * + * @return string|null The mime type found, or none if unable to determine. + */ + public static function guessTypeFromExtension($extension) + { + $extension = trim(strtolower($extension), '. '); + + if (! array_key_exists($extension, static::$mimes)) + { + return null; + } + + return is_array(static::$mimes[$extension]) ? static::$mimes[$extension][0] : static::$mimes[$extension]; + } + + /** + * Attempts to determine the best file extension for a given mime type. + * + * @param string $type + * @param string|null $proposedExtension - default extension (in case there is more than one with the same mime type) + * + * @return string|null The extension determined, or null if unable to match. + */ + public static function guessExtensionFromType($type, $proposedExtension = null) + { + $type = trim(strtolower($type), '. '); + + $proposedExtension = trim(strtolower($proposedExtension)); + + if ($proposedExtension !== '') + { + if (array_key_exists($proposedExtension, static::$mimes) && in_array($type, is_string(static::$mimes[$proposedExtension]) ? [static::$mimes[$proposedExtension]] : static::$mimes[$proposedExtension], true)) + { + // The detected mime type matches with the proposed extension. + return $proposedExtension; + } + + // An extension was proposed, but the media type does not match the mime type list. + return null; + } + + // Reverse check the mime type list if no extension was proposed. + // This search is order sensitive! + foreach (static::$mimes as $ext => $types) + { + if ((is_string($types) && $types === $type) || (is_array($types) && in_array($type, $types, true))) + { + return $ext; + } + } + + return null; + } + + /** + * Test whether the given mime type is in the allowed types. + * + * @param mixed $allowed_types Can be a list of comma separated types or an array of types + * @param string $mime The mime type to check + * + * @return mixed Null on failure, true on success + */ + public static function check($allowed_types, $mime) + { + $allowed_types = is_array($allowed_types) ? $allowed_types : array_map('trim', explode(',', $allowed_types)); + + foreach ($allowed_types as $allowed_type) + { + // Check whether we have a mime type or a file extension. A Mime type is supposed to have a forward slash character. + // If we have a file extension (.jpg, .zip), convert it to a Mime type. + $allowed_type = strpos($allowed_type, '/') === false ? self::guessTypeFromExtension($allowed_type) : $allowed_type; + + // Special case: Allow to use wildcard in mime types like: image/* - This requires to convert the asterisk character to regex pattern. + $allowed_type = str_replace('*', '.*', $allowed_type); + + if (preg_match('#' . $allowed_type . '#', $mime)) + { + return true; + } + } + } + + /** + * Detect the filename's Mime type + * + * @param string $file The path to the file to be checked + * + * @return mixed the mime type detected false on error + */ + public static function detectFileType($file) + { + // If we can't detect anything mime is false + $mime = false; + + try + { + if (function_exists('mime_content_type')) + { + $mime = mime_content_type($file); + } + elseif (function_exists('finfo_open')) + { + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime = finfo_file($finfo, $file); + finfo_close($finfo); + } + } + catch (\Exception $e) + { + } + + return $mime; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Rules/nrcoordinates.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Rules/nrcoordinates.php new file mode 100644 index 00000000..00e508d1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Rules/nrcoordinates.php @@ -0,0 +1,38 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +class JFormRuleNRCoordinates extends JFormRule +{ + /** + * The regular expression to use in testing a form field value. + * + * @var string + * @since 11.1 + * @link http://www.w3.org/TR/html-markup/input.email.html + */ + protected $regex = '^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$'; + + public function test(SimpleXMLElement $element, $value, $group = null, Joomla\Registry\Registry $input = null, JForm $form = null) + { + $value = trim($value); + + // If the field is empty and not required, the field is valid. + $required = ((string) $element['required'] == 'true' || (string) $element['required'] == 'required'); + + if (!$required && empty($value)) + { + return true; + } + + // Test the value against the regular expression. + return parent::test($element, $value, $group, $input, $form); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Rules/nrdate.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Rules/nrdate.php new file mode 100644 index 00000000..4b63d9ca --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Rules/nrdate.php @@ -0,0 +1,39 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +class JFormRuleNRDate extends JFormRule +{ + public function test(SimpleXMLElement $element, $value, $group = null, Joomla\Registry\Registry $input = null, JForm $form = null) + { + if (!$value = trim($value)) + { + return true; + } + + $format = (string) $element->attributes()->timeformat; + + return $this->validateDate($value, $format); + } + + /** + * Validates the given date with the given format + * + * @param string $date + * @param string $format + * + * @return boolean + */ + private function validateDate($date, $format = 'Y-m-d') + { + $d = DateTime::createFromFormat($format, $date); + return $d && $d->format($format) === $date; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags.php new file mode 100644 index 00000000..7b7e9d16 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\SmartTags\SmartTags instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Article.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Article.php new file mode 100644 index 00000000..e0fa68a2 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Article.php @@ -0,0 +1,47 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +use NRFramework\Assignments\Component\ContentBase; + +defined('_JEXEC') or die('Restricted access'); + +class Article extends SmartTag +{ + /** + * Fetch a property from the User object + * + * @param string $key The name of the property to return + * + * @return mixed Null if property is not found, mixed if property is found + */ + public function fetchValue($key) + { + $contentAssignment = new ContentBase(); + + if (!$contentAssignment->isSinglePage()) + { + return; + } + + // Why the heck $isSinglePage below returns false? + // $articleAssignment = new \NRFramework\Assignments\Component\ContentArticle(); + // $isSinglePage = $articleAssignment->pass(); + + $article = $contentAssignment->getItem(); + + if (!isset($article->{$key}) || is_object($article->{$key})) + { + return; + } + + return $article->{$key}; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Client.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Client.php new file mode 100644 index 00000000..db43f1d9 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Client.php @@ -0,0 +1,55 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Client extends SmartTag +{ + /** + * Returns the device + * + * @return string + */ + public function getDevice() + { + return \NRFramework\WebClient::getDeviceType(); + } + + /** + * Returns the OS + * + * @return string + */ + public function getOS() + { + return \NRFramework\WebClient::getOS(); + } + + /** + * Returns the browser + * + * @return string + */ + public function getBrowser() + { + return \NRFramework\WebClient::getBrowser()['name']; + } + + /** + * Returns the current user agent + * + * @return string + */ + public function getUserAgent() + { + return \NRFramework\WebClient::getClient()->userAgent; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Date.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Date.php new file mode 100644 index 00000000..19801f1a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Date.php @@ -0,0 +1,39 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Date extends SmartTag +{ + /** + * Constructor + * + * @param object $factory The framework factory object + * @param array $options Assignment configuration options + */ + public function __construct($factory = null, $options = null) + { + parent::__construct($factory, $options); + + $this->tz = new \DateTimeZone($this->factory->getApplication()->getCfg('offset', 'GMT')); + $this->date = $this->factory->getDate()->setTimezone($this->tz); + } + + /** + * Returns the current date + * + * @return string + */ + public function getDate() + { + return $this->date->format('Y-m-d H:i:s', true); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Day.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Day.php new file mode 100644 index 00000000..9827a1b1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Day.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Day extends Date +{ + /** + * Returns the current day + * + * @return string + */ + public function getDay() + { + return $this->date->format('j'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/IP.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/IP.php new file mode 100644 index 00000000..e797db90 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/IP.php @@ -0,0 +1,27 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +use NRFramework\User; + +defined('_JEXEC') or die('Restricted access'); + +class IP extends SmartTag +{ + /** + * Returns the IP address + * + * @return string + */ + public function getIP() + { + return User::getIP(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Language.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Language.php new file mode 100644 index 00000000..d4a9d8e7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Language.php @@ -0,0 +1,56 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +USE Joomla\CMS\Language\Text; + +defined('_JEXEC') or die('Restricted access'); + +class Language extends SmartTag +{ + /** + * Fetch specific translation string value + * + * @param string $key + * + * @return string + */ + public function fetchValue($key) + { + $key = strtolower($key); + $key_parts = explode('_', $key); + + switch ($key_parts[0]) + { + case 'com': + if (isset($key_parts[1]) && !empty($key_parts[1])) + { + $extension = 'com_' . $key_parts[1]; + } + + \JFactory::getLanguage()->load($extension, JPATH_ADMINISTRATOR); + \JFactory::getLanguage()->load($extension, JPATH_SITE); + break; + + case 'plg': + if (isset($key_parts[1]) && !empty($key_parts[1]) && isset($key_parts[2]) && !empty($key_parts[2])) + { + $extension = implode('_', ['plg', $key_parts[1], $key_parts[2]]); + } + + $path = implode(DIRECTORY_SEPARATOR, [JPATH_PLUGINS, $key_parts[1], $key_parts[2]]); + + \JFactory::getLanguage()->load($extension, $path); + break; + } + + return Text::_($key); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Month.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Month.php new file mode 100644 index 00000000..c3598cc4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Month.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Month extends Date +{ + /** + * Returns the current month + * + * @return string + */ + public function getMonth() + { + return $this->date->format('n'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Page.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Page.php new file mode 100644 index 00000000..2b4d37e8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Page.php @@ -0,0 +1,90 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Page extends SmartTag +{ + /** + * Returns the page title + * + * @return string + */ + public function getTitle() + { + return $this->doc->getTitle(); + } + + /** + * Returns the page description + * + * @return string + */ + public function getDesc() + { + return $this->doc->getMetaData('description'); + } + + /** + * Returns the page keywords + * + * @return string + */ + public function getKeywords() + { + return $this->doc->getMetaData('keywords'); + } + + /** + * Returns the locale + * + * @return string + */ + public function getLang() + { + return $this->doc->getLanguage(); + } + + /** + * Returns the language code used in URLs + * + * @return string + */ + public function getLangURL() + { + return explode('-', $this->doc->getLanguage())[0]; + } + + /** + * Returns the page generator + * + * @return string + */ + public function getGenerator() + { + return $this->doc->getGenerator(); + } + + /** + * Returns the browser title + * + * @return string + */ + public function getBrowserTitle() + { + if (!$menu = $this->app->getMenu()->getActive()) + { + return ''; + } + + return $menu->getParams()->get('page_title'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/QueryString.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/QueryString.php new file mode 100644 index 00000000..992bc151 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/QueryString.php @@ -0,0 +1,40 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class QueryString extends SmartTag +{ + /** + * Fetch value of a specific query string + * + * @param string $key + * + * @return string + */ + public function fetchValue($key) + { + $query = $this->factory->getURI()->getQuery(true); + + if (empty($query)) + { + return; + } + + // Convert array keys to lowercase + $query = array_change_key_case($query); + + // Convert key to lowercase too + $key = strtolower($key); + + return array_key_exists($key, $query) ? \JFilterInput::getInstance()->clean($query[$key]) : ''; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/RandomID.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/RandomID.php new file mode 100644 index 00000000..c50fb13c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/RandomID.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class RandomID extends SmartTag +{ + /** + * Returns a random ID + * + * @return string + */ + public function getRandomID() + { + return bin2hex(\JCrypt::genRandomBytes(8)); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Referrer.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Referrer.php new file mode 100644 index 00000000..fc357a98 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Referrer.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Referrer extends SmartTag +{ + /** + * Returns the current Referrer + * + * @return string + */ + public function getReferrer() + { + return $this->app->input->server->get('HTTP_REFERER', '', 'RAW'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Site.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Site.php new file mode 100644 index 00000000..265d78da --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Site.php @@ -0,0 +1,46 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Site extends SmartTag +{ + /** + * Returns the site email + * + * @return string + */ + public function getEmail() + { + return $this->app->get('mailfrom'); + } + + /** + * Returns the site name + * + * @return string + */ + public function getName() + { + return $this->app->get('sitename'); + } + + /** + * Returns the site URL + * + * @return string + */ + public function getURL() + { + $url = $this->factory->getURI(); + return $url::root(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/SmartTag.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/SmartTag.php new file mode 100644 index 00000000..6514a0cb --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/SmartTag.php @@ -0,0 +1,78 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +use Joomla\Registry\Registry; + +abstract class SmartTag +{ + /** + * Factory Class + * + * @var object + */ + protected $factory; + + /** + * Joomla Application object + * + * @var object + */ + protected $app; + + /** + * Joomla Document + * + * @var object + */ + protected $doc; + + /** + * Useful data used by a Smart Tag + * + * @var array + */ + protected $data; + + /** + * Smart Tags Configuration Options + * + * @var array + */ + protected $options; + + public function __construct($factory = null, $options = null) + { + if (!$factory) + { + $factory = new \NRFramework\Factory(); + } + $this->factory = $factory; + + $this->app = $this->factory->getApplication(); + $this->doc = $this->factory->getDocument(); + + $this->options = $options; + } + + /** + * Set the data + * + * @param array $data + * + * @return void + */ + public function setData($data) + { + $this->data = $data; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/SmartTags.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/SmartTags.php new file mode 100644 index 00000000..26fb683e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/SmartTags.php @@ -0,0 +1,659 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +use NRFramework\Cache; +use \Joomla\String\StringHelper; + +/** + * SmartTags replaces placeholder variables in a string + */ +class SmartTags +{ + /** + * Factory Class + * + * @var object + */ + protected $factory; + + /** + * Path where each extension stores + * their Smart Tags. + * + * @var array + */ + protected $paths; + + /** + * Tags Array + * + * @var array + */ + protected $tags = []; + + /** + * All the options that we were given. + * This is stored in case we were given options + * other then the prefix/placeholder such as a user. + * This is useful for other plugins to manipulate the user, etc... + * + * @var array + */ + protected $options; + + /** + * The Smart Tags pattern used to find all available Smart Tags in a subject. + * + * @var string + */ + protected $pattern; + + /** + * The Smart Tag prefix + * + * @var string + */ + protected $prefix = ''; + + /** + * The Smart Tag placeholder + * + * @var string + */ + private $placeholder = '{}'; + + /** + * List of excluded files within the NRFramework\SmartTags namespace + * + * @var array + */ + protected $excluded_smart_tags_files = [ + '.', + '..', + 'index.php', + 'SmartTag.php', + 'SmartTags.php' + ]; + + /** + * Smart Tags Constructor + * + * @param array $opts An array of options(prefix, placeholder) + * @param Factory $factory NRFramework Factory + */ + public function __construct($opts = [], $factory = null) + { + $this->options = $opts; + + // set options + if (is_array($opts)) + { + $this->prefix = isset($opts['prefix']) ? $opts['prefix'] : $this->prefix; + $this->placeholder = isset($opts['placeholder']) ? $opts['placeholder'] : $this->placeholder; + } + + $this->pattern = $this->getPattern(); + + // Set Factory + if (!$factory) + { + $factory = new \NRFramework\Factory(); + } + + $this->factory = $factory; + + // register NRFramework Smart Tags + $this->register('\NRFramework\SmartTags', dirname(__DIR__) . '/SmartTags'); + } + + /** + * Get a cache instance of the class + * + * @param array $opts An array of options(prefix, placeholder) + * @param object $factory The framework's factory class + * + * @return object + */ + static public function getInstance($opts = [], $factory = null) + { + static $instance = null; + + if ($instance === null) + { + $instance = new SmartTags($opts, $factory); + } + + return $instance; + } + + /** + * Registers a namespace, path and some data where Smart Tags are stored. + * + * @param string $namespace + * @param string $path + * @param array $data + * + * @return void + */ + public function register($namespace, $path, $data = []) + { + if (!$namespace || !$path) + { + return; + } + + if (isset($this->paths[$namespace])) + { + return; + } + + $this->paths[$namespace] = [ + 'path' => $path + ]; + + if (isset($data)) + { + $this->paths[$namespace]['data'] = $data; + } + } + + /** + * Adds Custom Tags to the list + * + * @param mixed $tags Tags list (Array or Object) + * @param string $prefix A string to prefix all keys + */ + public function add($tags, $prefix = null) + { + if (!$tags || !is_array($tags)) + { + return; + } + + // Start of Convert Forms View Submissions Compatibility Issue + // This block is added to handle the backwards compatibility issue occured in the front-end submissions view + // in Convert Forms which adds submissions smart tags with curly brackets {}. + // @deprecated - Scheduled to be removed at the end of 2021 + foreach ($tags as $key => $value) + { + if (strpos($key, '{') === false) + { + continue; + } + + $newKey = ltrim($key, '{'); + $newKey = rtrim($newKey, '}'); + $tags[$newKey] = $value; + } + // End of Convert Forms View Submissions Compatibility Issue + + // Add Prefix to keys + if ($prefix) + { + foreach ($tags as $key => $value) + { + $newKey = strtolower($prefix . $key); + $tags[$newKey] = $value; + unset($tags[$key]); + } + } + + $this->tags = array_merge($this->tags, $tags); + + return $this; + } + + /** + * Returns placeholder in 2 pieces + * + * @return array + */ + protected function getPlaceholder() + { + return str_split($this->placeholder, strlen($this->placeholder) / 2); + } + + /** + * Replace tags in object recursively + * + * @param mixed $obj The data object to search for Smart Tags + * + * @return mixed + */ + public function replace($subject) + { + if (is_string($subject)) + { + $this->replaceFoundSmartTags($subject); + } + + if (is_array($subject) || is_object($subject)) + { + foreach ($subject as $key => &$subject_item) + { + $subject_item = $this->replace($subject_item); + } + } + + return $subject; + } + + /** + * Finds and replaces found Smart Tags in given content + * + * @param string $content + * + * @return void + */ + private function replaceFoundSmartTags(&$content) + { + // if no smart tags exist in content, abort + if (!$this->textHasShortcode($content)) + { + return; + } + + // find all Smart Tags + preg_match_all($this->pattern, $content, $matches); + + // find all Smart Tags and keep the unique only + $foundSmartTags = array_unique($matches[0]); + + // replaces all Smart Tags in given content + $this->replaceSmartTagsInContent($content, $foundSmartTags); + + return $content; + } + + /** + * Replaces all Smart Tags in given content + * + * @param string $string + * @param array $foundSmartTags + * + * @return void + */ + private function replaceSmartTagsInContent(&$content, $foundSmartTags) + { + $tag_value_pairs = []; + + // find values for each Smart Tag + foreach ($foundSmartTags as $tag) + { + // prepare the smart tag that is going to be processed + if (!$shortCodeObject = $this->parseShortcode($tag)) + { + continue; + } + + $smartTagName = $shortCodeObject['name']; + $smartTagClassName = $shortCodeObject['group']; + + // Check if the tag is already processed by a previous operation or its value provided in the payload. + if (isset($this->tags[$smartTagName])) + { + $tag_value_pairs[$tag] = $this->tags[$smartTagName]; + continue; + } + + // OK, we don't know the value yet. Let's see if there's a method available we can call to get a value. + $smartTagNamespace = $shortCodeObject['namespace']; + + // get the Smart Tag class + if (!$smartTag = $this->getSmartTagClassByName($smartTagNamespace, $smartTagClassName)) + { + /** + * No method found to call. If the current Smart Tag was added via add(), remove it, otherwise, leave it as is. + * + * This is due to without this check, a Smart Tag may be given i.e. {convertforms 1} which would be removed and thus Convert Forms + * wouldn't be able to replace it. We must only remove Smart Tags that were added by add(). + */ + if (count($this->tags)) + { + foreach ($this->tags as $key => $value) + { + if (strpos($key, $shortCodeObject['group']) !== 0) + { + continue; + } + + $tag_value_pairs[$tag] = ''; + break; + } + } + + continue; + } + + // set data for Smart Tag if they exist in the path data + if (isset($this->paths[$smartTagNamespace]['data'])) + { + $smartTag->setData($this->paths[$smartTagNamespace]['data']); + } + + // Get the Smart Tag value + $value = $this->getSmartTagValue($smartTag, $shortCodeObject); + + // parse the value to ensure we can save it + $this->prepareSmartTagValue($value); + + // cache value + $this->tags[$smartTagName] = $value; + + // replace all instances of Smart Tag with its value + $tag_value_pairs[$tag] = $value; + } + + if (!$tag_value_pairs) + { + return; + } + + // replace all found Smart Tag key,value pairs + foreach ($tag_value_pairs as $tag => $value) + { + $content = str_ireplace($tag, $value, $content); + } + } + + /** + * Prepares the Smart Tag value prior to saving it + * + * @param string $value + * + * @return void + */ + protected function prepareSmartTagValue(&$value) + { + // if the value is an array or object, implode it in order to be able to save it and parse it later on. + $value = is_array($value) || is_object($value) ? implode(',', (array) $value) : $value; + } + + /** + * Parse shortcode and return an array of the shortcode information like, classname, method name e.t.c. + * + * The expected shortcode syntax is as follow: {GROUP[.NAME]} + * + * The GROUP part is required and must be pointing to \NRFramework\SmartTags\GROUP file which must declare a class with the name GROUP. + * Eg: The shortcode {customer} will try to find a class with the name Customer in the \NRFramework\SmartTags\Customer namespace. + * + * The NAME part represents the name of the method in the called class. + * For example, the shortcode {customer.name} will call the getName() method in the \NRFramework\SmartTags\Customer class. + * + * If the NAME part is ommitted or is invalid, Smart Tags fallbacks to a method with the same name as the class. + * For example, the shortcode {customer} will call the getCustomer() method in the \NRFramework\SmartTags\Customer class. + * + * @param string $text + * + * @return array + */ + private function parseShortcode($text) + { + if (empty($text)) + { + return; + } + + // Remove placeholders and prefix from the shortcode. {device} becomes device + $placeholder = $this->getPlaceholder(); + $text = ltrim($text, $placeholder[0] . $this->prefix); + $text = rtrim($text, $placeholder[1]); + + $text = trim(strtolower($text)); + + // We expect a shortcode in 2 parts separated by a dot. + // The 1st part is the Smart Tags Group (Class Name) and the 2nd part is the Name of the actual Smart Tag (Method name, optional). + $textParts = explode('.', $text, 2); + + $group = $textParts[0]; + $key = isset($textParts[1]) ? $textParts[1] : $textParts[0]; + + return [ + 'name' => $text, // Rename to shortcode + 'group' => $group, + 'key' => $key, + 'method_name' => 'get' . $key, + 'namespace' => $this->getSmartTagNamespace($group) + ]; + } + + /** + * Returns the Smart Tags Value + * + * @param SmartTag $smartTag + * @param array $shortCodeObject The parsed shortcode object + * + * @return mixed + */ + protected function getSmartTagValue($smartTag, $shortCodeObject) + { + // Smart Tags method name + $smartTagMethod = $shortCodeObject['method_name']; + + // make sure method exists in the Smart Tag class + if (method_exists($smartTag, $smartTagMethod)) + { + return $smartTag->{$smartTagMethod}(); + } + + /** + * Check if the Smart Tag contains a method + * to fetch the Smart Tag we are trying to replace. + */ + if (method_exists($smartTag, 'fetchValue')) + { + return $smartTag->fetchValue($shortCodeObject['key']); + } + } + + /** + * Returns the Smart Tag Class given the name of the Smart Tag + * + * @param string $smartTagNamespace + * @param string $smartTagClassName + * + * @return mixed + */ + private function getSmartTagClassByName($smartTagNamespace, $smartTagClassName) + { + // get namespace classes + $namespace_classes = $this->getNamespaceClasses($smartTagNamespace); + + if (!isset($namespace_classes[strtolower($smartTagClassName)])) + { + return false; + } + + $smartTagClass = $smartTagNamespace . '\\' . $namespace_classes[strtolower($smartTagClassName)]; + + // return smart class + return new $smartTagClass($this->factory, $this->options); + } + + /** + * Retrieves the cached namespace clases or finds them in the given path + * + * @param string $namespace + * @param string $path + * + * @return array + */ + private function getNamespaceClasses($namespace, $path = null) + { + $cache = $this->factory->getCache(); + $hash = md5('nrf_smarttags_' . $namespace); + + // if namespace classes are cached, retrieve them + if ($cache->has($hash)) + { + return $cache->get($hash); + } + + // if no cached namespace classes exist, ensure we were given a valid path + if (!$path && !is_string($path)) + { + return []; + } + + // find namespace classes + $namespace_classes = \JFolder::files($path, '.', false, false, $this->excluded_smart_tags_files); + + // stores the final strtolower(class name) => actual class file name data + $classes_data = []; + + // retrieve the strtolower(class name) => class file name array + foreach ($namespace_classes as $className) + { + $base_class_name = str_replace('.php', '', $className); + + $classes_data[strtolower($base_class_name)] = $base_class_name; + } + + // cache it + return $cache->set($hash, $classes_data); + } + + /** + * Find the namespace of the class in the path list + * + * @param string $class_name + * + * @return mixed + */ + private function getSmartTagNamespace($class_name) + { + if (!$class_name && !is_string($class_name)) + { + return false; + } + + foreach ($this->paths as $namespace => $path_data) + { + // get namespace classes + $namespace_classes = $this->getNamespaceClasses($namespace, $path_data['path']); + + if (!isset($namespace_classes[strtolower($class_name)])) + { + continue; + } + + return $namespace; + } + + return false; + } + + /** + * Return the regular expression pattern that will be used for searches + * + * @return string + */ + private function getPattern() + { + $placeholder = $this->getPlaceholder(); + $prefix = $this->prefix ? preg_quote($this->prefix) . '.' : ''; + + return '#(\\' . $placeholder[0] . $prefix . '([a-zA-Z]\\' . $placeholder[0] . '??[^\\' . $placeholder[0] . ']*?\\' . $placeholder[1] . '))#'; + } + + /** + * Super fast way to determine whether given text includes shortcodes + * + * @param string $text + * + * @return boolean + */ + private function textHasShortcode($text) + { + return StringHelper::strpos($text, $this->getPlaceholder()[0] . $this->prefix) !== false; + } + + /** + * Returns list of all tags found in given paths + * + * Currently used in the Convert Forms Front-end Submissions Menu Type and in the EngageBox SmartTags modal. + * + * @deprecated since 4.5.6 + * + * @return array + */ + public function get() + { + $placeholder = $this->getPlaceholder(); + + // get all tags that have already been added to the list + $smart_tags_data = $this->tags; + + // loop all registered paths + foreach ($this->paths as $namespace => $path_data) + { + if (!isset($path_data['path'])) + { + continue; + } + + if (!is_dir($path_data['path'])) + { + continue; + } + + // find all smart tags + $files = \JFolder::files($path_data['path'], '.', false, false, $this->excluded_smart_tags_files); + + // search all files + foreach ($files as $className) + { + $baseClassName = str_replace('.php', '', $className); + $className = $namespace . '\\' . $baseClassName; + + if (!class_exists($className)) + { + continue; + } + + // reflection class of smart tag + $reflectionSmartTag = new \ReflectionClass($className); + + // search all methods + foreach($reflectionSmartTag->getMethods() as $method) + { + // Only parse Smart Tags of current class and not from its parent + if ($method->class != ltrim($className, '\\')) + { + continue; + } + + // get smart tag name from each getSmartTag method + if (strpos($method->name, 'get') !== 0) + { + continue; + } + + $funcNameSplit = explode('get', $method->name); + + $suffix = ''; + if (strtolower($funcNameSplit[1]) != strtolower($reflectionSmartTag->getShortName())) + { + $suffix = '.' . $funcNameSplit[1]; + } + + $smartTagPrefix = $placeholder[0] . strtolower($reflectionSmartTag->getShortName() . $suffix) . $placeholder[1]; + + $smart_tags_data[$smartTagPrefix] = ''; + } + } + } + + return $smart_tags_data; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Time.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Time.php new file mode 100644 index 00000000..a22e46f1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Time.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Time extends Date +{ + /** + * Returns the current time + * + * @return string + */ + public function getTime() + { + return $this->date->format('H:i', true); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/URL.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/URL.php new file mode 100644 index 00000000..de8ce35f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/URL.php @@ -0,0 +1,46 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class URL extends SmartTag +{ + /** + * Returns the URL + * + * @return string + */ + public function getURL() + { + return $this->factory->getURI()->toString(); + } + + /** + * Returns the URL encoded + * + * @return string + */ + public function getEncoded() + { + return urlencode($this->factory->getURI()->toString()); + } + + /** + * Returns the site URL + * + * @return string + */ + public function getPath() + { + $url = $this->factory->getURI(); + return $url::current(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/User.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/User.php new file mode 100644 index 00000000..539c3432 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/User.php @@ -0,0 +1,106 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class User extends SmartTag +{ + /** + * Fetch a property from the User object + * + * @param string $key The name of the property to return + * + * @return mixed Null if property is not found, mixed if property is found + */ + public function fetchValue($key) + { + // Just in case, deny access to the 'password' property + if ($key == 'password') + { + return; + } + + $user_id = isset($this->options['user']) ? $this->options['user'] : null; + $user = $this->factory->getUser($user_id); + + if (is_null($user) || $user->id == 0 || !isset($user->{$key})) + { + return; + } + + return $user->{$key}; + } + + /** + * Returns the name of the user capitalized + * + * @return string + */ + public function getName() + { + return ucwords(strtolower($this->fetchValue('name'))); + } + + /** + * Returns the user first name + * + * @return string + */ + public function getFirstname() + { + // Set first name + $nameParts = explode(' ', $this->getName(), 2); + $firstname = trim($nameParts[0]); + + return $firstname; + } + + /** + * Returns the user last name + * + * @return string + */ + public function getLastname() + { + // Set last name + $nameParts = explode(' ', $this->getName(), 2); + $lastname = isset($nameParts[1]) ? trim($nameParts[1]) : $nameParts[0]; + + return $lastname; + } + + /** + * Returns the user login + * + * @deprecated Use {user.username} + * + * @return string + */ + public function getLogin() + { + return $this->fetchValue('username'); + } + + /** + * Returns the user register date + * + * @return string + */ + public function getRegisterDate() + { + if (!$date = $this->fetchValue('registerDate')) + { + return; + } + + return \JHtml::_('date', $date, \JText::_('DATE_FORMAT_LC5')); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Year.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Year.php new file mode 100644 index 00000000..8e77cc90 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/SmartTags/Year.php @@ -0,0 +1,25 @@ + or later +*/ + +namespace NRFramework\SmartTags; + +defined('_JEXEC') or die('Restricted access'); + +class Year extends Date +{ + /** + * Returns the current year + * + * @return string + */ + public function getYear() + { + return $this->date->format('Y'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/URL.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/URL.php new file mode 100644 index 00000000..13c408e5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/URL.php @@ -0,0 +1,142 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +use NRFramework\Factory; + +defined('_JEXEC') or die('Restricted access'); + +class URL +{ + /** + * Class constructor + */ + public function __construct($path, $factory = null) + { + $this->path = trim($path); + $this->factory = $factory ? $factory : new Factory(); + } + + public function getInstance() + { + return clone \JUri::getInstance($this->path); + } + + public function getDomainName() + { + return strtolower(str_ireplace('www.', '', $this->getInstance()->getHost())); + } + + public function isAbsolute() + { + return !is_null($this->getInstance()->getScheme()); + } + + public function isInternal() + { + if (!$this->path) + { + return false; + } + + $host = $this->getInstance()->getHost(); + + if (is_null($host)) + { + return true; + } + + $siteHost = $this->factory->getURI()->getHost(); + + return preg_match('#' . preg_quote($siteHost, '#') . '#', $host) ? true : false; + } + + /** + * Transform a relative path to absolute URL + * + * @return string + */ + public function toAbsolute() + { + if (empty($this->path)) + { + return; + } + + // Check if it's already absolute URL + if ($this->isAbsolute()) + { + return $this->path; + } + + $basePath = \parse_url(\JURI::root()); + + $parse_path = $this->getInstance(); + $parse_path->setScheme($basePath['scheme']); + $parse_path->setHost($basePath['host']); + $parse_path->setPath($basePath['path'] . $parse_path->getPath()); + + return $parse_path->toString(); + } + + /** + * CDNify a resource + * + * @param string $host The hostname of the CDN to be used + * @param string $scheme + * + * @return string + */ + public function cdnify($host, $scheme = 'https') + { + // Allow only internal URLs + if (!$this->isInternal()) + { + return $this->path; + } + + // Allow only resource files + $path = $this->getInstance()->getPath(); + + if (strpos($path, '.') === false) + { + return $this->path; + } + + return $this->setHost($host, $scheme); + } + + public function setHost($domain, $scheme = 'https') + { + if (empty($this->path)) + { + return; + } + + $url_new = $this->getInstance(); + $url_new->setScheme($scheme); + $url_new->setHost($domain); + + // Path should always start with a slash + if ($url_new->getPath()) + { + $url_new->setPath('/' . ltrim($url_new->getPath(), '/')); + } + + $result = $url_new->toString(); + + if ($scheme == '//') + { + $result = str_replace('://', '', $result); + } + + return $result; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/URLHelper.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/URLHelper.php new file mode 100644 index 00000000..84c62173 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/URLHelper.php @@ -0,0 +1,225 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +use NRFramework\URL; + +defined('_JEXEC') or die('Restricted access'); + +class URLHelper +{ + /** + * Searches the given HTML for all external links and appends the affiliate paramter aff=id to every link based on an affiliate list. + * + * @param string $text The html to search for external links + * @param array $affiliates A key value array: domain name => affiliate parameter + * + * @return string + */ + public static function replaceAffiliateLinks($text, $affiliates, $factory = null) + { + if (!class_exists('DOMDocument') || empty($text)) + { + return $text; + } + + $factory = $factory ? $factory : new \NRFramework\Factory(); + + libxml_use_internal_errors(true); + $dom = new \DOMDocument; + $dom->encoding = 'UTF-8'; + $dom->loadHTML($text); + + $links = $dom->getElementsByTagName('a'); + + foreach ($links as $link) + { + $linkHref = $link->getAttribute('href'); + + if (empty($linkHref)) + { + continue; + } + + $url = new URL($linkHref, $factory); + + if ($url->isInternal()) + { + continue; + } + + $domain = $url->getDomainName(); + + if (!array_key_exists($domain, $affiliates)) + { + continue; + } + + $urlInstance = $url->getInstance(); + $urlQuery = $urlInstance->getQuery(); + $affQuery = $affiliates[$domain]; + + // If both queries are the same, skip the link tag + if ($urlQuery === $affQuery) + { + continue; + } + + if (empty($urlQuery)) + { + $urlInstance->setQuery($affQuery); + } else + { + parse_str($urlQuery, $params); + parse_str($affQuery, $params_); + $params_new = array_merge($params, $params_); + $urlInstance->setQuery(http_build_query($params_new)); + } + + $newURL = $urlInstance->toString(); + + if ($newURL === $linkHref) + { + continue; + } + + $link->setAttribute('href', $newURL); + } + + return $dom->saveHtml(); + } + + /** + * Convert all and tags with relative paths to absolute URLs + * + * @param string $text The text/HTML to search for relative paths + * @param object $factory The framework's factory + * @param object $fix_links Should we parse links? + * @param object $fix_images Should we parse images? + * + * @return void The converted HTML string + */ + public static function relativePathsToAbsoluteURLs($text, $factory = null, $fix_links = true, $fix_images = true) + { + // Make sure DOMDocument is installed + if (!class_exists('DOMDocument')) + { + return $text; + } + + // Quick check the given text has some links or images + $hasImages = $fix_images && strpos($text, 'encoding = 'UTF-8'; + + // Handle non-latin characters to UTF8 + $text_ = mb_convert_encoding($text, 'HTML-ENTITIES', 'UTF-8'); + + // Load HTML without adding a doctype. + // Do not ever try to remove tags with LIBXML_HTML_NOIMPLIED constant as it's rather unstable. + // https://stackoverflow.com/questions/4879946/how-to-savehtml-of-domdocument-without-html-wrapper/44866403#44866403 + // LIBXML_HTML_NODEFDTD requires Libxml >= 2.7.8 - https://www.php.net/manual/en/libxml.constants.php + $dom->loadHTML($text_, LIBXML_HTML_NODEFDTD); + + // Replace links + if ($fix_links) + { + $links = $dom->getElementsByTagName('a'); + + foreach ($links as $link) + { + $resource = $link->getAttribute('href'); + + if (empty($resource) || mb_substr($resource, 0, 1) == '#') + { + continue; + } + + $url = new URL($resource, $factory); + + if (!$url->isInternal()) + { + continue; + } + + $newURL = $url->toAbsolute(); + + $link->setAttribute('href', $newURL); + + $replacements++; + } + } + + // Replace images + if ($fix_images) + { + $images = $dom->getElementsByTagName('img'); + + foreach ($images as $image) + { + $resource = $image->getAttribute('src'); + + if (empty($resource)) + { + continue; + } + + $url = new URL($resource, $factory); + + if (!$url->isInternal()) + { + continue; + } + + $newURL = $url->toAbsolute(); + + $image->setAttribute('src', $newURL); + + $replacements++; + } + } + + // If we don't have any replacements took place, proceed no further and return the original text. + if ($replacements == 0) + { + return $text; + } + + $html = trim($dom->saveHTML()); + + // Make sure no or tags are added in the text + // In case the final string starts with , we assume the elements are added by DOMDocument incorectly and we remove them. + // In case the final string starts with ..., we assume the elements are included in the original text and we must leave them. + if (strpos($html, '') !== false) + { + $html = str_replace(['', ''], '', $html); + } + + return $html; + + } catch (\Throwable $th) + { + return $text; + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/Updatesites.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/Updatesites.php new file mode 100644 index 00000000..fcf40ba7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/Updatesites.php @@ -0,0 +1,149 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined('_JEXEC') or die('Restricted access'); + +class Updatesites +{ + /** + * Joomla Database Class + * + * @var object + */ + private $db; + + /** + * Consturction method + * + * @param string $key Download Key + */ + public function __construct($key = null) + { + $this->db = \JFactory::getDBO(); + $this->key = ($key) ? $key : $this->getDownloadKey(); + } + + /** + * Main method + */ + public function update() + { + $this->removeDuplicates(); + $this->updateHttptoHttps(); + } + + /** + * Reads the Download Key saved in the Novarain Framework system plugin parameters + * + * @return string The Download Key + */ + public function getDownloadKey() + { + $query = $this->db->getQuery(true) + ->select('e.params') + ->from('#__extensions as e') + ->where('e.element = ' . $this->db->quote('nrframework')); + + $this->db->setQuery($query); + + if (!$params = $this->db->loadResult()) + { + return; + } + + $params = json_decode($params); + + if (!isset($params->key)) + { + return; + } + + return trim($params->key); + } + + /** + * Update http to https + * + * @return void + */ + private function updateHttptoHttps() + { + $query = $this->db->getQuery(true) + ->update('#__update_sites') + ->set($this->db->quoteName('location') . ' = REPLACE(' + . $this->db->quoteName('location') . ', ' + . $this->db->quote('http://') . ', ' + . $this->db->quote('https://') + . ')') + ->where($this->db->quoteName('location') . ' LIKE ' . $this->db->quote('%tassos.gr%')); + $this->db->setQuery($query); + $this->db->execute(); + } + + /** + * Remove duplicate update sites created by upgrading from Free to Pro version + * + * @return void + */ + private function removeDuplicates() + { + $db = $this->db; + + // Find duplicates first + $query = 'SELECT name, COUNT(*) c FROM #__update_sites where location like "%tassos.gr%" GROUP BY name HAVING c > 1'; + $db->setQuery($query); + + if (!$duplicates = $db->loadObjectList()) + { + return; + } + + // OK we have duplicates. Let's remove them. + foreach ($duplicates as $key => $duplicate) + { + // Get all IDs + $query = $db->getQuery(true) + ->select('update_site_id') + ->from('#__update_sites') + ->where('name = ' . $db->quote($duplicate->name)) + ->order('update_site_id DESC'); + + $db->setQuery($query); + + if (!$update_site_ids = $db->loadObjectList()) + { + return; + } + + // Skip the 1st index which represents the last created and valid. + unset($update_site_ids[0]); + + foreach ($update_site_ids as $key => $update_site_id) + { + $id = $update_site_id->update_site_id; + + $query->clear() + ->delete('#__update_sites') + ->where($db->quoteName('update_site_id') . ' = ' . (int) $id); + + $db->setQuery($query); + $db->execute(); + + $query->clear() + ->delete('#__update_sites_extensions') + ->where($db->quoteName('update_site_id') . ' = ' . (int) $id); + + $db->setQuery($query); + $db->execute(); + } + } + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/User.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/User.php new file mode 100644 index 00000000..b1d8faf9 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/User.php @@ -0,0 +1,93 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +use NRFramework\Cache; + +defined('_JEXEC') or die('Restricted access'); + +class User +{ + /** + * Return the user object + * + * @param mixed $id The primary key of the user + * + * @return mixed object on success, null on failure + */ + public static function get($id = null) + { + // Return current active user + if (is_null($id)) + { + return \JFactory::getUser(); + } + + // Prevent Joomla from displaying a warning from missing user by checking if the user exists first + if (!self::exists($id)) + { + return; + } + + return \JFactory::getUser($id); + } + + /** + * Checks whether the user does exist in the database + * + * @param integer $id The primary key of the user + * + * @return bool + */ + public static function exists($id) + { + $hash = 'user' . $id; + + if (Cache::has($hash)) + { + return Cache::get($hash); + } + + $db = \JFactory::getDbo(); + + $query = $db->getQuery(true) + ->select('count(id)') + ->from('#__users') + ->where('id = ' . $id); + $db->setQuery($query); + + // Cache result + return Cache::set($hash, $db->loadResult()); + } + + /** + * Get the IP address of the user + * + * @return string + */ + public static function getIP() + { + $server = \JFactory::getApplication()->input->server; + + // Whether ip is from the share internet + if (!empty($server->get('HTTP_CLIENT_IP'))) + { + return $server->get('HTTP_CLIENT_IP', '', 'string'); + } + + //whether ip is from the proxy + if (!empty($server->get('HTTP_X_FORWARDED_FOR'))) + { + return $server->get('HTTP_X_FORWARDED_FOR', '', 'string'); + } + + return $server->get('REMOTE_ADDR', '', 'string'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/VisitorToken.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/VisitorToken.php new file mode 100644 index 00000000..2357d8f2 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/VisitorToken.php @@ -0,0 +1,109 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined('_JEXEC') or die('Restricted access'); + +class VisitorToken +{ + /** + * Class instance + * + * @var object + */ + private static $instance; + + /** + * Cookie Name + * + * @var string + */ + private $cookieName = "nrid"; + + /** + * Represents the maximum age of the visitor's cookie in seconds. + * + * @var Integer + */ + private $expire = 90000000; + + /** + * Cookies Object + * + * @var object + */ + private $cookies; + + /** + * Class constructor + */ + private function __construct() + { + $this->cookies = \JFactory::getApplication()->input->cookie; + + $token = $this->cookies->get($this->cookieName, null); + + if ($token === null) + { + $this->store($this->create()); + } + } + + /** + * Returns class instance + * + * @return object + */ + public static function getInstance() + { + if (is_null(self::$instance)) + { + self::$instance = new self(); + } + + return self::$instance; + } + + /** + * Get a visitor's unique token id, if a token isn't set yet one will be generated. + * + * @param boolean $forceNew If true, force a new token to be created + * + * @return string The session token + */ + public function get($forceNew = false) + { + return $this->cookies->get($this->cookieName); + } + + /** + * Create a token-string + * + * @param integer $length Length of string + * + * @return string Generated token + */ + private function create($length = 8) + { + return bin2hex(\JCrypt::genRandomBytes($length)); + } + + /** + * Saves the cookie to the visitor's browser + * + * @param string $value Cookie Value + * + * @return void + */ + private function store($value) + { + $this->cookies->set($this->cookieName, $value, time() + $this->expire, '/', '', true); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/NRFramework/WebClient.php b/deployed/convertforms/plugins/system/nrframework/NRFramework/WebClient.php new file mode 100644 index 00000000..3adf567a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/NRFramework/WebClient.php @@ -0,0 +1,128 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +namespace NRFramework; + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +class WebClient +{ + /** + * Joomla Application Client + * + * @var object + */ + public static $client; + + /** + * Get visitor's Device Type + * + * @param string $ua User Agent string, if null use the implicit one from the server's enviroment + * + * @return string The client's device type. Can be: tablet, mobile, desktop + */ + public static function getDeviceType($ua = null) + { + if (!class_exists('Mobile_Detect')) + { + \JLoader::register('Mobile_Detect', JPATH_PLUGINS . '/system/nrframework/helpers/vendors/Mobile_Detect.php'); + } + + $detect = new \Mobile_Detect(null, $ua); + + return ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' : 'mobile') : 'desktop'); + } + + /** + * Get visitor's Operating System + * + * @param string $ua User Agent string, if null use the implicit one from the server's enviroment + * + * @return string Possible values: any of JApplicationWebClient's OS constants (except 'iphone' and 'ipad'), + * 'ios', 'chromeos' + */ + public static function getOS($ua = null) + { + // detect iOS and CromeOS (not handled by JApplicationWebClient) + $ua = self::getClient($ua)->userAgent; + + $ios_regex = '/iPhone|iPad|iPod/i'; + if (preg_match($ios_regex, $ua)) + { + return 'ios'; + } + + $chromeos_regex = '/CrOS/i'; + if (preg_match($chromeos_regex, $ua)) + { + return 'chromeos'; + } + + // use JApplicationWebClient for OS detection + $platformInt = self::getClient($ua)->platform; + $constants = self::getClientConstants(); + + if (isset($constants[$platformInt])) + { + return strtolower($constants[$platformInt]); + } + } + + /** + * Get visitor's Browser name / version + * + * @param string $ua User Agent string, if null use the implicit one from the server's enviroment + * + * @return array + */ + public static function getBrowser($ua = null) + { + $browser = new \Joomla\CMS\Environment\Browser($ua); + + // Keep IE's name as 'ie' instead of 'msie' to prevent breaking existing assignments + $browserName = $browser->getBrowser() == 'msie' ? 'ie' : $browser->getBrowser(); + + return [ + 'name' => $browserName, + 'version' => $browser->getVersion() + ]; + } + + /** + * Get the constants from JApplicationWebClient as an array using the Reflection API + * + * @return array + */ + private static function getClientConstants() + { + $r = new \ReflectionClass('\\Joomla\\Application\\Web\\WebClient'); + $constantsArray = $r->getConstants(); + + // flip the associative array + return array_flip($constantsArray); + } + + /** + * Get the Application Client helper + * see https://api.joomla.org/cms-3/classes/Joomla.Application.Web.WebClient.html + * + * @param string $ua User Agent string, if null use the implicit one from the server's enviroment + * + * @return object + */ + public static function getClient($ua = null) + { + if (is_object(self::$client) && $ua == null) + { + return self::$client; + } + + return (self::$client = new \Joomla\Application\Web\WebClient($ua)); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/autoload.php b/deployed/convertforms/plugins/system/nrframework/autoload.php new file mode 100644 index 00000000..53122470 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/autoload.php @@ -0,0 +1,60 @@ + or later +*/ + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +// Registers framework's namespace +JLoader::registerNamespace('NRFramework', __DIR__ . '/NRFramework/', false, false, 'psr4'); + +// Assignment related class aliases +JLoader::registerAlias('NRFrameworkFunctions', '\\NRFramework\\Functions'); +JLoader::registerAlias('NRAssignment', '\\NRFramework\\Assignment'); +JLoader::registerAlias('nrFrameworkAssignmentsHelper', '\\NRFramework\\Assignments'); +JLoader::registerAlias('nrFrameworkAssignmentsAcyMailing', '\\NRFramework\\Assignments\\AcyMailing'); +JLoader::registerAlias('nrFrameworkAssignmentsAkeebaSubs', '\\NRFramework\\Assignments\\AkeebaSubs'); +JLoader::registerAlias('nrFrameworkAssignmentsContent', '\\NRFramework\\Assignments\\Content'); +JLoader::registerAlias('nrFrameworkAssignmentsConvertForms', '\\NRFramework\\Assignments\\ConvertForms'); +JLoader::registerAlias('nrFrameworkAssignmentsDateTime', '\\NRFramework\\Assignments\\DateTime'); +JLoader::registerAlias('nrFrameworkAssignmentsDevices', '\\NRFramework\\Assignments\\Devices'); +JLoader::registerAlias('nrFrameworkAssignmentsGeoIP', '\\NRFramework\\Assignments\\GeoIP'); +JLoader::registerAlias('nrFrameworkAssignmentsLanguages', '\\NRFramework\\Assignments\\Languages'); +JLoader::registerAlias('nrFrameworkAssignmentsMenu', '\\NRFramework\\Assignments\\Menu'); +JLoader::registerAlias('nrFrameworkAssignmentsPHP', '\\NRFramework\\Assignments\\PHP'); +JLoader::registerAlias('nrFrameworkAssignmentsURLs', '\\NRFramework\\Assignments\\URLs'); +JLoader::registerAlias('nrFrameworkAssignmentsUsers', '\\NRFramework\\Assignments\\Users'); +JLoader::registerAlias('nrFrameworkAssignmentsOS', '\\NRFramework\\Assignments\\OS'); +JLoader::registerAlias('nrFrameworkAssignmentsBrowsers', '\\NRFramework\\Assignments\\Browsers'); +JLoader::registerAlias('NRCache', '\\NRFramework\\Cache'); +JLoader::registerAlias('NRHTML', '\\NRFramework\\HTML'); +JLoader::registerAlias('NRUpdateSites', '\\NRFramework\\Updatesites'); +JLoader::registerAlias('NRSmartTags', '\\NRFramework\\SmartTags\\SmartTags'); +JLoader::registerAlias('NRFramework\\SmartTags', '\\NRFramework\\SmartTags\\SmartTags'); +JLoader::registerAlias('NREmail', '\\NRFramework\\Email'); +JLoader::registerAlias('NRVisitor', '\\NRFramework\\VisitorToken'); +JLoader::registerAlias('NRFonts', '\\NRFramework\\Fonts'); +JLoader::registerAlias('NR_activecampaign', '\\NRFramework\\Integrations\\ActiveCampaign'); +JLoader::registerAlias('NR_campaignmonitor', '\\NRFramework\\Integrations\\CampaignMonitor'); +JLoader::registerAlias('NR_convertkit', '\\NRFramework\\Integrations\\ConvertKit'); +JLoader::registerAlias('NR_drip', '\\NRFramework\\Integrations\\Drip'); +JLoader::registerAlias('NR_elasticemail', '\\NRFramework\\Integrations\\ElasticEmail'); +JLoader::registerAlias('NR_getresponse', '\\NRFramework\\Integrations\\GetResponse'); +JLoader::registerAlias('NR_hubspot', '\\NRFramework\\Integrations\\HubSpot'); +JLoader::registerAlias('NR_icontact', '\\NRFramework\\Integrations\\IContact'); +JLoader::registerAlias('NR_mailchimp', '\\NRFramework\\Integrations\\MailChimp'); +JLoader::registerAlias('NR_recaptcha', '\\NRFramework\\Integrations\\ReCaptcha'); +JLoader::registerAlias('NR_salesforce', '\\NRFramework\\Integrations\\Salesforce'); +JLoader::registerAlias('NR_sendinblue', '\\NRFramework\\Integrations\\SendInBlue'); +JLoader::registerAlias('NR_zoho', '\\NRFramework\\Integrations\\Zoho'); +JLoader::registerAlias('NR_zohocrm', '\\NRFramework\\Integrations\\ZohoCRM'); + +// Define a helper constant to indicate whether we are on a Joomla 4 installation +if (version_compare(JVERSION, '4.0', 'ge') && !defined('nrJ4')) +{ + define('nrJ4', true); +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/acymailing.php b/deployed/convertforms/plugins/system/nrframework/fields/acymailing.php new file mode 100644 index 00000000..ff8bc893 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/acymailing.php @@ -0,0 +1,112 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +use NRFramework\Extension; + +JFormHelper::loadFieldClass('groupedlist'); + +class JFormFieldAcymailing extends JFormFieldGroupedList +{ + /** + * Method to get the field option groups. + * + * @return array The field option objects as a nested array in groups. + * + * @since 1.6 + */ + protected function getGroups() + { + $groups = []; + $lists = []; + + if ($acymailing_5_is_installed = Extension::isInstalled('com_acymailing')) + { + $lists['5'] = $this->getAcym5Lists(); + } + + if ($acymailing_6_is_installed = Extension::isInstalled('com_acym')) + { + $lists['6'] = $this->getAcym6Lists(); + } + + foreach ($lists as $group_key => $group) + { + if (!is_array($group)) + { + continue; + } + + foreach ($group as $list) + { + $groups['AcyMailing ' . $group_key][] = JHtml::_('select.option', $list->id, $list->name); + } + } + + return $groups; + } + + /** + * Get AcyMailing 6 lists + * + * @return mixed Array on success, null on failure + */ + private function getAcym6Lists() + { + if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_acym/helpers/helper.php')) + { + return; + } + + $lists = acym_get('class.list')->getAll(); + + if (!is_array($lists)) + { + return; + } + + // Add 6: prefix to each list id. + foreach ($lists as $key => &$list) + { + $list->id = '6:' . $list->id; + } + + return $lists; + } + + /** + * Get AcyMailing 5 lists + * + * @return mixed Array on success, null on failure + */ + private function getAcym5Lists() + { + if (!@include_once(JPATH_ADMINISTRATOR . '/components/com_acymailing/helpers/helper.php')) + { + return; + } + + $lists = acymailing_get('class.list')->getLists(); + + if (!is_array($lists)) + { + return; + } + + // The getGroups method expects the id property + foreach ($lists as $key => $list) + { + $list->id = $list->listid; + } + + return $lists; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/ajaxify.php b/deployed/convertforms/plugins/system/nrframework/fields/ajaxify.php new file mode 100644 index 00000000..05729d66 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/ajaxify.php @@ -0,0 +1,195 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +use Joomla\Registry\Registry; +use NRFramework\HTML; + +JFormHelper::loadFieldClass('list'); + +/* + * Creates an AJAX-based dropdown + * https://select2.org/ + */ +abstract class JFormFieldAjaxify extends JFormFieldList +{ + /** + * Textbox placeholder + * + * @var string + */ + protected $placeholder = 'Select Items'; + + /** + * AJAX rows limit + * + * @var int + */ + protected $limit = 50; + + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + $placeholder = (string) $this->element['placeholder']; + $this->placeholder = empty($placeholder) ? $this->placeholder : $placeholder; + + HTML::script('plg_system_nrframework/vendor/select2.min.js'); + HTML::stylesheet('plg_system_nrframework/select2.css'); + + JFactory::getDocument()->addScriptDeclaration(' + jQuery(function($) { + $("#' . $this->id . '").select2({ + templateResult: function(state) { + if (!state.id) { + return; + } + + return $(\'' . $this->getTemplateResult() . '\'); + }, + placeholder: "' . JText::_($this->placeholder) . '", + ajax: { + url: "' . $this->getAjaxEndpoint() . '", + dataType: "json", + error: function (xhr, ajaxOptions, thrownError) { + if (xhr.statusText == "abort") { + return; + } + + alert(xhr.responseText); + } + }, + allowClear: true, + multiple: true, + cache: true + }); + }) + '); + + $this->class .= ' input-xxlarge select2'; + + return parent::getInput(); + } + + protected function getTemplateResult() + { + return '\' + state.text + \''; + } + + protected function getAjaxEndpoint() + { + $reflector = new ReflectionClass($this); + $filename = $reflector->getFileName(); + $file = JFile::stripExt(basename($filename)); + + $token = JSession::getFormToken(); + + $field_attributes = (array) $this->element->attributes(); + + $data = [ + 'task' => 'include', + 'file' => $file, + 'path' => 'plugins/system/nrframework/fields/', + 'class' => get_called_class(), + $token => 1, + 'field_attributes' => $field_attributes['@attributes'] + ]; + + return JURI::base() . '?option=com_ajax&format=raw&plugin=NRFramework&' . http_build_query($data); + } + + /** + * Returns data object used by the AJAX request + * + * @param array $options + * + * @return array + */ + public function onAjax($options) + { + $this->options = new Registry($options); + + // Reinitialize Field + $this->element = (array) $this->options->get('field_attributes'); + $this->init(); + + $this->limit = $this->options->get('limit', $this->limit); + $this->page = $this->options->get('page', 1); + $this->search_term = $this->options->get('term'); + + $rows = $this->getItems(); + + $hasMoreRecords = false; + + if ($this->limit > 0) + { + $total = $this->getItemsTotal(); + $hasMoreRecords = ($this->page * $this->limit) < $total; + } + + $data = [ + 'results' => $rows, + 'pagination' => ['more' => $hasMoreRecords] + ]; + + echo json_encode($data); + } + + /** + * Load selected options + * + * @return void + */ + protected function getOptions() + { + $options = $this->value; + + if (empty($options)) + { + return; + } + + // In case the value is previously saved in a comma separated format. + if (!is_array($options)) + { + $options = explode(',', $options); + } + + if (!method_exists($this, 'validateOptions')) + { + return $options; + } + + // Remove empty and null items + $options = array_filter($options); + + try + { + return $this->validateOptions($options); + } + catch (Exception $e) + { + echo $e->getMessage(); + } + } + + /** + * This method is called by the onAjax method and must return an array of arrays + * + * @return void + */ + abstract protected function getItems(); + + abstract protected function getItemsTotal(); +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/akeebasubs.php b/deployed/convertforms/plugins/system/nrframework/fields/akeebasubs.php new file mode 100644 index 00000000..5ba4d72d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/akeebasubs.php @@ -0,0 +1,66 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +// +defined('_JEXEC') or die; +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +class JFormFieldAkeebaSubs extends JFormFieldList +{ + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + protected function getOptions() + { + if (!NRFramework\Extension::isInstalled('akeebasubs')) + { + return; + } + + $lists = $this->getLevels(); + + if (!count($lists)) + { + return; + } + + $options = array(); + + foreach ($lists as $option) + { + $options[] = JHTML::_('select.option', $option->id, $option->name); + } + + return array_merge(parent::getOptions(), $options); + } + + /** + * Retrieve all Akeeba Subscription Levels + * + * @return array Subscription Levels + */ + private function getLevels() + { + // Get a db connection. + $db = JFactory::getDbo(); + + $query = $db->getQuery(true) + ->select('l.akeebasubs_level_id as id, l.title AS name, l.enabled as published') + ->from('#__akeebasubs_levels AS l') + ->where('l.enabled > -1') + ->order('l.title, l.akeebasubs_level_id'); + $db->setQuery($query); + + return $db->loadObjectList(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/assignmentselection.php b/deployed/convertforms/plugins/system/nrframework/fields/assignmentselection.php new file mode 100644 index 00000000..bf8ca79c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/assignmentselection.php @@ -0,0 +1,66 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('JPATH_PLATFORM') or die; + +use NRFramework\HTML; + +JFormHelper::loadFieldClass('list'); + +class JFormFieldAssignmentSelection extends JFormFieldList +{ + /** + * Assignment options + * + * @var array + */ + protected $options = array( + 0 => 'JDISABLED', + 1 => 'NR_INCLUDE', + 2 => 'NR_EXCLUDE' + ); + + /** + * Return options list to field + * + * @return array + */ + protected function getOptions() + { + foreach ($this->options as $key => $value) + { + $options[] = JHTML::_('select.option', $key, JText::_($value)); + } + + return array_merge(parent::getOptions(), $options); + } + + /** + * Setup field with predefined classes and load its media files + * + * @param SimpleXMLElement $element + * @param String $value + * @param String $group + * + * @return SimpleXMLElement + */ + public function setup(SimpleXMLElement $element, $value, $group = NULL) + { + $return = parent::setup($element, $value, $group); + + JHtml::_('jquery.framework'); + + HTML::script('plg_system_nrframework/assignmentselection.js'); + HTML::stylesheet('plg_system_nrframework/assignmentselection.css'); + + $this->class = 'assignmentselection chzn-color-state'; + + return $return; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/block.php b/deployed/convertforms/plugins/system/nrframework/fields/block.php new file mode 100644 index 00000000..054f72c8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/block.php @@ -0,0 +1,88 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +###### Note ###### +# This field is deprecated. Use NR_Well instead +###### Note ###### + +class JFormFieldNR_Block extends NRFormField +{ + /** + * The field type. + * + * @var string + */ + public $type = 'nr_block'; + + protected function getLabel() + { + return ''; + } + + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + JHtml::stylesheet('plg_system_nrframework/fields.css', false, true); + + $title = $this->get('label'); + $description = $this->get('description'); + $class = $this->get('class'); + $showclose = $this->get('showclose', 0); + $start = $this->get('start', 0); + $end = $this->get('end', 0); + $info = $this->get("html", null); + + if ($info) + { + $info = str_replace("{{", "<", $info); + $info = str_replace("}}", ">", $info); + } + + $html = array(); + + if ($start || !$end) + { + $html[] = '
        '; + + if (strpos($class, 'alert') !== false) + { + $html[] = '
        '; + } + else + { + $html[] = '
        '; + } + if ($title) + { + $html[] = '

        ' . $this->prepareText($title) . '

        '; + } + if ($description) + { + $html[] = '
        ' . $this->prepareText($description) . $info . '
        '; + } + $html[] = '
        '; + } + + if (!$start && !$end) + { + $html[] = '
        '; + } + + return '
        ' . implode('', $html); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/comparator.php b/deployed/convertforms/plugins/system/nrframework/fields/comparator.php new file mode 100644 index 00000000..c5b57999 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/comparator.php @@ -0,0 +1,41 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +JFormHelper::loadFieldClass('list'); + +class JFormFieldComparator extends JFormFieldList +{ + /** + * Method to get the field input markup for a generic list. + * Use the multiple attribute to enable multiselect. + * + * @return string The field input markup. + */ + protected function getInput() + { + $this->class = 'input-small'; + $this->required = true; + + return parent::getInput(); + } + + protected function getLabel() + { + return 'Match'; + } + + protected function getOptions() + { + return [ + 1 => 'Is', + 0 => 'Is Not', + ]; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/componentitems.php b/deployed/convertforms/plugins/system/nrframework/fields/componentitems.php new file mode 100644 index 00000000..8881587e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/componentitems.php @@ -0,0 +1,208 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +use Joomla\Registry\Registry; + +require_once __DIR__ . '/ajaxify.php'; + +/* + * Creates an AJAX-based dropdown + * https://select2.org/ + */ +class JFormFieldComponentItems extends JFormFieldAjaxify +{ + /** + * Single items table name + * + * @var string + */ + protected $table = 'content'; + + /** + * Primary key column of the single items table + * + * @var string + */ + protected $column_id = 'id'; + + /** + * The title column of the single items table + * + * @var string + */ + protected $column_title = 'title'; + + /** + * The state column of the single items table + * + * @var string + */ + protected $column_state = 'state'; + + /** + * Pass extra where SQL statement + * + * @var string + */ + protected $where; + + /** + * The Joomla database object + * + * @var object + */ + protected $db; + + /** + * Method to attach a JForm object to the field. + * + * @param SimpleXMLElement $element The SimpleXMLElement object representing the `` tag for the form field object. + * @param mixed $value The form field value to validate. + * @param string $group The field name group control value. This acts as an array container for the field. + * For example if the field has name="foo" and the group value is set to "bar" then the + * full field name would end up being "bar[foo]". + * + * @return boolean True on success. + * + * @since 3.2 + */ + public function setup(SimpleXMLElement $element, $value, $group = null) + { + if ($return = parent::setup($element, $value, $group)) + { + $this->init(); + } + + return $return; + } + + public function init() + { + $this->table = isset($this->element['table']) ? (string) $this->element['table'] : $this->table; + + $this->column_id = isset($this->element['column_id']) ? (string) $this->element['column_id'] : $this->column_id; + $this->column_id = $this->prefix($this->column_id); + + $this->column_title = isset($this->element['column_title']) ? (string) $this->element['column_title'] : $this->column_title; + $this->column_title = $this->prefix($this->column_title); + + $this->column_state = isset($this->element['column_state']) ? (string) $this->element['column_state'] : $this->column_state; + $this->column_state = $this->prefix($this->column_state); + + $this->where = isset($this->element['where']) ? (string) $this->element['where'] : null; + $this->join = isset($this->element['join']) ? (string) $this->element['join'] : null; + + if (!isset($this->element['placeholder'])) + { + $this->placeholder = (string) $this->element['description']; + } + + // Initialize database Object + $this->db = JFactory::getDbo(); + } + + private function prefix($string) + { + if (strpos($string, '.') === false) + { + $string = 'i.' . $string; + } + + return $string; + } + + protected function getTemplateResult() + { + return '\' + state.text + \'\' + state.id + \''; + } + + protected function getItemsQuery() + { + $db = $this->db; + + $query = $this->getQuery() + ->order($db->quoteName($this->column_id) . ' DESC'); + + if ($this->limit > 0) + { + // Joomla uses offset + $page = $this->page - 1; + + $query->setLimit($this->limit, $page * $this->limit); + } + + return $query; + } + + protected function getItems() + { + $db = $this->db; + + $db->setQuery($this->getItemsQuery()); + + return $db->loadObjectList(); + } + + protected function getItemsTotal() + { + $db = $this->db; + + $query = $this->getQuery() + ->clear('select') + ->select('count(*)'); + $db->setQuery($query); + + return (int) $db->loadResult(); + } + + protected function getQuery() + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select([ + $db->quoteName($this->column_id, 'id'), + $db->quoteName($this->column_title, 'text'), + $db->quoteName($this->column_state, 'state') + ]) + ->from($db->quoteName('#__' . $this->table, 'i')); + + if (!empty($this->search_term)) + { + $query->where($db->quoteName($this->column_title) . ' LIKE ' . $db->quote('%' . $this->search_term . '%')); + } + + if ($this->join) + { + $query->join('INNER', $this->join); + } + + if ($this->where) + { + $query->where($this->where); + } + + return $query; + } + + protected function validateOptions($options) + { + $db = $this->db; + + $query = $this->getQuery() + ->where($db->quoteName($this->column_id) . ' IN (' . implode(',', $options) . ')'); + + $db->setQuery($query); + + return $db->loadAssocList('id', 'text'); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/conditionbuilder.php b/deployed/convertforms/plugins/system/nrframework/fields/conditionbuilder.php new file mode 100644 index 00000000..5cfd4ce0 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/conditionbuilder.php @@ -0,0 +1,31 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +use NRFramework\ConditionBuilder; + +class JFormFieldConditionBuilder extends JFormField +{ + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + return ConditionBuilder::render($this->name, $this->value, $this->getConditionsList()); + } + + protected function getConditionsList() + { + return $this->element['conditions']; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/content.php b/deployed/convertforms/plugins/system/nrframework/fields/content.php new file mode 100644 index 00000000..8698d420 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/content.php @@ -0,0 +1,70 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/groupfield.php'; + +class JFormFieldNR_Content extends NRFormGroupField +{ + public $type = 'Content'; + + public function getCategories() + { + $query = $this->db->getQuery(true) + ->select('COUNT(c.id)') + ->from('#__categories AS c') + ->where('c.extension = ' . $this->db->quote('com_content')) + ->where('c.parent_id > 0') + ->where('c.published > -1'); + $this->db->setQuery($query); + $total = $this->db->loadResult(); + + $options = array(); + if ($this->get('show_ignore')) + { + if (in_array('-1', $this->value)) + { + $this->value = array('-1'); + } + $options[] = JHtml::_('select.option', '-1', '- ' . JText::_('NR_IGNORE') . ' -', 'value', 'text', 0); + $options[] = JHtml::_('select.option', '-', ' ', 'value', 'text', 1); + } + + $query->clear('select') + ->select('c.id, c.title as name, c.level, c.published, c.language') + ->order('c.lft'); + + $this->db->setQuery($query); + $list = $this->db->loadObjectList(); + + $options = array_merge($options, $this->getOptionsByList($list, array('language'), -1)); + + return $options; + } + + public function getItems() + { + $query = $this->db->getQuery(true) + ->select('COUNT(i.id)') + ->from('#__content AS i') + ->where('i.access > -1'); + $this->db->setQuery($query); + $total = $this->db->loadResult(); + + $query->clear('select') + ->select('i.id, i.title as name, i.language, c.title as cat, i.access as published') + ->join('LEFT', '#__categories AS c ON c.id = i.catid') + ->order('i.title, i.ordering, i.id'); + $this->db->setQuery($query); + $list = $this->db->loadObjectList(); + + return $this->getOptionsByList($list, array('language', 'cat', 'id')); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/currencies.php b/deployed/convertforms/plugins/system/nrframework/fields/currencies.php new file mode 100644 index 00000000..c2f8c2b5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/currencies.php @@ -0,0 +1,210 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/fieldlist.php'; + +class JFormFieldNR_Currencies extends NRFormFieldList +{ + public $currencies = array( + "AED" => "United Arab Emirates Dirham", + "AFN" => "Afghan Afghani", + "ALL" => "Albanian Lek", + "AMD" => "Armenian Dram", + "ANG" => "Netherlands Antillean Guilder", + "AOA" => "Angolan Kwanza", + "ARS" => "Argentine Peso", + "AUD" => "Australian Dollar", + "AWG" => "Aruban Florin", + "AZN" => "Azerbaijani Manat", + "BAM" => "Bosnia-Herzegovina Convertible Mark", + "BBD" => "Barbadian Dollar", + "BDT" => "Bangladeshi Taka", + "BGN" => "Bulgarian Lev", + "BHD" => "Bahraini Dinar", + "BIF" => "Burundian Franc", + "BMD" => "Bermudan Dollar", + "BND" => "Brunei Dollar", + "BOB" => "Bolivian Boliviano", + "BRL" => "Brazilian Real", + "BSD" => "Bahamian Dollar", + "BTC" => "Bitcoin", + "BTN" => "Bhutanese Ngultrum", + "BWP" => "Botswanan Pula", + "BYN" => "Belarusian Ruble", + "BYR" => "Belarusian Ruble (pre-2016)", + "BZD" => "Belize Dollar", + "CAD" => "Canadian Dollar", + "CDF" => "Congolese Franc", + "CHF" => "Swiss Franc", + "CLF" => "Chilean Unit of Account (UF)", + "CLP" => "Chilean Peso", + "CNY" => "Chinese Yuan", + "COP" => "Colombian Peso", + "CRC" => "Costa Rican Colón", + "CUC" => "Cuban Convertible Peso", + "CUP" => "Cuban Peso", + "CVE" => "Cape Verdean Escudo", + "CZK" => "Czech Republic Koruna", + "DJF" => "Djiboutian Franc", + "DKK" => "Danish Krone", + "DOP" => "Dominican Peso", + "DZD" => "Algerian Dinar", + "EEK" => "Estonian Kroon", + "EGP" => "Egyptian Pound", + "ERN" => "Eritrean Nakfa", + "ETB" => "Ethiopian Birr", + "EUR" => "Euro", + "FJD" => "Fijian Dollar", + "FKP" => "Falkland Islands Pound", + "GBP" => "British Pound Sterling", + "GEL" => "Georgian Lari", + "GGP" => "Guernsey Pound", + "GHS" => "Ghanaian Cedi", + "GIP" => "Gibraltar Pound", + "GMD" => "Gambian Dalasi", + "GNF" => "Guinean Franc", + "GTQ" => "Guatemalan Quetzal", + "GYD" => "Guyanaese Dollar", + "HKD" => "Hong Kong Dollar", + "HNL" => "Honduran Lempira", + "HRK" => "Croatian Kuna", + "HTG" => "Haitian Gourde", + "HUF" => "Hungarian Forint", + "IDR" => "Indonesian Rupiah", + "ILS" => "Israeli New Sheqel", + "IMP" => "Manx pound", + "INR" => "Indian Rupee", + "IQD" => "Iraqi Dinar", + "IRR" => "Iranian Rial", + "ISK" => "Icelandic Króna", + "JEP" => "Jersey Pound", + "JMD" => "Jamaican Dollar", + "JOD" => "Jordanian Dinar", + "JPY" => "Japanese Yen", + "KES" => "Kenyan Shilling", + "KGS" => "Kyrgystani Som", + "KHR" => "Cambodian Riel", + "KMF" => "Comorian Franc", + "KPW" => "North Korean Won", + "KRW" => "South Korean Won", + "KWD" => "Kuwaiti Dinar", + "KYD" => "Cayman Islands Dollar", + "KZT" => "Kazakhstani Tenge", + "LAK" => "Laotian Kip", + "LBP" => "Lebanese Pound", + "LKR" => "Sri Lankan Rupee", + "LRD" => "Liberian Dollar", + "LSL" => "Lesotho Loti", + "LTL" => "Lithuanian Litas", + "LVL" => "Latvian Lats", + "LYD" => "Libyan Dinar", + "MAD" => "Moroccan Dirham", + "MDL" => "Moldovan Leu", + "MGA" => "Malagasy Ariary", + "MKD" => "Macedonian Denar", + "MMK" => "Myanma Kyat", + "MNT" => "Mongolian Tugrik", + "MOP" => "Macanese Pataca", + "MRO" => "Mauritanian Ouguiya", + "MTL" => "Maltese Lira", + "MUR" => "Mauritian Rupee", + "MVR" => "Maldivian Rufiyaa", + "MWK" => "Malawian Kwacha", + "MXN" => "Mexican Peso", + "MYR" => "Malaysian Ringgit", + "MZN" => "Mozambican Metical", + "NAD" => "Namibian Dollar", + "NGN" => "Nigerian Naira", + "NIO" => "Nicaraguan Córdoba", + "NOK" => "Norwegian Krone", + "NPR" => "Nepalese Rupee", + "NZD" => "New Zealand Dollar", + "OMR" => "Omani Rial", + "PAB" => "Panamanian Balboa", + "PEN" => "Peruvian Nuevo Sol", + "PGK" => "Papua New Guinean Kina", + "PHP" => "Philippine Peso", + "PKR" => "Pakistani Rupee", + "PLN" => "Polish Zloty", + "PYG" => "Paraguayan Guarani", + "QAR" => "Qatari Rial", + "RON" => "Romanian Leu", + "RSD" => "Serbian Dinar", + "RUB" => "Russian Ruble", + "RWF" => "Rwandan Franc", + "SAR" => "Saudi Riyal", + "SBD" => "Solomon Islands Dollar", + "SCR" => "Seychellois Rupee", + "SDG" => "Sudanese Pound", + "SEK" => "Swedish Krona", + "SGD" => "Singapore Dollar", + "SHP" => "Saint Helena Pound", + "SLL" => "Sierra Leonean Leone", + "SOS" => "Somali Shilling", + "SRD" => "Surinamese Dollar", + "STD" => "São Tomé and Príncipe Dobra", + "SVC" => "Salvadoran Colón", + "SYP" => "Syrian Pound", + "SZL" => "Swazi Lilangeni", + "THB" => "Thai Baht", + "TJS" => "Tajikistani Somoni", + "TMT" => "Turkmenistani Manat", + "TND" => "Tunisian Dinar", + "TOP" => "Tongan Pa?anga", + "TRY" => "Turkish Lira", + "TTD" => "Trinidad and Tobago Dollar", + "TWD" => "New Taiwan Dollar", + "TZS" => "Tanzanian Shilling", + "UAH" => "Ukrainian Hryvnia", + "UGX" => "Ugandan Shilling", + "USD" => "United States Dollar", + "UYU" => "Uruguayan Peso", + "UZS" => "Uzbekistan Som", + "VEF" => "Venezuelan Bolívar Fuerte", + "VND" => "Vietnamese Dong", + "VUV" => "Vanuatu Vatu", + "WST" => "Samoan Tala", + "XAF" => "CFA Franc BEAC", + "XAG" => "Silver Ounce", + "XAU" => "Gold Ounce", + "XCD" => "East Caribbean Dollar", + "XDR" => "Special Drawing Rights", + "XOF" => "CFA Franc BCEAO", + "XPD" => "Palladium Ounce", + "XPF" => "CFP Franc", + "XPT" => "Platinum Ounce", + "YER" => "Yemeni Rial", + "ZAR" => "South African Rand", + "ZMK" => "Zambian Kwacha (pre-2013)", + "ZMW" => "Zambian Kwacha", + "ZWL" => "Zimbabwean Dollar", + ); + + protected function getOptions() + { + $options = array(); + + if ($this->showSelect()) + { + $options[] = JHTML::_('select.option', "", "- " . JText::_("NR_SELECT_CURRENCY"). " -"); + } + + asort($this->currencies); + + foreach ($this->currencies as $key => $value) + { + $options[] = JHTML::_('select.option', $key, $key . " (" . $value . ")"); + } + + return array_merge(parent::getOptions(), $options); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/freetext.php b/deployed/convertforms/plugins/system/nrframework/fields/freetext.php new file mode 100644 index 00000000..644e9246 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/freetext.php @@ -0,0 +1,68 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Freetext extends NRFormField +{ + /** + * The field type. + * + * @var string + */ + public $type = 'freetext'; + + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + $file = $this->get("file", false); + $text = $this->get("text", false); + $label = $this->get("label", false); + + if (!$label) + { + $html[] = '
        '; + } + + if ($file) + { + $html[] = $this->renderContent($this->get("file"), $this->get("path"), $this); + } + + if ($text) + { + $html[] = $this->prepareText($text); + } + + return implode(" ", $html); + } + + /** + * Render PHP file with data + * + * @param string $file The file name + * @param string $path The pathname + * @param mixed $displayData The data object passed to template file + * + * @return string HTML rendered + */ + private function renderContent($file, $path, $displayData = null) + { + $layout = new JLayoutFile($file, JPATH_SITE . $path, array('debug' => 0)); + return $layout->render($displayData); + } + +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/geo.php b/deployed/convertforms/plugins/system/nrframework/fields/geo.php new file mode 100644 index 00000000..9f27d36b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/geo.php @@ -0,0 +1,84 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/fieldlist.php'; + +class JFormFieldNR_Geo extends NRFormFieldList +{ + private $list; + + protected function getInput() + { + if ($this->get('detect_visitor_country', false) && empty($this->value) && $countryCode = $this->getVisitorCountryCode()) + { + $this->value = $countryCode; + } + + return parent::getInput(); + } + + protected function getOptions() + { + switch ($this->get('geo')) + { + case 'continents': + $this->list = \NRFramework\Continents::getContinentsList(); + $selectLabel = 'NR_SELECT_CONTINENT'; + break; + default: + $this->list = \NRFramework\Countries::getCountriesList(); + $selectLabel = 'NR_SELECT_COUNTRY'; + break; + } + + if ($this->get('use_label_as_value', false)) + { + $this->list = array_combine($this->list, $this->list); + } + + $options = array(); + + if ($this->get("showselect", 'true') === 'true') + { + $options[] = JHTML::_('select.option', "", "- " . JText::_($selectLabel) . " -"); + } + + foreach ($this->list as $key => $value) + { + $options[] = JHTML::_('select.option', $key, $value); + } + + return array_merge(parent::getOptions(), $options); + } + + /** + * Detect visitor's country + * + * @return string The visitor's country code (GR) + */ + private function getVisitorCountryCode() + { + $path = JPATH_PLUGINS . '/system/tgeoip/'; + + if (!\JFolder::exists($path)) + { + return; + } + + if (!class_exists('TGeoIP')) + { + @include_once $path . 'vendor/autoload.php'; + @include_once $path . 'helper/tgeoip.php'; + } + + $geo = new \TGeoIP(); + return $geo->getCountryCode(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/gmap.php b/deployed/convertforms/plugins/system/nrframework/fields/gmap.php new file mode 100644 index 00000000..c64e2005 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/gmap.php @@ -0,0 +1,86 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access to this file +defined('_JEXEC') or die; + +use NRFramework\HTML; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Gmap extends NRFormField +{ + /** + * The default Google Maps API Key + * + * @var string + */ + public $defaultAPIKey = 'AIzaSyAPgVu1A9L7_q0gtYToFeJiUHDSCCXYZKI'; + + /** + * Method to get the field input markup. + * + * @return string The field input markup. + */ + public function getInput() + { + // Setup properties + $this->width = $this->get('width', '500px'); + $this->height = $this->get('height', '400px'); + $this->zoom = $this->get('zoom', '10'); + $this->margin = $this->get('margin', '0 0 10px 0'); + $this->readonly = $this->get('readonly', false) ? 'readonly' : ''; + $this->value = $this->checkCoordinates($this->value, null) ? $this->value : $this->get('default', '36.892587, 27.287793'); + $this->hint = $this->prepareText($this->get('hint', 'NR_ENTER_COORDINATES')); + + // Add scripts to DOM + JHtml::_('jquery.framework'); + JFactory::getDocument()->addScript('//maps.googleapis.com/maps/api/js?key=' . $this->getAPIKey()); + HTML::script('plg_system_nrframework/field.gmap.js'); + Jtext::script('NR_WRONG_COORDINATES'); + + // Add styles to DOM + $this->doc->addStyleDeclaration(' + #' . $this->id . '_map { + height: ' . $this->height . '; + width: ' . $this->width . '; + margin: ' . $this->margin . '; + } + '); + + return '
        readonly . '/>'; + } + + /** + * Checks the validity of the coordinates + */ + private function checkCoordinates($coordinates) + { + return (preg_match("/^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/", $coordinates)); + } + + /** + * Get the Google Maps API Key. + * If no key is found in the framework options then the default API Key will be used instead. + * + * We should update the default API Key once a while. + * + * @return string + */ + private function getAPIKey() + { + if (!$framework = JPluginHelper::getPlugin('system', 'nrframework')) + { + return $this->defaultAPIKey; + } + + // Get plugin params + $params = new JRegistry($framework->params); + return $params->get('gmapkey', $this->defaultAPIKey); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/inline.php b/deployed/convertforms/plugins/system/nrframework/fields/inline.php new file mode 100644 index 00000000..2291066d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/inline.php @@ -0,0 +1,36 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Inline extends NRFormField +{ + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + JHtml::stylesheet('plg_system_nrframework/inline-control-group.css', ['relative' => true, 'version' => 'auto']); + + $start = $this->get('start', 1); + $end = $this->get('end', 0); + + if ($start && !$end) + { + return '
        '; + } + + return '
        '; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/jshoppingcomponentitems.php b/deployed/convertforms/plugins/system/nrframework/fields/jshoppingcomponentitems.php new file mode 100644 index 00000000..14958f09 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/jshoppingcomponentitems.php @@ -0,0 +1,44 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +use Joomla\Registry\Registry; + +require_once __DIR__ . '/componentitems.php'; + +class JFormFieldJShoppingComponentItems extends JFormFieldComponentItems +{ + public function init() + { + // Get default language + $this->element['column_title'] = 'name_' . $this->getLanguage(); + + parent::init(); + } + + /** + * JoomShopping is using different columns per language. Therefore, we need to use their API to get the default language code. + * + * @return string + */ + private function getLanguage($default = 'en-GB') + { + // Silent inclusion. + @include_once JPATH_SITE . '/components/com_jshopping/lib/factory.php'; + + if (!class_exists('JSFactory')) + { + return $default; + } + + return JSFactory::getConfig()->defaultLanguage; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/modules.php b/deployed/convertforms/plugins/system/nrframework/fields/modules.php new file mode 100644 index 00000000..fd32c26f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/modules.php @@ -0,0 +1,53 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/fieldlist.php'; + +class JFormFieldModules extends NRFormFieldList +{ + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + protected function getOptions() + { + $db = $this->db; + + $query = $db->getQuery(true); + + $query->select('*') + ->from('#__modules') + ->where('published=1') + ->where('access !=3') + ->order('title'); + + $rows = $db->setQuery($query); + $results = $db->loadObjectList(); + + $options = array(); + + if ($this->showSelect()) + { + $options[] = JHTML::_('select.option', "", '- ' . JText::_("NR_SELECT_MODULE") . ' -'); + } + + foreach ($results as $option) + { + $options[] = JHTML::_('select.option', $option->id, $option->title); + } + + $options = array_merge(parent::getOptions(), $options); + + return $options; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrbrowser.php b/deployed/convertforms/plugins/system/nrframework/fields/nrbrowser.php new file mode 100644 index 00000000..2f2f34b8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrbrowser.php @@ -0,0 +1,40 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/fieldlist.php'; + +class JFormFieldNRBrowser extends NRFormFieldList +{ + /** + * Browsers List + * + * @var array + */ + public $options = array( + 'chrome' => 'NR_CHROME', + 'firefox' => 'NR_FIREFOX', + 'edge' => 'NR_EDGE', + 'ie' => 'NR_IE', + 'safari' => 'NR_SAFARI', + 'opera' => 'NR_OPERA' + ); + + protected function getOptions() + { + asort($this->options); + + foreach ($this->options as $key => $option) + { + $options[] = JHTML::_('select.option', $key, JText::_($option)); + } + + return array_merge(parent::getOptions(), $options); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrcomponents.php b/deployed/convertforms/plugins/system/nrframework/fields/nrcomponents.php new file mode 100644 index 00000000..40d66153 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrcomponents.php @@ -0,0 +1,130 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +jimport('joomla.filesystem.folder'); +jimport('joomla.filesystem.file'); + +class JFormFieldNRComponents extends JFormFieldList +{ + protected function getOptions() + { + return array_merge(parent::getOptions(), $this->getInstalledComponents()); + } + + /** + * Method to get field parameters + * + * @param string $val Field parameter + * @param string $default The default value + * + * @return string + */ + public function get($val, $default = '') + { + return (isset($this->element[$val]) && (string) $this->element[$val] != '') ? (string) $this->element[$val] : $default; + } + + /** + * Creates a list of installed components + * + * @return array + */ + protected function getInstalledComponents() + { + $lang = JFactory::getLanguage(); + $db = JFactory::getDbo(); + + $components = $db->setQuery( + $db->getQuery(true) + ->select('name, element') + ->from('#__extensions') + ->where('type = ' . $db->quote('component')) + ->where('name != ""') + ->where('element != ""') + ->where('enabled = 1') + ->order('element, name') + )->loadObjectList(); + + $comps = array(); + + foreach ($components as $component) + { + // Make sure we have a valid element + if (empty($component->element)) + { + continue; + } + + // Skip backend-based only components + if ($this->get('frontend', false)) + { + $component_folder = JPATH_SITE . '/components/' . $component->element; + + if (!\JFolder::exists($component_folder)) + { + continue; + } + + if (!\JFolder::exists($component_folder . '/views') && + !\JFolder::exists($component_folder . '/View') && + !\JFolder::exists($component_folder . '/view')) + { + continue; + } + } + + // Try loading component's system language file in order to display a user friendly component name + // Runs only if the component's name is not translated already. + if (strpos($component->name, ' ') === false) + { + $filenames = [ + $component->element . '.sys', + $component->element + ]; + + $paths = [ + JPATH_ADMINISTRATOR, + JPATH_ADMINISTRATOR . '/components/' . $component->element, + JPATH_SITE, + JPATH_SITE . '/components/' . $component->element + ]; + + foreach ($filenames as $key => $filename) + { + foreach ($paths as $key => $path) + { + $loaded = $lang->load($filename, $path, null) || $lang->load($filename, $path, $lang->getDefault()); + + if ($loaded) + { + break 2; + } + } + } + + // Translate component's name + $component->name = JText::_(strtoupper($component->name)); + } + + $comps[strtolower($component->element)] = $component->name; + } + + asort($comps); + + $options = array(); + + foreach ($comps as $key => $name) + { + $options[] = JHtml::_('select.option', $key, $name); + } + + return $options; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrconditions.php b/deployed/convertforms/plugins/system/nrframework/fields/nrconditions.php new file mode 100644 index 00000000..1ddf462d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrconditions.php @@ -0,0 +1,112 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +use NRFramework\Extension; + +JFormHelper::loadFieldClass('groupedlist'); + +class JFormFieldNRConditions extends JFormFieldGroupedList +{ + /** + * List of available conditions + * + * @var array + */ + public static $conditions = [ + 'Datetime' => [ + 'date' => 'NR_DATE', + 'weekday' => 'NR_WEEKDAY', + 'month' => 'NR_MONTH', + 'time' => 'NR_TIME', + ], + 'Joomla' => [ + 'userid' => 'NR_ASSIGN_USER_ID', + 'usergroup' => 'NR_USERGROUP', + 'menu' => 'NR_MENU', + 'component' => 'NR_ASSIGN_COMPONENTS', + 'language' => 'NR_ASSIGN_LANGS' + ], + 'Technology' => [ + 'device' => 'NR_ASSIGN_DEVICES', + 'browser' => 'NR_ASSIGN_BROWSERS', + 'os' => 'NR_ASSIGN_OS', + ], + 'Geolocation' => [ + 'city' => 'NR_CITY', + 'country' => 'NR_ASSIGN_COUNTRIES', + 'region' => 'NR_REGION', + 'continent' => 'NR_CONTINENT', + ], + 'Integrations' => [ + 'com_content\article' => 'Content Article', + 'com_content\category' => 'Content Category', + 'com_k2\k2item' => 'K2 Item', + 'com_k2\k2category' => 'K2 Category', + 'com_k2\k2tag' => 'K2 Tags', + 'com_acymailing\acymailing' => 'AcyMailing List', + 'com_convertforms\convertforms'=> 'Convert Forms Campaign', + 'com_akeebasubs\akeebasubs' => 'AkeebaSubs Level', + ], + 'Advanced' => [ + 'url' => 'NR_URL', + 'referrer' => 'NR_ASSIGN_REFERRER', + 'ip' => 'NR_IPADDRESS', + 'pageviews' => 'NR_ASSIGN_PAGEVIEWS_VIEWS', + 'cookie' => 'NR_COOKIE', + 'php' => 'NR_ASSIGN_PHP' + ] + ]; + + /** + * Method to get the field option groups. + * + * @return array The field option objects as a nested array in groups. + * + * @since 1.6 + */ + protected function getGroups() + { + $conditions_list = is_null($this->element['conditions_list']) ? null : explode(',', $this->element['conditions_list']); + + $groups[''][] = JHtml::_('select.option', '- Select Condition -', ''); + + foreach (self::$conditions as $conditionGroup => $conditions) + { + foreach ($conditions as $conditionName => $condition) + { + // Should check every Integration-based condition, if the respective component is installed and enabled + if ($conditionGroup == 'Integrations') + { + $conditionNameParts = explode('\\', $conditionName); + + if (!Extension::isEnabled($conditionNameParts[0])) + { + continue; + } + + $conditionName = $conditionNameParts[1]; + } + + // In case this condition is not available in the conditions list passed by the component, disable it. + $disabled = false; + + if (!empty($conditions_list) && !in_array($conditionName, $conditions_list)) + { + $disabled = true; + } + + $groups[$conditionGroup][] = JHtml::_('select.option', $conditionName, JText::_($condition), 'value', 'text', $disabled); + } + } + + // Merge any additional groups in the XML definition. + return array_merge(parent::getGroups(), $groups); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrdevice.php b/deployed/convertforms/plugins/system/nrframework/fields/nrdevice.php new file mode 100644 index 00000000..256adf5b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrdevice.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/fieldlist.php'; + +class JFormFieldNRDevice extends NRFormFieldList +{ + /** + * Browsers List + * + * @var array + */ + public $options = array( + 'desktop' => 'NR_DESKTOPS', + 'mobile' => 'NR_MOBILES', + 'tablet' => 'NR_TABLETS' + ); + + protected function getOptions() + { + asort($this->options); + + foreach ($this->options as $key => $option) + { + $options[] = JHTML::_('select.option', $key, JText::_($option)); + } + + return array_merge(parent::getOptions(), $options); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrdjcatalog2categories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrdjcatalog2categories.php new file mode 100644 index 00000000..cd9591d8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrdjcatalog2categories.php @@ -0,0 +1,46 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRDJCatalog2Categories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + $db = $this->db; + + $query = $db->getQuery(true) + ->select('id as value, name as text, parent_id as parent, IF (published=1, 0, 1) as disable') + ->from('#__djc2_categories'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrdjcfcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrdjcfcategories.php new file mode 100644 index 00000000..f1b4b272 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrdjcfcategories.php @@ -0,0 +1,47 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRDJCFCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('id as value, name as text, parent_id as `parent`, IF (published=1, 0, 1) as disable') + ->from('#__djcf_categories'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrdjeventscategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrdjeventscategories.php new file mode 100644 index 00000000..e7a069ea --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrdjeventscategories.php @@ -0,0 +1,35 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRDJEventsCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all DJ Events Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, a.name as text, 0 AS level, 0 as parent, 0 as disable') + ->from('#__djev_cats as a') + ->group('a.id, a.name') + ->order('a.id ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nreasyblogcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nreasyblogcategories.php new file mode 100644 index 00000000..06cf7d6a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nreasyblogcategories.php @@ -0,0 +1,36 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNREasyBlogCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, a.title as text, COUNT(DISTINCT b.id) AS level, a.parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__easyblog_category as a') + ->join('LEFT', '#__easyblog_category AS b on a.lft > b.lft AND a.rgt < b.rgt') + ->group('a.id, a.title, a.lft') + ->order('a.lft ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nreshopcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nreshopcategories.php new file mode 100644 index 00000000..a18da5c4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nreshopcategories.php @@ -0,0 +1,48 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNREShopCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, b.category_name as text, a.category_parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__eshop_categories as a') + ->join('LEFT', '#__eshop_categorydetails AS b on a.id=b.category_id'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nreventbookingcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nreventbookingcategories.php new file mode 100644 index 00000000..c64a63f5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nreventbookingcategories.php @@ -0,0 +1,40 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNREventBookingCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('id as value, name as text, level, parent, IF (published=1, 0, 1) as disable') + ->from('#__eb_categories'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrfonts.php b/deployed/convertforms/plugins/system/nrframework/fields/nrfonts.php new file mode 100644 index 00000000..d61764b7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrfonts.php @@ -0,0 +1,43 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +JFormHelper::loadFieldClass('groupedlist'); + +class JFormFieldNRFonts extends JFormFieldGroupedList +{ + /** + * Method to get the field option groups. + * + * @return array The field option objects as a nested array in groups. + * + * @since 1.6 + */ + protected function getGroups() + { + $groups = array(); + + foreach (NRFramework\Fonts::getFontGroups() as $name => $fontGroup) + { + // Initialize the group if necessary. + if (!isset($groups[$name])) + { + $groups[$name] = array(); + } + + foreach ($fontGroup as $font) + { + $groups[$name][] = JHtml::_('select.option', $font, $font); + } + } + + // Merge any additional groups in the XML definition. + return array_merge(parent::getGroups(), $groups); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrgridboxcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrgridboxcategories.php new file mode 100644 index 00000000..6d56791c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrgridboxcategories.php @@ -0,0 +1,47 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRGridboxCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all Gridbox Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('id as value, title as text, parent as parent, IF (published=1, 0, 1) as disable') + ->from('#__gridbox_categories'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrgrouplevel.php b/deployed/convertforms/plugins/system/nrframework/fields/nrgrouplevel.php new file mode 100644 index 00000000..3489ab36 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrgrouplevel.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRGroupLevel extends JFormFieldNRTreeSelect +{ + /** + * A helper to get the list of user groups. + * Logic from administrator\components\com_config\model\field\filters.php@getUserGroups + * + * @return object + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + // Get the user groups from the database. + $query = $db->getQuery(true) + ->select('a.id AS value, a.title AS text, COUNT(DISTINCT b.id) AS level') + ->from('#__usergroups AS a') + ->join('LEFT', '#__usergroups AS b on a.lft > b.lft AND a.rgt < b.rgt') + ->group('a.id, a.title, a.lft') + ->order('a.lft ASC'); + $db->setQuery($query); + + return $db->loadObjectList(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrhikashopcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrhikashopcategories.php new file mode 100644 index 00000000..5557d55c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrhikashopcategories.php @@ -0,0 +1,38 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRHikaShopCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.category_id as value, a.category_name as text, (a.category_depth - 1) AS level, a.category_parent_id as parent, IF (a.category_published=1, 0, 1) as disable') + ->from('#__hikashop_category as a') + ->join('LEFT', '#__hikashop_category AS b on a.category_left > b.category_left AND a.category_right < b.category_right') + ->group('a.category_id, a.category_name, a.category_left') + ->where($db->quoteName('a.category_type') . ' = ' . $db->quote('product')) + ->where($db->quoteName('a.category_id') . ' > 2') + ->order('a.category_left ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrimagesselector.php b/deployed/convertforms/plugins/system/nrframework/fields/nrimagesselector.php new file mode 100644 index 00000000..2462def6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrimagesselector.php @@ -0,0 +1,105 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +JFormHelper::loadFieldClass('text'); + +class JFormFieldNRImagesSelector extends JFormFieldText +{ + /** + * Renders the Images Selector + * + * @return string The field input markup. + */ + protected function getInput() + { + $field_attributes = (array) $this->element->attributes(); + $attributes = isset($field_attributes["@attributes"]) ? $field_attributes["@attributes"] : null; + $field_attributes = new JRegistry($attributes); + + $columns = $field_attributes->get('columns', 6); + $width = $field_attributes->get('width', '100%'); + $height = $field_attributes->get('height', ''); + + if (!$images = $field_attributes->get('images', '')) + { + return; + } + + $paths = explode(',', $images); + + $images = []; + foreach ($paths as $key => $path) + { + // skip empty paths + if (empty(rtrim(ltrim($path, ' '), ' '))) + { + continue; + } + + if ($imgs = $this->getImagesFromPath($path)) + { + // add new images to array of images + $images = array_merge($images, $imgs); + } + else + { + // check if image exist + if (file_exists(JPATH_ROOT . '/' . ltrim($path, ' /'))) + { + // add new image to array of images + $images[] = ltrim($path, ' /'); + } + } + } + + // load CSS + JHtml::stylesheet('plg_system_nrframework/images-selector-field.css', ['relative' => true, 'version' => true]); + + $layout = new \JLayoutFile('imagesselector', JPATH_PLUGINS . '/system/nrframework/layouts'); + + $data = [ + 'value' => $this->value, + 'name' => $this->name, + 'images' => $images, + 'columns' => $columns, + 'width' => $width, + 'height' => $height + ]; + + return $layout->render($data); + } + + /** + * Returns all images in path + * + * @return mixed + */ + private function getImagesFromPath($path) + { + $folder = JPATH_ROOT . '/' . ltrim($path, ' /'); + + if (!is_dir($folder) || !$folder_files = scandir($folder)) + { + return false; + } + + $images = array_diff($folder_files, array('.', '..', '.DS_Store')); + $images = array_values($images); + + // prepend path to image file names + array_walk($images, function(&$value, $key) use ($path) { $value = ltrim($path, ' /') . '/' . $value; } ); + + return $images; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrjcalprocategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrjcalprocategories.php new file mode 100644 index 00000000..5f29dc7c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrjcalprocategories.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRJCalProCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, a.title as text, COUNT(DISTINCT b.id) AS level, a.parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__categories as a') + ->join('LEFT', '#__categories AS b on a.lft > b.lft AND a.rgt < b.rgt') + ->where('a.extension = "com_jcalpro"') + ->group('a.id, a.title, a.lft') + ->order('a.lft ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrjeventscategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrjeventscategories.php new file mode 100644 index 00000000..e7c336ca --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrjeventscategories.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRJEventsCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, a.title as text, COUNT(DISTINCT b.id) AS level, a.parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__categories as a') + ->join('LEFT', '#__categories AS b on a.lft > b.lft AND a.rgt < b.rgt') + ->where('a.extension = "com_jevents"') + ->group('a.id, a.title, a.lft') + ->order('a.lft ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrjshoppingcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrjshoppingcategories.php new file mode 100644 index 00000000..b8480efe --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrjshoppingcategories.php @@ -0,0 +1,66 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRJShoppingCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select($db->quoteName('name_' . $this->getLanguage(), 'text')) + ->select('category_id as value, category_parent_id as parent, IF (category_publish=1, 0, 1) as disable') + ->from('#__jshopping_categories'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } + + /** + * JoomShopping is using different columns per language. Therefore, we need to use their API to get the default language code. + * + * @return string + */ + private function getLanguage($default = 'en-GB') + { + // Silent inclusion. + @include_once JPATH_SITE . '/components/com_jshopping/lib/factory.php'; + + if (!class_exists('JSFactory')) + { + return $default; + } + + return JSFactory::getConfig()->defaultLanguage; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrk2.php b/deployed/convertforms/plugins/system/nrframework/fields/nrk2.php new file mode 100644 index 00000000..ff950ae0 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrk2.php @@ -0,0 +1,152 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/groupfield.php'; + +class JFormFieldNRK2 extends NRFormGroupField +{ + public $type = 'K2'; + + /** + * Pagetypes options + * + * @var array + */ + public $pagetype_options = array( + 'itemlist_category' => 'NR_ASSIGN_K2_CATEGORY_OPTION', + 'item_item' => 'NR_ASSIGN_K2_ITEM_OPTION', + 'item_itemform' => 'NR_ASSIGN_K2_ITEM_FORM_OPTION', + 'latest_latest' => 'NR_ASSIGN_K2_LATEST_OPTION', + 'itemlist_tag' => 'NR_ASSIGN_K2_TAG_OPTION', + 'itemlist_user' => 'NR_ASSIGN_K2_USER_PAGE_OPTION' + ); + + + public function getItems() + { + $query = $this->db->getQuery(true); + $query + ->select('i.id, i.title as name, i.language, c.name as cat, i.published') + ->from('#__k2_items as i') + ->join('LEFT', '#__k2_categories AS c ON c.id = i.catid') + ->order('i.title, i.ordering, i.id'); + $this->db->setQuery($query); + $list = $this->db->loadObjectList(); + + return $this->getOptionsByList($list, array('language', 'cat', 'id')); + } + + public function getPagetypes() + { + asort($this->pagetype_options); + + foreach ($this->pagetype_options as $key => $option) + { + $options[] = JHTML::_('select.option', $key, JText::_($option)); + } + + return $options; + } + + public function getTags() + { + $query = $this->db->getQuery(true); + $query + ->select('t.id, t.name') + ->from('#__k2_tags as t') + ->order('t.id'); + $this->db->setQuery($query); + $list = $this->db->loadObjectList(); + + return $this->getOptionsByList($list); + } + + public function getCategories() + { + $query = $this->db->getQuery(true); + $query + ->select('c.id, c.name, c.parent, c.published, c.language') + ->from('#__k2_categories as c') + ->where('c.trash = 0') + ->where('c.id != c.parent') + ->order('c.ordering'); + $this->db->setQuery($query); + $cats = $this->db->loadObjectList(); + + $options = []; + // get category levels + foreach ($cats as $c) + { + $level = 0; + $parent_id = (int)$c->parent; + + while ($parent_id) + { + $level++; + $parent_id = $this->getNextParentId($cats, $parent_id); + } + + $c->level = $level; + $options[] = $c; + } + + // sort options + $options = $this->sortTreeSelectOptions($options); + return $this->getOptionsByList($options, array('language')); + } + + /** + * Sorts treeselect options + * + * @param array $options + * @param int $parent_id + * + * @return array + */ + protected function sortTreeSelectOptions($options, $parent_id = 0) + { + if (empty($options)) + { + return []; + } + + $result = []; + + $sub_options = array_filter($options, function($option) use($parent_id) + { + return $option->parent == $parent_id; + }); + + foreach ($sub_options as $option) + { + $result[] = $option; + $result = array_merge($result, $this->sortTreeSelectOptions($options, $option->id)); + } + + return $result; + } + + /** + * Returns the next parent id + * Helper method for getCategories + * + * @return int + */ + protected function getNextParentId($categories, $current_pid) + { + foreach($categories as $c) + { + if ((int)$c->id === $current_pid) + { + return (int)$c->parent; + } + } + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrmenuitems.php b/deployed/convertforms/plugins/system/nrframework/fields/nrmenuitems.php new file mode 100644 index 00000000..e4b5739d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrmenuitems.php @@ -0,0 +1,125 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +use \NRFramework\HTML; + +require_once dirname(__DIR__) . '/helpers/field.php'; + + +class JFormFieldNRMenuItems extends NRFormField +{ + /** + * Output the HTML for the field + * Example of usage: + */ + protected function getInput() + { + $size = $this->get('size', 300); + $options = $this->getMenuItems(); + + return HTML::treeselect($options, $this->name, $this->value, $this->id, $size); + } + + /** + * Get a list of menu links for one or all menus. + * Logic from administrator\components\com_menus\helpers\menus.php@getMenuLinks() + */ + public function getMenuItems() + { + NRFramework\Functions::loadLanguage('com_menus', JPATH_ADMINISTRATOR); + $db = $this->db; + + // Prevent the "The SELECT would examine more than MAX_JOIN_SIZE rows; " MySQL error + // on websites with a big number of menu items in the db. + $db->setQuery('SET SQL_BIG_SELECTS = 1')->execute(); + + $query = $db->getQuery(true) + ->select('a.id AS value, a.title AS text, a.alias, a.level, a.menutype, a.type, a.template_style_id, a.checked_out, a.language') + ->from('#__menu AS a') + ->join('LEFT', $db->quoteName('#__menu') . ' AS b ON a.lft > b.lft AND a.rgt < b.rgt') + ->where('a.published != -2') + ->group('a.id, a.alias, a.title, a.level, a.menutype, a.type, a.template_style_id, a.checked_out, a.lft, a.language') + ->order('a.lft ASC'); + + // Get the options. + $db->setQuery($query); + + try + { + $links = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage()); + return false; + } + + // Group the items by menutype. + $query->clear() + ->select('*') + ->from('#__menu_types') + ->where('menutype <> ' . $db->quote('')) + ->order('title, menutype'); + $db->setQuery($query); + + try + { + $menuTypes = $db->loadObjectList(); + } + catch (RuntimeException $e) + { + JFactory::getApplication()->enqueueMessage($e->getMessage()); + return false; + } + + // Create a reverse lookup and aggregate the links. + $rlu = array(); + foreach ($menuTypes as &$type) + { + $type->value = 'type.' . $type->menutype; + $type->text = $type->title; + $type->level = 0; + $type->class = 'hidechildren'; + $type->labelclass = 'nav-header'; + + $rlu[$type->menutype] = &$type; + $type->links = array(); + } + + foreach ($links as &$link) + { + if (isset($rlu[$link->menutype])) + { + if (preg_replace('#[^a-z0-9]#', '', strtolower($link->text)) !== preg_replace('#[^a-z0-9]#', '', $link->alias)) + { + $link->text .= ' [' . $link->alias . ']'; + } + + if ($link->language && $link->language != '*') + { + $link->text .= ' (' . $link->language . ')'; + } + + if ($link->type == 'alias') + { + $link->text .= ' (' . JText::_('COM_MENUS_TYPE_ALIAS') . ')'; + $link->disable = 1; + } + + $rlu[$link->menutype]->links[] = &$link; + + unset($link->menutype); + } + } + + return $menuTypes; + } + +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrnumber.php b/deployed/convertforms/plugins/system/nrframework/fields/nrnumber.php new file mode 100644 index 00000000..cc0dbca9 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrnumber.php @@ -0,0 +1,41 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +JFormHelper::loadFieldClass('number'); + +class JFormFieldNRNumber extends JFormFieldNumber +{ + /** + * Method to render the input field + * + * @return string + */ + function getInput() + { + $parent = parent::getInput(); + $addon = (string) $this->element['addon']; + + if (empty($addon)) + { + return $parent; + } + + return ' +
        + ' . $parent . ' + + ' . JText::_($addon) . ' + +
        + '; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nros.php b/deployed/convertforms/plugins/system/nrframework/fields/nros.php new file mode 100644 index 00000000..6ab57701 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nros.php @@ -0,0 +1,41 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die('Restricted access'); + +require_once JPATH_PLUGINS . '/system/nrframework/helpers/fieldlist.php'; + +class JFormFieldNROs extends NRFormFieldList +{ + /** + * Browsers List + * + * @var array + */ + public $options = array( + 'linux' => 'NR_LINUX', + 'mac' => 'NR_MAC', + 'android' => 'NR_ANDROID', + 'ios' => 'NR_IOS', + 'windows' => 'NR_WINDOWS', + 'blackberry' => 'NR_BLACKBERRY', + 'chromeos' => 'NR_CHROMEOS' + ); + + protected function getOptions() + { + asort($this->options); + + foreach ($this->options as $key => $option) + { + $options[] = JHTML::_('select.option', $key, JText::_($option)); + } + + return array_merge(parent::getOptions(), $options); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrrsblogcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrrsblogcategories.php new file mode 100644 index 00000000..43c9364d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrrsblogcategories.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRRSBlogCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, a.title as text, (COUNT(DISTINCT b.id) - 1) AS level, a.parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__rsblog_categories as a') + ->where('a.parent_id > 0') + ->join('LEFT', '#__rsblog_categories AS b on a.lft > b.lft AND a.rgt < b.rgt') + ->group('a.id, a.title, a.lft') + ->order('a.lft ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrsobiprocategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrsobiprocategories.php new file mode 100644 index 00000000..1e04f15f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrsobiprocategories.php @@ -0,0 +1,60 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRSobiProCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Increase the value(ID) of the category by one. + * This happens because we have a parent category "Bussiness Directory" that pushes-in the indentation + * and we reset it by decreasing the value, level and parent. + * + * @var boolean + */ + protected $increaseValue = true; + + /** + * Get a list of all SobiPro Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('(a.id - 1) as value, b.sValue as text, (a.parent - 1) as level, (a.parent - 1) as parent, IF (a.state=1, 0, 1) as disable') + ->from('#__sobipro_object as a') + ->join('LEFT', "#__sobipro_language AS b on a.id = b.id AND b.sKey = 'name'") + ->where($db->quoteName('a.oType') . ' = '. $db->quote('category')); + + $db->setQuery($query); + + $result = $db->loadObjectList(); + + return $result; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrsppagebuildercategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrsppagebuildercategories.php new file mode 100644 index 00000000..3f2e74ad --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrsppagebuildercategories.php @@ -0,0 +1,37 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRSPPageBuilderCategories extends JFormFieldNRTreeSelect +{ + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.id as value, a.title as text, (COUNT(DISTINCT b.id) - 1) AS level, a.parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__categories as a') + ->join('LEFT', '#__categories AS b on a.lft > b.lft AND a.rgt < b.rgt') + ->where('a.extension = "com_sppagebuilder"') + ->group('a.id, a.title, a.lft') + ->order('a.lft ASC'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrtext.php b/deployed/convertforms/plugins/system/nrframework/fields/nrtext.php new file mode 100644 index 00000000..0b4bd918 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrtext.php @@ -0,0 +1,93 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +JFormHelper::loadFieldClass('text'); + +class JFormFieldNRText extends JFormFieldText +{ + /** + * Method to render the input field + * + * @return string + */ + public function getInput() + { + // This line added to help us support the K2 Items and Joomla! Articles dropdown listbox array values + $this->value = is_array($this->value) ? implode(',', $this->value) : $this->value; + + // Adds an extra info label next to input + $addon = (string) $this->element['addon']; + $parent = parent::getInput(); + + if (!empty($addon)) + { + $html[] = ' +
        + ' . $parent . ' + + ' . JText::_($addon) . ' + +
        '; + } else + { + $html[] = parent::getInput(); + } + + // Adds a link next to input + $url = $this->element['url']; + $text = $this->element['urltext']; + $target = $this->element['urltarget'] ? $this->element['urltarget'] : "_blank"; + $class = $this->element['urlclass'] ? $this->element['urlclass'] : ""; + $attributes = ""; + + // Popup mode + if ($this->element["urlpopup"]) + { + $class .= " nrPopup"; + $attributes = 'data-width="600" data-height="600"'; + $this->addPopupScript(); + } + + if ($url && $text) + { + $html[] = '
        ' . JText::_($text) . ''; + } + + return implode('', $html); + } + + private function addPopupScript() + { + static $run; + + if ($run) + { + return; + } + + $run = true; + + JFactory::getDocument()->addScriptDeclaration(' + jQuery(function($) { + $(".nrPopup").click(function() { + url = $(this).attr("href"); + width = $(this).data("width"); + height = $(this).data("height"); + + window.open(""+url+"", "nrPopup", "width=" + width + ", height=" + height + ""); + + return false; + }) + }) + '); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrtoggle.php b/deployed/convertforms/plugins/system/nrframework/fields/nrtoggle.php new file mode 100644 index 00000000..ccb85fe6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrtoggle.php @@ -0,0 +1,65 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access to this file +defined('_JEXEC') or die; + +use NRFramework\HTML; + +JFormHelper::loadFieldClass('checkbox'); + +/** + * Pure CSS iOS-like Toggle Button based on the Checkbox field. + * + * This field also fixes the Unchecked checkbox value using a hidden field. + * Credits: http://mistercameron.com/2008/01/unchecked-checkbox-values/ + */ +class JFormFieldNRToggle extends JFormFieldCheckbox +{ + /** + * On state value + * + * @var int + */ + protected $on_value = 1; + + /** + * Off state value + * + * @var int + */ + protected $off_value = 0; + + /** + * Method to get the field input markup. + * + * @return string + */ + public function getInput() + { + HTML::stylesheet('plg_system_nrframework/toggle.css'); + + $required = $this->required ? ' required aria-required="true"' : ''; + $checked = $this->checked ? ' checked' : ''; + + // Fix bug inherited from the Checkbox field where the input remains checked even if save it unchecked. + if ($this->checked && (string) $this->value == (string) $this->off_value) + { + $checked = ''; + } + + return ' + + + + + + '; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrurl.php b/deployed/convertforms/plugins/system/nrframework/fields/nrurl.php new file mode 100644 index 00000000..40176bda --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrurl.php @@ -0,0 +1,58 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNRURL extends NRFormField +{ + /** + * Method to render the input field + * + * @return string + */ + function getInput() + { + $url = $this->get("url", "#"); + $target = $this->get("target", "_blank"); + $text = $this->get("text"); + $class = $this->get("class"); + $icon = $this->get("icon", null); + + $url = str_replace("{{base}}", JURI::base(), $url); + $url = str_replace("{{root}}", JURI::root(), $url); + + $html[] = ''; + + if ($icon) + { + $html[] = ''; + } + + $html[] = $this->prepareText($text); + $html[] = ''; + + // Add CSS to the page + $run = false; + if (!$run) + { + JFactory::getDocument()->addStyleDeclaration(' + .nrurl.disabled { + pointer-events: none; + } + '); + + $run = true; + } + + return implode(" ", $html); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrvirtuemartcategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrvirtuemartcategories.php new file mode 100644 index 00000000..e55f6074 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrvirtuemartcategories.php @@ -0,0 +1,71 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRVirtueMartCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('a.virtuemart_category_id as value, b.category_name as text, c.category_parent_id as parent, IF (a.published=1, 0, 1) as disable') + ->from('#__virtuemart_categories as a') + ->join('LEFT', '#__virtuemart_categories_' . $this->getLanguage() . ' AS b on a.virtuemart_category_id = b.virtuemart_category_id') + ->join('LEFT', '#__virtuemart_category_categories AS c on a.virtuemart_category_id = c.id') + ->order('c.id desc'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } + + /** + * VirtueMart is using different tables per language. Therefore, we need to use their API to get the default language code + * + * @return string + */ + private function getLanguage($default = 'en_gb') + { + // Silent inclusion. + @include_once JPATH_ADMINISTRATOR . '/components/com_virtuemart/helpers/config.php'; + + if (!class_exists('VmConfig')) + { + return $default; + } + + // Init configuration + VmConfig::loadConfig(); + + return VmConfig::$jDefLang; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/nrzoocategories.php b/deployed/convertforms/plugins/system/nrframework/fields/nrzoocategories.php new file mode 100644 index 00000000..29d2742e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/nrzoocategories.php @@ -0,0 +1,48 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/treeselect.php'; + +class JFormFieldNRZooCategories extends JFormFieldNRTreeSelect +{ + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = true; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = true; + + /** + * Get a list of all EventBooking Categories + * + * @return void + */ + protected function getOptions() + { + // Get a database object. + $db = $this->db; + + $query = $db->getQuery(true) + ->select('id as value, name as text, parent as `parent`, IF (published=1, 0, 1) as disable') + ->from('#__zoo_category') + ->order('ordering'); + + $db->setQuery($query); + + return $db->loadObjectList(); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/password.php b/deployed/convertforms/plugins/system/nrframework/fields/password.php new file mode 100644 index 00000000..5f02e070 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/password.php @@ -0,0 +1,68 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access to this file +defined('_JEXEC') or die; + +JFormHelper::loadFieldClass('password'); + +class JFormFieldNR_Password extends JFormFieldPassword +{ + /** + * Method to get the field input markup. + * + * @return string The field input markup. + */ + public function getInput() + { + if (defined('nrJ4')) + { + return parent::getInput(); + } + + $id = $this->id . '_btn'; + + $doc = JFactory::getDocument(); + + JHtml::stylesheet('plg_system_nrframework/fields.css', false, true); + + $doc->addStyleDeclaration(' + .nr-pass-btn { + display:flex; + align-items:center; + } + .nr-pass-btn > * { + margin:0 !important; + padding:0 !important; + } + .nr-pass-btn label { + margin-left:5px !important; + user-select: none; + } + '); + + $doc->addScriptDeclaration(' + jQuery(function($) { + $("#' . $id . '").change(function() { + var type = $(this).is(":checked") ? "text" : "password"; + $(this).closest(".nr-pass").find(".nr-pass-input input").attr("type", type); + }) + }) + '); + + return ' +
        +
        '. parent::getInput() .'
        +
        + + +
        +
        + '; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/pro.php b/deployed/convertforms/plugins/system/nrframework/fields/pro.php new file mode 100644 index 00000000..a751e32b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/pro.php @@ -0,0 +1,49 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +class JFormFieldNR_PRO extends JFormField +{ + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + $label = (string) $this->element['label']; + $isFeatureMode = !is_null($label) && !empty($label); + + $buttonText = $isFeatureMode ? 'NR_UNLOCK_PRO_FEATURE' : 'NR_UPGRADE_TO_PRO'; + + NRFramework\HTML::renderProOnlyModal(); + + $html = ''; + + if (defined('nrJ4')) + { + $html .= ' '; + } else + { + if ($isFeatureMode) + { + $html .= ' '; + } else + { + $html .= ' '; + } + } + + $html .= JText::_($buttonText) . ''; + + return $html; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/rate.php b/deployed/convertforms/plugins/system/nrframework/fields/rate.php new file mode 100644 index 00000000..1639c8f5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/rate.php @@ -0,0 +1,108 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access to this file +defined('_JEXEC') or die; + +JFormHelper::loadFieldClass('text'); + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Rate extends NRFormField +{ + /** + * The form field type. + * + * @var string + */ + public $type = 'nr_rate'; + + /** + * Method to get the field input markup. + * + * @return string The field input markup. + */ + public function getInput() + { + // Setup properties + $this->starwidth = $this->get('starwidth', '25px'); + $this->numstarts = $this->get('numstars', 5); + $this->maxvalue = $this->get('maxvalue', 5); + $this->halfstar = $this->get('halfstar', 0) ? "true" : "false"; + $this->spacing = $this->get('spacing', "3px"); + $this->ratedfill = $this->get('ratedfill', "#e7711b"); + $this->value = empty($this->value) ? 0 : $this->value; + + static $run; + if (!$run) + { + // Add styles and scripts to DOM + JHtml::_('jquery.framework'); + JHtml::script('plg_system_nrframework/vendor/jquery.rateyo.min.js', ['relative' => true, 'version' => true]); + JHtml::stylesheet('plg_system_nrframework/vendor/jquery.rateyo.min.css', ['relative' => true, 'version' => true]); + + $this->doc->addStyleDeclaration(' + .nr_rate { + display: flex; + align-items: center; + } + .nr_rate_preview { + background-color: #393939; + color: #fff; + padding: 7px; + font-size: 12px; + line-height: 1; + min-width: 20px; + text-align: center; + border-radius: 2px; + position:relative; + top:2px; + } + .nr_rate .jq-ry-container { + padding: 0 10px 0 0; + } + .nr_rate svg { + max-width: unset; + } + '); + + $run = true; + } + + $this->doc->addScriptDeclaration(' + jQuery(function($) { + $("#nr_rate_'.$this->id.'").rateYo({ + rating: ' . $this->value . ', + starWidth: "'. $this->starwidth .'", + numStars: ' . $this->numstarts . ', + maxValue: ' . $this->maxvalue . ', + halfStar: ' . $this->halfstar . ', + spacing: "' . $this->spacing . '", + ratedFill: "' . $this->ratedfill . '", + onInit: function (rating) { + $(this).parent().find(".nr_rate_preview").html(rating); + }, + onSet: function(rating) { + $(this).next("input").val(rating); + }, + onChange: function(rating) { + $(this).parent().find(".nr_rate_preview").html(rating); + } + }); + }); + '); + + $html[] = '
        '; + $html[] = '
        '; + $html[] = ''; + $html[] = ''; + $html[] = '
        '; + + return implode(" ", $html); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/smarttags.php b/deployed/convertforms/plugins/system/nrframework/fields/smarttags.php new file mode 100644 index 00000000..6d12c5fc --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/smarttags.php @@ -0,0 +1,193 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . "/helpers/smarttags.php"; +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_SmartTags extends NRFormField +{ + /** + * Method to render the input field + * + * @return string + */ + function getInput() + { + $smartTags = new NRSmartTags(); + + // Add extra tags by calling an external method + if ($tagsMethod = $this->get("tagsMethod", null)) + { + $method = explode("::", $tagsMethod); + + if (is_array($method)) + { + $extraTags = call_user_func($method); + $smartTags->add($extraTags); + } + } + + $tags = $smartTags->get(); + + if (!$tags || !is_array($tags)) + { + return; + } + + $html[] = ' +
        + + + ' . $this->prepareText($this->get("linklabel", "NR_SMARTTAGS_SHOW")) . ' + +
        +
        '; + + foreach ($tags as $tag => $value) + { + $html[] = ''; + } + + $html[] = '
        '; + + $this->addScript(); + + return implode(" ", $html); + } + + /** + * Adds field's script and CSS into the document once + */ + private function addScript() + { + static $run; + + if ($run) + { + return; + } + + // Add script + $this->doc->addScriptDeclaration(' + jQuery(function($) { + $(".nrst-btn").click(function() { + list = $(this).next(); + $(this).find(".l").html(list.is(":visible") ? $(this).data("show-label") : $(this).data("hide-label")); + list.slideToggle(); + }) + + $(".nrst-list a").click(function() { + var tag = $(this); + copyTextToClipboard(tag.data("clipboard"), function(success) { + if (success) { + tag.addClass("copied"); + } + + setTimeout(function() { + tag.removeClass("copied"); + }, 1000); + }); + + return false; + }); + + function copyTextToClipboard(text, callback) { + var textArea = document.createElement("textarea"); + textArea.style.position = "fixed"; + textArea.style.top = 0; + textArea.style.left = 0; + textArea.style.width = "2em"; + textArea.style.height = "2em"; + textArea.style.background = "transparent"; + textArea.value = text; + document.body.appendChild(textArea); + textArea.select(); + + try { + var success = document.execCommand("copy"); + callback(success); + } catch (err) { + callback(false); + } + + document.body.removeChild(textArea); + } + }) + '); + + // Add height + if ($height = $this->get("height", null)) + { + $this->doc->addStyleDeclaration(' + .nrst-wrap { + height: ' . $height . '; + overflow-x: hidden; + padding-right: 10px; + }' + ); + } + + // Add CSS + $this->doc->addStyleDeclaration(' + .nrst-wrap { + display:none; + } + .nrst-list { + display:flex; + flex-wrap: wrap; + margin:10px -3px 0 -3px; + } + .nrst-list div { + min-width:50%; + } + .nrst-list a { + -webkit-transition: background 150ms ease; + -moz-transition: background 150ms ease; + transition: background 150ms ease; + color: inherit; + text-decoration: none; + display: block; + border: solid 1px #ddd; + padding: 7px; + line-height: 1; + margin: 3px; + font-size: 12px; + } + .nrst-list a:hover { + background-color:#eee; + } + .nrst-list a:after { + font-family: "IcoMoon"; + font-style: normal; + speak: none; + float: right; + font-size: 10px; + line-height: 1; + } + .nrst-list a:hover:after { + content: "\e018"; + } + .nrst-list a.copied { + background:#dff0d8; + } + .nrst-list a.copied:after { + content: "\47"; + color: green; + } + '); + + $run = true; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/smarttagsbox.php b/deployed/convertforms/plugins/system/nrframework/fields/smarttagsbox.php new file mode 100644 index 00000000..cc3aec3a --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/smarttagsbox.php @@ -0,0 +1,96 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +use NRFramework\SmartTags; + +class JFormFieldSmartTagsBox extends JFormField +{ + /** + * Undocumented variable + * + * @var string + */ + public $input_selector = '.show-smart-tags'; + + /** + * Disable field label + * + * @return boolean + */ + protected function getLabel() + { + return false; + } + + /** + * Method to get a list of options for a list input. + * + * @return array An array of JHtml options. + */ + protected function getInput() + { + JHtml::_('script', 'plg_system_nrframework/smarttagsbox.js', ['version' => 'auto', 'relative' => true]); + JHtml::_('stylesheet', 'plg_system_nrframework/smarttagsbox.css', ['version' => 'auto', 'relative' => true]); + + JText::script('NR_SMARTTAGS_NOTFOUND'); + JText::script('NR_SMARTTAGS_SHOW'); + + JFactory::getDocument()->addScriptOptions('SmartTagsBox', [ + 'selector' => $this->input_selector, + 'tags' => [ + 'Joomla' => [ + '{page.title}' => 'Page Title', + '{url}' => 'Page URL', + '{url.path}' => 'Page Path', + '{page.lang}' => 'Page Language Code', + '{page.langurl}' => 'Page Language URL', + '{page.desc}' => 'Page Meta Description', + '{site.name}' => 'Site Name', + '{site.url}' => 'Site URL', + '{site.email}' => 'Site Email', + '{user.id}' => 'User ID', + '{user.username}' => 'User Username', + '{user.email}' => 'User Email', + '{user.name}' => 'User Full name', + '{user.firstname}' => 'User First name', + '{user.lastname}' => 'User Last name', + '{user.groups}' => 'User Group IDs', + '{user.registerdate}' => 'User Registration Date', + ], + 'Visitor' => [ + '{client.device}' => 'Visitor Device Type', + '{ip}' => 'Visitor IP Address', + '{client.browser}' => 'Visitor Browser', + '{client.os}' => 'Visitor Operating System', + '{client.useragent}' => 'Visitor User Agent String' + ], + 'Other' => [ + '{date}' => 'Date', + '{time}' => 'Time', + '{day}' => 'Day', + '{month}' => 'Month', + '{year}' => 'Year', + '{referrer}' => 'Referrer URL', + '{randomid}' => 'Random ID', + '{querystring.YOUR_KEY}' => 'Query String', + '{language.YOUR_KEY}' => 'Language String' + ] + ] + ]); + + // Render box layout + $layout = new JLayoutFile('smarttagsbox', JPATH_PLUGINS . '/system/nrframework/layouts'); + return $layout->render(); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/time.php b/deployed/convertforms/plugins/system/nrframework/fields/time.php new file mode 100644 index 00000000..e7e1a629 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/time.php @@ -0,0 +1,94 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Time extends NRFormField +{ + + /** + * Sets the time value + * + * @var string $time_value + */ + private $time_value = null; + + /** + * Method to get the field input markup. + * + * @return string The field input markup. + */ + public function getInput() + { + // Setup properties + $this->hint = $this->get('hint', '00:00'); + $this->class = $this->get('class', 'input-small'); + $this->placement = $this->get('placement', 'top'); + $this->align = $this->get('align', 'left'); + $this->autoclose = $this->get('autoclose', 'true'); + $this->default = $this->get('default', 'now'); + $this->donetext = $this->get('donetext', 'Done'); + $this->required = $this->get('required') === 'true'; + + /** + * When an object is created using this class, it cannot set $this->value + * So we set $time_value and then use it's value to display the time + */ + $this->value = !is_null($this->time_value) ? $this->time_value : $this->value; + + // Add styles and scripts to DOM + JHtml::_('jquery.framework'); + JHtml::script('plg_system_nrframework/vendor/jquery-clockpicker.min.js', ['relative' => true, 'version' => true]); + JHtml::stylesheet('plg_system_nrframework/vendor/jquery-clockpicker.min.css', ['relative' => true, 'version' => true]); + + static $run; + // Run once to initialize it + if (!$run) + { + $this->doc->addScriptDeclaration(' + jQuery(function($) { + $(".clockpicker").clockpicker(); + }); + '); + + // Fix a CSS conflict caused by the template.css on Joomla 3 + if (!defined('nrJ4')) + { + // Fuck you template.css + $this->doc->addStyleDeclaration(' + .clockpicker-align-left.popover > .arrow { + left: 25px; + } + '); + } + + $run = true; + } + + return ' +
        + ' . parent::getInput() . ' +
        '; + } + + /** + * Sets the $time_value of the time when created as an object + * due to not being able to set the $this->value byitself + * + * @param string $value + * + * @return void + */ + public function setValue($value) + { + $this->time_value = $value; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/treeselect.php b/deployed/convertforms/plugins/system/nrframework/fields/treeselect.php new file mode 100644 index 00000000..8b3b3e36 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/treeselect.php @@ -0,0 +1,162 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +use \NRFramework\HTML; + +defined('_JEXEC') or die; + +abstract class JFormFieldNRTreeSelect extends JFormField +{ + /** + * Database object + * + * @var object + */ + public $db; + + /** + * Indicates whether the options array should be sorted before render. + * + * @var boolean + */ + protected $sortTree = false; + + /** + * Indicates whether the options array should have the levels re-calculated + * + * @var boolean + */ + protected $fixLevels = false; + + /** + * Increase the value(ID) of the category by one. + * This happens because we have a parent category "Bussiness Directory" that pushes-in the indentation + * and we reset it by decreasing the value, level and parent. + * + * @var boolean + */ + protected $increaseValue = false; + + /** + * Output the HTML for the field + */ + protected function getInput() + { + $this->db = JFactory::getDbo(); + + $options = $this->getOptions(); + + if ($this->sortTree) + { + $options = $this->sortTreeSelectOptions($options); + } + + if ($this->fixLevels) + { + $options = $this->fixLevels($options); + } + + if ($this->increaseValue) + { + // Increase by 1 the value(ID) of the category + foreach ($options as $key => $value) + { + $options[$key]->value+=1; + } + } + + return HTML::treeselect($options, $this->name, $this->value, $this->id); + } + + /** + * Sorts treeselect options + * + * @param array $options + * @param int $parent_id + * + * @return array + */ + protected function sortTreeSelectOptions($options, $parent_id = 0) + { + if (empty($options)) + { + return []; + } + + $result = []; + + $sub_options = array_filter($options, function($option) use($parent_id) + { + return $option->parent == $parent_id; + }); + + foreach ($sub_options as $option) + { + $result[] = $option; + $result = array_merge($result, $this->sortTreeSelectOptions($options, $option->value)); + } + + return $result; + } + + /** + * Fixes the levels of the categories + * + * @param array $categories + * + * @return array + */ + protected function fixLevels($cats) + { + // new categories + $categories = []; + + // get category levels + foreach ($cats as $c) + { + $level = 0; + $parent_id = (int)$c->parent; + + while ($parent_id) + { + $level++; + $parent_id = $this->getNextParentId($cats, $parent_id); + } + + $c->level = $level; + $categories[] = $c; + } + + return $categories; + } + + /** + * Returns the next parent id + * Helper method for getCategories + * + * @return int + */ + protected function getNextParentId($categories, $current_pid) + { + foreach($categories as $c) + { + if ((int)$c->value === $current_pid) + { + return (int)$c->parent; + } + } + } + + /** + * Get tree options as an Array of objects + * Each object should have the attributes: value, text, parent, level, disable + * + * @return object + */ + abstract protected function getOptions(); +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/users.php b/deployed/convertforms/plugins/system/nrframework/fields/users.php new file mode 100644 index 00000000..871145cd --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/users.php @@ -0,0 +1,53 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +use \NRFramework\HTML; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Users extends NRFormField +{ + public $type = 'Users'; + + protected function getInput() + { + $this->params = $this->element->attributes(); + + if (!is_array($this->value)) + { + $this->value = explode(',', $this->value); + } + + $options = $this->getUsers(); + + $size = (int) $this->get('size', 300); + + return HTML::treeselectSimple($options, $this->name, $this->value, $this->id, $size); + } + + public function getUsers() + { + $query = $this->db->getQuery(true) + ->select('COUNT(u.id)') + ->from('#__users AS u') + ->where('u.block = 0'); + $this->db->setQuery($query); + $total = $this->db->loadResult(); + + $query->clear('select') + ->select('u.name, u.username, u.id') + ->order('name'); + $this->db->setQuery($query); + $list = $this->db->loadObjectList(); + + return $this->getOptionsByList($list, array('username', 'id')); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/fields/virtuemartcomponentitems.php b/deployed/convertforms/plugins/system/nrframework/fields/virtuemartcomponentitems.php new file mode 100644 index 00000000..a51dcbb1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/virtuemartcomponentitems.php @@ -0,0 +1,47 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +use Joomla\Registry\Registry; + +require_once __DIR__ . '/componentitems.php'; + +class JFormFieldVirtueMartComponentItems extends JFormFieldComponentItems +{ + public function init() + { + // Get default language + $this->element['table'] = 'virtuemart_products_' . $this->getLanguage(); + + parent::init(); + } + + /** + * VirtueMart is using different tables per language. Therefore, we need to use their API to get the default language code + * + * @return string + */ + private function getLanguage($default = 'en_gb') + { + // Silent inclusion. + @include_once JPATH_ADMINISTRATOR . '/components/com_virtuemart/helpers/config.php'; + + if (!class_exists('VmConfig')) + { + return $default; + } + + // Init configuration + VmConfig::loadConfig(); + + return VmConfig::$jDefLang; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/fields/well.php b/deployed/convertforms/plugins/system/nrframework/fields/well.php new file mode 100644 index 00000000..b1c51142 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/fields/well.php @@ -0,0 +1,95 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// No direct access to this file +defined('_JEXEC') or die; + +require_once dirname(__DIR__) . '/helpers/field.php'; + +class JFormFieldNR_Well extends NRFormField +{ + /** + * The field type. + * + * @var string + */ + public $type = 'nr_well'; + + /** + * Layout to render the form field + * + * @var string + */ + protected $renderLayout = 'well'; + + /** + * Override renderer include path + * + * @return array + */ + protected function getLayoutPaths() + { + return JPATH_PLUGINS . '/system/nrframework/layouts/'; + } + + /** + * Method to render the input field + * + * @return string + */ + protected function getInput() + { + JHtml::stylesheet('plg_system_nrframework/fields.css', ['relative' => true, 'version' => 'auto']); + + $title = $this->get('label'); + $description = $this->get('description'); + $url = $this->get('url'); + $class = $this->get('class'); + $start = $this->get('start', 0); + $end = $this->get('end', 0); + $info = $this->get("html", null); + + if ($info) + { + $info = str_replace("{{", "<", $info); + $info = str_replace("}}", ">", $info); + } + + $html = array(); + + if ($start || !$end) + { + if ($title) + { + $html[] = '

        ' . $this->prepareText($title) . '

        '; + } + if ($description) + { + $html[] = '
        ' . $this->prepareText($description) . $info . '
        '; + } + + if ($url) + { + if (defined('nrJ4')) + { + $html[] = ''; + } else + { + $html[] = ''; + } + } + } + + if ($end) { + $html[] = '
        '; + } + + return implode('', $html); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/field.php b/deployed/convertforms/plugins/system/nrframework/helpers/field.php new file mode 100644 index 00000000..84b53b4e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/field.php @@ -0,0 +1,146 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +JFormHelper::loadFieldClass('text'); + +class NRFormField extends JFormFieldText +{ + public $type = 'Field'; + + /** + * Document object + * + * @var object + */ + public $doc; + + /** + * Database object + * + * @var object + */ + public $db; + + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * Class constructor + */ + function __construct() + { + $this->doc = JFactory::getDocument(); + $this->app = JFactory::getApplication(); + $this->db = JFactory::getDbo(); + parent::__construct(); + } + + /** + * Method to get the field label markup. + * + * @return string The field label markup. + */ + protected function getLabel() + { + $label = $this->get("label"); + if (empty($label)) + { + return ""; + } + + return parent::getLabel(); + } + + /** + * Prepares string through JText + * + * @param string $string + * + * @return string + */ + public function prepareText($string = '') + { + $string = trim($string); + + if ($string == '') + { + return ''; + } + + return JText::_($string); + } + + /** + * Method to get field parameters + * + * @param string $val Field parameter + * @param string $default The default value + * + * @return string + */ + public function get($val, $default = '') + { + return (isset($this->element[$val]) && (string) $this->element[$val] != '') ? (string) $this->element[$val] : $default; + } + + public function getOptionsByList($list, $extras = array(), $levelOffset = 0) + { + $options = array(); + foreach ($list as $item) + { + $options[] = $this->getOptionByListItem($item, $extras, $levelOffset); + } + + return $options; + } + + public function getOptionByListItem($item, $extras = array(), $levelOffset = 0) + { + $name = trim($item->name); + + foreach ($extras as $key => $extra) + { + if (empty($item->{$extra})) + { + continue; + } + + if ($extra == 'language' && $item->{$extra} == '*') + { + continue; + } + + if (in_array($extra, array('id', 'alias')) && $item->{$extra} == $item->name) + { + continue; + } + + $name .= ' [' . $item->{$extra} . ']'; + } + + require_once __DIR__ . '/text.php'; + + $name = NRText::prepareSelectItem($name, isset($item->published) ? $item->published : 1); + + $option = JHtml::_('select.option', $item->id, $name, 'value', 'text', 0); + + if (isset($item->level)) + { + $option->level = $item->level + $levelOffset; + } + + return $option; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/fieldlist.php b/deployed/convertforms/plugins/system/nrframework/helpers/fieldlist.php new file mode 100644 index 00000000..18655b71 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/fieldlist.php @@ -0,0 +1,83 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +jimport('joomla.form.helper'); +JFormHelper::loadFieldClass('list'); + +class NRFormFieldList extends JFormFieldList +{ + /** + * Document object + * + * @var object + */ + public $doc; + + /** + * Database object + * + * @var object + */ + public $db; + + /** + * Application Object + * + * @var object + */ + protected $app; + + /** + * Class constructor + */ + function __construct() + { + $this->doc = JFactory::getDocument(); + $this->app = JFactory::getApplication(); + $this->db = JFactory::getDbo(); + + parent::__construct(); + } + + /** + * Method to get the field label markup. + * + * @return string The field label markup. + */ + protected function getLabel() + { + $label = $this->get("label"); + if (empty($label)) + { + return ""; + } + + return parent::getLabel(); + } + + protected function showSelect($default = "true") + { + return $this->get("showselect", $default) == "true" ? true : false; + } + + /** + * Method to get field parameters + * + * @param string $val Field parameter + * @param string $default The default value + * + * @return string + */ + public function get($val, $default = '') + { + return (isset($this->element[$val]) && (string) $this->element[$val] != '') ? (string) $this->element[$val] : $default; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/groupfield.php b/deployed/convertforms/plugins/system/nrframework/helpers/groupfield.php new file mode 100644 index 00000000..308db27f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/groupfield.php @@ -0,0 +1,68 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +defined('_JEXEC') or die; + +use \NRFramework\HTML; + +require_once __DIR__ . '/field.php'; + +class NRFormGroupField extends NRFormField +{ + public $type = 'Field'; + public $default_group = 'Categories'; + + protected function getInput() + { + $this->params = $this->element->attributes(); + + return $this->getSelectList(); + } + + public function getGroup() + { + $this->params = $this->element->attributes(); + + return $this->get('group', $this->default_group ?: $this->type); + } + + public function getOptions() + { + $group = $this->getGroup(); + + $id = $this->type . '_' . $group; + + $data[$id] = $this->{'get' . $group}(); + + return $data[$id]; + } + + public function getSelectList($group = '') + { + if (!is_array($this->value)) + { + $this->value = explode(',', $this->value); + } + + $size = (int) $this->get('size', 300); + + $group = $group ?: $this->getGroup(); + $options = $this->getOptions(); + + switch ($group) + { + case 'categories': + return HTML::treeselect($options, $this->name, $this->value, $this->id, $size); + + default: + return HTML::treeselectSimple($options, $this->name, $this->value, $this->id, $size); + } + + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/imageresize.php b/deployed/convertforms/plugins/system/nrframework/helpers/imageresize.php new file mode 100644 index 00000000..13f83d38 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/imageresize.php @@ -0,0 +1,277 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +// no direct access +defined('_JEXEC') or die; + +class NRFrameworkImage { + + /** + * @var + */ + private $image; + + /** + * @var array + */ + private $variables; + + /** + * @param $image + */ + function __construct($image) + { + $this->image = str_replace(JURI::root(true), '', $image); + + if (substr($this->image, 0, 1) == "/") + { + $this->image = substr($this->image, 1); + } + + // Default values + $this->variables = array ( + 'height' => '100', + 'width' => '100', + 'ratio' => '1', + 'crop' => true, + 'quality' => 100, + 'cache' => true, + 'filename' => 'img_' + ); + } + + /** + * @param $width + * @param $height + */ + public function setSize($width, $height) { + $this->variables['width'] = (int) $width; + $this->variables['height'] = (int) $height; + $this->variables['ratio'] = ((int) $width / (int) $height); + } + + /** + * @param $crop + */ + public function setCrop($crop) { + $this->variables['crop'] = (bool) $crop; + } + + + /** + * @param $quality + */ + public function setQuality($quality) { + $this->variables['quality'] = (int) $quality; + } + + /** + * @param $cache + */ + public function setCache($cache) { + $this->variables['cache'] = (bool) $cache; + } + + /** + * Get some basic information from the source image + * @return array + */ + private function imageInfo() { + + $image = getimagesize($this->image); + + $info = array(); + + $info['width'] = $image[0]; + $info['height'] = $image[1]; + $info['ratio'] = $image[0]/$image[1]; + $info['mime'] = $image['mime']; + + return $info; + + } + + /** + * @return resource + * Loads the image + */ + private function openImage() { + + switch ($this->imageInfo()['mime']) { + case 'image/jpeg': + $image = imagecreatefromjpeg ($this->image); + break; + + case 'image/png': + $image = imagecreatefrompng ($this->image); + imagealphablending( $image, true ); + imagesavealpha( $image, true ); + break; + + case 'image/gif': + $image = imagecreatefromgif ($this->image); + break; + + default: + throw new RuntimeException('Unknown file type'); + } + + return $image; + } + + /** + * @param $image + * @return resource + * Does the actual image resize + */ + private function resizeImage($image) { + + if (!is_resource($image)) { + throw new RuntimeException('Wrong path or this is not an image'); + } + + $newImage = imagecreatetruecolor($this->variables['width'], $this->variables['height']); + + if (($this->variables['crop'] == true) and ($this->imageInfo()['ratio'] != $this->variables['ratio'])) { + + $src_x = $src_y = 0; + $src_w = $this->imageInfo()['width']; + $src_h = $this->imageInfo()['height']; + + $cmp_x = $src_w / $this->variables['width']; + $cmp_y = $src_h / $this->variables['height']; + + // calculate x or y coordinate and width or height of source + if ($cmp_x > $cmp_y) { + + $src_w = round ($src_w / $cmp_x * $cmp_y); + $src_x = round (($src_w - ($src_w / $cmp_x * $cmp_y)) / 2); + + } else if ($cmp_y > $cmp_x) { + + $src_h = round ($src_h / $cmp_y * $cmp_x); + $src_y = round (($src_h - ($src_h / $cmp_y * $cmp_x)) / 2); + + } + + imagecopyresampled($newImage, + $image, + 0, 0, + $src_x, + $src_y, + $this->variables['width'], + $this->variables['height'], + $src_w, + $src_h); + + return $newImage; + + + } + + else { + + imagecopyresampled($newImage, + $image, + 0, 0, 0, 0, + $this->variables['width'], + $this->variables['height'], + $this->imageInfo()['width'], + $this->imageInfo()['height']); + + } + + return $newImage; + + } + + /** + * @return string + * Generate the filename for the image, based on original name, width, height and quality + */ + private function createFilename() { + return $this->variables['filename'].md5($this->image.$this->variables['width'].$this->variables['height'].$this->variables['quality']).'.jpg'; + } + + /** + * @return bool + * Check if an image exists in the cache + */ + private function checkCache() { + return file_exists(JPATH_SITE.'/cache/images/'.$this->createFilename()); + } + + /** + * Checks if the cache folder exists, and if not, it creates it * + */ + private function cacheFolder() { + + if (!JFolder::exists(JPATH_SITE.'/cache/images')) + { + try { + JFolder::create(JPATH_SITE.'/cache/images'); + } + catch (Exception $e) + { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + } + } + + /** + * @param $image + * Saves the image + * @throws ErrorException + */ + private function saveImage($image) { + $this->cacheFolder(); + imageinterlace($image, true); + $saved = imagejpeg($image, JPATH_SITE . '/cache/images/' . $this->createFilename(), $this->variables['quality']); + if ($saved == false) { + throw new ErrorException('Cannot save file, please check directory and permissions'); + } + imagedestroy($image); + + } + + /** + * @param $image + * Processes the image, unless it is already in the cache + * @throws ErrorException + * @returns string + */ + private function processImage($image) { + + if (($this->variables['cache'] == true) and $this->checkCache()) { + return false; + } + + else { + try { + $newImage = $this->openImage($image); + $newImage = $this->resizeImage($newImage); + $this->saveImage($newImage); + } + catch (Exception $e) { + echo 'Caught exception: ', $e->getMessage(), "\n"; + } + + } + } + + /** + * Method to process the image and get the new image's URL + */ + public function get() { + + $this->processImage($this->image); + return JURI::root(true).'/cache/images/'.$this->createFilename(); + + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/text.php b/deployed/convertforms/plugins/system/nrframework/helpers/text.php new file mode 100644 index 00000000..27108c9c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/text.php @@ -0,0 +1,57 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +// No direct access +defined('_JEXEC') or die; + +class NRText +{ + + public static function prepareSelectItem($string, $published = 1, $type = '', $remove_first = 0) + { + if (empty($string)) + { + return ''; + } + + $string = str_replace(array(' ', ' '), ' ', $string); + $string = preg_replace('#- #', ' ', $string); + + for ($i = 0; $remove_first > $i; $i++) + { + $string = preg_replace('#^ #', '', $string); + } + + if (preg_match('#^( *)(.*)$#', $string, $match)) + { + list($string, $pre, $name) = $match; + + $pre = preg_replace('# #', ' · ', $pre); + $pre = preg_replace('#(( · )*) · #', '\1 » ', $pre); + $pre = str_replace(' ', '   ', $pre); + + $string = $pre . $name; + } + + switch (true) + { + case ($type == 'separator'): + $string = $string; + break; + case (!$published): + $string = $string . ' [' . JText::_('JUNPUBLISHED') . ']'; + break; + case ($published == 2): + $string = $string . ' [' . JText::_('JARCHIVED') . ']'; + break; + } + + return $string; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/urls/bitly.php b/deployed/convertforms/plugins/system/nrframework/helpers/urls/bitly.php new file mode 100644 index 00000000..9f77e8cd --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/urls/bitly.php @@ -0,0 +1,19 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +class nrURLShortBitly extends NRURLShortener +{ + + function baseURL() + { + return 'http://api.bit.ly/v3/shorten?login='.$this->service->login.'&apiKey='.$this->service->api.'&format=txt&uri='.urlencode($this->url); + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/urls/google.php b/deployed/convertforms/plugins/system/nrframework/helpers/urls/google.php new file mode 100644 index 00000000..b46fe099 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/urls/google.php @@ -0,0 +1,56 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +class nrURLShortGoogle extends NRURLShortener +{ + + function get() + { + + if (!$this->validateCredentials()) + { + return false; + } + + $baseURL = "https://www.googleapis.com/urlshortener/v1/url?key=".$this->service->api; + + $data = '{ "longUrl": "'.$this->url.'" }'; + $headers['Content-Type'] = 'application/json'; + + try + { + $response = JHttpFactory::getHttp()->post($baseURL, $data, $headers, 5); + + if ($response === null || $response->code !== 200) + { + $result = json_decode($response->body); + $this->throwError($result->error->message); + + return false; + } + } + catch (RuntimeException $e) + { + $this->throwError($e->getMessage()); + + return false; + } + + $data = json_decode($response->body); + + if (!isset($data->id)) + { + return false; + } + + return $data->id; + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/urls/shortener.php b/deployed/convertforms/plugins/system/nrframework/helpers/urls/shortener.php new file mode 100644 index 00000000..91f5d7d5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/urls/shortener.php @@ -0,0 +1,139 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +/** + * Novarain Framework URL Shortening Class + * Should be extended. The get() method is required. + */ +class NRURLShortener { + + /** + * The Shortener Service + * + * @var object + */ + protected $service; + + /** + * The URL to be shortened + * + * @var string + */ + protected $url; + + /** + * Sets if the service needs a valid login name + * + * @var boolean + */ + protected $needsLogin = true; + + /** + * Sets if the service needs a valid API Key + * + * @var boolean + */ + protected $needsKey = true; + + /** + * Constructor of class + * + * @param object $service The Shortener service information + * @param string $url The URL to be shortened + */ + public function __construct($service, $url) { + $this->service = $service; + $this->url = $url; + } + + /** + * Throws an exception + * + * @param string $msg + * + * @return void + */ + protected function throwError($msg) + { + throw new Exception(JText::sprintf('NR_URL_SHORTENING_FAILED', $this->url, $this->service->name, $msg)); + } + + /** + * Checks if credentials are set + * + * @return boolean Returns true if credentials are set + */ + protected function validateCredentials() + { + + if ($this->needsKey && !isset($this->service->api)) + { + $this->throwError("API Key not set"); + + return false; + } + + if ($this->needsLogin && !isset($this->service->login)) + { + $this->throwError("Login not set"); + + return false; + } + + return true; + } + + /** + * Shortens the URL + * + * @return string On success returns the shortened URL + */ + public function get() + { + + if (!$this->validateCredentials()) + { + return false; + } + + $baseURL = $this->baseURL(); + + if (!$baseURL) + { + return false; + } + + try + { + $response = JHttpFactory::getHttp()->get($baseURL, null, 5); + + if ($response === null || $response->code !== 200) + { + $this->throwError($response->body); + + return false; + } + } + catch (RuntimeException $e) + { + $this->throwError($e->getMessage()); + + return false; + } + + return trim($response->body); + } + +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/urls/tinyurl.php b/deployed/convertforms/plugins/system/nrframework/helpers/urls/tinyurl.php new file mode 100644 index 00000000..ad833648 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/urls/tinyurl.php @@ -0,0 +1,23 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +class nrURLShortTinyURL extends NRURLShortener +{ + + protected $needsKey = false; + protected $needsLogin = false; + + function baseURL() + { + return "http://tinyurl.com/api-create.php?url=".urlencode($this->url); + } + +} diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/urls/urls.php b/deployed/convertforms/plugins/system/nrframework/helpers/urls/urls.php new file mode 100644 index 00000000..27b51c0b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/urls/urls.php @@ -0,0 +1,158 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +use \NRFramework\Cache; + +class NRURLs { + + private $url; + private $shortener; + private $cache; + + function __construct($url = null) + { + if (isset($url)) { + $this->set($url); + } + + $this->setCache(true); + } + + public function set($url) + { + $url = trim(filter_var($url, FILTER_SANITIZE_URL)); + return ($this->url = $url); + } + + public function setCache($state) + { + $this->cache = (bool) $state; + } + + public function setShortener($service) + { + $this->shortener = $service; + } + + public function get() + { + return $this->url; + } + + public function validate($url_ = null) + { + $url = isset($url_) ? $url_ : $this->url; + + if (!$url) + { + return false; + } + + // Remove all illegal characters from the URL + $url = filter_var($url, FILTER_SANITIZE_URL); + + // Validate URL + if (!filter_var($url, FILTER_VALIDATE_URL) === false) { + return true; + } + + return false; + } + + public function getShort() + { + if (!$this->validate() || !isset($this->shortener)) + { + return false; + } + + $hash = MD5($this->shortener->name . $this->url); + $cache = Cache::read($hash, true); + + if ($cache) + { + return $cache; + } + + // Load Shorten Service Class + $file = __DIR__ . "/" . strtolower($this->shortener->name) . '.php'; + $class = 'nrURLShort' . $this->shortener->name; + $method = "get"; + + require_once(__DIR__ . "/shortener.php"); + + if (!class_exists($class) && JFile::exists($file)) { + require_once($file); + } + + if (!class_exists($class) || !method_exists($class, $method)) + { + return false; + } + + $class_ = new $class($this->shortener, $this->url); + $data = $class_->$method(); + + // Return the original URL if we don't have a valid short URL + if (!$this->validate($data)) + { + return false; + } + + Cache::set($hash, $data); + + // Store to cache + if ($this->cache) + { + Cache::write($hash, $data); + } + + return $data; + } + + /** + * Appends extra parameters to the end of the URL + * + * @param String $url Pass URL + * @param String $params String of parameters (param=1¶m=2) + * + * @return string Returns new url + */ + public function appendParams($params) + { + + if (!$params) + { + return $this; + } + + $url = $this->url; + + $query = parse_url($url, PHP_URL_QUERY); + $params = trim($params, "?"); + $params = trim($params, "&"); + + if ($query) + { + $url .= '&' . $params; + } else + { + $url .= '?' . $params; + } + + $this->set($url); + + return $this; + } + +} + +?> \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/vendors/Mobile_Detect.php b/deployed/convertforms/plugins/system/nrframework/helpers/vendors/Mobile_Detect.php new file mode 100644 index 00000000..afd62261 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/vendors/Mobile_Detect.php @@ -0,0 +1,1461 @@ + + * Nick Ilyin + * + * Original author: Victor Stanciu + * + * @license Code and contributions have 'MIT License' + * More details: https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt + * + * @link Homepage: http://mobiledetect.net + * GitHub Repo: https://github.com/serbanghita/Mobile-Detect + * Google Code: http://code.google.com/p/php-mobile-detect/ + * README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md + * HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples + * + * @version 2.8.25 + */ + +defined('_JEXEC') or die; + +class Mobile_Detect +{ + /** + * Mobile detection type. + * + * @deprecated since version 2.6.9 + */ + const DETECTION_TYPE_MOBILE = 'mobile'; + + /** + * Extended detection type. + * + * @deprecated since version 2.6.9 + */ + const DETECTION_TYPE_EXTENDED = 'extended'; + + /** + * A frequently used regular expression to extract version #s. + * + * @deprecated since version 2.6.9 + */ + const VER = '([\w._\+]+)'; + + /** + * Top-level device. + */ + const MOBILE_GRADE_A = 'A'; + + /** + * Mid-level device. + */ + const MOBILE_GRADE_B = 'B'; + + /** + * Low-level device. + */ + const MOBILE_GRADE_C = 'C'; + + /** + * Stores the version number of the current release. + */ + const VERSION = '2.8.25'; + + /** + * A type for the version() method indicating a string return value. + */ + const VERSION_TYPE_STRING = 'text'; + + /** + * A type for the version() method indicating a float return value. + */ + const VERSION_TYPE_FLOAT = 'float'; + + /** + * A cache for resolved matches + * @var array + */ + protected $cache = array(); + + /** + * The User-Agent HTTP header is stored in here. + * @var string + */ + protected $userAgent = null; + + /** + * HTTP headers in the PHP-flavor. So HTTP_USER_AGENT and SERVER_SOFTWARE. + * @var array + */ + protected $httpHeaders = array(); + + /** + * CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer. + * @var array + */ + protected $cloudfrontHeaders = array(); + + /** + * The matching Regex. + * This is good for debug. + * @var string + */ + protected $matchingRegex = null; + + /** + * The matches extracted from the regex expression. + * This is good for debug. + * @var string + */ + protected $matchesArray = null; + + /** + * The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED. + * + * @deprecated since version 2.6.9 + * + * @var string + */ + protected $detectionType = self::DETECTION_TYPE_MOBILE; + + /** + * HTTP headers that trigger the 'isMobile' detection + * to be true. + * + * @var array + */ + protected static $mobileHeaders = array( + + 'HTTP_ACCEPT' => array('matches' => array( + // Opera Mini; @reference: http://dev.opera.com/articles/view/opera-binary-markup-language/ + 'application/x-obml2d', + // BlackBerry devices. + 'application/vnd.rim.html', + 'text/vnd.wap.wml', + 'application/vnd.wap.xhtml+xml' + )), + 'HTTP_X_WAP_PROFILE' => null, + 'HTTP_X_WAP_CLIENTID' => null, + 'HTTP_WAP_CONNECTION' => null, + 'HTTP_PROFILE' => null, + // Reported by Opera on Nokia devices (eg. C3). + 'HTTP_X_OPERAMINI_PHONE_UA' => null, + 'HTTP_X_NOKIA_GATEWAY_ID' => null, + 'HTTP_X_ORANGE_ID' => null, + 'HTTP_X_VODAFONE_3GPDPCONTEXT' => null, + 'HTTP_X_HUAWEI_USERID' => null, + // Reported by Windows Smartphones. + 'HTTP_UA_OS' => null, + // Reported by Verizon, Vodafone proxy system. + 'HTTP_X_MOBILE_GATEWAY' => null, + // Seen this on HTC Sensation. SensationXE_Beats_Z715e. + 'HTTP_X_ATT_DEVICEID' => null, + // Seen this on a HTC. + 'HTTP_UA_CPU' => array('matches' => array('ARM')), + ); + + /** + * List of mobile devices (phones). + * + * @var array + */ + protected static $phoneDevices = array( + 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes + 'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+', + 'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m', + 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6', + // @todo: Is 'Dell Streak' a tablet or a phone? ;) + 'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b', + 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b', + 'Samsung' => '\bSamsung\b|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205|SM-G9350|SM-J120F|SM-G920F|SM-G920V|SM-G930F|SM-N910C', + 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802|MS323)', + 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533', + 'Asus' => 'Asus.*Galaxy|PadFone.*Mobile', + 'NokiaLumia' => 'Lumia [0-9]{3,4}', + // http://www.micromaxinfo.com/mobiles/smartphones + // Added because the codes might conflict with Acer Tablets. + 'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b', + // @todo Complete the regex. + 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; + 'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;) + // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH) + // Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android. + 'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790', + // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones. + 'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250', + // http://fr.wikomobile.com + 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA(?!nna)|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM', + 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)', + // Added simvalley mobile just for fun. They have some interesting devices. + // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html + 'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b', + // Wolfgang - a brand that is sold by Aldi supermarkets. + // http://www.wolfgangmobile.com/ + 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q', + 'Alcatel' => 'Alcatel', + 'Nintendo' => 'Nintendo 3DS', + // http://en.wikipedia.org/wiki/Amoi + 'Amoi' => 'Amoi', + // http://en.wikipedia.org/wiki/INQ + 'INQ' => 'INQ', + // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039 + 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser', + ); + + /** + * List of tablet devices. + * + * @var array + */ + protected static $tabletDevices = array( + // @todo: check for mobile friendly emails topic. + 'iPad' => 'iPad|iPad.*Mobile', + // Removed |^.*Android.*Nexus(?!(?:Mobile).)*$ + // @see #442 + 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)', + 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T815|SM-T360|SM-T533|SM-T113|SM-T335|SM-T715|SM-T560|SM-T670|SM-T677|SM-T377|SM-T567|SM-T357T|SM-T555|SM-T561|SM-T713|SM-T719|SM-T813|SM-T819|SM-T580|SM-T355Y|SM-T280|SM-T817A|SM-T820|SM-W700|SM-P580|SM-T587', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone. + // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html + 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI|KFARWI|KFFOWI|KFGIWI|KFMEWI)\b|Android.*Silk/[0-9.]+ like Chrome/[0-9.]+ (?!Mobile)', + // Only the Surface tablets with Windows RT are considered mobile. + // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx + 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)', + // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT + 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10', + // Watch out for PadFone, see #132. + // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/ + 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K011 | K017 | K01E |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C|P01Y|PO1MA|P01Z', + 'BlackBerryTablet' => 'PlayBook|RIM Tablet', + 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410', + 'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617', + 'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2', + // http://www.acer.ro/ac/ro/RO/content/drivers + // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer) + // http://us.acer.com/ac/en/US/content/group/tablets + // http://www.acer.de/ac/de/DE/content/models/tablets/ + // Can conflict with Micromax and Motorola phones codes. + 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b|\bA3-A20\b|\bA3-A30', + // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/ + // http://us.toshiba.com/tablets/tablet-finder + // http://www.toshiba.co.jp/regza/tablet/ + 'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO', + // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html + // http://www.lg.com/us/tablets + 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b', + 'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b', + // Prestigio Tablets http://www.prestigio.com/support + 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002', + // http://support.lenovo.com/en_GB/downloads/default.page?# + 'LenovoTablet' => 'Lenovo TAB|Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|YT3-X90L|YT3-X90F|YT3-X90X|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)', + // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets + 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7', + // http://www.yarvik.com/en/matrix/tablets/ + 'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b', + 'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB', + 'ArnovaTablet' => '97G4|AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2', + // http://www.intenso.de/kategorie_en.php?kategorie=33 + // @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate + 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004', + // IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/ + 'IRUTablet' => 'M702pro', + 'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b', + // http://www.e-boda.ro/tablete-pc.html + 'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)', + // http://www.allview.ro/produse/droseries/lista-tablete-pc/ + 'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)', + // http://wiki.archosfans.com/index.php?title=Main_Page + // @note Rewrite the regex format after we add more UAs. + 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|c|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b', + // http://www.ainol.com/plugin.php?identifier=ainol&module=product + 'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark', + 'NokiaLumiaTablet' => 'Lumia 2520', + // @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER + // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser + // http://www.sony.jp/support/tablet/ + 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31', + // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8 + 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b', + // db + http://www.cube-tablet.com/buy-products.html + 'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT', + // http://www.cobyusa.com/?p=pcat&pcat_id=3001 + 'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010', + // http://www.match.net.cn/products.asp + 'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733|MID4X10', + // http://www.msi.com/support + // @todo Research the Windows Tablets. + 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b', + // @todo http://www.kyoceramobile.com/support/drivers/ + // 'KyoceraTablet' => null, + // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/ + // 'IntextTablet' => null, + // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets) + // http://www.imp3.net/14/show.php?itemid=20454 + 'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)', + // http://www.rock-chips.com/index.php?do=prod&pid=2 + 'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A', + // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/ + 'FlyTablet' => 'IQ310|Fly Vision', + // http://www.bqreaders.com/gb/tablets-prices-sale.html + 'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris [E|M]10)|Maxwell.*Lite|Maxwell.*Plus', + // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290 + // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets) + 'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim', + // Nec or Medias Tab + 'NecTablet' => '\bN-06D|\bN-08D', + // Pantech Tablets: http://www.pantechusa.com/phones/ + 'PantechTablet' => 'Pantech.*P4100', + // Broncho Tablets: http://www.broncho.cn/ (hard to find) + 'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)', + // http://versusuk.com/support.html + 'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b', + // http://www.zync.in/index.php/our-products/tablet-phablets + 'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900', + // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/ + 'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA', + // https://www.nabitablet.com/ + 'NabiTablet' => 'Android.*\bNabi', + 'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build', + // French Danew Tablets http://www.danew.com/produits-tablette.php + 'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b', + // Texet Tablets and Readers http://www.texet.ru/tablet/ + 'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE', + // Avoid detecting 'PLAYSTATION 3' as mobile. + 'PlaystationTablet' => 'Playstation.*(Portable|Vita)', + // http://www.trekstor.de/surftabs.html + 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab', + // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets + 'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b', + // http://www.advandigital.com/index.php?link=content-product&jns=JP001 + // because of the short codenames we have to include whitespaces to reduce the possible conflicts. + 'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ', + // http://www.danytech.com/category/tablet-pc + 'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1', + // http://www.galapad.net/product.html + 'GalapadTablet' => 'Android.*\bG1\b', + // http://www.micromaxinfo.com/tablet/funbook + 'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b', + // http://www.karbonnmobiles.com/products_tablet.php + 'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b', + // http://www.myallfine.com/Products.asp + 'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide', + // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr= + 'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b', + // http://www.yonesnav.com/products/products.php + 'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026', + // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001 + // China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html) + 'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503', + // http://www.gloryunion.cn/products.asp + // http://www.allwinnertech.com/en/apply/mobile.html + // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB) + // @todo: Softwiner tablets? + // aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions. + 'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G + // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118 + 'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10', + // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/ + // @todo: add more tests. + 'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)', + // http://hclmetablet.com/India/index.php + 'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync', + // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html + 'DPSTablet' => 'DPS Dream 9|DPS Dual 7', + // http://www.visture.com/index.asp + 'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10', + // http://www.mijncresta.nl/tablet + 'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989', + // MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309 + 'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b', + // Concorde tab + 'ConcordeTablet' => 'Concorde([ ]+)?Tab|ConCorde ReadMan', + // GoClever Tablets - http://www.goclever.com/uk/products,c1/tablet,c5/ + 'GoCleverTablet' => 'GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042', + // Modecom Tablets - http://www.modecom.eu/tablets/portal/ + 'ModecomTablet' => 'FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003', + // Vonino Tablets - http://www.vonino.eu/tablets + 'VoninoTablet' => '\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\bQ8\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\b', + // ECS Tablets - http://www.ecs.com.tw/ECSWebSite/Product/Product_Tablet_List.aspx?CategoryID=14&MenuID=107&childid=M_107&LanID=0 + 'ECSTablet' => 'V07OT2|TM105A|S10OT1|TR10CS1', + // Storex Tablets - http://storex.fr/espace_client/support.html + // @note: no need to add all the tablet codes since they are guided by the first regex. + 'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab', + // Generic Vodafone tablets. + 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7|VF-1497', + // French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb + // Aka: http://www.essentielb.fr/ + 'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2', + // Ross & Moor - http://ross-moor.ru/ + 'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711', + // i-mobile http://product.i-mobilephone.com/Mobile_Device + 'iMobileTablet' => 'i-mobile i-note', + // http://www.tolino.de/de/vergleichen/ + 'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine', + // AudioSonic - a Kmart brand + // http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1 + 'AudioSonicTablet' => '\bC-22Q|T7-QC|T-17B|T-17P\b', + // AMPE Tablets - http://www.ampe.com.my/product-category/tablets/ + // @todo: add them gradually to avoid conflicts. + 'AMPETablet' => 'Android.* A78 ', + // Skk Mobile - http://skkmobile.com.ph/product_tablets.php + 'SkkTablet' => 'Android.* (SKYPAD|PHOENIX|CYCLOPS)', + // Tecno Mobile (only tablet) - http://www.tecno-mobile.com/index.php/product?filterby=smart&list_order=all&page=1 + 'TecnoTablet' => 'TECNO P9', + // JXD (consoles & tablets) - http://jxd.hk/products.asp?selectclassid=009008&clsid=3 + 'JXDTablet' => 'Android.* \b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\b', + // i-Joy tablets - http://www.i-joy.es/en/cat/products/tablets/ + 'iJoyTablet' => 'Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)', + // http://www.intracon.eu/tablet + 'FX2Tablet' => 'FX2 PAD7|FX2 PAD10', + // http://www.xoro.de/produkte/ + // @note: Might be the same brand with 'Simply tablets' + 'XoroTablet' => 'KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151', + // http://www1.viewsonic.com/products/computing/tablets/ + 'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a', + // http://www.odys.de/web/internet-tablet_en.html + 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10', + // http://www.captiva-power.de/products.html#tablets-en + 'CaptivaTablet' => 'CAPTIVA PAD', + // IconBIT - http://www.iconbit.com/products/tablets/ + 'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S', + // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63 + 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi', + // Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price + 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+', + 'JaytechTablet' => 'TPC-PA762', + 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010', + // http://www.digma.ru/support/download/ + // @todo: Ebooks also (if requested) + 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b', + // http://www.evolioshop.com/ro/tablete-pc.html + // http://www.evolio.ro/support/downloads_static.html?cat=2 + // @todo: Research some more + 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b', + // @todo http://www.lavamobiles.com/tablets-data-cards + 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b', + // http://www.breezetablet.com/ + 'AocTablet' => 'MW0811|MW0812|MW0922|MTK8382|MW1031|MW0831|MW0821|MW0931|MW0712', + // http://www.mpmaneurope.com/en/products/internet-tablets-14/android-tablets-14/ + 'MpmanTablet' => 'MP11 OCTA|MP10 OCTA|MPQC1114|MPQC1004|MPQC994|MPQC974|MPQC973|MPQC804|MPQC784|MPQC780|\bMPG7\b|MPDCG75|MPDCG71|MPDC1006|MP101DC|MPDC9000|MPDC905|MPDC706HD|MPDC706|MPDC705|MPDC110|MPDC100|MPDC99|MPDC97|MPDC88|MPDC8|MPDC77|MP709|MID701|MID711|MID170|MPDC703|MPQC1010', + // https://www.celkonmobiles.com/?_a=categoryphones&sid=2 + 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b', + // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab + 'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b', + // http://www.mi.com/en + 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b', + // http://www.nbru.cn/index.html + 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One', + // http://navroad.com/products/produkty/tablety/ + 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI', + // http://leader-online.com/new_site/product-category/tablets/ + // http://www.leader-online.net.au/List/Tablet + 'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100', + // http://www.datawind.com/ubislate/ + 'UbislateTablet' => 'UbiSlate[\s]?7C', + // http://www.pocketbook-int.com/ru/support + 'PocketBookTablet' => 'Pocketbook', + // http://www.kocaso.com/product_tablet.html + 'KocasoTablet' => '\b(TB-1207)\b', + // http://global.hisense.com/product/asia/tablet/Sero7/201412/t20141215_91832.htm + 'HisenseTablet' => '\b(F5281|E2371)\b', + // http://www.tesco.com/direct/hudl/ + 'Hudl' => 'Hudl HT7S3|Hudl 2', + // http://www.telstra.com.au/home-phone/thub-2/ + 'TelstraTablet' => 'T-Hub2', + 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bTP750\b' + ); + + /** + * List of mobile Operating Systems. + * + * @var array + */ + protected static $operatingSystems = array( + 'AndroidOS' => 'Android', + 'BlackBerryOS' => 'blackberry|\bBB10\b|rim tablet os', + 'PalmOS' => 'PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino', + 'SymbianOS' => 'Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\bS60\b', + // @reference: http://en.wikipedia.org/wiki/Windows_Mobile + 'WindowsMobileOS' => 'Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;', + // @reference: http://en.wikipedia.org/wiki/Windows_Phone + // http://wifeng.cn/?r=blog&a=view&id=106 + // http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx + // http://msdn.microsoft.com/library/ms537503.aspx + // https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx + 'WindowsPhoneOS' => 'Windows Phone 10.0|Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;', + 'iOS' => '\biPhone.*Mobile|\biPod|\biPad', + // http://en.wikipedia.org/wiki/MeeGo + // @todo: research MeeGo in UAs + 'MeeGoOS' => 'MeeGo', + // http://en.wikipedia.org/wiki/Maemo + // @todo: research Maemo in UAs + 'MaemoOS' => 'Maemo', + 'JavaOS' => 'J2ME/|\bMIDP\b|\bCLDC\b', // '|Java/' produces bug #135 + 'webOS' => 'webOS|hpwOS', + 'badaOS' => '\bBada\b', + 'BREWOS' => 'BREW', + ); + + /** + * List of mobile User Agents. + * + * IMPORTANT: This is a list of only mobile browsers. + * Mobile Detect 2.x supports only mobile browsers, + * it was never designed to detect all browsers. + * The change will come in 2017 in the 3.x release for PHP7. + * + * @var array + */ + protected static $browsers = array( + //'Vivaldi' => 'Vivaldi', + // @reference: https://developers.google.com/chrome/mobile/docs/user-agent + 'Chrome' => '\bCrMo\b|CriOS|Android.*Chrome/[.0-9]* (Mobile)?', + 'Dolfin' => '\bDolfin\b', + 'Opera' => 'Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR/[0-9.]+|Coast/[0-9.]+', + 'Skyfire' => 'Skyfire', + 'Edge' => 'Mobile Safari/[.0-9]* Edge', + 'IE' => 'IEMobile|MSIEMobile', // |Trident/[.0-9]+ + 'Firefox' => 'fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile|FxiOS', + 'Bolt' => 'bolt', + 'TeaShark' => 'teashark', + 'Blazer' => 'Blazer', + // @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3 + 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari', + // http://en.wikipedia.org/wiki/Midori_(web_browser) + //'Midori' => 'midori', + //'Tizen' => 'Tizen', + 'UCBrowser' => 'UC.*Browser|UCWEB', + 'baiduboxapp' => 'baiduboxapp', + 'baidubrowser' => 'baidubrowser', + // https://github.com/serbanghita/Mobile-Detect/issues/7 + 'DiigoBrowser' => 'DiigoBrowser', + // http://www.puffinbrowser.com/index.php + 'Puffin' => 'Puffin', + // http://mercury-browser.com/index.html + 'Mercury' => '\bMercury\b', + // http://en.wikipedia.org/wiki/Obigo_Browser + 'ObigoBrowser' => 'Obigo', + // http://en.wikipedia.org/wiki/NetFront + 'NetFront' => 'NF-Browser', + // @reference: http://en.wikipedia.org/wiki/Minimo + // http://en.wikipedia.org/wiki/Vision_Mobile_Browser + 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger', + // @reference: https://en.wikipedia.org/wiki/Pale_Moon_(web_browser) + 'PaleMoon' => 'Android.*PaleMoon|Mobile.*PaleMoon', + ); + + /** + * Utilities. + * + * @var array + */ + protected static $utilities = array( + // Experimental. When a mobile device wants to switch to 'Desktop Mode'. + // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/ + // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011 + // https://developers.facebook.com/docs/sharing/best-practices + 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|YandexMobileBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom', + 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2', + 'DesktopMode' => 'WPDesktop', + 'TV' => 'SonyDTV|HbbTV', // experimental + 'WebKit' => '(webkit)[ /]([\w.]+)', + // @todo: Include JXD consoles. + 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b', + 'Watch' => 'SM-V700', + ); + + /** + * All possible HTTP headers that represent the + * User-Agent string. + * + * @var array + */ + protected static $uaHttpHeaders = array( + // The default User-Agent string. + 'HTTP_USER_AGENT', + // Header can occur on devices using Opera Mini. + 'HTTP_X_OPERAMINI_PHONE_UA', + // Vodafone specific header: http://www.seoprinciple.com/mobile-web-community-still-angry-at-vodafone/24/ + 'HTTP_X_DEVICE_USER_AGENT', + 'HTTP_X_ORIGINAL_USER_AGENT', + 'HTTP_X_SKYFIRE_PHONE', + 'HTTP_X_BOLT_PHONE_UA', + 'HTTP_DEVICE_STOCK_UA', + 'HTTP_X_UCBROWSER_DEVICE_UA' + ); + + /** + * The individual segments that could exist in a User-Agent string. VER refers to the regular + * expression defined in the constant self::VER. + * + * @var array + */ + protected static $properties = array( + + // Build + 'Mobile' => 'Mobile/[VER]', + 'Build' => 'Build/[VER]', + 'Version' => 'Version/[VER]', + 'VendorID' => 'VendorID/[VER]', + + // Devices + 'iPad' => 'iPad.*CPU[a-z ]+[VER]', + 'iPhone' => 'iPhone.*CPU[a-z ]+[VER]', + 'iPod' => 'iPod.*CPU[a-z ]+[VER]', + //'BlackBerry' => array('BlackBerry[VER]', 'BlackBerry [VER];'), + 'Kindle' => 'Kindle/[VER]', + + // Browser + 'Chrome' => array('Chrome/[VER]', 'CriOS/[VER]', 'CrMo/[VER]'), + 'Coast' => array('Coast/[VER]'), + 'Dolfin' => 'Dolfin/[VER]', + // @reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox + 'Firefox' => array('Firefox/[VER]', 'FxiOS/[VER]'), + 'Fennec' => 'Fennec/[VER]', + // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx + // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx + 'Edge' => 'Edge/[VER]', + 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'), + // http://en.wikipedia.org/wiki/NetFront + 'NetFront' => 'NetFront/[VER]', + 'NokiaBrowser' => 'NokiaBrowser/[VER]', + 'Opera' => array( ' OPR/[VER]', 'Opera Mini/[VER]', 'Version/[VER]' ), + 'Opera Mini' => 'Opera Mini/[VER]', + 'Opera Mobi' => 'Version/[VER]', + 'UC Browser' => 'UC Browser[VER]', + 'MQQBrowser' => 'MQQBrowser/[VER]', + 'MicroMessenger' => 'MicroMessenger/[VER]', + 'baiduboxapp' => 'baiduboxapp/[VER]', + 'baidubrowser' => 'baidubrowser/[VER]', + 'SamsungBrowser' => 'SamsungBrowser/[VER]', + 'Iron' => 'Iron/[VER]', + // @note: Safari 7534.48.3 is actually Version 5.1. + // @note: On BlackBerry the Version is overwriten by the OS. + 'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ), + 'Skyfire' => 'Skyfire/[VER]', + 'Tizen' => 'Tizen/[VER]', + 'Webkit' => 'webkit[ /][VER]', + 'PaleMoon' => 'PaleMoon/[VER]', + + // Engine + 'Gecko' => 'Gecko/[VER]', + 'Trident' => 'Trident/[VER]', + 'Presto' => 'Presto/[VER]', + 'Goanna' => 'Goanna/[VER]', + + // OS + 'iOS' => ' \bi?OS\b [VER][ ;]{1}', + 'Android' => 'Android [VER]', + 'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'), + 'BREW' => 'BREW [VER]', + 'Java' => 'Java/[VER]', + // @reference: http://windowsteamblog.com/windows_phone/b/wpdev/archive/2011/08/29/introducing-the-ie9-on-windows-phone-mango-user-agent-string.aspx + // @reference: http://en.wikipedia.org/wiki/Windows_NT#Releases + 'Windows Phone OS' => array( 'Windows Phone OS [VER]', 'Windows Phone [VER]'), + 'Windows Phone' => 'Windows Phone [VER]', + 'Windows CE' => 'Windows CE/[VER]', + // http://social.msdn.microsoft.com/Forums/en-US/windowsdeveloperpreviewgeneral/thread/6be392da-4d2f-41b4-8354-8dcee20c85cd + 'Windows NT' => 'Windows NT [VER]', + 'Symbian' => array('SymbianOS/[VER]', 'Symbian/[VER]'), + 'webOS' => array('webOS/[VER]', 'hpwOS/[VER];'), + ); + + /** + * Construct an instance of this class. + * + * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored. + * If left empty, will use the global _SERVER['HTTP_*'] vars instead. + * @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT + * from the $headers array instead. + */ + public function __construct( + array $headers = null, + $userAgent = null + ) { + $this->setHttpHeaders($headers); + $this->setUserAgent($userAgent); + } + + /** + * Get the current script version. + * This is useful for the demo.php file, + * so people can check on what version they are testing + * for mobile devices. + * + * @return string The version number in semantic version format. + */ + public static function getScriptVersion() + { + return self::VERSION; + } + + /** + * Set the HTTP Headers. Must be PHP-flavored. This method will reset existing headers. + * + * @param array $httpHeaders The headers to set. If null, then using PHP's _SERVER to extract + * the headers. The default null is left for backwards compatibility. + */ + public function setHttpHeaders($httpHeaders = null) + { + // use global _SERVER if $httpHeaders aren't defined + if (!is_array($httpHeaders) || !count($httpHeaders)) { + $httpHeaders = $_SERVER; + } + + // clear existing headers + $this->httpHeaders = array(); + + // Only save HTTP headers. In PHP land, that means only _SERVER vars that + // start with HTTP_. + foreach ($httpHeaders as $key => $value) { + if (substr($key, 0, 5) === 'HTTP_') { + $this->httpHeaders[$key] = $value; + } + } + + // In case we're dealing with CloudFront, we need to know. + $this->setCfHeaders($httpHeaders); + } + + /** + * Retrieves the HTTP headers. + * + * @return array + */ + public function getHttpHeaders() + { + return $this->httpHeaders; + } + + /** + * Retrieves a particular header. If it doesn't exist, no exception/error is caused. + * Simply null is returned. + * + * @param string $header The name of the header to retrieve. Can be HTTP compliant such as + * "User-Agent" or "X-Device-User-Agent" or can be php-esque with the + * all-caps, HTTP_ prefixed, underscore seperated awesomeness. + * + * @return string|null The value of the header. + */ + public function getHttpHeader($header) + { + // are we using PHP-flavored headers? + if (strpos($header, '_') === false) { + $header = str_replace('-', '_', $header); + $header = strtoupper($header); + } + + // test the alternate, too + $altHeader = 'HTTP_' . $header; + + //Test both the regular and the HTTP_ prefix + if (isset($this->httpHeaders[$header])) { + return $this->httpHeaders[$header]; + } elseif (isset($this->httpHeaders[$altHeader])) { + return $this->httpHeaders[$altHeader]; + } + + return null; + } + + public function getMobileHeaders() + { + return self::$mobileHeaders; + } + + /** + * Get all possible HTTP headers that + * can contain the User-Agent string. + * + * @return array List of HTTP headers. + */ + public function getUaHttpHeaders() + { + return self::$uaHttpHeaders; + } + + + /** + * Set CloudFront headers + * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device + * + * @param array $cfHeaders List of HTTP headers + * + * @return boolean If there were CloudFront headers to be set + */ + public function setCfHeaders($cfHeaders = null) { + // use global _SERVER if $cfHeaders aren't defined + if (!is_array($cfHeaders) || !count($cfHeaders)) { + $cfHeaders = $_SERVER; + } + + // clear existing headers + $this->cloudfrontHeaders = array(); + + // Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that + // start with cloudfront-. + $response = false; + foreach ($cfHeaders as $key => $value) { + if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') { + $this->cloudfrontHeaders[strtoupper($key)] = $value; + $response = true; + } + } + + return $response; + } + + /** + * Retrieves the cloudfront headers. + * + * @return array + */ + public function getCfHeaders() + { + return $this->cloudfrontHeaders; + } + + /** + * Set the User-Agent to be used. + * + * @param string $userAgent The user agent string to set. + * + * @return string|null + */ + public function setUserAgent($userAgent = null) + { + // Invalidate cache due to #375 + $this->cache = array(); + + if (false === empty($userAgent)) { + return $this->userAgent = $userAgent; + } else { + $this->userAgent = null; + foreach ($this->getUaHttpHeaders() as $altHeader) { + if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban) + $this->userAgent .= $this->httpHeaders[$altHeader] . " "; + } + } + + if (!empty($this->userAgent)) { + return $this->userAgent = trim($this->userAgent); + } + } + + if (count($this->getCfHeaders()) > 0) { + return $this->userAgent = 'Amazon CloudFront'; + } + return $this->userAgent = null; + } + + /** + * Retrieve the User-Agent. + * + * @return string|null The user agent if it's set. + */ + public function getUserAgent() + { + return $this->userAgent; + } + + /** + * Set the detection type. Must be one of self::DETECTION_TYPE_MOBILE or + * self::DETECTION_TYPE_EXTENDED. Otherwise, nothing is set. + * + * @deprecated since version 2.6.9 + * + * @param string $type The type. Must be a self::DETECTION_TYPE_* constant. The default + * parameter is null which will default to self::DETECTION_TYPE_MOBILE. + */ + public function setDetectionType($type = null) + { + if ($type === null) { + $type = self::DETECTION_TYPE_MOBILE; + } + + if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) { + return; + } + + $this->detectionType = $type; + } + + public function getMatchingRegex() + { + return $this->matchingRegex; + } + + public function getMatchesArray() + { + return $this->matchesArray; + } + + /** + * Retrieve the list of known phone devices. + * + * @return array List of phone devices. + */ + public static function getPhoneDevices() + { + return self::$phoneDevices; + } + + /** + * Retrieve the list of known tablet devices. + * + * @return array List of tablet devices. + */ + public static function getTabletDevices() + { + return self::$tabletDevices; + } + + /** + * Alias for getBrowsers() method. + * + * @return array List of user agents. + */ + public static function getUserAgents() + { + return self::getBrowsers(); + } + + /** + * Retrieve the list of known browsers. Specifically, the user agents. + * + * @return array List of browsers / user agents. + */ + public static function getBrowsers() + { + return self::$browsers; + } + + /** + * Retrieve the list of known utilities. + * + * @return array List of utilities. + */ + public static function getUtilities() + { + return self::$utilities; + } + + /** + * Method gets the mobile detection rules. This method is used for the magic methods $detect->is*(). + * + * @deprecated since version 2.6.9 + * + * @return array All the rules (but not extended). + */ + public static function getMobileDetectionRules() + { + static $rules; + + if (!$rules) { + $rules = array_merge( + self::$phoneDevices, + self::$tabletDevices, + self::$operatingSystems, + self::$browsers + ); + } + + return $rules; + + } + + /** + * Method gets the mobile detection rules + utilities. + * The reason this is separate is because utilities rules + * don't necessary imply mobile. This method is used inside + * the new $detect->is('stuff') method. + * + * @deprecated since version 2.6.9 + * + * @return array All the rules + extended. + */ + public function getMobileDetectionRulesExtended() + { + static $rules; + + if (!$rules) { + // Merge all rules together. + $rules = array_merge( + self::$phoneDevices, + self::$tabletDevices, + self::$operatingSystems, + self::$browsers, + self::$utilities + ); + } + + return $rules; + } + + /** + * Retrieve the current set of rules. + * + * @deprecated since version 2.6.9 + * + * @return array + */ + public function getRules() + { + if ($this->detectionType == self::DETECTION_TYPE_EXTENDED) { + return self::getMobileDetectionRulesExtended(); + } else { + return self::getMobileDetectionRules(); + } + } + + /** + * Retrieve the list of mobile operating systems. + * + * @return array The list of mobile operating systems. + */ + public static function getOperatingSystems() + { + return self::$operatingSystems; + } + + /** + * Check the HTTP headers for signs of mobile. + * This is the fastest mobile check possible; it's used + * inside isMobile() method. + * + * @return bool + */ + public function checkHttpHeadersForMobile() + { + + foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) { + if (isset($this->httpHeaders[$mobileHeader])) { + if (is_array($matchType['matches'])) { + foreach ($matchType['matches'] as $_match) { + if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) { + return true; + } + } + + return false; + } else { + return true; + } + } + } + + return false; + + } + + /** + * Magic overloading method. + * + * @method boolean is[...]() + * @param string $name + * @param array $arguments + * @return mixed + * @throws BadMethodCallException when the method doesn't exist and doesn't start with 'is' + */ + public function __call($name, $arguments) + { + // make sure the name starts with 'is', otherwise + if (substr($name, 0, 2) !== 'is') { + throw new BadMethodCallException("No such method exists: $name"); + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + $key = substr($name, 2); + + return $this->matchUAAgainstKey($key); + } + + /** + * Find a detection rule that matches the current User-agent. + * + * @param null $userAgent deprecated + * @return boolean + */ + protected function matchDetectionRulesAgainstUA($userAgent = null) + { + // Begin general search. + foreach ($this->getRules() as $_regex) { + if (empty($_regex)) { + continue; + } + + if ($this->match($_regex, $userAgent)) { + return true; + } + } + + return false; + } + + /** + * Search for a certain key in the rules array. + * If the key is found then try to match the corresponding + * regex against the User-Agent. + * + * @param string $key + * + * @return boolean + */ + protected function matchUAAgainstKey($key) + { + // Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc. + $key = strtolower($key); + if (false === isset($this->cache[$key])) { + + // change the keys to lower case + $_rules = array_change_key_case($this->getRules()); + + if (false === empty($_rules[$key])) { + $this->cache[$key] = $this->match($_rules[$key]); + } + + if (false === isset($this->cache[$key])) { + $this->cache[$key] = false; + } + } + + return $this->cache[$key]; + } + + /** + * Check if the device is mobile. + * Returns true if any type of mobile device detected, including special ones + * @param null $userAgent deprecated + * @param null $httpHeaders deprecated + * @return bool + */ + public function isMobile($userAgent = null, $httpHeaders = null) + { + + if ($httpHeaders) { + $this->setHttpHeaders($httpHeaders); + } + + if ($userAgent) { + $this->setUserAgent($userAgent); + } + + // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' + if ($this->getUserAgent() === 'Amazon CloudFront') { + $cfHeaders = $this->getCfHeaders(); + if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') { + return true; + } + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + if ($this->checkHttpHeadersForMobile()) { + return true; + } else { + return $this->matchDetectionRulesAgainstUA(); + } + + } + + /** + * Check if the device is a tablet. + * Return true if any type of tablet device is detected. + * + * @param string $userAgent deprecated + * @param array $httpHeaders deprecated + * @return bool + */ + public function isTablet($userAgent = null, $httpHeaders = null) + { + // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront' + if ($this->getUserAgent() === 'Amazon CloudFront') { + $cfHeaders = $this->getCfHeaders(); + if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') { + return true; + } + } + + $this->setDetectionType(self::DETECTION_TYPE_MOBILE); + + foreach (self::$tabletDevices as $_regex) { + if ($this->match($_regex, $userAgent)) { + return true; + } + } + + return false; + } + + /** + * This method checks for a certain property in the + * userAgent. + * @todo: The httpHeaders part is not yet used. + * + * @param string $key + * @param string $userAgent deprecated + * @param string $httpHeaders deprecated + * @return bool|int|null + */ + public function is($key, $userAgent = null, $httpHeaders = null) + { + // Set the UA and HTTP headers only if needed (eg. batch mode). + if ($httpHeaders) { + $this->setHttpHeaders($httpHeaders); + } + + if ($userAgent) { + $this->setUserAgent($userAgent); + } + + $this->setDetectionType(self::DETECTION_TYPE_EXTENDED); + + return $this->matchUAAgainstKey($key); + } + + /** + * Some detection rules are relative (not standard), + * because of the diversity of devices, vendors and + * their conventions in representing the User-Agent or + * the HTTP headers. + * + * This method will be used to check custom regexes against + * the User-Agent string. + * + * @param $regex + * @param string $userAgent + * @return bool + * + * @todo: search in the HTTP headers too. + */ + public function match($regex, $userAgent = null) + { + $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches); + // If positive match is found, store the results for debug. + if ($match) { + $this->matchingRegex = $regex; + $this->matchesArray = $matches; + } + + return $match; + } + + /** + * Get the properties array. + * + * @return array + */ + public static function getProperties() + { + return self::$properties; + } + + /** + * Prepare the version number. + * + * @todo Remove the error supression from str_replace() call. + * + * @param string $ver The string version, like "2.6.21.2152"; + * + * @return float + */ + public function prepareVersionNo($ver) + { + $ver = str_replace(array('_', ' ', '/'), '.', $ver); + $arrVer = explode('.', $ver, 2); + + if (isset($arrVer[1])) { + $arrVer[1] = @str_replace('.', '', $arrVer[1]); // @todo: treat strings versions. + } + + return (float) implode('.', $arrVer); + } + + /** + * Check the version of the given property in the User-Agent. + * Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31) + * + * @param string $propertyName The name of the property. See self::getProperties() array + * keys for all possible properties. + * @param string $type Either self::VERSION_TYPE_STRING to get a string value or + * self::VERSION_TYPE_FLOAT indicating a float value. This parameter + * is optional and defaults to self::VERSION_TYPE_STRING. Passing an + * invalid parameter will default to the this type as well. + * + * @return string|float The version of the property we are trying to extract. + */ + public function version($propertyName, $type = self::VERSION_TYPE_STRING) + { + if (empty($propertyName)) { + return false; + } + + // set the $type to the default if we don't recognize the type + if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) { + $type = self::VERSION_TYPE_STRING; + } + + $properties = self::getProperties(); + + // Check if the property exists in the properties array. + if (true === isset($properties[$propertyName])) { + + // Prepare the pattern to be matched. + // Make sure we always deal with an array (string is converted). + $properties[$propertyName] = (array) $properties[$propertyName]; + + foreach ($properties[$propertyName] as $propertyMatchString) { + + $propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString); + + // Identify and extract the version. + preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match); + + if (false === empty($match[1])) { + $version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]); + + return $version; + } + + } + + } + + return false; + } + + /** + * Retrieve the mobile grading, using self::MOBILE_GRADE_* constants. + * + * @return string One of the self::MOBILE_GRADE_* constants. + */ + public function mobileGrade() + { + $isMobile = $this->isMobile(); + + if ( + // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0) + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 || + + // Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5) + // Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM + // Android 4.0 (ICS) - Tested on a Galaxy Nexus. Note: transition performance can be poor on upgraded devices + // Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7 + ( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) || + + // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8) + $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 || + + // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10) + $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 || + // Blackberry Playbook (1.0-2.0) - Tested on PlayBook + $this->match('Playbook.*Tablet') || + + // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0) + ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) || + // Palm WebOS 3.0 - Tested on HP TouchPad + $this->match('hp.*TouchPad') || + + // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices + ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) || + + // Chrome for Android - Tested on Android 4.0, 4.1 device + ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) || + + // Skyfire 4.1 - Tested on Android 2.3 device + ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || + + // Opera Mobile 11.5-12: Tested on Android 2.3 + ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) || + + // Meego 1.2 - Tested on Nokia 950 and N9 + $this->is('MeeGoOS') || + + // Tizen (pre-release) - Tested on early hardware + $this->is('Tizen') || + + // Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser + // @todo: more tests here! + $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 || + + // UC Browser - Tested on Android 2.3 device + ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) || + + // Kindle 3 and Fire - Tested on the built-in WebKit browser for each + ( $this->match('Kindle Fire') || + $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) || + + // Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet + $this->is('AndroidOS') && $this->is('NookTablet') || + + // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7 + $this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile || + + // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7 + $this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile || + + // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7 + $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile || + + // Internet Explorer 7-9 - Tested on Windows XP, Vista and 7 + $this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile || + + // Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7 + $this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile + ){ + return self::MOBILE_GRADE_A; + } + + if ( + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 || + + // Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770 + $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 || + + //Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3 + ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 && + ($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) || + + // Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1) + $this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') || + + // @todo: report this (tested on Nokia N71) + $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS') + ){ + return self::MOBILE_GRADE_B; + } + + if ( + // Blackberry 4.x - Tested on the Curve 8330 + $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 || + // Windows Mobile - Tested on the HTC Leo (WinMo 5.2) + $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 || + + // Tested on original iPhone (3.1), iPhone 3 (3.2) + $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 || + $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 || + $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 || + + // Internet Explorer 7 and older - Tested on Windows XP + $this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile + ){ + return self::MOBILE_GRADE_C; + } + + // All older smartphone platforms and featurephones - Any device that doesn't support media queries + // will receive the basic, C grade experience. + return self::MOBILE_GRADE_C; + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/activecampaign.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/activecampaign.php new file mode 100644 index 00000000..7d3cca2e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/activecampaign.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ActiveCampaign instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/campaignmonitor.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/campaignmonitor.php new file mode 100644 index 00000000..20427d25 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/campaignmonitor.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\CampaignMonitor instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/constantcontact.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/constantcontact.php new file mode 100644 index 00000000..97c4e6f9 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/constantcontact.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ConstantContact instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/convertkit.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/convertkit.php new file mode 100644 index 00000000..f0a3d8f3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/convertkit.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ConvertKit instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/drip.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/drip.php new file mode 100644 index 00000000..6051afd1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/drip.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\Drip instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/elasticemail.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/elasticemail.php new file mode 100644 index 00000000..f78691d8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/elasticemail.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ElasticEmail instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/getresponse.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/getresponse.php new file mode 100644 index 00000000..cac36439 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/getresponse.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\GetResponse instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/hubspot.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/hubspot.php new file mode 100644 index 00000000..69e43587 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/hubspot.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\HubSpot instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/icontact.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/icontact.php new file mode 100644 index 00000000..76f9a71d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/icontact.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\iContact instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/mailchimp.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/mailchimp.php new file mode 100644 index 00000000..86fbb0bb --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/mailchimp.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\MailChimp instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/recaptcha.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/recaptcha.php new file mode 100644 index 00000000..0bd24e9b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/recaptcha.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ReCaptcha instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/salesforce.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/salesforce.php new file mode 100644 index 00000000..2f365b9d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/salesforce.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\SalesForce instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/sendinblue.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/sendinblue.php new file mode 100644 index 00000000..7c9032a8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/sendinblue.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\SendInBlue instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/zoho.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/zoho.php new file mode 100644 index 00000000..24d1f657 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/zoho.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ZoHo instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/zohocrm.php b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/zohocrm.php new file mode 100644 index 00000000..20e76e49 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/helpers/wrappers/zohocrm.php @@ -0,0 +1,15 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later + */ + +/** + * This file is deprecated. Use \NRFramework\Integrations\ZohoCRM instead. + */ + +// No direct access +defined('_JEXEC') or die; \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/language/bg-BG/bg-BG.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/bg-BG/bg-BG.plg_system_nrframework.ini new file mode 100644 index 00000000..7b82d850 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/bg-BG/bg-BG.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Системни - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework – използва се от Tassos.gr разширенията" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Игнориране" +NR_INCLUDE="Включване" +NR_EXCLUDE="Изключване" +NR_SELECTION="Избор" +NR_ASSIGN_MENU_NOITEM="Не включва ID" +NR_ASSIGN_MENU_NOITEM_DESC="Присвоява също и когато в URL адреса няма ID меню?" +NR_ASSIGN_MENU_CHILD="Също и върху дъщерни елементи " +NR_ASSIGN_MENU_CHILD_DESC="Също да присвои ли и на вложените елементи избраното меню?" +NR_COPY_OF="Копие на %s" +NR_ASSIGN_DATETIME_DESC="Целево насочване на посетителите въз основа на дата и час на вашия сървър" +NR_DATETIME="Дата и час" +NR_TIME="Час" +NR_DATE="Дата" +NR_DATETIME_DESC="Въведете датата за автоматично публикуване / отмяна на публикуването" +NR_START_PUBLISHING="Време начало" +NR_START_PUBLISHING_DESC="Въведете датата и/или час, за начало на публикуването" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Въведете дата и/или час за край на публикуването" +NR_DATETIME_NOTE="За дата и час използват стойностите от вашия сървър, а не тази на системете на посетителите." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP код" +NR_ASSIGN_PHP_DESC="Въведете фрагмнт от PHP кода за проверка." +NR_ASSIGN_PHP_DESC2="Целево насочено към потребители, оценяващ произволен PHP код. Кодът трябва да връща стойност true или false.

        Например:
        return ($ user-> name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Време на сайта" +NR_SECONDS="Секунди" +NR_ASSIGN_TIMEONSITE_DESC="Въведете продължителност в секунди, за да сравните с общото време на потребителя (продължителност на посещението), прекарано на целия ви сайт.

        Пример:
        Ако искате да покажете поле, след като потребителят е прекарал 3 минути на целия ви сайт, въведете 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Проследяване посетители, които разглеждат конкретни URL адреси" +NR_ASSIGN_URLS_DESC="Въведете (част от) URL адреси, за сравнение.
        Използвайте нов ред за всяко съвпадение." +NR_ASSIGN_URLS_LIST="URL съвпадения" +NR_ASSIGN_URLS_REGEX="Използване Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="Изберете, за да третирате стойността като регулярен израз, regular expressions." +NR_ASSIGN_LANGS="Език" +NR_ASSIGN_LANGS_DESC="Таргетирайте посетителите, които разглеждат уебсайта Ви на конкретен език" +NR_ASSIGN_LANGS_LIST_DESC="Изберете езици" +NR_ASSIGN_DEVICES="Устройство" +NR_ASSIGN_DEVICES_DESC2="Целево селектиране на потребители, които използват определени устройства, като мобилни, таблети или настолни." +NR_ASSIGN_DEVICES_DESC="Изберете устройства" +NR_ASSIGN_DEVICES_NOTE="Имайте предвид, че откриването по устройството не винаги е 100% точно. Потребителите могат да настроят браузъра си, за да имитират други устройства" +NR_MENU="Меню" +NR_MENU_ITEMS="Меню елемент" +NR_MENU_ITEMS_DESC="Целево селектиране на посетители, които разглеждат конкретни меню елементи" +NR_USERGROUP="Група потребители" +NR_ACCESSLEVEL="Група потребители" +NR_ACCESSLEVEL_DESC="Изберете Група потребители.

        Забележка: Ако искате да го направите публично, настройте Игнориране и не избирайте Обществено." +NR_SHOW_COPYRIGHT="Показва авторски права" +NR_SHOW_COPYRIGHT_DESC="Ако е избрана, информация за авторските права ще се показва в изгледите на администраторския панел. Разширенията на Tassos.gr никога не показват информация за авторското право или обратни връзки в сайта." +NR_WIDTH="Ширина" +NR_WIDTH_DESC="Въведете ширина в px, em или %

        Пример: 400px" +NR_HEIGHT="Височина" +NR_HEIGHT_DESC="Въведете височина в px, em или %

        Пример: 400px" +NR_PADDING="Отстъп" +NR_PADDING_DESC="Въведете отстъп в px, em или %

        Пример: 20px" +NR_MARGIN="Поле" +NR_MARGIN_DESC="CSS стил за поле 'margin' за генериране на пространство около блока. Задаване на размера на бялото пространство на полето в пиксели или в %.

        Пример 1: 25px
        Пример 2: 5%

        Посочване на полето за всяка страна [горе вдясно долу вляво]:

        Само горна страна: 25px 0 0 0
        Само дясна страна: 0 25px 0 0
        Само от долната страна: 0 0 25px 0
        Само от лявата страна: 0 0 0 25px" +NR_COLOR_HOVER="Цвят при 'hover'" +NR_COLOR="Цвят" +NR_COLOR_DESC="Определете цвят за 'hover' в HEX или RGBA формат. Появява се при задръжан курсор на мишката." +NR_TEXT_COLOR="Цвят на текста" +NR_BACKGROUND="Фон" +NR_BACKGROUND_COLOR="Цвят на фона" +NR_BACKGROUND_COLOR_DESC="Определете цвят на фона във формат HEX или RGBA. За да деактивирате въведете 'none'. За пълна прозрачност въведете 'transparent'." +NR_URL_SHORTENING_FAILED="Съкращаването на %s с %s е неуспешно. %s," +NR_EXPORT="Експорт" +NR_IMPORT="Импорт" +NR_PLEASE_CHOOSE_A_VALID_FILE="Моля, изберете валидно файлово име" +NR_IMPORT_ITEMS="Импорт на елементи" +NR_PUBLISH_ITEMS="Публикуване на елементи" +NR_AS_EXPORTED="Както е експортирано" +NR_TITLE="Заглавие" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing списък" +NR_ACYMAILING_LIST_DESC="Изберете AcyMailing списъци, в които да присвоите." +NR_ASSIGN_ACYMAILING_DESC="Таргетирайте посетители, които са се абонирали за орледелени списъци на AcyMailing" +NR_AKEEBASUBS="Абонаменти за Akeeba" +NR_AKEEBASUBS_LEVELS="Нива" +NR_AKEEBASUBS_LEVELS_DESC="Изберете ниво на Akeeba абонаменти, към което да абонирате." +NR_ASSIGN_AKEEBASUBS_DESC="Таргетира посетителите, които са се абонирали за конкретни Akeeba абонаменти" +NR_MATCH="Съвпадение" +NR_MATCH_DESC="Използваният метод на съвпадение за сравняване" +NR_ASSIGN_MATCHING_METHOD="Метод на съвпадение" +NR_ASSIGN_MATCHING_METHOD_DESC="Трябва ли всички или каквито и да било задания да бъдат съпоставени?

        Всички
        ще бъдат публикувани, ако всички по-долу задания са съвпадащи.

        Всички
        ще бъдат публикувани, ако се съвпадат всякакви (една или повече) по-долу зададените.
        Групите за задаване, където е избрано „Игнориране“, ще бъдат игнорирани." +NR_ANY="Който и да е" +NR_ASSIGN_REFERRER="Референтен URL адрес" +NR_ASSIGN_REFERRER_DESC2="Таргетирайте посетителите, които идват на Вашия сайт от конкретен източник на трафик" +NR_ASSIGN_REFERRER_DESC="Въведете по един референтен URL адрес на ред: Например:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Имайте предвид, че откриването на референтен URL не винаги е 100% точно. Някои сървъри могат да използват прокси, които премахват тази информация или тя може лесно да бъде подправена." +NR_PROFEATURE_HEADER="%s е PRO функция" +NR_PROFEATURE_DESC="За съжаление, %s не е във вашия план. Моля, надстройте до PRO плана, за да отключите тези функции." +NR_PROFEATURE_DISCOUNT="Бонус: %s ползвателите на безплатен план получават 20% отспъпка от редовната цена, която автоматично се прилага при плащане." +NR_ONLY_AVAILABLE_IN_PRO="Предлага се само в PRO версия" +NR_UPGRADE_TO_PRO="Надстройка до Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Надстройте до Pro версия за отключване" +NR_UPGRADE_TO_PRO_VERSION="Страхотно! Остава само една стъпка. Щракнете върху бутона по-долу, за да завършите надстройката до Pro версията." +NR_UNLOCK_PRO_FEATURE="Отключи Pro функция" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Отляво надясно" +NR_RIGHT_TO_LEFT="От дясно на ляво" +NR_BGIMAGE="Фоново изображение" +NR_BGIMAGE_DESC="Задава фоново изображение" +NR_BGIMAGE_FILE="Изображение" +NR_BGIMAGE_FILE_DESC="Изберете или качете файл за фоновото изображение." +NR_BGIMAGE_REPEAT="Повторение" +NR_BGIMAGE_REPEAT_DESC="Свойството background-repeat задава, ако / или как ще се повтори фоновото изображение. По подразбиране фоновото изображение се повтаря както вертикално, така и хоризонтално.

        Повторение: фоновото изображение ще се повтори вертикално и хоризонтално.

        Повторение-x: Фоновото изображение ще се повтори само хоризонтално.

        Повторение-у: Фоновото изображение ще се повтори само вертикално.

        Без-Повторение: фоновото изображение няма да се повтаря." +NR_BGIMAGE_SIZE="Размер" +NR_BGIMAGE_SIZE_DESC="Задайте размера на фоновото изображение.

        Авто: Фоновото изображение с неговата ширина и височина.

        Покритие: Мащабиране на фоновото изображение, така че фоновата област да бъде изцяло покрита от него. Някои части от фоновото изображение може да не се виждат.
        Контейнер: Мащабирайте изображението по такъв начин, че неговите ширина и височина да се вместят във видимата област.

        100% 100%: Разтегляне на фоновото изображение до пълно покриете областта на съдържанието." +NR_BGIMAGE_POSITION="Позиция" +NR_BGIMAGE_POSITION_DESC="Свойството background-position, задава началната позиция на фоново изображение. По подразбиране фоновото изображение се поставя в горния ляв ъгъл. Първата стойност е хоризонталното положение, а втората - вертикалното.

        Можете да използвате някоя от предварително зададените стойности или да въведете собствени в проценти: x% y% или в пиксели xPos yPos." +NR_RTL="Активиране на RTL" +NR_RTL_DESC="Посоката на четене на текста отдясно наляво е от съществено значение за езици като арабски, иврит, сирийски и таана." +NR_HORIZONTAL="Хоризонтално" +NR_VERTICAL="Вертиикално" +NR_FORM_ORIENTATION="Ориентация на формуляра" +NR_FORM_ORIENTATION_DESC="Изберете ориентация на формуляра" +NR_ASSIGN_CATEGORY="Категории" +NR_ASSIGN_CATEGORY_DESC="Изберете категории" +NR_ASSIGN_CATEGORY_CHILD="Също за дъщерни елементи" +NR_ASSIGN_CATEGORY_CHILD_DESC="Също така да се присвои ли избор и на дъщерните елементи?" +NR_NEW="Нов" +NR_LIST="Списък" +NR_DOCUMENTATION="Документация" +NR_KNOWLEDGEBASE="База знания" +NR_FAQ="FAQ" +NR_INFORMATION="Информация" +NR_EXTENSION="Разширение" +NR_VERSION="Версия" +NR_CHANGELOG="Дневник на промените" +; NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Ключът за изтегляне липсва" +NR_DOWNLOAD_KEY="Ключ за изтегляне" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="За да можете да актуализирате %s чрез актуализатора на Joomla, ще трябва да въведете своя Ключ за изтегляне в настройките на Novarain Framework Plugin разширението." +NR_DOWNLOAD_KEY_FIND="Намери Ключ за изтегляне" +NR_DOWNLOAD_KEY_UPDATE="Обновяване на Ключа за изтегляне" +NR_OK="OK" +NR_MISSING="Липсва" +NR_LICENSE="Лиценз" +NR_AUTHOR="Автор" +NR_FOLLOWME="Следвайте ме" +NR_FOLLOW="Следвай %s" +NR_TRANSLATE_INTEREST="Бихте ли се интересували да помогнете с превода на %s на вашия език?" +NR_TRANSIFEX_REQUEST="Изпратете запитване на Transifex" +NR_HELP_WITH_TRANSLATIONS="Помощ при преводи" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Разширени" +NR_USEGLOBAL="Използва Глобални" +NR_WEEKDAY="Ден от седмицата" +NR_MONTH="Месец" +NR_MONDAY="Понеделник" +NR_TUESDAY="Вторник" +NR_WEDNESDAY="Сряда" +NR_THURSDAY="Четвъртък" +NR_FRIDAY="Петък" +NR_SATURDAY="Събота" +NR_WEEKEND="Събота и Неделя" +NR_WEEKDAYS="Делнични дни" +NR_SUNDAY="Неделя" +NR_JANUARY="Януари" +NR_FEBRUARY="Февруари" +NR_MARCH="Март" +NR_APRIL="Април" +NR_MAY="Май" +NR_JUNE="Юни" +NR_JULY="Юли" +NR_AUGUST="Август" +NR_SEPTEMBER="Септември" +NR_OCTOBER="Октомври" +NR_NOVEMBER="Ноември" +NR_DECEMBER="Декември" +NR_NEVER="Никога" +NR_SECONDS="Секунди" +NR_MINUTES="Минути" +NR_HOURS="Часове" +NR_DAYS="Дни" +NR_SESSION="Сесия" +NR_EVER="Винаги" +NR_COOKIE="Биствитка" +NR_BOTH="И двете" +NR_NONE="Нищо" +NR_DESKTOPS="Декстоп" +NR_MOBILES="Мобилен" +NR_TABLETS="Таблет" +NR_PER_SESSION="В сесия" +NR_PER_DAY="На ден" +NR_PER_WEEK="В седмица" +NR_PER_MONTH="За месец" +NR_FOREVER="Завинаги" +NR_FEATURE_UNDER_DEV="Тази опция е в процес на разработка" +NR_LIKE_THIS_EXTENSION="Харесва ли ви това разширение?" +NR_LEAVE_A_REVIEW="Оставете отзив в JED" +NR_SUPPORT="Поддръжка" +NR_NEED_SUPPORT="Нуждаете се от поддръжка?" +NR_DROP_EMAIL="Пишете ми по имейл" +NR_READ_DOCUMENTATION="Прочетете документацията" +NR_COPYRIGHT="%s – Tassos.gr Всички права запазени" +NR_DASHBOARD="Табло" +NR_NAME="Име" +NR_WRONG_COORDINATES="Координатите, които сте предоставили, са невалидни" +NR_ENTER_COORDINATES="Ширина, дължина" +NR_NO_ITEMS_FOUND="Няма намерени елементи" +NR_ITEM_IDS="Няма ID-та на елементи" +NR_TOGGLE="Превключване" +NR_EXPAND="Разтваряне" +NR_COLLAPSE="Свиване" +NR_SELECTED="Избрани" +NR_MAXIMIZE="Максимизиране" +NR_MINIMIZE="Минимизиране" +NR_SELECTION="Избор" +NR_INSTALL="Инсталиране" +NR_INSTALL_NOW="Инсталирай сега" +NR_INSTALLED="Инсталирано" +NR_COMING_SOON="Очаквайте скоро" +NR_ROADMAP="Планирано" +NR_MEDIA_VERSIONING="Използвайте Медия версии" +NR_MEDIA_VERSIONING_DESC="Изберете, за да добавите номер на версията в края на медийните (js/css) URL адреси, за да накарате браузърите да заредят правилния файл." +NR_LOAD_JQUERY="Зарежда jQuery" +NR_LOAD_JQUERY_DESC="Изберете, за да заредите core jQuery script. Можете да деактивирате това, ако с Вашия шаблон имате конфликти, или други разширения зареждат собствена версия на jQuery." +NR_SELECT_CURRENCY="Изберете валута" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Кампания" +NR_ASSIGN_CONVERTFORMS_DESC="Целево селектира посетителите, които са се абонирали за конкретни ConvertForms кампании " +NR_CONVERTFORMS_LIST_DESC="Изберете ConvertForms кампании за назначаване." +NR_LEFT="Ляво" +NR_CENTER="Център" +NR_RIGHT="Дясно" +NR_BOTTOM="Долу" +NR_TOP="Горе" +NR_AUTO="Автоматично" +NR_CUSTOM="Персонализиран" +NR_UPLOAD="Качване" +NR_IMAGE="Изображение" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Избери изображение" +NR_IMAGE_SIZE_COVER="Обложка" +NR_IMAGE_SIZE_CONTAIN="Съдържа" +NR_REPEAT="Повторение" +NR_REPEAT_X="Повторение по Х" +NR_REPEAT_Y="Повторение по У" +NR_REPEAT_NO="Без повторение" +NR_FIELD_STATE_DESC="Задаване състояние на елемента" +NR_CREATED_DATE="Дата на създаване" +NR_CREATED_DATE_DESC="Датата, на която елементът е създаден" +NR_MODIFIFED_DATE="Дата на промяна" +NR_MODIFIFED_DATE_DESC="Датата, на която елементът е последно променен." +NR_CATEGORIES="Категория" +NR_CATEGORIES_DESC="Изберете категориите, в които да присвоите." +NR_ALSO_ON_CHILD_ITEMS="Също и върху дъщерни елементи " +NR_ALSO_ON_CHILD_ITEMS_DESC="Да се присвои ли също така и на вложените дъщерни елементи?" +NR_PAGE_TYPE="Тип страница" +NR_PAGE_TYPES="Типове страници" +NR_PAGE_TYPES_DESC="Изберете на кои типове страници назначаването да е активно." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +NR_CATEGORY_VIEW="Изглед на категория" +NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +NR_ARTICLES="Статии" +NR_ARTICLES_DESC="Изберете статиите, към които да назначите." +NR_ARTICLE="Статия" +NR_ARTICLE_AUTHORS="Автори" +NR_ARTICLE_AUTHORS_DESC="Изберете авторите, към които да назначите." +NR_ONLY="Само" +NR_OTHERS="Други" +NR_SMARTTAGS="Умни тагове" +NR_SMARTTAGS_SHOW="Покажи Умни тагове" +NR_SMARTTAGS_NOTFOUND="Не са открити Умни тагове" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Търси за Умни тагове" +NR_CONTACT_US="Свържете се с нас" +NR_FONT_COLOR="Цвят на шрифта" +NR_FONT_SIZE="Размер на шрифта" +NR_FONT_SIZE_DESC="Изберете размер на шрифта в пиксели" +NR_TEXT="Текст" +NR_URL="URL адрес" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Активиране на предефиниране на изхода" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Разрешава изобразяването, когато оформлението на страницата (tmpl) е предефинирано и презаписано. Примери: tmpl=component or tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Активиране при предефинирането на формата" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Активира изобразяването на данни, когато форматът на страницата не е само от HTML. Примери: format=raw or format=json.." +NR_GEOLOCATING="Геолокация" +NR_GEOLOCATING_DESC="Геолокацията не винаги е 100% точна. Геолокацията се базира на IP адреса на посетителя. Не всички IP адреси са фиксирани или известни." +NR_CITY="Град" +NR_CITY_NAME="Име на град" +NR_CONDITION_CITY_DESC="Въведете име на град на английски. За въвеждане на повече градове, разделете ги със запетая." +NR_CONTINENT="Континент" +NR_REGION="Област" +NR_CONDITION_REGION_DESC="Стойността се състои от две части, двубуквеният код на ISO 3166-1 и регионалния код. Така че стойността трябва да бъде в следната форма: COUNTRY_CODE–REGION_CODE. За пълен списък с кодове на региони щракнете върху връзката Намери регионален код." +NR_ASSIGN_COUNTRIES="Страна" +NR_ASSIGN_COUNTRIES_DESC2="Селектира посетители, които са физически в конкретна държава" +NR_ASSIGN_COUNTRIES_DESC="Изберете държави" +NR_ASSIGN_CONTINENTS="Континент" +NR_ASSIGN_CONTINENTS_DESC="Изберете континенти" +NR_ASSIGN_CONTINENTS_DESC2="Целево селектира посетители, които са физически на определен континент" +NR_ICONTACT_ACCOUNTID_ERROR="IContact AccountID не може да бъде извлечен" +NR_TAG_CLIENTDEVICE="Тип устройство на посетителя" +NR_TAG_CLIENTOS="Операционна система на посетителя" +NR_TAG_CLIENTBROWSER="Браузър на посетителя" +NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +NR_TAG_IP="IP Address на посетителя" +NR_TAG_URL="URL адрес на страница" +NR_TAG_URLENCODED="кодиран URL адрес на страница" +NR_TAG_URLPATH="Път на страницата" +NR_TAG_REFERRER="Препращаща страница" +NR_TAG_SITENAME="Име на сайта" +NR_TAG_SITEURL="URL на сайта" +NR_TAG_PAGETITLE="Заглавие на страница" +NR_TAG_PAGEDESC="Мета Описание на страницата" +NR_TAG_PAGELANG="Езиков код на страницата" +NR_TAG_USERID="ID на потребител" +NR_TAG_USERNAME="Пълно име на потребителя" +NR_TAG_USERLOGIN="Потребителски Login" +NR_TAG_USEREMAIL="Потребителски имейл" +NR_TAG_USERFIRSTNAME="Първо име на потребителя" +NR_TAG_USERLASTNAME="Фамилия потребител" +NR_TAG_USERGROUPS="ID на потребителски групи" +NR_TAG_DATE="Дата" +NR_TAG_TIME="Час" +NR_TAG_RANDOMID="Случайно ID" +NR_ICON="Икона" +NR_SELECT_MODULE="Избери модул" +NR_SELECT_CONTINENT="Избери континент" +NR_SELECT_COUNTRY="Избери държава" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Google Maps API ключ" +NR_GMAP_KEY_DESC="Ключът на Google Maps API се използва от разширенията на Tassos.gr. Ако имате някакви проблеми с това, че Google Map не се зарежда, вероятно е необходимо да въведете свой собствен API ключ." +NR_GMAP_FIND_KEY="Вземи API ключ" +NR_ARE_YOU_SURE="Сигурен ли си?" +NR_CUSTOMURL="Потребителски URL" +NR_SAMPLE="Пример" +NR_DEBUG="Отстраняване на грешки" +NR_CUSTOMURL="Потребителски URL" +NR_READMORE="Прочетете още" +NR_IPADDRESS="IP адрес" +NR_ASSIGN_BROWSERS="Браузър" +NR_ASSIGN_BROWSERS_DESC="Изберете браузърите, на които да назначиете" +NR_ASSIGN_BROWSERS_DESC2="Цебево селектирайте посетителите, които разглеждат вашия сайт с конкретни браузъри като Chrome, Firefox или Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Операционна система" +NR_ASSIGN_OS_DESC="Изберете операционните системи, на които да назначите" +NR_ASSIGN_OS_DESC2="Цебево селектирайте посетителите, които използват специфични операционни системи като Windows, Linux или Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Брой прегледи на страници" +NR_ASSIGN_PAGEVIEWS_DESC="Целево селектирайте посетителите, които са прегледали определен брой страници" +NR_ASSIGN_PAGEVIEWS_VIEWS="Показвания на страници" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Въведете броя на показванията на страници" +NR_ASSIGN_COOKIENAME_NAME="Име на бисквитката" +NR_ASSIGN_COOKIENAME_NAME_DESC="Въведете името, които да присвоите на бисквитката" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Целево селектиране на посетителите, които имат специфични бисквитки, съхранявани в браузъра им" +NR_FEWER_THAN="По-малко от" +NR_GREATER_THAN="По-голямо от" +NR_EXACTLY="Точно" +NR_EXISTS="Съществува" +NR_IS_EQUAL="Равно на" +NR_CONTAINS="Съдържа" +NR_STARTS_WITH="Започва с" +NR_ENDS_WITH="Завършва със" +NR_ASSIGN_COOKIENAME_CONTENT="Съдържание на бисквитки" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Съдържанието на бисквитката" +NR_ASSIGN_IP_ADDRESSES_DESC2="Целево селеектиране на посетителите, които стоят зад IP адрес (диапазон)" +NR_ASSIGN_IP_ADDRESSES_DESC="Въведете списък разделени със запетаи и/или 'въведете' IP адреси и диапазони

        Пример:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="ID на потребител" +NR_ASSIGN_USER_ID_DESC="Целево селектиране на Joomla потребители по техните Joomla ID" +NR_ASSIGN_USER_ID_SELECTION_DESC="Въведете разделени със запетая ID на Joomla потребители" +NR_ASSIGN_COMPONENTS="Компонент" +NR_ASSIGN_COMPONENTS_DESC="Изберете компоненти, към които да присвоите" +NR_ASSIGN_COMPONENTS_DESC2="Целево селектиране на посетителите, които разглеждат конкретни компоненти" +NR_ASSIGN_TIMERANGE="Времеви диапазон" +NR_ASSIGN_TIMERANGE_DESC="Целево селектиране на посетителите според времето на вашия сървър" +NR_START_TIME="Време начало" +NR_END_TIME="Време край" +NR_START_PUBLISHING_TIMERANGE_DESC="Въведете времето за начало на публикуване" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Въведете времето за край на публикуване" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Ключ за сайт" +NR_RECAPTCHA_SITE_KEY_DESC="Използва се в JavaScript кода, който се предоставя на вашите потребители." +NR_RECAPTCHA_SECRET_KEY="Секретен ключ" +NR_RECAPTCHA_SECRET_KEY_DESC="Използва се в комуникацията между вашия сървър и reCAPTCHA сървъра. Не забравяйте да го запазите в тайна." +NR_RECAPTCHA_SITE_KEY_ERROR="reCaptcha Site Key ключ липсва или е невалиден" +NR_PREVIOUS_MONTH="Предишен месец" +NR_NEXT_MONTH="Следващия месец" +NR_ASSIGN_GROUP_PAGE_URL="Страница / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Целево селектиране на посетителите, които разглеждат конкретни меню елементи или URL адреси" +NR_ASSIGN_GROUP_DATETIME_DESC="Задействайте кутия въз основа на дата и час на вашия сървър" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla Потребител / Посетител" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Целево селектиране на регистрирани потребители или посетители, които са прегледали определен брой страници" +NR_ASSIGN_GROUP_PLATFORM="Платформа на посетителя" +NR_ASSIGN_GROUP_PLATFORM_DESC="Целево селектиране на посетителите, които използват мобилни устройства, Google Chrome или дори Windows" +NR_ASSIGN_GROUP_GEO_DESC="Целево селектиране на посетители, които са физически в определен регион" +NR_ASSIGN_GROUP_JCONTENT="Joomla! съдържание" +NR_ASSIGN_GROUP_JCONTENT_DESC="Целево селектиране на посетителите, които разглеждат конкретни статии или категории на Joomla" +NR_ASSIGN_GROUP_SYSTEM="Система / Интеграции" +NR_ASSIGN_GROUP_SYSTEM_DESC="Целево селектиране на посетителите, които са взаимодействали с конкретни Joomla разширения на трета страна" +NR_ASSIGN_GROUP_ADVANCED="Разширено селектиране на посетители" +NR_ASSIGN_USERGROUP_DESC="Целево селектиране конкретни Joomla групи потребители " +NR_ASSIGN_ARTICLE_DESC="Целево селектиране на посетителите, които разглеждат конкретни статии на Joomla" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Целево селектиране на посетителите, които разглеждат конкретни Joomla категории" +NR_EXTENSION_REQUIRED="%s компонент изисква %s плъгин да бъде активиран, за да функционира правилно." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Целево селектиране на посетителите, които разглеждат специфични K2 елементи, категории или тагове" +NR_ASSIGN_K2_ITEMS="Елемент" +NR_ASSIGN_K2_ITEMS_DESC="Целево селеттиране на посетителите, които разглеждат конкретни K2 елементи." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Изберете K2 елементи, към които да назначите" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Съвпадение по конкретни ключови думи в съдържанието. Отделете ги със запетая или на нов ред." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Съвпадение по мета ключовите думи на съдържанието. Отделете ги със запетая или на нов ред." +NR_ASSIGN_K2_PAGETYPES_DESC="Целево селектиране на посетителите, които разглеждат конкретни типове страници от компонента K2 " +NR_ASSIGN_K2_ITEM_OPTION="Item елемент" +NR_ASSIGN_K2_LATEST_OPTION="Последно съдържание от потребители или категории" +NR_ASSIGN_K2_TAG_OPTION="Таг на страница" +NR_ASSIGN_K2_CATEGORY_OPTION="Страница категории" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Форма за редактиране на елемент" +NR_ASSIGN_K2_USER_PAGE_OPTION="Потребителска страница (блог)" +NR_ASSIGN_K2_TAGS_DESC="Целево селектиране на посетителите, които разглеждат K2 елементи с конкретни тагове" +NR_ASSIGN_K2_CATEGORIES_DESC="Целево селектиране на посетителите, които разглеждат конкретни категории K2" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Категории" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Елементи" +NR_ASSIGN_PAGE_TYPES_DESC="Изберете типовете страници, на които да назначите" +NR_ASSIGN_TAGS_DESC="Изберете тагове, на които да назначите" +NR_CONTENT_KEYWORDS="Ключови думи в съдържанието" +NR_META_KEYWORDS="Мета ключови думи" +NR_TAG="Таг, етикет" +NR_NORMAL="Нормален" +NR_COMPACT="Компактен" +NR_LIGHT="Светъл" +NR_DARK="Тъмен" +NR_SIZE="Размер" +NR_THEME="Тема" +NR_SINGLE="Единичен" +NR_MULTIPLE="Множество" +NR_RANGE="Диапазон" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Моля, потвърдете" +NR_RECAPTCHA_INVALID_SECRET_KEY="Невалиден секретен ключ" +NR_PAGE="Страница" +NR_YOU_ARE_USING_EXTENSION="Използвате %s %s" +NR_UPDATE="Актуализация" +NR_SHOW_UPDATE_NOTIFICATION="Покажи съобщение за актуализация" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Ако е избрано, известие за обновление актуализация ще бъде показвано в изгледа на основния компонент, когато има нова версия за това разширение." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s е наличен" +NR_ERROR_EMAIL_IS_DISABLED="Изпращането на поща е изключено. Имейлите не може да се изпращат." +NR_ASSIGN_ITEMS="Елемент" +NR_COUNTRY_AF="Афганистан" +NR_COUNTRY_AX="Аландски острови" +NR_COUNTRY_AL="Албания" +NR_COUNTRY_DZ="Алжир" +NR_COUNTRY_AS="Американска Самоа" +NR_COUNTRY_AD="Андора" +NR_COUNTRY_AO="Ангола" +NR_COUNTRY_AI="Ангила" +NR_COUNTRY_AQ="Антарктида" +NR_COUNTRY_AG="Антигуа и Барбуда" +NR_COUNTRY_AR="Аржентина" +NR_COUNTRY_AM="Армения" +NR_COUNTRY_AW="Аруба" +NR_COUNTRY_AU="Австралия" +NR_COUNTRY_AT="Австрия" +NR_COUNTRY_AZ="Азербайджан" +NR_COUNTRY_BS="Бахамски острови" +NR_COUNTRY_BH="Бахрейн" +NR_COUNTRY_BD="Бангладеш" +NR_COUNTRY_BB="Барбадос" +NR_COUNTRY_BY="Беларус" +NR_COUNTRY_BE="Белгия" +NR_COUNTRY_BZ="Белиз" +NR_COUNTRY_BJ="Бенин" +NR_COUNTRY_BM="Бермуда" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Бутан" +NR_COUNTRY_BO="Боливия" +NR_COUNTRY_BA="Босна и Херцеговина" +NR_COUNTRY_BW="Ботсвана" +NR_COUNTRY_BV="Остров Буве" +NR_COUNTRY_BR="Бразилия" +NR_COUNTRY_IO="Британска територия в Индийския океан" +NR_COUNTRY_BN="Бруней Дарусалам" +NR_COUNTRY_BG="България" +NR_COUNTRY_BF="Буркина Фасо" +NR_COUNTRY_BI="Бурунди" +NR_COUNTRY_KH="Камбоджа" +NR_COUNTRY_CM="Камерун" +NR_COUNTRY_CA="Канада" +NR_COUNTRY_CV="Кабо Верде" +NR_COUNTRY_KY="Кайманови острови" +NR_COUNTRY_CF="Централноафриканска република" +NR_COUNTRY_TD="Чад" +NR_COUNTRY_CL="Чили" +NR_COUNTRY_CN="Китай" +NR_COUNTRY_CX="Коледен остров" +NR_COUNTRY_CC="Кокосови (Килинг) острови" +NR_COUNTRY_CO="Колумбия" +NR_COUNTRY_KM="Коморски острови" +NR_COUNTRY_CG="Конго" +NR_COUNTRY_CD="Конго, Демократична република" +NR_COUNTRY_CK="Острови Кук" +NR_COUNTRY_CR="Коста Рика" +NR_COUNTRY_CI="Кот д'Ивоар" +NR_COUNTRY_HR="Хърватия" +NR_COUNTRY_CU="Куба" +; NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Кипър" +NR_COUNTRY_CZ="Чехия" +NR_COUNTRY_DK="Дания" +NR_COUNTRY_DJ="Джибути" +NR_COUNTRY_DM="Доминика" +NR_COUNTRY_DO="Доминиканска република" +NR_COUNTRY_EC="Еквадор" +NR_COUNTRY_EG="Египет" +NR_COUNTRY_SV="Ел Салвадор" +NR_COUNTRY_GQ="Екваториална Гвинея" +NR_COUNTRY_ER="Еритрея" +NR_COUNTRY_EE="Естония" +NR_COUNTRY_ET="Етиопия" +NR_COUNTRY_FK="Фолклендски острови (Малвини)" +NR_COUNTRY_FO="Фарьорски острови" +NR_COUNTRY_FJ="Фиджи" +NR_COUNTRY_FI="Финландия" +NR_COUNTRY_FR="Франция" +NR_COUNTRY_GF="Френска Гвиана" +NR_COUNTRY_PF="Френска полинезия" +NR_COUNTRY_TF="Френски южни територии" +NR_COUNTRY_GA="Габон" +NR_COUNTRY_GM="Гамбия" +NR_COUNTRY_GE="Грузия" +NR_COUNTRY_DE="Германия" +NR_COUNTRY_GH="Гана" +NR_COUNTRY_GI="Гибралтар" +NR_COUNTRY_GR="Гърция" +NR_COUNTRY_GL="Гренландия" +NR_COUNTRY_GD="Гренада" +NR_COUNTRY_GP="Гваделупа" +NR_COUNTRY_GU="Гуам" +NR_COUNTRY_GT="Гватемала" +NR_COUNTRY_GG="Гърнзи" +NR_COUNTRY_GN="Гвинея" +NR_COUNTRY_GW="Гвинея-Бисау" +NR_COUNTRY_GY="Гвиана" +NR_COUNTRY_HT="Хаити" +NR_COUNTRY_HM="Острови Хърд и Макдоналд" +NR_COUNTRY_VA="Свети Престол (град Ватикана)" +NR_COUNTRY_HN="Хондурас" +NR_COUNTRY_HK="Хонг Конг" +NR_COUNTRY_HU="Унгария" +NR_COUNTRY_IS="Исландия" +NR_COUNTRY_IN="Индия" +NR_COUNTRY_ID="Индонезия" +NR_COUNTRY_IR="Иран, Ислямска република" +NR_COUNTRY_IQ="Ирак" +NR_COUNTRY_IE="Ирландия" +NR_COUNTRY_IM="Остров Ман" +NR_COUNTRY_IL="Израел" +NR_COUNTRY_IT="Италия" +NR_COUNTRY_JM="Ямайка" +NR_COUNTRY_JP="Япония" +NR_COUNTRY_JE="Джърси" +NR_COUNTRY_JO="Йордания" +NR_COUNTRY_KZ="Казахстан" +NR_COUNTRY_KE="Кения" +NR_COUNTRY_KI="Кирибати" +NR_COUNTRY_KP="Корея, Демократична народна република" +NR_COUNTRY_KR="Корея, Република" +NR_COUNTRY_KW="Кувейт" +NR_COUNTRY_KG="Киргизстан" +NR_COUNTRY_LA="Лаоска Народна демократична република" +NR_COUNTRY_LV="Латвия" +NR_COUNTRY_LB="Ливан" +NR_COUNTRY_LS="Лесото" +NR_COUNTRY_LR="Либерия" +NR_COUNTRY_LY="Либийска арабска Джамахирия" +NR_COUNTRY_LI="Лихтенщайн" +NR_COUNTRY_LT="Литва" +NR_COUNTRY_LU="Люксембург" +NR_COUNTRY_MO="Макао" +NR_COUNTRY_MK="Северна Македония" +NR_COUNTRY_MG="Мадагаскар" +NR_COUNTRY_MW="Малави" +NR_COUNTRY_MY="Малайзия" +NR_COUNTRY_MV="Малдиви" +NR_COUNTRY_ML="Мали" +NR_COUNTRY_MT="Малта" +NR_COUNTRY_MH="Маршалови острови" +NR_COUNTRY_MQ="Мартиника" +NR_COUNTRY_MR="Мавритания" +NR_COUNTRY_MU="Мавриций" +NR_COUNTRY_YT="Майот" +NR_COUNTRY_MX="Мексико" +NR_COUNTRY_FM="Микронезия" +NR_COUNTRY_MD="Молдова" +NR_COUNTRY_MC="Монако" +NR_COUNTRY_MN="Монголия" +NR_COUNTRY_ME="Черна гора" +NR_COUNTRY_MS="Монсерат" +NR_COUNTRY_MA="Мароко" +NR_COUNTRY_MZ="Мозамбик" +NR_COUNTRY_MM="Мианмар" +NR_COUNTRY_NA="Намибия" +NR_COUNTRY_NR="Науру" +; NR_COUNTRY_NM="North Macedonia" +NR_COUNTRY_NP="Непал" +NR_COUNTRY_NL="Холандия" +NR_COUNTRY_AN="Холандски Антили" +NR_COUNTRY_NC="Нова Каледония" +NR_COUNTRY_NZ="Нова Зеландия" +NR_COUNTRY_NI="Никарагуа" +NR_COUNTRY_NE="Нигер" +NR_COUNTRY_NG="Нигерия" +NR_COUNTRY_NU="Ниуе" +NR_COUNTRY_NF="Остров Норфолк" +NR_COUNTRY_MP="Северни Мариански острови" +NR_COUNTRY_NO="Норвегия" +NR_COUNTRY_OM="Оман" +NR_COUNTRY_PK="Пакистан" +NR_COUNTRY_PW="Палау" +NR_COUNTRY_PS="Палестинска територия" +NR_COUNTRY_PA="Панама" +NR_COUNTRY_PG="Папуа-Нова Гвинея" +NR_COUNTRY_PY="Парагвай" +NR_COUNTRY_PE="Перу" +NR_COUNTRY_PH="Филипини" +NR_COUNTRY_PN="Питкерн" +NR_COUNTRY_PL="Полша" +NR_COUNTRY_PT="Португалия" +NR_COUNTRY_PR="Пуерто Рико" +NR_COUNTRY_QA="Катар" +NR_COUNTRY_RE="Реюнион" +NR_COUNTRY_RO="Румъния" +NR_COUNTRY_RU="Руска федерация" +NR_COUNTRY_RW="Руанда" +NR_COUNTRY_SH="Света Елена" +NR_COUNTRY_KN="Сейнт Китс и Невис" +NR_COUNTRY_LC="Света Лусия" +NR_COUNTRY_PM="Сен Пиер и Микелон" +NR_COUNTRY_VC="Свети Винсънт и Гренадини" +NR_COUNTRY_WS="Самоа" +NR_COUNTRY_SM="Сан Марино" +NR_COUNTRY_ST="Сао Томе и Принсипи" +NR_COUNTRY_SA="Саудитска Арабия" +NR_COUNTRY_SN="Сенегал" +NR_COUNTRY_RS="Сърбия" +NR_COUNTRY_SC="Сейшелските острови" +NR_COUNTRY_SL="Сиера Леоне" +NR_COUNTRY_SG="Сингапур" +NR_COUNTRY_SK="Словакия" +NR_COUNTRY_SI="Словения" +NR_COUNTRY_SB="Соломоновите острови" +NR_COUNTRY_SO="Сомалия" +NR_COUNTRY_ZA="Южна Африка" +NR_COUNTRY_GS="Южна Джорджия и Южните Сандвичеви острови" +NR_COUNTRY_ES="Испания" +NR_COUNTRY_LK="Шри Ланка" +NR_COUNTRY_SD="Судан" +NR_COUNTRY_SS="Южен Судан" +NR_COUNTRY_SR="Суринам" +NR_COUNTRY_SJ="Свалбард и Ян Майен" +NR_COUNTRY_SZ="Свазиленд" +NR_COUNTRY_SE="Швеция" +NR_COUNTRY_CH="Швейцария" +NR_COUNTRY_SY="Сирийска Арабска Република" +NR_COUNTRY_TW="Тайван" +NR_COUNTRY_TJ="Таджикистан" +NR_COUNTRY_TZ="Танзания, Обединена република" +NR_COUNTRY_TH="Тайланд" +NR_COUNTRY_TL="Източен Тимор" +NR_COUNTRY_TG="Того" +NR_COUNTRY_TK="Токелау" +NR_COUNTRY_TO="Тонга" +NR_COUNTRY_TT="Тринидад и Тобаго" +NR_COUNTRY_TN="Тунис" +NR_COUNTRY_TR="Турция" +NR_COUNTRY_TM="Туркменистан" +NR_COUNTRY_TC="Острови Търкс и Кайкос" +NR_COUNTRY_TV="Тувалу" +NR_COUNTRY_UG="Уганда" +NR_COUNTRY_UA="Украйна" +NR_COUNTRY_AE="Обединени арабски емирства" +NR_COUNTRY_GB="Великобритания" +NR_COUNTRY_US="Съединени щати" +NR_COUNTRY_UM="Малки отдалечени острови на САЩ" +NR_COUNTRY_UY="Уругвай" +NR_COUNTRY_UZ="Узбекистан" +NR_COUNTRY_VU="Вануату" +NR_COUNTRY_VE="Венецуела" +NR_COUNTRY_VN="Виетнам" +NR_COUNTRY_VG="Вирджински острови, британски" +NR_COUNTRY_VI="Вирджински острови, САЩ" +NR_COUNTRY_WF="Уолис и Футуна" +NR_COUNTRY_EH="Западна Сахара" +NR_COUNTRY_YE="Йемен" +NR_COUNTRY_ZM="Замбия" +NR_COUNTRY_ZW="Зимбабве" +NR_CONTINENT_AF="Африка" +NR_CONTINENT_AS="Азия" +NR_CONTINENT_EU="Европа" +NR_CONTINENT_NA="Северна Америка" +NR_CONTINENT_SA="Южна Америка" +NR_CONTINENT_OC="Океания" +NR_CONTINENT_AN="Антарктида" +NR_FRONTEND="Преден край" +NR_BACKEND="Заден край" +NR_EMBED="Вграден" +NR_RATE="Ставка %s" +NR_REPORT_ISSUE="Подаване на сигнал за проблем" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/ca-ES/ca-ES.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/ca-ES/ca-ES.plg_system_nrframework.ini new file mode 100644 index 00000000..5e74cc58 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/ca-ES/ca-ES.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - utilitzat per les extensions Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorar" +NR_INCLUDE="Incloure" +NR_EXCLUDE="Excloure" +NR_SELECTION="Selecció" +NR_ASSIGN_MENU_NOITEM="Incloure sense Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="Assignar també quan no hi ha cap Itemid de menú establert a la URL?" +NR_ASSIGN_MENU_CHILD="També als hereus" +NR_ASSIGN_MENU_CHILD_DESC="Asignar també als ítems que hereden d'aquest ítem?" +NR_COPY_OF="Copia de %s" +NR_ASSIGN_DATETIME_DESC="Fixa els visitants segons la data i hora (datetime) del teu servidor" +NR_DATETIME="Datetime" +NR_TIME="Hora" +NR_DATE="Data" +NR_DATETIME_DESC="Escriu la data i hora (datetime) per auto publicar/deixar de publicar" +NR_START_PUBLISHING="Data i hora d'inici" +NR_START_PUBLISHING_DESC="Escriu la data per començar a publicar" +NR_FINISH_PUBLISHING="Data i hora final" +NR_FINISH_PUBLISHING_DESC="Escriu la data per deixar de publicar" +NR_DATETIME_NOTE="L'assignació de data i hora utilitza la data/hora dels teus servidors, no del sistema del visitant" +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="Codi PHP" +NR_ASSIGN_PHP_DESC="Escriu un tros de codi PHP per avaluar." +NR_ASSIGN_PHP_DESC2="Apunta als visitants avaluant codi PHP personalitzat. El codi ha de retornar el valor cert o fals.

        Per exemple:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Hora al lloc" +NR_SECONDS="Segons" +NR_ASSIGN_TIMEONSITE_DESC="Escriu la duració en segons per comparar amb el temps total que l'usuari (duració de la visita) ha passat a tot el teu lloc.

        Exemple:
        Si vols mostrar una caixa un cop l'usuari ha passat 3 minuts al lloc, escriu 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Apunta als visitants que naveguen des d'URLs específiques" +NR_ASSIGN_URLS_DESC="Escriu (part de) les URLs a coincidir
        Utilitza una línia per cada coincidència." +NR_ASSIGN_URLS_LIST="Coincidències URL" +NR_ASSIGN_URLS_REGEX="Utilitzar Expressió Regular" +NR_ASSIGN_URLS_REGEX_DESC="Escull per tractar el valor com una Expressió Regular." +NR_ASSIGN_LANGS="Idioma" +NR_ASSIGN_LANGS_DESC="Apunta als visitants que naveguen en un idioma específic" +NR_ASSIGN_LANGS_LIST_DESC="Escull els idiomes als que assignar" +NR_ASSIGN_DEVICES="Dispositiu" +NR_ASSIGN_DEVICES_DESC2="Apunta als visitants que utilitzen un dispositiu específic com Mòbil, Tauleta o Escriptori" +NR_ASSIGN_DEVICES_DESC="Escull els dispositius als que assignar" +NR_ASSIGN_DEVICES_NOTE="Tingues en compte que la detecció de dispositius no és 100% acurada. Els usuaris poden configurar els seus navegadors per imitar altres dispositius" +NR_MENU="Menú" +NR_MENU_ITEMS="Ítem de menú" +NR_MENU_ITEMS_DESC="Apunta als usuaris que naveguen per ítems de menú concrets" +NR_USERGROUP="Grup d'usuari" +NR_ACCESSLEVEL="Grup d'usuari" +NR_ACCESSLEVEL_DESC="Escull els grups d'usuari als que assignar.

        NOTA: Si ho vols fer públic configura a Ignorar i no escullis Públic." +NR_SHOW_COPYRIGHT="Mostrar Copyright" +NR_SHOW_COPYRIGHT_DESC="Si està seleccionat, es mostrarà informació extra de copyright a la vista d'administració. Les extensions de Tassos.gr mai mostraran informació de copyright o backlinks a la part pública." +NR_WIDTH="Amplada" +NR_WIDTH_DESC="Escriu l'amplada en px, em o %

        Exemple: 400px" +NR_HEIGHT="Alçada" +NR_HEIGHT_DESC="Escriu l'alçada en px, em o %

        Exemple: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Escriu l'encoixinat (padding) en px, em o %

        Exemple: 400px" +NR_MARGIN="Marge" +NR_MARGIN_DESC="La propietat CSS margin s'utilitza per generar espai al voltant de la caixa i establir la mida de l'espai en blanc al voltant de la vora en píxels o en %.

        Exemple 1: 25px
        Exemple 2: 5%

        Especificant el marge per cada costat [top right bottom left]:

        Només costat superior: 25px 0 0 0
        Només costat dret: 0 25px 0 0
        Només costat inferior: 0 0 25px 0
        Només costat esquerra: 0 0 0 25px" +NR_COLOR_HOVER="Hover color" +NR_COLOR="Color" +NR_COLOR_DESC="Defineix el color en format HEX o RGBA." +NR_TEXT_COLOR="Color del text" +NR_BACKGROUND="Fons" +NR_BACKGROUND_COLOR="Color del fons" +NR_BACKGROUND_COLOR_DESC="Defeineix un color de fons en format HEX o RGBA. Per desactivar-ho escriu 'cap'. Per una transparència absoluta escriu 'transparent'." +NR_URL_SHORTENING_FAILED="Ha fallat l'escurçament de %s amb %s. %s." +NR_EXPORT="Exportar" +NR_IMPORT="Importar" +NR_PLEASE_CHOOSE_A_VALID_FILE="Escull un nom d'arxiu vàlid" +NR_IMPORT_ITEMS="Importar ítems" +NR_PUBLISH_ITEMS="Publicar ítems" +NR_AS_EXPORTED="Com exportat" +NR_TITLE="Títol" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Llistat AcyMailing" +NR_ACYMAILING_LIST_DESC="Escull els llistats AcyMailing als que assignar" +NR_ASSIGN_ACYMAILING_DESC="Apunta als visitants que s'hagin subscrit a llistats específics d'AcyMailing" +NR_AKEEBASUBS="Akeeba Subscriptions" +NR_AKEEBASUBS_LEVELS="Nivells" +NR_AKEEBASUBS_LEVELS_DESC="Escull els nivells d'Akeeba Subscription als que assignar" +NR_ASSIGN_AKEEBASUBS_DESC="Apunta als visitants que hagin fet una subscripció específica Akeeba" +NR_MATCH="Coincidència" +NR_MATCH_DESC="El mètode de coincidència utilitzat per comparar els valors" +NR_ASSIGN_MATCHING_METHOD="Mètode de coincidència" +NR_ASSIGN_MATCHING_METHOD_DESC="Haurien de coincidir totes o només algunes de les assignacions

        Totes
        Es publicarà si coincideixen totes les assignacions a continuació coincideixen.

        Qualsevol
        Es publicarà si qualsevol (una o més) de les assignacions a continuació coincideixen.
        S'ignoraran els grups d'assignació on se seleccioni 'Ignore'." +NR_ANY="Qualsevol" +NR_ASSIGN_REFERRER="URL del referenciador" +NR_ASSIGN_REFERRER_DESC2="Apunta als visitants que arribin al teu lloc des 'duna font de trànsit específica" +NR_ASSIGN_REFERRER_DESC="Escriu la URL d'un referenciador a cada línia. Exemple:

        google.com
        facebook.com/lamevapagina" +NR_ASSIGN_REFERRER_NOTE="Tingues en compte que la detecció de la URL de referència no és 100% acurada. Alguns servidors poden utilitzar servidors intermediaris que modifiquen aquesta informació i podria ser alterada fàcilment." +NR_PROFEATURE_HEADER="%s és una funcionalitat PRO" +NR_PROFEATURE_DESC="%s no està disponible al teu pla. Millora'l al PRO per desbloquejar totes aquestes funcionalitat increïbles." +NR_PROFEATURE_DISCOUNT="Bonificació: %s els usuaris gratuïts tenen un 20% de descompte sobre el preu normal aplicat automàticament a caixa." +NR_ONLY_AVAILABLE_IN_PRO="Només disponible a la versió PRO" +NR_UPGRADE_TO_PRO="Millorar a PRO" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Millora a la versió PRO per desbloquejar" +NR_UPGRADE_TO_PRO_VERSION="Fantàstic! Només falta un pas. Clica al botó a continuació per completar la millora a la versió PRO." +NR_UNLOCK_PRO_FEATURE="Desbloquejar característica PRO" +NR_USING_THE_FREE_VERSION="Estàs utilitzant la versió GRATUÏTA de Convert Forms. Compra la versió PRO per tenir totes les funcionalitats." +NR_LEFT_TO_RIGHT="D'esquerra a dreta" +NR_RIGHT_TO_LEFT="De dreta a esquerra" +NR_BGIMAGE="Imatge de fons" +NR_BGIMAGE_DESC="Estableix una imatge de fons" +NR_BGIMAGE_FILE="Imatge" +NR_BGIMAGE_FILE_DESC="Escull o puja una imatge per ser la background-image." +NR_BGIMAGE_REPEAT="Repetir" +NR_BGIMAGE_REPEAT_DESC="La propietat background-repeat estableix si/com una imatge de fons es repetirà. Per defecte, una background-image es repeteix tant vertical com horitzontalment.

        Repetir: La imatge de fons es repetirà tan vertical com horitzontalment.

        Repeat-x: La imatge de fons només es repetirà horitzontalment.

        Repeat-y: La imatge de fons només es repetirà verticalment.

        No-repeat: La imatge de fons no es repetirà" +NR_BGIMAGE_SIZE="Mida" +NR_BGIMAGE_SIZE_DESC="Especifica la mida de la imatge de fons.

        Auto: La imatge de fons conté la seva alçada i amplada

        Cover: Escala la imatge de fons per ser tan gran com calgui perquè l'àrea del fons quedi completament coberta per la imatge. Pot ser que algunes parts de la imatge de fons no estiguin a la vista dins de l'àrea de posicionament del fons.

        Contain: Escala la imatge a la mida més gran que capigui tan vertical com horitzontalment dins l'àrea de contingut

        100%: Estira la imatge de fons per cobrir completament l'àrea de contingut." +NR_BGIMAGE_POSITION="Posició" +NR_BGIMAGE_POSITION_DESC="La propietat background-position estableix la posició d'inici d'una imatge de fons. Per defecte, la imatge de fons es col·loca a la cantonada superior-esquerra. El primer valor és la posició horitzontal i el segon la vertical.

        Pots utilitzar un dels valors predefinits o escriure un valor personalitzat en percentatge (x% y%) o en píxels (xPos yPos)" +NR_RTL="Activar RTL" +NR_RTL_DESC="La direcció de text dreta a esquerra és essencial per textos de dreta a esquerra com l'Àrab, Hebreu, Siri o tāna." +NR_HORIZONTAL="Horitzontal" +NR_VERTICAL="Vertical" +NR_FORM_ORIENTATION="Orientació del formulari" +NR_FORM_ORIENTATION_DESC="Escull la orientació del formulari" +NR_ASSIGN_CATEGORY="Categories" +NR_ASSIGN_CATEGORY_DESC="Escull les categories a les que assignar" +NR_ASSIGN_CATEGORY_CHILD="També als hereus" +NR_ASSIGN_CATEGORY_CHILD_DESC="Asignar també als ítems que hereden d'aquest ítem?" +NR_NEW="Nou" +NR_LIST="Llistar" +NR_DOCUMENTATION="Documentació" +NR_KNOWLEDGEBASE="Base de coneixements" +NR_FAQ="PMF" +NR_INFORMATION="Informació" +NR_EXTENSION="Extensió" +NR_VERSION="Versió" +NR_CHANGELOG="Registre de canvis" +; NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Falta la clau de descàrrega" +NR_DOWNLOAD_KEY="Clau de descàrrega" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Per poder actualitzar %s a través de l'actualitzador de Joomla!, necessites escriure una clau de descàrrega a la configuració del Connector Novarain Framework" +NR_DOWNLOAD_KEY_FIND="Trobar la clau de descàrrega" +NR_DOWNLOAD_KEY_UPDATE="Actualitzar clau de descàrrega" +NR_OK="OK" +NR_MISSING="Perdut" +NR_LICENSE="Llicència" +NR_AUTHOR="Autor" +NR_FOLLOWME="Segueix-me" +NR_FOLLOW="Segueix %s" +NR_TRANSLATE_INTEREST="T'agradaria ajudar traduint %s al teu idioma" +NR_TRANSIFEX_REQUEST="Envia'm una petició a Transifex" +NR_HELP_WITH_TRANSLATIONS="Ajuda amb les traduccions" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Avançat" +NR_USEGLOBAL="Ús global" +NR_WEEKDAY="Dia de la setmana" +NR_MONTH="Mes" +NR_MONDAY="Dilluns" +NR_TUESDAY="Dimarts" +NR_WEDNESDAY="Dimecres" +NR_THURSDAY="Dijous" +NR_FRIDAY="Divendres" +NR_SATURDAY="Dissabte" +NR_WEEKEND="Cap de setmana" +NR_WEEKDAYS="Entre setmana" +NR_SUNDAY="Dilluns" +NR_JANUARY="Gener" +NR_FEBRUARY="Febrer" +NR_MARCH="Març" +NR_APRIL="Abril" +NR_MAY="Maig" +NR_JUNE="Juny" +NR_JULY="Juliol" +NR_AUGUST="Agost" +NR_SEPTEMBER="Setembre" +NR_OCTOBER="Octubre" +NR_NOVEMBER="Novembre" +NR_DECEMBER="Desembre" +NR_NEVER="Mai" +NR_SECONDS="Segons" +NR_MINUTES="Minuts" +NR_HOURS="Hores" +NR_DAYS="Dies" +NR_SESSION="Sessió" +NR_EVER="Mai" +NR_COOKIE="Galeta" +NR_BOTH="Ambdos" +NR_NONE="Cap" +NR_DESKTOPS="Escriptori" +NR_MOBILES="Mòbil" +NR_TABLETS="Tauleta" +NR_PER_SESSION="Per sessió" +NR_PER_DAY="Per dia" +NR_PER_WEEK="Per setmana" +NR_PER_MONTH="Per més" +NR_FOREVER="Sempre" +NR_FEATURE_UNDER_DEV="Aquesta funcionalitat encara està en desenvolupament" +NR_LIKE_THIS_EXTENSION="T'agrada aquesta extensió?" +NR_LEAVE_A_REVIEW="Deixa una opinió al JED" +NR_SUPPORT="Suport" +NR_NEED_SUPPORT="Necessites ajuda?" +NR_DROP_EMAIL="Envia'm un correu electrònic" +NR_READ_DOCUMENTATION="Llegir la documentació" +NR_COPYRIGHT="%s - Tassos.gr Tots els drets reservats" +NR_DASHBOARD="Taulell de control" +NR_NAME="Nom" +NR_WRONG_COORDINATES="Les coordinades subministrades no són vàlides" +NR_ENTER_COORDINATES="Latitud, Longitud" +NR_NO_ITEMS_FOUND="No s'han trobat ítems" +NR_ITEM_IDS="No hi ha Ids d'ítem" +NR_TOGGLE="Canviar" +NR_EXPAND="Expandir" +NR_COLLAPSE="Colapsar" +NR_SELECTED="Escollit" +NR_MAXIMIZE="Maximitzar" +NR_MINIMIZE="Minimitzar" +NR_SELECTION="Selecció" +NR_INSTALL="Instal·lar" +NR_INSTALL_NOW="Instal·lar ara" +NR_INSTALLED="Instal·lat" +NR_COMING_SOON="Aviat disponible" +NR_ROADMAP="Al pla de ruta" +NR_MEDIA_VERSIONING="Utilitzar versionat multimèdia" +NR_MEDIA_VERSIONING_DESC="Escull per afegir el número de versió de l'extensió al final de la url multimèdia (js/css) , per assegurar que els navegadors carreguen l'arxiu correcte" +NR_LOAD_JQUERY="Carregar jQuery" +NR_LOAD_JQUERY_DESC="Escull carregar l'script base de jQuery. Pots deshabilitar això si et trobes conflictes amb la plantilla o qualsevol altra extensió que carregui la seva versió pròpia de jQuery." +NR_SELECT_CURRENCY="Escull una divisa" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Campanya" +NR_ASSIGN_CONVERTFORMS_DESC="Apunta als visitants que s'haguin subscrit a una campanya específica de ConvertForms" +NR_CONVERTFORMS_LIST_DESC="Escull la campanya ConvertForms a la que assignar." +NR_LEFT="Esquerra" +NR_CENTER="Centre" +NR_RIGHT="Dreta" +NR_BOTTOM="Inferior" +NR_TOP="Superior" +NR_AUTO="Auto" +NR_CUSTOM="Personalitzat" +NR_UPLOAD="Pujar" +NR_IMAGE="Imatge" +NR_INTRO_IMAGE="Imatge d'introducció" +NR_FULL_IMAGE="Imatge completa" +NR_IMAGE_SELECT="Escull imatge" +NR_IMAGE_SIZE_COVER="Coberta" +NR_IMAGE_SIZE_CONTAIN="Conté" +NR_REPEAT="Repetir" +NR_REPEAT_X="Repetir x" +NR_REPEAT_Y="Repetir y" +NR_REPEAT_NO="Sense repetició" +NR_FIELD_STATE_DESC="Estableix l'estat de l'ítem" +NR_CREATED_DATE="Data de creació" +NR_CREATED_DATE_DESC="La data de creació de l'ítem" +NR_MODIFIFED_DATE="Data de modificació" +NR_MODIFIFED_DATE_DESC="La data en què es va modificar per darrera vegada l'ítem." +NR_CATEGORIES="Categoria" +NR_CATEGORIES_DESC="Escull la categoria a la que assignar." +NR_ALSO_ON_CHILD_ITEMS="També als hereus" +NR_ALSO_ON_CHILD_ITEMS_DESC="Asignar també als ítems que hereden d'aquest ítem?" +NR_PAGE_TYPE="Tipus de pàgina" +NR_PAGE_TYPES="Tipus de pàgines" +NR_PAGE_TYPES_DESC="Escull a quins tipus de pàgines hauria d'estar activa l'assignació." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Activa per tenir en compte la vista d'article" +NR_CATEGORY_VIEW="Vista de categoria" +NR_CATEGORY_VIEW_DESC="Activa per tenir en compte la vista de categoria" +NR_ARTICLES="Articles" +NR_ARTICLES_DESC="Escull els articles als que assignar." +NR_ARTICLE="Article" +NR_ARTICLE_AUTHORS="Autors" +NR_ARTICLE_AUTHORS_DESC="Escull els autors als que assignar." +NR_ONLY="Només" +NR_OTHERS="Altres" +NR_SMARTTAGS="Etiquetes intel·ligents" +NR_SMARTTAGS_SHOW="Mostrar etiquetes intel·ligents" +NR_SMARTTAGS_NOTFOUND="No s'han trobat etiquetes intel·ligents" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Buscar etiquetes intel·ligents" +NR_CONTACT_US="Contacta'ns" +NR_FONT_COLOR="Color de font" +NR_FONT_SIZE="Mida de la font" +NR_FONT_SIZE_DESC="Escull una mida en píxels per la font" +NR_TEXT="Text" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Activa a la substitució de sortida" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Activa el renderitzat de l'extensió quan el disseny de la pàgina (tmpl) està substituït. Exemples: tmpl=component o tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Activa a la substitució de format" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Activa el renderitzat de l'extensió quan el format de la pàgina és HTML. Exemples: format=raw o format=json." +NR_GEOLOCATING="Geolocalització" +NR_GEOLOCATING_DESC="La geolocalització no sempre és 100% acurada. La geolocalització es basa en l'adreça IP del visitant. No totes les adreces IP són fixes o conegudes." +NR_CITY="Ciutat" +NR_CITY_NAME="Nom de la ciutat" +NR_CONDITION_CITY_DESC="Escriu el nom d'una població en anglès. Escriu-ne diverses separant-les amb comes." +NR_CONTINENT="Continent" +NR_REGION="Regió" +NR_CONDITION_REGION_DESC="El valor està format per dues parts, les dues lletres del codi de país ISO 3166-1 i el codi de regió. Per tant, el valor hauria de seguir el format següent: COUNTRY_CODE-REGION_CODE. Pots consultar una llista completa de codis de regió clicant a l'enllaç 'Trobar un codi de regió'" +NR_ASSIGN_COUNTRIES="País" +NR_ASSIGN_COUNTRIES_DESC2="Aputa als visitants que estan físicament a un país concret" +NR_ASSIGN_COUNTRIES_DESC="Escull els països als que assignar" +NR_ASSIGN_CONTINENTS="Continent" +NR_ASSIGN_CONTINENTS_DESC="Escull els continents als que assignar" +NR_ASSIGN_CONTINENTS_DESC2="Aputa als visitants que estan físicament a un continent concret" +NR_ICONTACT_ACCOUNTID_ERROR="No s'ha pogut recuperar l'AccountID d'iContact" +NR_TAG_CLIENTDEVICE="Tipus de dispositiu del visitant" +NR_TAG_CLIENTOS="Sistema operatiu del visitant" +NR_TAG_CLIENTBROWSER="Navegador del visitant" +NR_TAG_CLIENTUSERAGENT="Cadena d'agent del visitant" +NR_TAG_IP="Adreça IP del visitant" +NR_TAG_URL="URL de pàgina" +NR_TAG_URLENCODED="URL de la pàgina codificada" +NR_TAG_URLPATH="Ruta de la pàgina" +NR_TAG_REFERRER="Referenciador de la pàgina" +NR_TAG_SITENAME="Nom del lloc" +NR_TAG_SITEURL="URL del lloc" +NR_TAG_PAGETITLE="Títol de la pàgina" +NR_TAG_PAGEDESC="Meta descripció de la pàgina" +NR_TAG_PAGELANG="Codi d'idioma de la pàgina" +NR_TAG_USERID="ID d'usuari" +NR_TAG_USERNAME="Nom complet de l'usuari" +NR_TAG_USERLOGIN="Inici de sessió de l'usuari" +NR_TAG_USEREMAIL="Correu electrònic de l'usuari" +NR_TAG_USERFIRSTNAME="Nom de l'usuari" +NR_TAG_USERLASTNAME="Cognom de l'usuari" +NR_TAG_USERGROUPS="ID's dels grups d'usuari" +NR_TAG_DATE="Data" +NR_TAG_TIME="Hora" +NR_TAG_RANDOMID="ID aleatori" +NR_ICON="Icona" +NR_SELECT_MODULE="Escull un mòdul" +NR_SELECT_CONTINENT="Escull un continent" +NR_SELECT_COUNTRY="Escull un país" +NR_PLUGIN="Connector" +NR_GMAP_KEY="Clau API Google Maps" +NR_GMAP_KEY_DESC="Les extensions Tassos.gr utilitzen la clau API de Google Maps. Si et trobes amb dificultats perquè no es carrega un mapa de Google Maps probablement és perquè no has introduït la teva clau API" +NR_GMAP_FIND_KEY="Aconseguir una clau API" +NR_ARE_YOU_SURE="Estàs segur?" +NR_CUSTOMURL="URL personalitzada" +NR_SAMPLE="Mostra" +NR_DEBUG="Depuració" +NR_CUSTOMURL="URL personalitzada" +NR_READMORE="Llegir més" +NR_IPADDRESS="Adreça IP" +NR_ASSIGN_BROWSERS="Navegador" +NR_ASSIGN_BROWSERS_DESC="Escull el navegador al que assignar" +NR_ASSIGN_BROWSERS_DESC2="Apunta als visitants que naveguen pel teu lloc amb navegadors específics com Chrome, Firefox o Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Sistema Operatiu" +NR_ASSIGN_OS_DESC="Escull el sistema operatiu al que assignar" +NR_ASSIGN_OS_DESC2="Apunta als visitants que utilitzen sistemes operatius concrets com Windows Linux o Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Quantitat d'impressions de la pàgina" +NR_ASSIGN_PAGEVIEWS_DESC="Apunta als visitants que han visitat un cert nombre de pàgines" +NR_ASSIGN_PAGEVIEWS_VIEWS="Impressions de pàgina" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Escriu la quantitat d'impressions de pàgina" +NR_ASSIGN_COOKIENAME_NAME="Nom de galeta" +NR_ASSIGN_COOKIENAME_NAME_DESC="Escriu el nom de la galeta a la que assignar" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Apunta als visitants que tenen galetes específiques guardades al seu navegador" +NR_FEWER_THAN="Menor que" +NR_GREATER_THAN="Major que" +NR_EXACTLY="Exactament" +NR_EXISTS="Existeix" +NR_IS_EQUAL="Iguals" +NR_CONTAINS="Conté" +NR_STARTS_WITH="Comença amb" +NR_ENDS_WITH="Acaba amb" +NR_ASSIGN_COOKIENAME_CONTENT="Contingut de la galeta" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="El contingut de la galeta" +NR_ASSIGN_IP_ADDRESSES_DESC2="Apunta als visitants que estan darrere una adreça IP concreta (rang)" +NR_ASSIGN_IP_ADDRESSES_DESC="Escriu una llista d'adreces i rangs IP separats per comes i/o 'intro'

        Exemple:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="ID d'usuari" +NR_ASSIGN_USER_ID_DESC="Apunta a usuaris Joomla! específics pel seu ID" +NR_ASSIGN_USER_ID_SELECTION_DESC="Escriu una llista separades per comes d'IDs d'usuaris Joomla!" +NR_ASSIGN_COMPONENTS="Component" +NR_ASSIGN_COMPONENTS_DESC="Escull el component al que assignar" +NR_ASSIGN_COMPONENTS_DESC2="Apunta als visitants que estan navegant components concrets" +NR_ASSIGN_TIMERANGE="Interval de temps" +NR_ASSIGN_TIMERANGE_DESC="Fixa els visitants segons l'hora del teu servidor" +NR_START_TIME="Hora d'inici" +NR_END_TIME="Hora final" +NR_START_PUBLISHING_TIMERANGE_DESC="Escriu l'hora per començar a publicar" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Escriu l'hora per deixar de publicar" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Clau de lloc" +NR_RECAPTCHA_SITE_KEY_DESC="Utilitzada al codi JavaScript que es serveix als teus usuaris" +NR_RECAPTCHA_SECRET_KEY="Clau Secreta" +NR_RECAPTCHA_SECRET_KEY_DESC="Utilitzada a la comunicació entre el teu servidor i el servidor reCAPTCHA. Assegura't de mantenir-la secreta." +NR_RECAPTCHA_SITE_KEY_ERROR="Falta la clau de lloc reCAPTCHA, o és invàlida" +NR_PREVIOUS_MONTH="Mes anterior" +NR_NEXT_MONTH="Proper mes" +NR_ASSIGN_GROUP_PAGE_URL="Pàgina / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Apunta als usuaris que naveguen per ítems de menú concrets o URLs" +NR_ASSIGN_GROUP_DATETIME_DESC="Activa una caixa segons la data i hora del teu servidor" +NR_ASSIGN_GROUP_USER_VISITOR="Usuari Joomla / Visitant" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Apunta a usuaris registrats o visitants que hagin vist un cert nombre de pàgines" +NR_ASSIGN_GROUP_PLATFORM="Plataforma del visitant" +NR_ASSIGN_GROUP_PLATFORM_DESC="Apunta als visitants que fan servir mòbil, Google Chrome o inclús Windows" +NR_ASSIGN_GROUP_GEO_DESC="Apunta als visitants que estan físicament a una regió concreta" +NR_ASSIGN_GROUP_JCONTENT="Contingut Joomla!" +NR_ASSIGN_GROUP_JCONTENT_DESC="Apunta als visitants que estan veient articles o categories Joomla! concretes" +NR_ASSIGN_GROUP_SYSTEM="Sistema / Integracions" +NR_ASSIGN_GROUP_SYSTEM_DESC="Apunta als servidors que han interactuat amb extensions Joomla! de tercers específiques" +NR_ASSIGN_GROUP_ADVANCED="Apuntat a visitants avançat" +NR_ASSIGN_USERGROUP_DESC="Apunta a grups d'usuaris Joomla! específics" +NR_ASSIGN_ARTICLE_DESC="Apunta als visitants que estan veient articles Joomla! concrets" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Apunta als visitants que estan veient categories Joomla! concretes" +NR_EXTENSION_REQUIRED="El component %s requereix que el connector %s estigui activat per funcionar correctament." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Apunta als visitants que naveguen per ítems K2, categories o etiquetes específiques" +NR_ASSIGN_K2_ITEMS="Ítem" +NR_ASSIGN_K2_ITEMS_DESC="Apunta als usuaris que naveguen per ítems K2 concrets." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Escull els ítems K2 als que assignar" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Coincidència de paraules clau al contingut de l'ítem. Separa-les amb comes o nova línia." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Coincidència de les meta paraules clau de l'ítem. Separa-les amb comes o nova línia." +NR_ASSIGN_K2_PAGETYPES_DESC="Apunta als usuaris que naveguen per tipus de pàgines K2 concrets." +NR_ASSIGN_K2_ITEM_OPTION="Ítem" +NR_ASSIGN_K2_LATEST_OPTION="Darrers ítems dels usuaris o les categories" +NR_ASSIGN_K2_TAG_OPTION="Etiquetar pàgina" +NR_ASSIGN_K2_CATEGORY_OPTION="Pàgina de categories" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Ítem editar formulari" +NR_ASSIGN_K2_USER_PAGE_OPTION="Pàgina d'usuari (blog)" +NR_ASSIGN_K2_TAGS_DESC="Apunta als visitants que naveguen per ítems K2 amb etiquetes específiques" +NR_ASSIGN_K2_CATEGORIES_DESC="Apunta als visitans que naveguen per categories K2 específiques" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Ítems" +NR_ASSIGN_PAGE_TYPES_DESC="Escull els tipus de pàgines als que assignar" +NR_ASSIGN_TAGS_DESC="Escull les etiquetes a les que assignar" +NR_CONTENT_KEYWORDS="Paraules clau del contingut" +NR_META_KEYWORDS="Meta paraules clau" +NR_TAG="Etiqueta" +NR_NORMAL="Normal" +NR_COMPACT="Compacte" +NR_LIGHT="Clar" +NR_DARK="Fosc" +NR_SIZE="Mida" +NR_THEME="Tema" +NR_SINGLE="Individual" +NR_MULTIPLE="Múltiple" +NR_RANGE="Interval" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Valida" +NR_RECAPTCHA_INVALID_SECRET_KEY="Clau secreta invàlida" +NR_PAGE="Pàgina" +NR_YOU_ARE_USING_EXTENSION="Estàs utilitzant %s %s" +NR_UPDATE="Actualitza" +NR_SHOW_UPDATE_NOTIFICATION="Mostrar notificació d'actualització" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Si s'activa, es mostrarà una notificació d'actualització a la vista principal del component quan hi hagi una nova versió d'aquesta extensió." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s està disponible " +NR_ERROR_EMAIL_IS_DISABLED="L'enviament de correu està desactivat. No s'han pogut enviar els correus electrònics." +NR_ASSIGN_ITEMS="Ítem" +NR_COUNTRY_AF="Afganistan" +NR_COUNTRY_AX="Illes Aland" +NR_COUNTRY_AL="Albània" +NR_COUNTRY_DZ="Algèria" +NR_COUNTRY_AS="Samoa Americana" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antàrtida" +NR_COUNTRY_AG="Antigua i Barbuda" +NR_COUNTRY_AR="Argentina" +NR_COUNTRY_AM="Armènia" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Austràlia" +NR_COUNTRY_AT="Àustria" +NR_COUNTRY_AZ="Azerbaitjan" +NR_COUNTRY_BS="Bahames" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangla Desh" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Bielorússia" +NR_COUNTRY_BE="Bèlgica" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benín" +NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhutan" +NR_COUNTRY_BO="Bolívia" +NR_COUNTRY_BA="Bòsnia i Hercegovina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Illa Bouvet" +NR_COUNTRY_BR="Brasil" +NR_COUNTRY_IO="Territori Britànic de l'Oceà Índic" +NR_COUNTRY_BN="Brunei (Negara Brunei Darussalam)" +NR_COUNTRY_BG="Bulgària" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Cambodja" +NR_COUNTRY_CM="Camerun" +NR_COUNTRY_CA="Canadà" +NR_COUNTRY_CV="Cap Verd" +NR_COUNTRY_KY="Illes Caiman" +NR_COUNTRY_CF="República Centreafricana" +NR_COUNTRY_TD="Txad" +NR_COUNTRY_CL="Xile" +NR_COUNTRY_CN="Xina" +NR_COUNTRY_CX="Illa Christmas" +NR_COUNTRY_CC="Illes Cocos (Keeling)" +NR_COUNTRY_CO="Colòmbia" +NR_COUNTRY_KM="Comores" +NR_COUNTRY_CG="Congo" +NR_COUNTRY_CD="Congo, La República Democràtica del" +NR_COUNTRY_CK="Illes Cook" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Costa de Vori" +NR_COUNTRY_HR="Croàcia" +NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Xipre" +NR_COUNTRY_CZ="República Txeca" +NR_COUNTRY_DK="Dinamarca" +NR_COUNTRY_DJ="Djibouti" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="República Dominicana" +NR_COUNTRY_EC="Ecuador" +NR_COUNTRY_EG="Egipte" +NR_COUNTRY_SV="El Salvador" +NR_COUNTRY_GQ="Guinea Equatorial" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Estònia" +NR_COUNTRY_ET="Etiòpia" +NR_COUNTRY_FK="Illes Malvines (Falkland)" +NR_COUNTRY_FO="Illes Fèroe" +NR_COUNTRY_FJ="Fiji" +NR_COUNTRY_FI="Finlàndia" +NR_COUNTRY_FR="França" +NR_COUNTRY_GF="Guaiana Francesa" +NR_COUNTRY_PF="Polinèsia francesa" +NR_COUNTRY_TF="erritoris Francesos del Sud" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gàmbia" +NR_COUNTRY_GE="Geòrgia" +NR_COUNTRY_DE="Alemanya" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Grècia" +NR_COUNTRY_GL="Groenlàndia" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadalupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haití" +NR_COUNTRY_HM="Illa Heard i Illes McDonald" +NR_COUNTRY_VA="Santa Seu (Estat del Vaticà)" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Hongria" +NR_COUNTRY_IS="Islàndia" +NR_COUNTRY_IN="India" +NR_COUNTRY_ID="Indonèsia" +NR_COUNTRY_IR="República Islàmica de l'Iran" +NR_COUNTRY_IQ="Iraq" +NR_COUNTRY_IE="Irlanda" +NR_COUNTRY_IM="Illa de Man" +NR_COUNTRY_IL="Israel" +NR_COUNTRY_IT="Itàlia" +NR_COUNTRY_JM="Jamaica" +NR_COUNTRY_JP="Japó" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordània" +NR_COUNTRY_KZ="Kazakhstan" +NR_COUNTRY_KE="Kenya" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="República Democràtica Popular de Corea" +NR_COUNTRY_KR="Corea del Sud" +NR_COUNTRY_KW="Kuwait" +NR_COUNTRY_KG="Kirguizistan" +NR_COUNTRY_LA="República Democràtica Popular de Laos" +NR_COUNTRY_LV="Letònia" +NR_COUNTRY_LB="Líban" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Líbia" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Lituània" +NR_COUNTRY_LU="Luxemburg" +NR_COUNTRY_MO="Macau" +NR_COUNTRY_MK="Macedònia" +NR_COUNTRY_MG="Madagascar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malàisia" +NR_COUNTRY_MV="Maldives" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Illes Marshall" +NR_COUNTRY_MQ="Martinica" +NR_COUNTRY_MR="Mauritania" +NR_COUNTRY_MU="Maurici" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Mexico" +NR_COUNTRY_FM="Micronèsia, Estats Federats de" +NR_COUNTRY_MD="Moldàvia, República de" +NR_COUNTRY_MC="Mònaco" +NR_COUNTRY_MN="Mongòlia" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Marroc" +NR_COUNTRY_MZ="Moçambic" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibia" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="Macedònia nord" +NR_COUNTRY_NP="Nepal" +NR_COUNTRY_NL="Països Baixos" +NR_COUNTRY_AN="Antilles Neerlandeses" +NR_COUNTRY_NC="Nova Caledònia" +NR_COUNTRY_NZ="Nova Zelanda" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Níger" +NR_COUNTRY_NG="Nigèria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Illa Norfolk" +NR_COUNTRY_MP="Illes Marianes del Nord" +NR_COUNTRY_NO="Noruega" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Territori Palestí" +NR_COUNTRY_PA="Panamà" +NR_COUNTRY_PG="Papua Nova Guinea" +NR_COUNTRY_PY="Paraguai" +NR_COUNTRY_PE="Perú" +NR_COUNTRY_PH="Filipines" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Polònia" +NR_COUNTRY_PT="Portugal" +NR_COUNTRY_PR="Puerto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="Reunió" +NR_COUNTRY_RO="Romania" +NR_COUNTRY_RU="Federació Russa" +NR_COUNTRY_RW="Rwanda" +NR_COUNTRY_SH="Saint Helena" +NR_COUNTRY_KN="Saint Christopher i Nevis" +NR_COUNTRY_LC="Saint Lucia" +NR_COUNTRY_PM="Saint Pierre and Miquelon" +NR_COUNTRY_VC="Saint Vincent i les Grenadines" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="Sao Tome i Príncipe" +NR_COUNTRY_SA="Aràbia Saudita" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Sèrbia" +NR_COUNTRY_SC="Seychelles" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapur" +NR_COUNTRY_SK="Eslovàquia" +NR_COUNTRY_SI="Eslovènia" +NR_COUNTRY_SB="Illes Salomó" +NR_COUNTRY_SO="Somàlia" +NR_COUNTRY_ZA="Sudàfrica" +NR_COUNTRY_GS="Illes Geòrgia del Sud i Sandwich del Sud" +NR_COUNTRY_ES="Espanya" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Sudan" +NR_COUNTRY_SS="Sudan del Sud" +NR_COUNTRY_SR="Surinam" +NR_COUNTRY_SJ="Svalbard i Jan Mayen" +NR_COUNTRY_SZ="Swazilàndia" +NR_COUNTRY_SE="Suècia" +NR_COUNTRY_CH="Suïssa" +NR_COUNTRY_SY="República Àrab Síria" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tadjikistan" +NR_COUNTRY_TZ="Tanzània, República Unida de" +NR_COUNTRY_TH="Tailàndia" +NR_COUNTRY_TL="Timor Oriental" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinitat i Tobago" +NR_COUNTRY_TN="Tunísia" +NR_COUNTRY_TR="Turquia" +NR_COUNTRY_TM="Turkmenistan" +NR_COUNTRY_TC="Illes Turks i Caicos" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ucraïna" +NR_COUNTRY_AE="Unió dels Emirats Àrabs" +NR_COUNTRY_GB="Regne Unit" +NR_COUNTRY_US="Estats Units" +NR_COUNTRY_UM="lles Perifèriques Menors dels EUA" +NR_COUNTRY_UY="Uruguai" +NR_COUNTRY_UZ="Uzbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Veneçuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="lles Verges, Britàniques" +NR_COUNTRY_VI="Illes Verges, EUA" +NR_COUNTRY_WF="Wallis i Futuna" +NR_COUNTRY_EH="Sàhara Occidental" +NR_COUNTRY_YE="Iemen" +NR_COUNTRY_ZM="Zàmbia" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Africa" +NR_CONTINENT_AS="Asia" +NR_CONTINENT_EU="Europa" +NR_CONTINENT_NA="America del nord" +NR_CONTINENT_SA="America del sud" +NR_CONTINENT_OC="Oceania" +NR_CONTINENT_AN="Antarctica" +NR_FRONTEND="Part pública" +NR_BACKEND="Administració" +NR_EMBED="Incorporar" +NR_RATE="Tasa %s" +NR_REPORT_ISSUE="Informar d'un problema" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/cs-CZ/cs-CZ.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/cs-CZ/cs-CZ.plg_system_nrframework.ini new file mode 100644 index 00000000..db590938 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/cs-CZ/cs-CZ.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - používán rozšířeními od Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorovat" +NR_INCLUDE="Vložit" +NR_EXCLUDE="Vyloučit" +NR_SELECTION="Výběr" +NR_ASSIGN_MENU_NOITEM="Neobsahuje žádný Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="Přiřadit také, pokud není nastavené Itemid v URL?" +NR_ASSIGN_MENU_CHILD="Také na zděděné položky" +NR_ASSIGN_MENU_CHILD_DESC="Přiřadit také k podřízeným položkám vybraných položek?" +NR_COPY_OF="Kopie %s" +NR_ASSIGN_DATETIME_DESC="Cílový návštěvníci na základě času a data na vašem serveru" +NR_DATETIME="Datum a čas" +NR_TIME="Čas" +NR_DATE="Datum" +NR_DATETIME_DESC="Zadejte datum a čas, kdy dojde k automatickému zveřejnění/zneveřejnění" +NR_START_PUBLISHING="Počáteční datum" +NR_START_PUBLISHING_DESC="Zadejte datum začátku zveřejnění" +NR_FINISH_PUBLISHING="Koncové datum" +NR_FINISH_PUBLISHING_DESC="Zadejte datum ukončení zveřejnění" +NR_DATETIME_NOTE="Při přiřazování data a času se používá datum/čas vašich serverů, nikoli ze systém návštěvníků." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP kód" +NR_ASSIGN_PHP_DESC="Vložte část PHP kódu k ověření." +NR_ASSIGN_PHP_DESC2="Vlastní PHP kód, který zpracovává informace o vracejících návštevnících. Kód musí vracet hodnotu true nebo false.

        Napříkla:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Čas na stránce" +NR_SECONDS="Sekund" +NR_ASSIGN_TIMEONSITE_DESC="Zadejte dobu trvání v sekundách, abyste ji mohli porovnat s celkovým časem, který uživatel strávil na celém webu (doba trvání návštěvy).

        Příklad:
        Pokud chcete zobrazit box poté, co uživatel strávil na celém webu 3 minuty, zadejte 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Cílový návštěvníci, kteří procházejí konkrétní URL adresy" +NR_ASSIGN_URLS_DESC="Zadejte adresy URL (nebo jejich části), které chcete porovnat.
        Pro každou shodu použijte nový řádek." +NR_ASSIGN_URLS_LIST="Shoda URL" +NR_ASSIGN_URLS_REGEX="Použít regulární výraz" +NR_ASSIGN_URLS_REGEX_DESC="Vyberte, zda chcete s hodnotou zacházet jako s regulárními výrazy." +NR_ASSIGN_LANGS="Jazyk" +NR_ASSIGN_LANGS_DESC="Cílový návštěvníci, kteří procházejí stránky v konkrétním jazyce" +NR_ASSIGN_LANGS_LIST_DESC="Zvolte jazyk k přiřazení" +NR_ASSIGN_DEVICES="Zařízení" +NR_ASSIGN_DEVICES_DESC2="Cílový návštěvníci, kteří používají konkrétní zařízení jako telefon, tablet nebo stolní počítač." +NR_ASSIGN_DEVICES_DESC="Zvolte zařízení k přiřazení" +NR_ASSIGN_DEVICES_NOTE="Mějte na paměti, že detekce zařízení není vždy 100% přesná. Uživatelé mohou svůj prohlížeč záměrně nastavit tak, aby napodoboval jiná zařízení." +NR_MENU="Menu" +NR_MENU_ITEMS="Položka menu" +NR_MENU_ITEMS_DESC="Cílení na návštěvníky, kteří si prohlížejí konkrétní položky menu" +NR_USERGROUP="Skupina uživatelů" +NR_ACCESSLEVEL="Skupina uživatelů" +NR_ACCESSLEVEL_DESC="Vyberte Skupiny uživatelů, kterým chcete přiřadit.

        Poznámka: Pokud chcete, aby byly veřejné, stačí nastavit možnost Ignorovat a nevybírat možnost Veřejné." +NR_SHOW_COPYRIGHT="Zobrazovat copyright" +NR_SHOW_COPYRIGHT_DESC="Pokud je tato možnost vybrána, zobrazí se v zobrazeních správce další informace o autorských právech. Rozšíření Tassos.gr nikdy nezobrazují informace o autorských právech ani zpětné odkazy na frontend." +NR_WIDTH="Šířka" +NR_WIDTH_DESC="Zadejte šířku v px, em nebo %

        Příklad: 400px" +NR_HEIGHT="Výška" +NR_HEIGHT_DESC="Zadejte výšku v px, em nebo %

        Příklad: 400px" +NR_PADDING="Šířka vnitřního okraje" +NR_PADDING_DESC="Enter šířku vnitřního okraje v px, em nebo %

        Příklad: 20px" +NR_MARGIN="Okraj" +NR_MARGIN_DESC="Vlastnost CSS okraj se používá k vytvoření prostoru kolem rámečku a nastavení velikosti bílého místa mimo rámeček v pixelech nebo v %.

        Příklad 1: 25px
        Příklad 2: 5%

        Určení okraje pro každou stranu [horní pravá dolní levá]:

        Pouze nahoře: 25px 0 0 0
        Pouze vpravo: 0 25px 0 0
        Pouze dole: 0 0 25px
        Pouze vlevo: 0 0 0 25px" +NR_COLOR_HOVER="Barva odkazu při přejetí myší" +NR_COLOR="Barva" +NR_COLOR_DESC="Určete barvu ve formátu HEX nebo RGBA." +NR_TEXT_COLOR="Barva textu" +NR_BACKGROUND="Pozadí" +NR_BACKGROUND_COLOR="Barva pozadí" +NR_BACKGROUND_COLOR_DESC="Zadejte údaje o barvě pozadí ve formátu HEX nebo RGBA. Batvu zrušíte parametrem 'none'. V případě, že požadujete průhlednost vložte 'transparent'." +NR_URL_SHORTENING_FAILED="Zkrácení %s s %s selhalo. %s." +NR_EXPORT="Export" +NR_IMPORT="Import" +NR_PLEASE_CHOOSE_A_VALID_FILE="Prosím zvolte platný název souboru" +NR_IMPORT_ITEMS="Import položek" +NR_PUBLISH_ITEMS="Zveřejnit položky" +NR_AS_EXPORTED="Jak je exportováno" +NR_TITLE="Název" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing seznam" +NR_ACYMAILING_LIST_DESC="Vyberte AcyMailing seznam k přiřazení." +NR_ASSIGN_ACYMAILING_DESC="Cílení na návštěvníky, kteří se přihlásili do konkrétních seznamů AcyMailing." +NR_AKEEBASUBS="Akeeba předplatné" +NR_AKEEBASUBS_LEVELS="Úrovně" +NR_AKEEBASUBS_LEVELS_DESC="Zvolte úroveň Předplatného Akeeba k přiřazení." +NR_ASSIGN_AKEEBASUBS_DESC="Cílení na návštěvníky, kteří se přihlásili k odběru konkrétních odběrů Akeeba." +NR_MATCH="Shoda" +NR_MATCH_DESC="Způsob použitý k porovnání hodnoty" +NR_ASSIGN_MATCHING_METHOD="Metoda shody" +NR_ASSIGN_MATCHING_METHOD_DESC="Mají být všechna nebo pouze některá přiřazení porovnána?

        Všechna
        Bude zveřejněno, pokud Všechna níže uvedených přiřazení.

        Každéy
        Bude zveřejněno, pokud bude přiřazenoKaždé (jedno nebo více) níže uvedených přiřazení.
        Skupiny přiřazení, u kterých je vybrána možnost "_QQ_"Ignorovat"_QQ_", budou ignorovány." +NR_ANY="Jakýkoli" +NR_ASSIGN_REFERRER="Referrer URL" +NR_ASSIGN_REFERRER_DESC2="Zaměřte se na návštěvníky, kteří na vaše stránky přicházejí z určitého zdroje provozu" +NR_ASSIGN_REFERRER_DESC="Vložte jednu Referrer URL na řádek: Např.:

        google.com
        facebook.com/mojestranka" +NR_ASSIGN_REFERRER_NOTE="Mějte na paměti, že zjišťování odkazů URL není vždy 100% přesné. Některé servery mohou používat proxy servery, které tyto informace odstraňují, a lze je také snadné zfalšovat." +NR_PROFEATURE_HEADER="%s je funkce PRO verze" +NR_PROFEATURE_DESC="Je nám líto, ale %s není součástí vašeho předplatnéhoo. Přejděte na PRO, které vám zpřístupní všechny skvělé funkce." +NR_PROFEATURE_DISCOUNT="Bonus: %s uživatelé volné verze získají 20% slevu z běžné ceny, která se automaticky použije při platbě." +NR_ONLY_AVAILABLE_IN_PRO="Dostupné pouze ve verzi PRO" +NR_UPGRADE_TO_PRO="Upgradujte na Pro verzi" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgradujte na Pro verzi pro odblokování" +NR_UPGRADE_TO_PRO_VERSION="Skvěle! Zbývá poslední krok. Klikněte na tlačítko níže a dokončete přechod na verzi Pro." +NR_UNLOCK_PRO_FEATURE="Odblokujte Pro funkce" +NR_USING_THE_FREE_VERSION="Používáte volnou verzi Convert Forms. Pokud chcete využít všechny funkce, zakupte si Pro verzi." +NR_LEFT_TO_RIGHT="Zleva doprava" +NR_RIGHT_TO_LEFT="Zprava do leva" +NR_BGIMAGE="Obrázek na pozadí" +NR_BGIMAGE_DESC="Nastavit obrázek pozadí" +NR_BGIMAGE_FILE="Obrázek" +NR_BGIMAGE_FILE_DESC="Vyberte nebo nahrejte soubor, který bude zobrazen jako pozadí." +NR_BGIMAGE_REPEAT="Opakovat" +NR_BGIMAGE_REPEAT_DESC="Vlastnost background-repeat nastavuje, zda se obrázek na pozadí bude opakovat. Ve výchozím nastavení se obrázek na pozadí opakuje vertikálně i horizontálně.

        Opakování: Obrázek na pozadí se bude opakovat vertikálně i horizontálně.

        Opakování-x: Obrázek na pozadí se bude opakovat pouze vodorovně

        Opakování-y: Obrázek na pozadí se bude opakovat pouze vertikálně

        Neopakovat: Obrázek na pozadí se nebude opakovat." +NR_BGIMAGE_SIZE="Velikost" +NR_BGIMAGE_SIZE_DESC="Zadejte velikost obrázku na pozadí.

        Auto: Obrázek na pozadí obsahuje jeho šířku a výšku

        Krytí: Obrázek na pozadí se škáluje tak, aby byl co největší a aby byla oblast pozadí zcela pokryta obrázkem na pozadí. Některé části obrázku na pozadí nemusí být v oblasti umístění pozadí viditelné

        Přizpůsobení: Škálujte obrázek na největší velikost tak, aby se jeho šířka i výška vešly do oblasti obsahu

        100% 100%: Roztáhne obrázek na pozadí tak, aby zcela zakrýval oblast obsahu." +NR_BGIMAGE_POSITION="Umístění" +NR_BGIMAGE_POSITION_DESC="Vlastnost background-position nastavuje počáteční pozici obrázku na pozadí. Ve výchozím nastavení je obrázek na pozadí umístěn v levém horním rohu. První hodnota je horizontální pozice a druhá hodnota je vertikální pozice.

        Můžete použít jednu z předdefinovaných hodnot nebo zadat vlastní hodnotu v procentech: x% y% nebo v pixelech xPos yPos." +NR_RTL="Zapnout RTL" +NR_RTL_DESC="Směr čtení zprava-doleva pro abecedy jako jsou arabská, hebrejská, syrská a Tana." +NR_HORIZONTAL="Horizontální" +NR_VERTICAL="Vertikální" +NR_FORM_ORIENTATION="Orientace formuláře" +NR_FORM_ORIENTATION_DESC="Zvolte orientaci formuláře" +NR_ASSIGN_CATEGORY="Kategorie" +NR_ASSIGN_CATEGORY_DESC="Zvolte kategorii k přiřazení" +NR_ASSIGN_CATEGORY_CHILD="Také na zděděné položky" +NR_ASSIGN_CATEGORY_CHILD_DESC="Přiřadit také k podřízeným položkám vybraných položek?" +NR_NEW="Nový" +NR_LIST="Seznam" +NR_DOCUMENTATION="Dokumentace" +NR_KNOWLEDGEBASE="Znalostní báze" +NR_FAQ="FAQ" +NR_INFORMATION="Informace" +NR_EXTENSION="Rozšíření" +NR_VERSION="Verze" +NR_CHANGELOG="Změnový soubor" +NR_DOWNLOAD="Stažení" +NR_DOWNLOAD_KEY_MISSING="Chybí klíč ke stahování" +NR_DOWNLOAD_KEY="Klíč ke stahování" +NR_DOWNLOAD_KEY_DESC="Chcete-li najít svůj klíč ke stažení, přihlaste se ke svému účtu na webu Tassos.gr a přejděte do sekce Downloads.

        Poznámka: Nastavením klíče ke stažení neprovedete upgrade bezplatné verze na verzi Pro. Chcete-li odemknout funkce Pro, budete muset nahradit verzi Free verzí Pro." +NR_DOWNLOAD_KEY_HOW="Aby bylo možné provádět aktualizaci %s s pomocí Joomla autualizace, je nutné zadat váš Klíč ke stahování v nastavení zásuvného modulu Novarain Framework" +NR_DOWNLOAD_KEY_FIND="Najít klíč ke stahování" +NR_DOWNLOAD_KEY_UPDATE="Aktualizovat klíč ke stahování" +NR_OK="OK" +NR_MISSING="Chybí" +NR_LICENSE="Licence" +NR_AUTHOR="Autor" +NR_FOLLOWME="Sledujte mě" +NR_FOLLOW="Sledovat %s" +NR_TRANSLATE_INTEREST="Měli byste zájem o pomoc s překladem %s do vašeho jazyka?" +NR_TRANSIFEX_REQUEST="Pošlete mi požadavek na Transifex" +NR_HELP_WITH_TRANSLATIONS="Podílejte se na překladu" +NR_PUBLISHING_ASSIGNMENTS="Pravidla zveřejnění" +NR_ADVANCED="Rozšířené" +NR_USEGLOBAL="Použít globální" +NR_WEEKDAY="Den v týdnu" +NR_MONTH="Měsíc" +NR_MONDAY="Pondělí" +NR_TUESDAY="Úterý" +NR_WEDNESDAY="Středa" +NR_THURSDAY="Čtvrtek" +NR_FRIDAY="Pátek" +NR_SATURDAY="Sobota" +NR_WEEKEND="Víkend" +NR_WEEKDAYS="Víkendové dny" +NR_SUNDAY="Neděle" +NR_JANUARY="Leden" +NR_FEBRUARY="Únor" +NR_MARCH="Březen" +NR_APRIL="Duben" +NR_MAY="Květen" +NR_JUNE="Červen" +NR_JULY="Červenec" +NR_AUGUST="Srpen" +NR_SEPTEMBER="Září" +NR_OCTOBER="Říjen" +NR_NOVEMBER="Listopad" +NR_DECEMBER="Prosinec" +NR_NEVER="Nikdy" +NR_SECONDS="Sekund" +NR_MINUTES="Minuty" +NR_HOURS="Hodiny" +NR_DAYS="Dny" +NR_SESSION="Sezení" +NR_EVER="Vždy" +NR_COOKIE="Cookie" +NR_BOTH="Oba" +NR_NONE="Žádný" +NR_DESKTOPS="Stolní" +NR_MOBILES="Mobil" +NR_TABLETS="Tablet" +NR_PER_SESSION="Za sezení" +NR_PER_DAY="Za den" +NR_PER_WEEK="Za týden" +NR_PER_MONTH="Za měsíc" +NR_FOREVER="Navždy" +NR_FEATURE_UNDER_DEV="Tato funkce se stále vyvíjí" +NR_LIKE_THIS_EXTENSION="Líbí se vám toto rozšíření?" +NR_LEAVE_A_REVIEW="Napište hodnocení na JED" +NR_SUPPORT="Podpora" +NR_NEED_SUPPORT="Potřebujete pomoc?" +NR_DROP_EMAIL="Napište mi e-mail" +NR_READ_DOCUMENTATION="Prostudujte si dokumentaci" +NR_COPYRIGHT="%s - Tassos.gr Všechna práva vyhrazena" +NR_DASHBOARD="Dashboard" +NR_NAME="Název" +NR_WRONG_COORDINATES="Zadané souřadnice nejsou platné" +NR_ENTER_COORDINATES="Zeměpiská šířka a délka" +NR_NO_ITEMS_FOUND="Žádné položky" +NR_ITEM_IDS="Žádná ID položek" +NR_TOGGLE="Přepínač" +NR_EXPAND="Rozbalit" +NR_COLLAPSE="Sbalit" +NR_SELECTED="Vybrané" +NR_MAXIMIZE="Maximalizovat" +NR_MINIMIZE="Minimalizovat" +NR_SELECTION="Výběr" +NR_INSTALL="Instalovat" +NR_INSTALL_NOW="Instalovat nyní" +NR_INSTALLED="Nainstalováno" +NR_COMING_SOON="Již brzy" +NR_ROADMAP="Plánováno" +NR_MEDIA_VERSIONING="Používat verzování médií" +NR_MEDIA_VERSIONING_DESC="Zvolte přidání čísla verze přípony na konec URL adres médií (js/css), aby prohlížeče vynutily načtení správného souboru." +NR_LOAD_JQUERY="Nahrát jQuery" +NR_LOAD_JQUERY_DESC="Zvolte načtení jádra skriptu jQuery. Tuto možnost můžete zakázat, pokud bude docházet ke konfliktům, pokud vaše šablona nebo jiná rozšíření načítají vlastní verzi jQuery." +NR_SELECT_CURRENCY="Zvolte měnu" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Kampaň" +NR_ASSIGN_CONVERTFORMS_DESC="Cílení na návštěvníky, kteří se přihlásili k odběru konkrétních kampaní ConvertForms" +NR_CONVERTFORMS_LIST_DESC="Vyberte kampaně ConvertForms, které chcete přiřadit." +NR_LEFT="Vlevo" +NR_CENTER="Na střed" +NR_RIGHT="Vpravo" +NR_BOTTOM="Dolů" +NR_TOP="Nahoru" +NR_AUTO="Auto" +NR_CUSTOM="Vlastní" +NR_UPLOAD="Nahrát" +NR_IMAGE="Obrázek" +NR_INTRO_IMAGE="Úvodní obrázek" +NR_FULL_IMAGE="Plný obrázek" +NR_IMAGE_SELECT="Vybrat obrázek" +NR_IMAGE_SIZE_COVER="Obálka" +NR_IMAGE_SIZE_CONTAIN="Obsahuje" +NR_REPEAT="Opakovat" +NR_REPEAT_X="Opakovat x" +NR_REPEAT_Y="Opakovat y" +NR_REPEAT_NO="Neopakovat" +NR_FIELD_STATE_DESC="Nastavit stav položky" +NR_CREATED_DATE="Datum vytvoření" +NR_CREATED_DATE_DESC="Datum vytvoření položky" +NR_MODIFIFED_DATE="Datum úpravy" +NR_MODIFIFED_DATE_DESC="Datum, kdy byla položka naposledy upravena." +NR_CATEGORIES="Kategorie" +NR_CATEGORIES_DESC="Zvolte kategorie k přřazení" +NR_ALSO_ON_CHILD_ITEMS="Také na zděděné položky" +NR_ALSO_ON_CHILD_ITEMS_DESC="Přiřadit také k podřízeným položkám vybraných položek?" +NR_PAGE_TYPE="Typ stránky" +NR_PAGE_TYPES="Typy stránky" +NR_PAGE_TYPES_DESC="Vyberte, na jakých typech stránek má být přiřazení aktivní." +NR_CONTENT_VIEW_CATEGORY_BLOG="Kategorie Blog" +NR_CONTENT_VIEW_CATEGORY_LIST="Seznam kategorií" +NR_CONTENT_VIEW_CATEGORIES="Zobrazit všechny kategorie" +NR_CONTENT_VIEW_ARCHIVED="Archivované články" +NR_CONTENT_VIEW_FEATURES="Oblíbené články" +NR_CONTENT_VIEW_CREATE_ARTICLE="Vytvořit článek" +NR_CONTENT_VIEW_ARTICLE="Jeden článek" +NR_ARTICLE_VIEW_DESC="Umožňuje zohlednit zobrazení článku" +NR_CATEGORY_VIEW="Zobrazení kategorie" +NR_CATEGORY_VIEW_DESC="Povolit zohlednění zobrazení Kategorie" +NR_ARTICLES="Články" +NR_ARTICLES_DESC="Zvolte články k přiřazení." +NR_ARTICLE="Článek" +NR_ARTICLE_AUTHORS="Autoři" +NR_ARTICLE_AUTHORS_DESC="Zvolte autory k přiřazení" +NR_ONLY="Pouze" +NR_OTHERS="Ostatní" +NR_SMARTTAGS="Chytré štítky" +NR_SMARTTAGS_SHOW="Zobrazit chytré štítky" +NR_SMARTTAGS_NOTFOUND="Žádné chytré štítky" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Hledat chytré štítky" +NR_CONTACT_US="Kontaktujte nás" +NR_FONT_COLOR="Barva mísma" +NR_FONT_SIZE="Velikost písma" +NR_FONT_SIZE_DESC="Zvolte velikost písma v pixelech" +NR_TEXT="Text" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Zapnout přepsání výstupu" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Povolí vykreslování rozšíření při přepsání rozvržení stránky (tmpl). Příklady: tmpl=component nebo tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Zapnout přepis formátu" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Povolí vykreslování rozšíření, pokud formát stránky není jiný než HTML. Příklady: format=raw nebo format=json." +NR_GEOLOCATING="Geolokace" +NR_GEOLOCATING_DESC="Geolokace není vždy 100% přesná. Geolokace je založena na IP adrese návštěvníka. Ne všechny IP adresy jsou pevné nebo známé." +NR_CITY="Město" +NR_CITY_NAME="Název města" +NR_CONDITION_CITY_DESC="Zadejte název města v angličtině. Více měst oddělte čárkou." +NR_CONTINENT="Kontinent" +NR_REGION="Region" +NR_CONDITION_REGION_DESC="Hodnota se skládá ze dvou částí, z dvouznakového kódu země ISO 3166-1 a z kódu regionu. Hodnota by tedy měla mít následující tvar: KÓD_ZEMĚ-KÓD_OBLASTI. Úplný seznam kódů regionů naleznete po kliknutí na odkaz Vyhledat kód regionu." +NR_ASSIGN_COUNTRIES="Země" +NR_ASSIGN_COUNTRIES_DESC2="Cílení na návštěvníky, kteří se fyzicky nacházejí v určité zemi" +NR_ASSIGN_COUNTRIES_DESC="Zvolte státy k přiřazení" +NR_ASSIGN_CONTINENTS="Kontinent" +NR_ASSIGN_CONTINENTS_DESC="Zvolte kontinenty k přřazení" +NR_ASSIGN_CONTINENTS_DESC2="Cílení na návštěvníky, kteří se fyzicky nacházejí na určitém kontinentu" +NR_ICONTACT_ACCOUNTID_ERROR="Nepodařilo se získat iContact AccountID" +NR_TAG_CLIENTDEVICE="Typ zařízení návštěvníka" +NR_TAG_CLIENTOS="Operační systém návštěníka" +NR_TAG_CLIENTBROWSER="Prohlížeč návštevníka" +NR_TAG_CLIENTUSERAGENT="Řetězec agenta návštěvníka" +NR_TAG_IP="IP adresa návštěvníka" +NR_TAG_URL="URL stránky" +NR_TAG_URLENCODED="Šifrované URL stránky" +NR_TAG_URLPATH="Cesta ke stránce" +NR_TAG_REFERRER="Referrer stránky" +NR_TAG_SITENAME="Název webu" +NR_TAG_SITEURL="URL webu" +NR_TAG_PAGETITLE="Název stránky" +NR_TAG_PAGEDESC="Meta popis stránky" +NR_TAG_PAGELANG="Jazykový kód stránky" +NR_TAG_USERID="Uživatel ID" +NR_TAG_USERNAME="Plné jméno uživatele" +NR_TAG_USERLOGIN="Login uživatele" +NR_TAG_USEREMAIL="E-mail uživatele" +NR_TAG_USERFIRSTNAME="Jméno uživatele" +NR_TAG_USERLASTNAME="Příjmení uživatele" +NR_TAG_USERGROUPS="ID skupin uživatelů" +NR_TAG_DATE="Datum" +NR_TAG_TIME="Čas" +NR_TAG_RANDOMID="Náhodné ID" +NR_ICON="Ikona" +NR_SELECT_MODULE="Zvolte modul" +NR_SELECT_CONTINENT="Zvolte kontinent" +NR_SELECT_COUNTRY="Zvolte zemi" +NR_PLUGIN="Zásuvný modul" +NR_GMAP_KEY="Google Maps API klíč" +NR_GMAP_KEY_DESC="Klíč Google Maps API používají rozšíření Tassos.gr. Pokud se potýkáte s problémy s nenačtením mapy Google, pravděpodobně budete muset zadat vlastní klíč API." +NR_GMAP_FIND_KEY="Získat API klíč" +NR_ARE_YOU_SURE="Jste si jistý?" +NR_CUSTOMURL="Vlastní URL" +NR_SAMPLE="Vzor" +NR_DEBUG="Debug" +NR_CUSTOMURL="Vlastní URL" +NR_READMORE="Číst dále" +NR_IPADDRESS="IP adresa" +NR_ASSIGN_BROWSERS="Prohlížeč" +NR_ASSIGN_BROWSERS_DESC="Zvolte prohlížeče k přiřazení" +NR_ASSIGN_BROWSERS_DESC2="Cílení na návštěvníky, kteří si prohlížejí vaše stránky v konkrétních prohlížečích, jako je Chrome, Firefox nebo Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Operační systém" +NR_ASSIGN_OS_DESC="Zvolte operační systém k přiřazení" +NR_ASSIGN_OS_DESC2="Cílení na návštěvníky, kteří používají konkrétní operační systémy, například Windows, Linux nebo Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Počet shlédnutých stran" +NR_ASSIGN_PAGEVIEWS_DESC="Cílový návštěvníci, kteří shlédli stanovený počet stran" +NR_ASSIGN_PAGEVIEWS_VIEWS="Shlédnutí stran" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Zadejte počet shlednutí stránky" +NR_ASSIGN_COOKIENAME_NAME="Název cookie" +NR_ASSIGN_COOKIENAME_NAME_DESC="Zadejte název cookie k přiřazení" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Cílový návštěvníci, kteří mají uložené konkrétní cookie v prohlížeči" +NR_FEWER_THAN="Méně než" +NR_GREATER_THAN="Větší než" +NR_EXACTLY="Přesně" +NR_EXISTS="Existuje" +NR_IS_EQUAL="Je rovno" +NR_CONTAINS="Obsahuje" +NR_STARTS_WITH="Začíná" +NR_ENDS_WITH="Končí" +NR_ASSIGN_COOKIENAME_CONTENT="Obsah cookie" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Obsah cookie" +NR_ASSIGN_IP_ADDRESSES_DESC2="Cílový uživatelé jsou za konkrétní IP adresou (rozsahem)" +NR_ASSIGN_IP_ADDRESSES_DESC="Zadejte seznam ip adres oddělených čárkou a/nebo rozsahy oddělených 'enterem'

        Příklad:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="Uživatel ID" +NR_ASSIGN_USER_ID_DESC="Cílit na konkrétní Joomla uživatele podle jejich ID" +NR_ASSIGN_USER_ID_SELECTION_DESC="Zadejte ID uživatelů Joomla, oddělené čárkou " +NR_ASSIGN_COMPONENTS="Komponenta" +NR_ASSIGN_COMPONENTS_DESC="Zvolte komponenty k přiřazení" +NR_ASSIGN_COMPONENTS_DESC2="Cílení na návštěvníky, kteří si prohlížejí konkrétní komponenty" +NR_ASSIGN_TIMERANGE="Rozsah času" +NR_ASSIGN_TIMERANGE_DESC="Cílový návštěvníci na základě času serveru" +NR_START_TIME="Čas začátku" +NR_END_TIME="Čas konce" +NR_START_PUBLISHING_TIMERANGE_DESC="Zadejte čas do začátku zveřejnění" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Zadejte čas do ukončení zveřejnění" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_DESC="Chcete-li získat web a tajný klíč pro svou doménu, přejděte na stránku https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Klíč webu" +NR_RECAPTCHA_SITE_KEY_DESC="Používá se v k'du JavaScript , který je odesílán vašim uživatelům." +NR_RECAPTCHA_SECRET_KEY="Tajný klíč" +NR_RECAPTCHA_SECRET_KEY_DESC="Používá se při komunikaci mezi vaším a reCAPTCHA serverem. Uchovejte v bezpečí." +NR_RECAPTCHA_SITE_KEY_ERROR="Klíč reCaptcha pro web chybí nebo není platný" +NR_PREVIOUS_MONTH="Předchozí měsíc" +NR_NEXT_MONTH="Následující měsíc" +NR_ASSIGN_GROUP_PAGE_URL="Strana / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Cílení na návštěvníky, kteří si prohlížejí konkrétní položky menu nebo adresy URL" +NR_ASSIGN_GROUP_DATETIME_DESC="Spouštěč boxu založený na datu a čase serveru" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla uživatel / Návštevník" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Cílení na registrované uživatele nebo návštěvníky, kteří si prohlédli určitý počet stránek" +NR_ASSIGN_GROUP_PLATFORM="Platforma návštevníka" +NR_ASSIGN_GROUP_PLATFORM_DESC="Cílení na návštěvníky, kteří používají mobilní zařízení, Google Chrome nebo Windows" +NR_ASSIGN_GROUP_GEO_DESC="Cílový návštěvníci, kteří jsou fyzicky v určité oblasti" +NR_ASSIGN_GROUP_JCONTENT="Joomla! obsah" +NR_ASSIGN_GROUP_JCONTENT_DESC="Cílení na návštěvníky, kteří si prohlížejí konkrétní články nebo kategorie systému Joomla" +NR_ASSIGN_GROUP_SYSTEM="Systém / Integrace" +NR_ASSIGN_GROUP_SYSTEM_DESC="Cílení na návštěvníky, kteří interagovali s konkrétními rozšířeními Joomla 3. stran" +NR_ASSIGN_GROUP_ADVANCED="Rozšířené cílení na návštěvníky" +NR_ASSIGN_USERGROUP_DESC="Zacílit na určitou skupinu Joomla uživatelů" +NR_ASSIGN_ARTICLE_DESC="Cílový návštěvníci, kteří prohlížejí určité Joomla články" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Cílový návštěvníci, kteří prohlížejí určité Joomla kategorie" +NR_EXTENSION_REQUIRED="%s aby kompomeneta fungovala správně, zásuvný modul %s musí být povolen." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Cílení na návštěvníky, kteří si prohlížejí konkrétní položky, kategorie nebo značky K2" +NR_ASSIGN_K2_ITEMS="Položka" +NR_ASSIGN_K2_ITEMS_DESC="Cílový návštěvníci, kteří procházejí určité položky K2." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Zvolte K2 článek k přiřazení" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Shoda s konkrétními klíčovými slovy v obsahu položky. Oddělte je čárkou nebo nebo vložením na nový řádek." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Shoda na meta klíčových slovech položky. Oddělte je čárkou nebo nebo vložením na nový řádek." +NR_ASSIGN_K2_PAGETYPES_DESC="Cílový návštěvníci, kteří procházejí určité typy K2 stránek" +NR_ASSIGN_K2_ITEM_OPTION="Položka" +NR_ASSIGN_K2_LATEST_OPTION="Poslední položky od uživatelů nebo kategorií" +NR_ASSIGN_K2_TAG_OPTION="Oštítkovat stránku" +NR_ASSIGN_K2_CATEGORY_OPTION="Stránka kategorií" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Formulář pro úpravu položky" +NR_ASSIGN_K2_USER_PAGE_OPTION="Stránka uživatele (blog)" +NR_ASSIGN_K2_TAGS_DESC="Cílení na návštěvníky, kteří si prohlížejí položky K2 s konkrétními značkami" +NR_ASSIGN_K2_CATEGORIES_DESC="Cílení na návštěvníky, kteří si prohlížejí konkrétní kategorie K2" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Kategorie" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Položky" +NR_ASSIGN_PAGE_TYPES_DESC="Zvolte typy stránek k přiřazení" +NR_ASSIGN_TAGS_DESC="Zvolte šítky k přiřazení" +NR_CONTENT_KEYWORDS="Klíčová slova obsahu" +NR_META_KEYWORDS="Meta klíčová slova" +NR_TAG="Štítek" +NR_NORMAL="Normální" +NR_COMPACT="Kompaktní" +NR_LIGHT="Světlý" +NR_DARK="Tmavý" +NR_SIZE="Velikost" +NR_THEME="Šablona" +NR_SINGLE="Jeden" +NR_MULTIPLE="Více" +NR_RANGE="Rozsah" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Prosím ověřte" +NR_RECAPTCHA_INVALID_SECRET_KEY="Neplatný tajný klíč" +NR_PAGE="Stránka" +NR_YOU_ARE_USING_EXTENSION="Používáte %s %s" +NR_UPDATE="Aktualizace" +NR_SHOW_UPDATE_NOTIFICATION="Zobrazit upozornění na aktualizace" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Pokud je tato možnost vybrána, zobrazí se v hlavním zobrazení komponenty oznámení o aktualizaci pokaždé, když je vydána nová verze tohoto rozšíření." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s je dostupná" +NR_ERROR_EMAIL_IS_DISABLED="Posílání e-mailů je vypnuté. E-maily není možné odeslat." +NR_ASSIGN_ITEMS="Položka" +NR_COUNTRY_AF="Afghánistán" +NR_COUNTRY_AX="Ostrov Aland" +NR_COUNTRY_AL="Albánie" +NR_COUNTRY_DZ="Alžírsko" +NR_COUNTRY_AS="Americká Samoa" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antarktida" +NR_COUNTRY_AG="Antigua a Barbuda" +NR_COUNTRY_AR="Argentina" +NR_COUNTRY_AM="Arménie" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Austrálie" +NR_COUNTRY_AT="Rakousko" +NR_COUNTRY_AZ="Ázerbájdžán" +NR_COUNTRY_BS="Bahamy" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladéš" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Bělorusko" +NR_COUNTRY_BE="Belgie" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benin" +NR_COUNTRY_BM="Bermudy" +NR_COUNTRY_BQ_BO="Bonaire" +NR_COUNTRY_BQ_SA="Saba" +NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhután" +NR_COUNTRY_BO="Bolivie" +NR_COUNTRY_BA="Bosna a Herzegovina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="ostrov Bouvet" +NR_COUNTRY_BR="Brazílie" +NR_COUNTRY_IO="Britské indickoocenánské území" +NR_COUNTRY_BN="Brunei Darussalam" +NR_COUNTRY_BG="Bulharsko" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Kambodža" +NR_COUNTRY_CM="Kamerun" +NR_COUNTRY_CA="Kanada" +NR_COUNTRY_CV="Kapverdy" +NR_COUNTRY_KY="Kajmanské ostrovy" +NR_COUNTRY_CF="Středoafrická republika" +NR_COUNTRY_TD="Čad" +NR_COUNTRY_CL="Chile" +NR_COUNTRY_CN="Čína" +NR_COUNTRY_CX="Vánoční ostrov" +NR_COUNTRY_CC="Kokosové ostrovy" +NR_COUNTRY_CO="Kolumbie" +NR_COUNTRY_KM="Komorské ostrovy" +NR_COUNTRY_CG="Kongo" +NR_COUNTRY_CD="Demokratická republika Kongo" +NR_COUNTRY_CK="Cookovy ostrovy" +NR_COUNTRY_CR="Kostarika" +NR_COUNTRY_CI="Pobřeží slonoviny" +NR_COUNTRY_HR="Chrovatsko" +NR_COUNTRY_CU="Kuba" +NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Kypr" +NR_COUNTRY_CZ="Česká republika" +NR_COUNTRY_DK="Dánsko" +NR_COUNTRY_DJ="Džibuti" +NR_COUNTRY_DM="Dominika" +NR_COUNTRY_DO="Dominikánská republika" +NR_COUNTRY_EC="Ekvádor" +NR_COUNTRY_EG="Egypt" +NR_COUNTRY_SV="Salvador" +NR_COUNTRY_GQ="Rovníková Guinea" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Estonsko" +NR_COUNTRY_ET="Etiopie" +NR_COUNTRY_FK="Falklandy (Malvíny)" +NR_COUNTRY_FO="Faerské ostrovy" +NR_COUNTRY_FJ="Fiji" +NR_COUNTRY_FI="Finsko" +NR_COUNTRY_FR="Francie" +NR_COUNTRY_GF="Francouzská Guyana" +NR_COUNTRY_PF="Francouzská Guyana" +NR_COUNTRY_TF="Francouzská jižní a antarktická území" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gambie" +NR_COUNTRY_GE="Gruzie" +NR_COUNTRY_DE="Německo" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Řecko" +NR_COUNTRY_GL="Greenland" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadeloupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haiti" +NR_COUNTRY_HM="Heardův ostrov a McDonaldovy ostrovy" +NR_COUNTRY_VA="Svatý stolec (Vatikán)" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Maďarsko" +NR_COUNTRY_IS="Island" +NR_COUNTRY_IN="Indie" +NR_COUNTRY_ID="Indonézie" +NR_COUNTRY_IR="Írán" +NR_COUNTRY_IQ="Irák" +NR_COUNTRY_IE="Irsko" +NR_COUNTRY_IM="ostrov Man" +NR_COUNTRY_IL="Izrael" +NR_COUNTRY_IT="Itálie" +NR_COUNTRY_JM="Jamaika" +NR_COUNTRY_JP="Japonsko" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordánsko" +NR_COUNTRY_KZ="Kazachstán" +NR_COUNTRY_KE="Keňa" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="Jižní Korea" +NR_COUNTRY_KR="Severní Korea" +NR_COUNTRY_KW="Kuvajt" +NR_COUNTRY_KG="Kyrgyzstán" +NR_COUNTRY_LA="Laos" +NR_COUNTRY_LV="Lotyšsko" +NR_COUNTRY_LB="Libanon" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Libérie" +NR_COUNTRY_LY="Lybie" +NR_COUNTRY_LI="Lichtenštejnsko" +NR_COUNTRY_LT="Litva" +NR_COUNTRY_LU="Lucembursko" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Makedonie" +NR_COUNTRY_MG="Madagascar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malajsie" +NR_COUNTRY_MV="Maledivy" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Marshallovy ostrovy" +NR_COUNTRY_MQ="Martinik" +NR_COUNTRY_MR="Mauretánie" +NR_COUNTRY_MU="Mauritius" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Mexiko" +NR_COUNTRY_FM="Federativní státy Mikronésie" +NR_COUNTRY_MD="Moldavsko" +NR_COUNTRY_MC="Monako" +NR_COUNTRY_MN="Mongolsko" +NR_COUNTRY_ME="Černá Hora" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Maroko" +NR_COUNTRY_MZ="Mozambik" +NR_COUNTRY_MM="Myanmar (Barma)" +NR_COUNTRY_NA="Namibie" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="Severní Makedonie" +NR_COUNTRY_NP="Nepál" +NR_COUNTRY_NL="Nizozemí" +NR_COUNTRY_AN="Nizozemské Antily" +NR_COUNTRY_NC="Nová Kaledonie" +NR_COUNTRY_NZ="Nový Zéland" +NR_COUNTRY_NI="Nikaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigerie" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="ostrov Norfolk" +NR_COUNTRY_MP="Severní Mariany" +NR_COUNTRY_NO="Norsko" +NR_COUNTRY_OM="Omán" +NR_COUNTRY_PK="Pákistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Okupovaná palestinská území" +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papua-Nová Guinea" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Peru" +NR_COUNTRY_PH="Filipíny" +NR_COUNTRY_PN="Pitcairnovy ostrovy" +NR_COUNTRY_PL="Polsko" +NR_COUNTRY_PT="Portugalsko" +NR_COUNTRY_PR="Portoriko" +NR_COUNTRY_QA="Katar" +NR_COUNTRY_RE="Reunion" +NR_COUNTRY_RO="Rumunsko" +NR_COUNTRY_RU="Ruská federace" +NR_COUNTRY_RW="Rwanda" +NR_COUNTRY_SH="Svatá Helena" +NR_COUNTRY_KN="Svatý Kryštof a Nevis" +NR_COUNTRY_LC="Svatá Lucie" +NR_COUNTRY_PM="Saint Pierre a Miquelon" +NR_COUNTRY_VC="Svatý Vincenc a Grenadiny" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="Sao Tome a Principe" +NR_COUNTRY_SA="Saúdská Arábie" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Srbsko" +NR_COUNTRY_SC="Seychelly" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapur" +NR_COUNTRY_SK="Slovensko" +NR_COUNTRY_SI="Slovinsko" +NR_COUNTRY_SB="Šalamounovy ostrovy " +NR_COUNTRY_SO="Somálsko" +NR_COUNTRY_ZA="Jižní Afrika" +NR_COUNTRY_GS="Jižní Georgie a Jižní Sandwichovy ostrovy" +NR_COUNTRY_ES="Španělsko" +NR_COUNTRY_LK="Srí Lanka" +NR_COUNTRY_SD="Súdán" +NR_COUNTRY_SS="Jižní Súdán" +NR_COUNTRY_SR="Surinam" +NR_COUNTRY_SJ="Špicberky a Jan Mayen" +NR_COUNTRY_SZ="Svazijsko" +NR_COUNTRY_SE="Švédsko" +NR_COUNTRY_CH="Švýcarsko" +NR_COUNTRY_SY="Sýrie" +NR_COUNTRY_TW="Tchaj-wan" +NR_COUNTRY_TJ="Tádžikistán" +NR_COUNTRY_TZ="Tanzánie" +NR_COUNTRY_TH="Thajsko" +NR_COUNTRY_TL="Východní Timor" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad a Tobago" +NR_COUNTRY_TN="Tunisko" +NR_COUNTRY_TR="Turecko" +NR_COUNTRY_TM="Turkmenistán" +NR_COUNTRY_TC="ostrovy Turks a Caicos" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ukrajina" +NR_COUNTRY_AE="Spojené arabské emiráty" +NR_COUNTRY_GB="Velká Británie" +NR_COUNTRY_US="Spojené státy americké" +NR_COUNTRY_UM="Menší odlehlé ostrovy USA" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Uzbekistán" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Britské Panenské ostrovy" +NR_COUNTRY_VI="Britské Panenské ostrovy" +NR_COUNTRY_WF="Wallis a Futuna" +NR_COUNTRY_EH="Západní Sahara" +NR_COUNTRY_YE="Jemen" +NR_COUNTRY_ZM="Zambie" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Afrika" +NR_CONTINENT_AS="Asie" +NR_CONTINENT_EU="Evropa" +NR_CONTINENT_NA="Severní Amerika" +NR_CONTINENT_SA="Jižní Amerika" +NR_CONTINENT_OC="Oceánie" +NR_CONTINENT_AN="Antarktida" +NR_FRONTEND="Front-end" +NR_BACKEND="Administrace" +NR_EMBED="Vložený kód" +NR_RATE="Ohodnoťte %s" +NR_REPORT_ISSUE="Nahlásit chybu" +NR_TAG_PAGEGENERATOR="Generátor stránky" +NR_TAG_PAGELANGURL="URL stránky jazyka" +NR_TAG_PAGEKEYWORDS="Klíčová slova stránky" +NR_TAG_SITEEMAIL="E-mail stránky" +NR_TAG_DAY="Den" +NR_TAG_MONTH="Měsíc" +NR_TAG_YEAR="Rok" +NR_TAG_USERREGISTERDATE="Datum registrace" +NR_TAG_PAGEBROWSERTITLE="Název stránky v prohlížeči" +NR_TAG_EBID="ID Boxu" +NR_TAG_EBTITLE="Název boxu" +NR_TAG_QUERYSTRINGOPTION="Řetězec dotazu : Možnosti" +NR_TAG_QUERYSTRINGVIEW="Řetězec dotazu : Zobrazení" +NR_TAG_QUERYSTRINGLAYOUT="Řetězec dotazu : Vzhled" +NR_TAG_QUERYSTRINGTMPL="Řetězec dotazu : Šablona" +NR_CANNOT_CREATE_FOLDER="Nelze vytvořit adresář nebo přesunout soubor. %s" +NR_CANNOT_MOVE_FILE="Nelze přesunout soubor: %s" +NR_UPLOAD_INVALID_FILE_TYPE="Nepodporovaný typ souboru: %s (%s). Povolené typy souborů jsou: %s" +NR_UPLOAD_NO_MIME_TYPE="Nelze odhadnout typ mime souboru: %s. Zkontrolujte, zda je povoleno rozšíření PHP fileinfo." +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Nelze nahrát soubor: %s" +NR_START_OVER="Začít znovu" +NR_TRY_AGAIN="Zkusit zvova" +NR_ERROR="Chyba" +NR_CANCEL="Zrušit" +NR_PLEASE_WAIT="Prosím čekejte" +NR_HCAPTCHA="hCaptcha" +NR_TYPE="Typ" +NR_CHECKBOX="Zaškrtávací políčko" +NR_INVISIBLE="Neviditelný" +NR_HCAPTCHA_DESC="Chcete-li získat web a tajný klíč pro svou doménu, přejděte na stránku https://dashboard.hcaptcha.com/sites." +NR_HCAPTCHA_SECRET_KEY_DESC="Používá se při komunikaci mezi vaším serverem a serverem hCaptcha. Ujistěte se, že jej uchováte v tajnosti." +NR_OUTDATED_EXTENSION="Vaše verze %s je starší než %d dní a s největší pravděpodobností je již zastaralá. Zkontrolujte prosím, zda nebyla vydána %snovější verze%s a nainstalujte ji." diff --git a/deployed/convertforms/plugins/system/nrframework/language/de-DE/de-DE.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/de-DE/de-DE.plg_system_nrframework.ini new file mode 100644 index 00000000..3845bd18 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/de-DE/de-DE.plg_system_nrframework.ini @@ -0,0 +1,735 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - used by Tassos.gr extensions" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorieren" +NR_INCLUDE="Einbeziehen" +NR_EXCLUDE="Ausschließen" +NR_SELECTION="Auswählen" +NR_ASSIGN_MENU_NOITEM="Enthält keine Artikel-Nummer" +NR_ASSIGN_MENU_NOITEM_DESC="Zuweisen, auch wenn kein Menü Artikel-ID in URL gesetzt ist?" +NR_ASSIGN_MENU_CHILD="Auch für untergeordnete Elemente" +NR_ASSIGN_MENU_CHILD_DESC="Auch untergeordneten Elementen der ausgewählten Elemente zuweisen?" +NR_COPY_OF="Kopie der %s" +NR_ASSIGN_DATETIME_DESC="Besucher basierend auf der Datums- / Uhrzeit Ihres Servers ansprechen" +NR_DATETIME="Datum & Uhrzeit" +NR_TIME="Zeit" +NR_DATE="Datum" +NR_DATETIME_DESC="Eintragen der Tageszeit zum automatischen veröffentlichen/sperren" +NR_START_PUBLISHING="Startzeit" +NR_START_PUBLISHING_DESC="Geben Sie das Datum der Veröffentlichung an" +NR_FINISH_PUBLISHING="Endzeit" +NR_FINISH_PUBLISHING_DESC="Geben Sie das Datum des Veröffentlichung Ende an" +NR_DATETIME_NOTE="Die Datums- und Zeitzuordnungen des Server verwenden, nicht die des Besucher Systems." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP Kode" +NR_ASSIGN_PHP_DESC="Geben Sie einen PHP-Kode ein, der ausgewertet werden soll." +NR_ASSIGN_PHP_DESC2="Richten Sie sich an Besucher, die benutzerdefinierten PHP-Code bewerten. Der Code muss den Wert true oder false zurückgeben.

        For instance:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Nutzungszeit auf Seite" +NR_SECONDS="Sekunden" +NR_ASSIGN_TIMEONSITE_DESC="Geben Sie eine Dauer in Sekunden an, mit der Benutzergesamtzeit, die mit der verbrachten Verweildauer vergleichen wird.
        Beispiel: KONTAKT Wenn ein Feld angezeigt werden soll, nachdem der Benutzer 3 Minuten auf der Webseite verbracht hat, geben Sie 180 ein." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +NR_ASSIGN_URLS_DESC="Geben Sie die URLs an die passen (Teilbereich).
        Verwenden Sie für jede einzelne Bereich eine neue Zeile." +NR_ASSIGN_URLS_LIST="URL Übereinstimmung" +NR_ASSIGN_URLS_REGEX="Use Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="Wählen Sie den Wert der als reguläre Ausdrücke behandelt werden soll." +NR_ASSIGN_LANGS="Sprache" +NR_ASSIGN_LANGS_DESC="Richten Sie sich an Besucher, die auf Ihrer Website in einer bestimmten Sprache surfen" +NR_ASSIGN_LANGS_LIST_DESC="Sprache wählen" +NR_ASSIGN_DEVICES="Geräte" +NR_ASSIGN_DEVICES_DESC2="Richten Sie sich an Besucher, die auf Ihrer Website mit einen bestimmten Gerät surfen." +NR_ASSIGN_DEVICES_DESC="Ordnen Sie die Geräte zu." +NR_ASSIGN_DEVICES_NOTE="Beachten Sie, dass die Geräteerkennung nicht immer 100% genau ist. Benutzer können ihren Browser so einrichten, dass er andere Geräte nachahmt" +NR_MENU="Menü" +NR_MENU_ITEMS="Menüpunkt" +NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +NR_USERGROUP="Benutzergruppe" +NR_ACCESSLEVEL="Nutzergruppe" +NR_ACCESSLEVEL_DESC="Wählen Sie die Benutzergruppen aus, denen Sie zuweisen möchten.

        Hinweis: Wenn Sie sie öffentlich machen möchten, wählen Sie einfach Ignorieren und nicht Öffentlich." +NR_SHOW_COPYRIGHT="Zeige Copyright" +NR_SHOW_COPYRIGHT_DESC="Wenn diese Option ausgewählt ist, werden zusätzliche Copyright-Informationen in den Administratoransichten angezeigt. Die Erweiterungen von Tassos.gr zeigen keine Copyright-Informationen oder Backlinks im Frontend an." +NR_WIDTH="Breite" +NR_WIDTH_DESC="Füge die Breite in px, em hinzu %

        Example: 400px" +NR_HEIGHT="Height" +NR_HEIGHT_DESC="Füge die Höhe in px, em hinzu %

        Example: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Füge padding in px, em hinzu %

        Example: 20px" +NR_MARGIN="Abstand" +NR_MARGIN_DESC="Die CSS-Randeigenschaft wird verwendet, um Platz um das Feld zu generieren und die Größe des Leerraums außerhalb des Rahmens in Pixel oder in% festzulegen.

        Beispiel 1: 25px
        Beispiel 2: 5%

        Festlegen des Rands für jede Seite [oben rechts unten links]:

        Nur Oberseite: 25px 0 0 0
        Nur rechte Seite: 0 25px 0 0
        Nur Unterseite : 0 0 25px 0
        Nur linke Seite: 0 0 0 25px " +NR_COLOR_HOVER="Schwebefarbe" +NR_COLOR="Farbe" +NR_COLOR_DESC="Definiere eine Farbe im HEX oder RGBA Format." +NR_TEXT_COLOR="Textfarbe" +NR_BACKGROUND="Hintergrund" +NR_BACKGROUND_COLOR="Hintergrundfarbe" +NR_BACKGROUND_COLOR_DESC="Definieren Sie eine Hintergrundfarbe im HEX- oder RGBA-Format. Zum Deaktivieren geben Sie 'none' ein. Für absolute Transparenz geben Sie 'transparent' ein." +NR_URL_SHORTENING_FAILED="Kürzung %s mit %s gescheitert. %s." +NR_EXPORT="Export" +NR_IMPORT="Import" +NR_PLEASE_CHOOSE_A_VALID_FILE="Bitte wählen Sie einen erlaubten Dateinamen" +NR_IMPORT_ITEMS="Importiere Artikel" +NR_PUBLISH_ITEMS="veröffentliche Artikel" +NR_AS_EXPORTED="als exportierte" +NR_TITLE="Titel" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing Liste" +NR_ACYMAILING_LIST_DESC="AcyMailing-Listen zum Zuweisen auswählen." +NR_ASSIGN_ACYMAILING_DESC="Besucher ansprechen, die bestimmte AcyMailing-Listen abonniert haben" +NR_AKEEBASUBS="Akeeba Abonnements" +NR_AKEEBASUBS_LEVELS="Levels" +NR_AKEEBASUBS_LEVELS_DESC="Wählen Sie die Akeeba-Abonnementebenen aus, denen Sie zuweisen möchten." +NR_ASSIGN_AKEEBASUBS_DESC="Besucher ansprechen, die bestimmte Akeeba-Abonnements abonniert haben" +NR_MATCH="Übereinstimmung" +NR_MATCH_DESC="Die verwendete Matching-Methode zum Vergleichen des Wertes" +NR_ASSIGN_MATCHING_METHOD="Abstimmungsmethode" +NR_ASSIGN_MATCHING_METHOD_DESC="Sollten alle oder irgendwelche Zuordnungen übereinstimmen?

        Alle
        Wird veröffentlicht, wenn Alle der unten angegebenen Zuordnungen übereinstimmen. < br />
        Beliebig
        Wird veröffentlicht, wenn Beliebig (eine oder mehrere) der folgenden Zuordnungen übereinstimmen.
        Zuordnungsgruppen, in denen ' "_QQ_"Ignorieren"_QQ_" wird ignoriert. " +NR_ANY="irgendeine" +NR_ASSIGN_REFERRER="Referenz URL" +NR_ASSIGN_REFERRER_DESC2="Besucher ansprechen, die von einer bestimmten Verkehrsquelle auf Ihrer Website landen" +NR_ASSIGN_REFERRER_DESC="Geben Sie eine Referrer-URL pro Zeile ein: ZB:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Beachten Sie, dass die Erkennung von URL-Verweisen nicht immer 100% genau ist. Einige Server verwenden möglicherweise Proxys, die diese Informationen entfernen, und sie können leicht gefälscht werden."_QQ_"NR_PROFEATURE_HEADER="_QQ_"%s ist PRO Eigenschaft" +NR_PROFEATURE_HEADER="%s ist eine PRO Eigenschaft" +NR_PROFEATURE_DESC="Entschuldigung, %s ist nicht verfügbar in Ihre Abonnement. Bitte auf PRO upgraden um dieses Eigenschaft nutzen zu können" +NR_PROFEATURE_DISCOUNT="Bonus: %s Sie bekommen von uns persönliche Rabbat 20% von reguläre Preis automatisch bei Vertragsabschluß und Bezahlung." +NR_ONLY_AVAILABLE_IN_PRO="nur in der PRO-Version enthalten" +NR_UPGRADE_TO_PRO="auf PRO-Version upgraden" +NR_UPGRADE_TO_PRO_TO_UNLOCK="zur Freigabe auf PRO-Version upgraden" +NR_UPGRADE_TO_PRO_VERSION="Super! Nur noch ein Schritt. Klicken Sie auf die Schaltfläche unten, um das Upgrade auf die Pro-Version abzuschließen." +NR_UNLOCK_PRO_FEATURE="Pro Eigenschaften freischalten" +NR_USING_THE_FREE_VERSION="Sie verwenden die KOSTENLOSE Version von Convert Forms. Für die volle Funktionalität ist die PRO-Version erforderlich." +NR_LEFT_TO_RIGHT="von Links nach Rechts" +NR_RIGHT_TO_LEFT="von Rechts nach Links" +NR_BGIMAGE="Hintergrundbild" +NR_BGIMAGE_DESC="setze ein Hintergrundbild" +NR_BGIMAGE_FILE="Bild" +NR_BGIMAGE_FILE_DESC="wähle ein Bild aus oder lade es hoch" +NR_BGIMAGE_REPEAT="wiederhole" +NR_BGIMAGE_REPEAT_DESC="Die Eigenschaft"_QQ_" Hintergrundwiederholung "_QQ_"legt fest, ob / wie ein Hintergrundbild wiederholt wird. Standardmäßig wird ein Hintergrundbild sowohl vertikal als auch horizontal wiederholt.

        Wiederholen: Das Hintergrundbild wird sowohl vertikal als auch wiederholt horizontal.

        Repeat-x: Das Hintergrundbild wird nur horizontal wiederholt.

        Repeat-y: Das Hintergrundbild wird nur vertikal wiederholt.

        No-repeat: Der Hintergrund -Bild wird nicht wiederholt " +NR_BGIMAGE_SIZE="Größe" +NR_BGIMAGE_SIZE_DESC="Geben Sie die Größe eines Hintergrundbilds an.

        Auto: Das Hintergrundbild enthält Breite und Höhe.

        Cover: Skalieren Sie das Hintergrundbild so groß wie möglich, damit der Hintergrund erscheint Bereich wird vollständig vom Hintergrundbild abgedeckt. Einige Teile des Hintergrundbilds werden möglicherweise nicht im Bereich für die Hintergrundpositionierung angezeigt.

        Enthalten: Skalieren Sie das Bild auf die größte Größe, sodass sowohl seine Breite als auch seine Höhe passen im Inhaltsbereich

        100% 100%: Dehnen Sie das Hintergrundbild, um den Inhaltsbereich vollständig zu bedecken. " +NR_BGIMAGE_POSITION="Position" +NR_BGIMAGE_POSITION_DESC="Die Eigenschaft"_QQ_" Hintergrundposition "_QQ_"legt die Startposition eines Hintergrundbilds fest. Standardmäßig wird ein Hintergrundbild in der oberen linken Ecke platziert. Der erste Wert ist die horizontale Position und der zweite Wert ist die vertikale.

        Sie können entweder einen der vordefinierten Werte verwenden oder einen benutzerdefinierten Wert in Prozent eingeben: x% y% oder in Pixel xPos yPos. " +NR_RTL="erlaube RTL" +NR_RTL_DESC="Die Textrichtung von rechts nach links ist für Skripte von rechts nach links wie Arabisch, Hebräisch, Syrisch und Thaana von wesentlicher Bedeutung."_QQ_"NR_HORIZONTAL="_QQ_"Horizontal" +NR_HORIZONTAL="Horizontal" +NR_VERTICAL="Vertikal" +NR_FORM_ORIENTATION="Formularausrichtung" +NR_FORM_ORIENTATION_DESC="wähle die Formularausrichtung" +NR_ASSIGN_CATEGORY="Kategorien" +NR_ASSIGN_CATEGORY_DESC="wähle eine Kategorie im Kontext zu" +NR_ASSIGN_CATEGORY_CHILD="auch in den Unterbereichen" +NR_ASSIGN_CATEGORY_CHILD_DESC="Also assign to child items of the selected items?" +NR_NEW="Neu" +NR_LIST="Liste" +NR_DOCUMENTATION="Dokumentation" +NR_KNOWLEDGEBASE="Wissensdatenbank" +NR_FAQ="FAQ" +NR_INFORMATION="Information" +NR_EXTENSION="Erweiterung" +NR_VERSION="Version" +NR_CHANGELOG="Änderungsverlauf" +; NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Download-Schlüssel fehlt" +NR_DOWNLOAD_KEY="Downloadschlüssel" +NR_DOWNLOAD_KEY_DESC="Um Ihren Download-Schlüssel zu finden, melden Sie sich in Ihrem Konto auf Tassos.gr an und gehen Sie zum Bereich Downloads.

        Hinweis: Wenn Sie hier den Download-Schlüssel festlegen, werden kostenlose Versionen nicht auf Pro-Versionen aktualisiert. Um die Pro-Funktionen freizuschalten, müssen Sie die Pro-Version auch über die kostenlose Version installieren." +NR_DOWNLOAD_KEY_HOW="Um %s über den Joomla-Updater aktualisieren zu können, müssen Sie Ihren Download-Schlüssel in den Einstellungen des Novarain Framework-Plugins eingeben." +NR_DOWNLOAD_KEY_FIND="finde den Downloadschlüssel" +NR_DOWNLOAD_KEY_UPDATE="aktualisiere den Downloadschlüssel" +NR_OK="OK" +NR_MISSING="nicht auffindbar" +NR_LICENSE="Lizenz" +NR_AUTHOR="Autor" +NR_FOLLOWME="Folge mir" +NR_FOLLOW="Folge %en" +NR_TRANSLATE_INTEREST="Sind Sie interessiert, bei der Übersetzung %s in Ihre Sprache zu helfen?" +NR_TRANSIFEX_REQUEST="senden Sie mir eine Anfrage über Transiflex" +NR_HELP_WITH_TRANSLATIONS="hilf mit Transiflex" +NR_PUBLISHING_ASSIGNMENTS="Publishing Assignments" +NR_ADVANCED="Erweitert" +NR_USEGLOBAL="nutze es generell" +NR_WEEKDAY="Wochentag" +NR_MONTH="Monat" +NR_MONDAY="Montag" +NR_TUESDAY="Dienstag" +NR_WEDNESDAY="Mittwoch" +NR_THURSDAY="Donnerstag" +NR_FRIDAY="Freitag" +NR_SATURDAY="Samstag" +NR_WEEKEND="Wochenende" +NR_WEEKDAYS="Wochentage" +NR_SUNDAY="Sonntag" +NR_JANUARY="Januar" +NR_FEBRUARY="Februar" +NR_MARCH="März" +NR_APRIL="April" +NR_MAY="Mai" +NR_JUNE="Juni" +NR_JULY="Juli" +NR_AUGUST="August" +NR_SEPTEMBER="September" +NR_OCTOBER="Oktober" +NR_NOVEMBER="November" +NR_DECEMBER="Dezember" +NR_NEVER="Niemals" +NR_SECONDS="Sekunden" +NR_MINUTES="Minuten" +NR_HOURS="Stunden" +NR_DAYS="Tage" +NR_SESSION="Sitzung" +NR_EVER="Immer" +NR_COOKIE="Cookie" +NR_BOTH="Beide" +NR_NONE="Nicht" +NR_DESKTOPS="Computer" +NR_MOBILES="Mobiltelefon" +NR_TABLETS="Tablet" +NR_PER_SESSION="pro Sitzung" +NR_PER_DAY="pro Tag" +NR_PER_WEEK="pro Woche" +NR_PER_MONTH="pro Monat" +NR_FOREVER="Dauerhaft" +NR_FEATURE_UNDER_DEV="Diese Funktion ist noch in der Entwicklung" +NR_LIKE_THIS_EXTENSION="Sie mögen diese Erweiterung?" +NR_LEAVE_A_REVIEW="Bewerten Sie auf JED" +NR_SUPPORT="Unterstützung" +NR_NEED_SUPPORT="eine Unterstützung wird benötigt?" +NR_DROP_EMAIL="senden Sie mir eine Email" +NR_READ_DOCUMENTATION="Lsen Sie die Dokumentation" +NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +NR_DASHBOARD="Oberfläche" +NR_NAME="Name" +NR_WRONG_COORDINATES="Die angegebenen Koordinaten sind nicht korrekt" +NR_ENTER_COORDINATES="Latitude,Longitude" +NR_NO_ITEMS_FOUND="keine Einträge gefunden" +NR_ITEM_IDS="keine Eintrags-ID" +NR_TOGGLE="Toggle" +NR_EXPAND="ausklappen" +NR_COLLAPSE="zusammenklappen" +NR_SELECTED="ausgewählt" +NR_MAXIMIZE="vergrößern" +NR_MINIMIZE="Verkleinern" +NR_SELECTION="Auswählen" +NR_INSTALL="Installieren" +NR_INSTALL_NOW="jetzt installlieren" +NR_INSTALLED="Installiert" +NR_COMING_SOON="kommt demnächst" +NR_ROADMAP="Geplant" +NR_MEDIA_VERSIONING="nutze Medienversionierung" +NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +NR_LOAD_JQUERY="Lade jQuery" +NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +NR_SELECT_CURRENCY="wähle eine Währung" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Kampaign" +NR_ASSIGN_CONVERTFORMS_DESC="Besucher ansprechen, die bestimmte ConvertForms-Kampagnen abonniert haben" +NR_CONVERTFORMS_LIST_DESC="ConvertForms-Kampagnen auswählen, denen sie zugewiesen werden sollen." +NR_LEFT="links" +NR_CENTER="zentriert" +NR_RIGHT="rechts" +NR_BOTTOM="unten" +NR_TOP="oben" +NR_AUTO="automatisch" +NR_CUSTOM="Benutzerdefiniert" +NR_UPLOAD="Hochladen" +NR_IMAGE="Bild" +NR_INTRO_IMAGE="Intro Bild" +NR_FULL_IMAGE="Gesamtbild" +NR_IMAGE_SELECT="wähle Bild" +NR_IMAGE_SIZE_COVER="Hülle" +NR_IMAGE_SIZE_CONTAIN="Contain" +NR_REPEAT="wiederhole" +NR_REPEAT_X="wiederhole x" +NR_REPEAT_Y="wiederhole y" +NR_REPEAT_NO="nicht wiederholen" +NR_FIELD_STATE_DESC="setze Eintragsstatus" +NR_CREATED_DATE="erstelle Datum" +NR_CREATED_DATE_DESC="das Datum des Eintrags wurde erstellt" +NR_MODIFIFED_DATE="ändere Datum" +NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +NR_CATEGORIES="Kategorie" +NR_CATEGORIES_DESC="Wählen Sie die Kategorien aus, denen Sie zuweisen möchten." +NR_ALSO_ON_CHILD_ITEMS="auch bei den Untereinheiten" +NR_ALSO_ON_CHILD_ITEMS_DESC="Auch untergeordneten Elementen der ausgewählten Elemente zuweisen?" +NR_PAGE_TYPE="Seitentyp" +NR_PAGE_TYPES="Seitentyp" +NR_PAGE_TYPES_DESC="Wählen Sie aus, auf welchen Seitentypen die Zuordnung aktiv sein soll." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Artikelansicht berücksichtigen" +NR_CATEGORY_VIEW="Kategorieansicht" +NR_CATEGORY_VIEW_DESC="Zur Berücksichtigung der Kategorieansicht aktivieren" +NR_ARTICLES="Artikel" +NR_ARTICLES_DESC="wähle die Artikel im Kontext dazu." +NR_ARTICLE="Artikel" +NR_ARTICLE_AUTHORS="Autor" +NR_ARTICLE_AUTHORS_DESC="wähle die Autoren im Kontext dazu." +NR_ONLY="allein" +NR_OTHERS="Andere" +NR_SMARTTAGS="Smart Tags" +NR_SMARTTAGS_SHOW="zeige smarte Tags" +NR_SMARTTAGS_NOTFOUND="Keine Smarte Tags gefunden" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Smarte Tags finden" +NR_CONTACT_US="Kontaktiere uns" +NR_FONT_COLOR="Schriftfarbe" +NR_FONT_SIZE="Schriftgröße" +NR_FONT_SIZE_DESC="wähle die Schriftgröße in Pixel" +NR_TEXT="Text" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Bei Ausgabeüberschreibung aktivieren" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Aktiviert das Rendering der Erweiterung, wenn das Seitenlayout (tmpl) überschrieben wird. Beispiele: tmpl = Komponente oder tmpl = Modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Bei Formatüberschreibung aktivieren" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Aktiviert das Rendering der Erweiterung, wenn das Seitenformat kein anderes als HTML ist. Beispiele: format = raw oder format = json." +NR_GEOLOCATING="Geolocating" +NR_GEOLOCATING_DESC="Die Geolokalisierung ist nicht immer 100% genau. Die Geolokalisierung basiert auf der IP-Adresse des Besuchers. Nicht alle IP-Adressen sind fest oder bekannt." +NR_CITY="Stadt" +NR_CITY_NAME="Stadtname" +NR_CONDITION_CITY_DESC="Geben Sie einen Städtenamen in Englisch ein. Geben Sie mehrere durch Komma getrennte Städte ein." +NR_CONTINENT="Kontinent" +NR_REGION="Region" +NR_CONDITION_REGION_DESC="Der Wert besteht aus zwei Teilen, dem aus zwei Buchstaben bestehenden ISO 3166-1-Ländercode und dem Regionalcode. Der Wert sollte also in der folgenden Form vorliegen: COUNTRY_CODE-REGION_CODE. Für eine vollständige Liste der Regionalcodes klicken Sie auf Suchen a Region Code Link. " +NR_ASSIGN_COUNTRIES="Land" +NR_ASSIGN_COUNTRIES_DESC2="Besucher ansprechen, die sich physisch in einem bestimmten Land befinden" +NR_ASSIGN_COUNTRIES_DESC="Länder auswählen, denen zugewiesen werden soll" +NR_ASSIGN_CONTINENTS="Kontinent" +NR_ASSIGN_CONTINENTS_DESC="Kontinente zum Zuweisen auswählen" +NR_ASSIGN_CONTINENTS_DESC2="Besucher ansprechen, die sich physisch auf einem bestimmten Kontinent befinden" +NR_ICONTACT_ACCOUNTID_ERROR="Die iContact-Konto-ID konnte nicht abgerufen werden" +NR_TAG_CLIENTDEVICE="Besuchergerätetyp" +NR_TAG_CLIENTOS="Besucher-Betriebssystem" +NR_TAG_CLIENTBROWSER="Besucher-Browser" +NR_TAG_CLIENTUSERAGENT="Besucheragent-Zeichenfolge" +NR_TAG_IP="Besucher-IP-Adresse" +NR_TAG_URL="Seiten-URL" +NR_TAG_URLENCODED="Seiten-URL verschlüsselt" +NR_TAG_URLPATH="Seitenpfad" +NR_TAG_REFERRER="Seitenverweis" +NR_TAG_SITENAME="Site-Name" +NR_TAG_SITEURL="Site-URL" +NR_TAG_PAGETITLE="Seitentitel" +NR_TAG_PAGEDESC="Seiten-Meta-Beschreibung" +NR_TAG_PAGELANG="Seitensprachencode" +NR_TAG_USERID="Nutzer ID" +NR_TAG_USERNAME="Benutzername" +NR_TAG_USERLOGIN="Nutzer Login" +NR_TAG_USEREMAIL="Benutzer-E-Mail" +NR_TAG_USERFIRSTNAME="Vorname" +NR_TAG_USERLASTNAME="Nutzer Nachname" +NR_TAG_USERGROUPS="Benutzergruppen-IDs" +NR_TAG_DATE="Datum" +NR_TAG_TIME="Zeit" +NR_TAG_RANDOMID="Zufällige ID" +NR_ICON="Icon" +NR_SELECT_MODULE="Wähle ein Modul" +NR_SELECT_CONTINENT="Kontinent auswählen" +NR_SELECT_COUNTRY="Land auswählen" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Google Maps API-Schlüssel" +NR_GMAP_KEY_DESC="Der Google Maps-API-Schlüssel wird von den Erweiterungen von Tassos.gr verwendet. Wenn Sie Probleme damit haben, dass Google Map nicht geladen wird, müssen Sie wahrscheinlich Ihren eigenen API-Schlüssel eingeben." +NR_GMAP_FIND_KEY="API-Schlüssel abrufen" +NR_ARE_YOU_SURE="Sind Sie sicher?" +NR_CUSTOMURL="Benutzerdefinierte URL" +NR_SAMPLE="Probe" +NR_DEBUG="Debug" +NR_CUSTOMURL="Benutzerdefinierte URL" +NR_READMORE="Weiterlesen" +NR_IPADDRESS="IP-Adresse" +NR_ASSIGN_BROWSERS="Browser" +NR_ASSIGN_BROWSERS_DESC="Browser zum Zuweisen auswählen" +NR_ASSIGN_BROWSERS_DESC2="Zielgruppe für Besucher, die Ihre Website mit bestimmten Browsern wie Chrome, Firefox oder Internet Explorer durchsuchen." +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Betriebssystem" +NR_ASSIGN_OS_DESC="Wählen Sie die zuzuweisenden Betriebssysteme aus." +NR_ASSIGN_OS_DESC2="Besucher ansprechen, die bestimmte Betriebssysteme wie Windows, Linux oder Mac verwenden" +NR_LINUX="LINUX" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Brombeere" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Anzahl der Seitenaufrufe" +NR_ASSIGN_PAGEVIEWS_DESC="Besucher ansprechen, die eine bestimmte Anzahl von Seiten angesehen haben" +NR_ASSIGN_PAGEVIEWS_VIEWS="Seitenaufrufe" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Anzahl der Seitenaufrufe eingeben" +NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +NR_ASSIGN_COOKIENAME_NAME_DESC="Geben Sie den Namen des zuzuweisenden Cookies ein" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Besucher ansprechen, die bestimmte Cookies in ihrem Browser gespeichert haben" +NR_FEWER_THAN="Weniger als" +NR_GREATER_THAN="Größer als" +NR_EXACTLY="Genau" +NR_EXISTS="Existiert" +NR_IS_EQUAL="Gleich" +NR_CONTAINS="Enthält" +NR_STARTS_WITH="Beginnt mit" +NR_ENDS_WITH="Endet mit" +NR_ASSIGN_COOKIENAME_CONTENT="Cookie-Inhalt" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Der Inhalt des Cookies" +NR_ASSIGN_IP_ADDRESSES_DESC2="Besucher ansprechen, die sich hinter einer bestimmten IP-Adresse (einem bestimmten Bereich) befinden" +NR_ASSIGN_IP_ADDRESSES_DESC="Geben Sie eine Liste mit durch Kommas getrennten IP-Adressen und Bereichen ein und / oder"_QQ_" geben "_QQ_"Sie diese ein

        Beispiel:
        127.0.0.1,
        192.10-120.2,
        168 " +NR_ASSIGN_USER_ID="Benutzer-ID" +NR_ASSIGN_USER_ID_DESC="Bestimmte Joomla-Benutzer anhand ihrer IDs ansprechen" +NR_ASSIGN_USER_ID_SELECTION_DESC="Kommagetrennte Joomla-Benutzer-IDs eingeben" +NR_ASSIGN_COMPONENTS="Komponente" +NR_ASSIGN_COMPONENTS_DESC="Zuzuweisende Komponenten auswählen" +NR_ASSIGN_COMPONENTS_DESC2="Besucher ansprechen, die bestimmte Komponenten durchsuchen" +NR_ASSIGN_TIMERANGE="Zeitraum" +NR_ASSIGN_TIMERANGE_DESC="Besucher basierend auf der Zeit Ihres Servers ansprechen" +NR_START_TIME="Startzeit" +NR_END_TIME="Endzeit" +NR_START_PUBLISHING_TIMERANGE_DESC="Geben Sie die Zeit ein, zu der die Veröffentlichung beginnen soll" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Geben Sie die Zeit zum Beenden der Veröffentlichung ein" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_DESC="Um eine Site und einen geheimen Schlüssel für Ihre Domain zu erhalten, rufen Sie https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Site Key" +NR_RECAPTCHA_SITE_KEY_DESC="Wird im JavaScript-Code verwendet, der Ihren Benutzern bereitgestellt wird." +NR_RECAPTCHA_SECRET_KEY="Geheimschlüssel" +NR_RECAPTCHA_SECRET_KEY_DESC="Wird für die Kommunikation zwischen Ihrem Server und dem reCAPTCHA-Server verwendet. Halten Sie dies unbedingt geheim." +NR_RECAPTCHA_SITE_KEY_ERROR="Der reCaptcha-Site-Schlüssel fehlt oder ist ungültig" +NR_PREVIOUS_MONTH="Vorheriger Monat" +NR_NEXT_MONTH="Nächster Monat" +NR_ASSIGN_GROUP_PAGE_URL="Seite / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Besucher ansprechen, die bestimmte Menüelemente oder URLs durchsuchen" +NR_ASSIGN_GROUP_DATETIME_DESC="Eine Box basierend auf dem Datum und der Uhrzeit Ihres Servers auslösen" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla Benutzer / Besucher" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Registrierte Benutzer oder Besucher ansprechen, die eine bestimmte Anzahl von Seiten angesehen haben" +NR_ASSIGN_GROUP_PLATFORM="Besucherplattform" +NR_ASSIGN_GROUP_PLATFORM_DESC="Besucher ansprechen, die Mobile, Google Chrome oder sogar Windows verwenden" +NR_ASSIGN_GROUP_GEO_DESC="Besucher ansprechen, die sich physisch in einer bestimmten Region befinden" +NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +NR_ASSIGN_GROUP_JCONTENT_DESC="Besucher ansprechen, die bestimmte Artikel oder Kategorien von Joomla anzeigen" +NR_ASSIGN_GROUP_SYSTEM="System / Integrationen" +NR_ASSIGN_GROUP_SYSTEM_DESC="Besucher ansprechen, die mit bestimmten Joomla-Erweiterungen von Drittanbietern interagiert haben" +NR_ASSIGN_GROUP_ADVANCED="Erweitertes Besucher-Targeting" +NR_ASSIGN_USERGROUP_DESC="Zielspezifische Joomla-Benutzergruppen" +NR_ASSIGN_ARTICLE_DESC="Besucher ansprechen, die bestimmte Joomla-Artikel anzeigen" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Besucher ansprechen, die bestimmte Joomla-Kategorien anzeigen" +NR_EXTENSION_REQUIRED="Für die %s -Komponente muss das %s -Plugin aktiviert sein, damit es ordnungsgemäß funktioniert." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Besucher ansprechen, die bestimmte K2-Elemente, Kategorien oder Tags durchsuchen" +NR_ASSIGN_K2_ITEMS="Item" +NR_ASSIGN_K2_ITEMS_DESC="Besucher ansprechen, die bestimmte K2-Artikel durchsuchen." +NR_ASSIGN_K2_ITEMS_LIST_DESC="K2-Elemente auswählen, denen sie zugewiesen werden sollen" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Entspricht bestimmten Stichwörtern im Inhalt des Artikels. Durch Komma oder neue Zeile trennen." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Entspricht den Meta-Schlüsselwörtern des Artikels. Durch Komma oder neue Zeile trennen." +NR_ASSIGN_K2_PAGETYPES_DESC="Besucher ansprechen, die bestimmte K2-Seitentypen durchsuchen" +NR_ASSIGN_K2_ITEM_OPTION="Artikel" +NR_ASSIGN_K2_LATEST_OPTION="Neueste Elemente von Benutzern oder Kategorien" +NR_ASSIGN_K2_TAG_OPTION="Tag-Seite" +NR_ASSIGN_K2_CATEGORY_OPTION="Kategorieseite" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Artikelbearbeitungsformular" +NR_ASSIGN_K2_USER_PAGE_OPTION="Benutzerseite (Blog)" +NR_ASSIGN_K2_TAGS_DESC="Besucher ansprechen, die K2-Artikel mit bestimmten Tags durchsuchen" +NR_ASSIGN_K2_CATEGORIES_DESC="Besucher ansprechen, die bestimmte K2-Kategorien durchsuchen" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +NR_ASSIGN_PAGE_TYPES_DESC="Zuweisende Seitentypen auswählen" +NR_ASSIGN_TAGS_DESC="Zuzuweisende Tags auswählen" +NR_CONTENT_KEYWORDS="Inhaltsschlüsselwörter" +NR_META_KEYWORDS="Meta-Schlüsselwörter" +NR_TAG="Tag" +NR_NORMAL="Normal" +NR_COMPACT="Kompakt" +NR_LIGHT="Licht" +NR_DARK="Dunkel" +NR_SIZE="Größe" +NR_THEME="Theme" +NR_SINGLE="Single" +NR_MULTIPLE="Mehrere" +NR_RANGE="Range" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Bitte validieren" +NR_RECAPTCHA_INVALID_SECRET_KEY="Ungültiger geheimer Schlüssel" +NR_PAGE="Seite" +NR_YOU_ARE_USING_EXTENSION="Sie verwenden %s %s" +NR_UPDATE="Update" +NR_SHOW_UPDATE_NOTIFICATION="Update-Benachrichtigung anzeigen" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Bei Auswahl dieser Option wird in der Hauptkomponentenansicht eine Aktualisierungsbenachrichtigung angezeigt, wenn eine neue Version für diese Erweiterung vorhanden ist." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s ist verfügbar" +NR_ERROR_EMAIL_IS_DISABLED="Das Senden von E-Mails ist deaktiviert. E-Mails konnten nicht gesendet werden." +NR_ASSIGN_ITEMS="Element" +NR_COUNTRY_AF="Afghanistan" +NR_COUNTRY_AX="Aland Islands" +NR_COUNTRY_AL="Albanien" +NR_COUNTRY_DZ="Algerien" +NR_COUNTRY_AS="Amerikanisch-Samoa" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antarktis" +NR_COUNTRY_AG="Antigua und Barbuda" +NR_COUNTRY_AR="Argentinien" +NR_COUNTRY_AM="Armenien" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Australien" +NR_COUNTRY_AT="Österreich" +NR_COUNTRY_AZ="Aserbaidschan" +NR_COUNTRY_BS="Bahamas" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladesch" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Weißrussland" +NR_COUNTRY_BE="Belgien" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benin" +NR_COUNTRY_BM="Bermuda" +NR_COUNTRY_BT="Bhutan" +NR_COUNTRY_BO="Bolivien" +NR_COUNTRY_BA="Bosnien und Herzegowina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Bouvetinsel" +NR_COUNTRY_BR="Brasilien" +NR_COUNTRY_IO="Britisches Territorium im Indischen Ozean" +NR_COUNTRY_BN="Brunei Darussalam" +NR_COUNTRY_BG="Bulgarien" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Kambodscha" +NR_COUNTRY_CM="Kamerun" +NR_COUNTRY_CA="Kanada" +NR_COUNTRY_CV="Kap Verde" +NR_COUNTRY_KY="Kaimaninseln" +NR_COUNTRY_CF="Zentralafrikanische Republik" +NR_COUNTRY_TD="Tschad" +NR_COUNTRY_CL="Chile" +NR_COUNTRY_CN="China" +NR_COUNTRY_CX="Weihnachtsinsel" +NR_COUNTRY_CC="Kokosinseln (Keelinginseln)" +NR_COUNTRY_CO="Kolumbien" +NR_COUNTRY_KM="Komoren" +NR_COUNTRY_CG="Kongo" +NR_COUNTRY_CD="Kongo, Demokratische Republik" +NR_COUNTRY_CK="Cookinseln" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Elfenbeinküste" +NR_COUNTRY_HR="Kroatien" +NR_COUNTRY_CU="Kuba" +; NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Zypern" +NR_COUNTRY_CZ="Tschechische Republik" +NR_COUNTRY_DK="Dänemark" +NR_COUNTRY_DJ="Dschibuti" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="Dominikanische Republik" +NR_COUNTRY_EC="Ecuador" +NR_COUNTRY_EG="Ägypten" +NR_COUNTRY_SV="El Salvador" +NR_COUNTRY_GQ="Äquatorialguinea" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Estland" +NR_COUNTRY_ET="Äthiopien" +NR_COUNTRY_FK="Falklandinseln (Malvinas)" +NR_COUNTRY_FO="Färöer" +NR_COUNTRY_FJ="Fidschi" +NR_COUNTRY_FI="Finnland" +NR_COUNTRY_FR="Frankreich" +NR_COUNTRY_GF="Französisch-Guayana" +NR_COUNTRY_PF="Französisch-Polynesien" +NR_COUNTRY_TF="Französische Südgebiete" +NR_COUNTRY_GA="Gabun" +NR_COUNTRY_GM="Gambia" +NR_COUNTRY_GE="Georgia" +NR_COUNTRY_DE="Deutschland" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Griechenland" +NR_COUNTRY_GL="Grönland" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadeloupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haiti" +NR_COUNTRY_HM="Heard Island und McDonald Islands" +NR_COUNTRY_VA="Heiliger Stuhl (Staat der Vatikanstadt)" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Ungarn" +NR_COUNTRY_IS="Island" +NR_COUNTRY_IN="Indien" +NR_COUNTRY_ID="Indonesien" +NR_COUNTRY_IR="Iran, Islamische Republik" +NR_COUNTRY_IQ="Irak" +NR_COUNTRY_IE="Irland" +NR_COUNTRY_IM="Insel Man" +NR_COUNTRY_IL="Israel" +NR_COUNTRY_IT="Italien" +NR_COUNTRY_JM="Jamaika" +NR_COUNTRY_JP="Japan" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordan" +NR_COUNTRY_KZ="Kasachstan" +NR_COUNTRY_KE="Kenia" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="Korea, Demokratische Volksrepublik" +NR_COUNTRY_KR="Korea, Republik von" +NR_COUNTRY_KW="Kuwait" +NR_COUNTRY_KG="Kirgisistan" +NR_COUNTRY_LA="Demokratische Volksrepublik Laos" +NR_COUNTRY_LV="Lettland" +NR_COUNTRY_LB="Libanon" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Libyscher arabischer Jamahiriya" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Litauen" +NR_COUNTRY_LU="Luxemburg" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Mazedonien" +NR_COUNTRY_MG="Madagaskar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malaysia" +NR_COUNTRY_MV="Malediven" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Marshallinseln" +NR_COUNTRY_MQ="Martinique" +NR_COUNTRY_MR="Mauretanien" +NR_COUNTRY_MU="Mauritius" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Mexiko" +NR_COUNTRY_FM="Mikronesien, Föderierte Staaten von" +NR_COUNTRY_MD="Republik Moldau" +NR_COUNTRY_MC="Monaco" +NR_COUNTRY_MN="Mongolei" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Marokko" +NR_COUNTRY_MZ="Mosambik" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibia" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="Nord Macedonien" +NR_COUNTRY_NP="Nepal" +NR_COUNTRY_NL="Niederlande" +NR_COUNTRY_AN="Niederländische Antillen" +NR_COUNTRY_NC="Neukaledonien" +NR_COUNTRY_NZ="Neuseeland" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigeria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Norfolkinsel" +NR_COUNTRY_MP="Nördliche Marianen" +NR_COUNTRY_NO="Norwegen" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Palästinensisches Gebiet" +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papua-Neuguinea" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Peru" +NR_COUNTRY_PH="Philippinen" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Polen" +NR_COUNTRY_PT="Portugal" +NR_COUNTRY_PR="Puerto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="Wiedersehen" +NR_COUNTRY_RO="Rumänien" +NR_COUNTRY_RU="Russische Föderation" +NR_COUNTRY_RW="Ruanda" +NR_COUNTRY_SH="St. Helena" +NR_COUNTRY_KN="St. Kitts und Nevis" +NR_COUNTRY_LC="St. Lucia" +NR_COUNTRY_PM="Saint Pierre und Miquelon" +NR_COUNTRY_VC="St. Vincent und die Grenadinen" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="São Tomé und Príncipe" +NR_COUNTRY_SA="Saudi-Arabien" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Serbien" +NR_COUNTRY_SC="Seychellen" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapur" +NR_COUNTRY_SK="Slowakei" +NR_COUNTRY_SI="Slowenien" +NR_COUNTRY_SB="Salomonen" +NR_COUNTRY_SO="Somalia" +NR_COUNTRY_ZA="Südafrika" +NR_COUNTRY_GS="Südgeorgien und die Südlichen Sandwichinseln" +NR_COUNTRY_ES="Spanien" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Sudan" +NR_COUNTRY_SS="Südsudan" +NR_COUNTRY_SR="Suriname" +NR_COUNTRY_SJ="Spitzbergen und Jan Mayen" +NR_COUNTRY_SZ="Swasiland" +NR_COUNTRY_SE="Schweden" +NR_COUNTRY_CH="Schweiz" +NR_COUNTRY_SY="Arabische Republik Syrien" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tadschikistan" +NR_COUNTRY_TZ="Tansania, Vereinigte Republik von" +NR_COUNTRY_TH="Thailand" +NR_COUNTRY_TL="Timor-Leste" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad und Tobago" +NR_COUNTRY_TN="Tunesien" +NR_COUNTRY_TR="Türkei" +NR_COUNTRY_TM="Turkmenistan" +NR_COUNTRY_TC="Turks- und Caicosinseln" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ukraine" +NR_COUNTRY_AE="Vereinigte Arabische Emirate" +NR_COUNTRY_GB="Großbritannien" +NR_COUNTRY_US="Vereinigte Staaten" +NR_COUNTRY_UM="Nebeninseln der Vereinigten Staaten" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Usbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Britische Jungferninseln" +NR_COUNTRY_VI="Amerikanische Jungferninseln" +NR_COUNTRY_WF="Wallis und Futuna" +NR_COUNTRY_EH="Westsahara" +NR_COUNTRY_YE="Jemen" +NR_COUNTRY_ZM="Sambia" +NR_COUNTRY_ZW="Simbabwe" +NR_CONTINENT_AF="Afrika" +NR_CONTINENT_AS="Asien" +NR_CONTINENT_EU="Europa" +NR_CONTINENT_NA="Nordamerika" +NR_CONTINENT_SA="Südamerika" +NR_CONTINENT_OC="Ozeanien" +NR_CONTINENT_AN="Antarktis" +NR_FRONTEND="Benutzer Interface" +NR_BACKEND="Administration" +NR_EMBED="Verankert" +NR_RATE="Bewertung %s" +NR_REPORT_ISSUE="Problem melden" +NR_CANNOT_CREATE_FOLDER="Ordner zum Verschieben von Dateien kann nicht erstellt werden. %s" +NR_CANNOT_MOVE_FILE="Datei kann nicht verschoben werden: %s" +NR_UPLOAD_INVALID_FILE_TYPE="Nicht unterstützte Datei:%s. Die zulässigen Dateitypen sind:%s" +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Datei kann nicht hochgeladen werden: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" diff --git a/deployed/convertforms/plugins/system/nrframework/language/el-GR/el-GR.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/el-GR/el-GR.plg_system_nrframework.ini new file mode 100644 index 00000000..38b9e9b7 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/el-GR/el-GR.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - used by Tassos.gr extensions" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Αγνόησε" +NR_INCLUDE="Συμπεριέλαβε" +NR_EXCLUDE="Απόκλεισε" +NR_SELECTION="Επιλογή" +; NR_ASSIGN_MENU_NOITEM="Include no Itemid" +; NR_ASSIGN_MENU_NOITEM_DESC="Also assign when no menu Itemid is set in URL?" +; NR_ASSIGN_MENU_CHILD="Also on child items" +; NR_ASSIGN_MENU_CHILD_DESC="Also assign to child items of the selected items?" +; NR_COPY_OF="Copy of %s" +; NR_ASSIGN_DATETIME_DESC="Target visitors based on your server's datetime" +NR_DATETIME="Ημερομηνία ώρα" +; NR_TIME="Time" +; NR_DATE="Date" +; NR_DATETIME_DESC="Enter the datetime to auto publish/unpublish" +; NR_START_PUBLISHING="Start Datetime" +; NR_START_PUBLISHING_DESC="Enter the date to start publishing" +; NR_FINISH_PUBLISHING="End Datetime" +; NR_FINISH_PUBLISHING_DESC="Enter the date to end publishing" +; NR_DATETIME_NOTE="The date and time assignments use the date/time of your servers, not that of the visitors system." +; NR_ASSIGN_PHP="PHP" +; NR_PHPCODE="PHP Code" +; NR_ASSIGN_PHP_DESC="Enter a piece of PHP code to evaluate." +; NR_ASSIGN_PHP_DESC2="Target visitors evaluating custom PHP code. The code must return the value true or false.

        For instance:
        return ($user->name == 'Tassos Marinos');" +; NR_ASSIGN_TIMEONSITE="Time on Site" +; NR_SECONDS="Seconds" +; NR_ASSIGN_TIMEONSITE_DESC="Enter a duration in seconds to compare with the user's total time (Visit duration) spent on your entire site .

        Example:
        If you want to display a box after the user has spent 3 minutes on your the entire site, enter 180." +; NR_ASSIGN_URLS="URL" +; NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +; NR_ASSIGN_URLS_DESC="Enter (part of) the URLs to match.
        Use a new line for each different match." +; NR_ASSIGN_URLS_LIST="URL Matches" +; NR_ASSIGN_URLS_REGEX="Use Regular Expression" +; NR_ASSIGN_URLS_REGEX_DESC="Select to treat the value as regular expressions." +; NR_ASSIGN_LANGS="Language" +; NR_ASSIGN_LANGS_DESC="Target visitors who are browsing your website in specific language" +; NR_ASSIGN_LANGS_LIST_DESC="Select the Languages to assign to" +; NR_ASSIGN_DEVICES="Device" +; NR_ASSIGN_DEVICES_DESC2="Target visitors using specific device such as Mobile, Tablet or Desktop." +; NR_ASSIGN_DEVICES_DESC="Select the devices to assign to." +; NR_ASSIGN_DEVICES_NOTE="Keep in mind that device detection is not always 100% accurate. Users can setup their browser to mimic other devices" +; NR_MENU="Menu" +; NR_MENU_ITEMS="Menu Item" +; NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +; NR_USERGROUP="User Group" +; NR_ACCESSLEVEL="User Group" +; NR_ACCESSLEVEL_DESC="Select the User Groups to assign to.

        Note: If you want to make it public just set to Ignore and not select the Public." +; NR_SHOW_COPYRIGHT="Show Copyright" +; NR_SHOW_COPYRIGHT_DESC="If selected, extra copyright info will be displayed in the admin views. Tassos.gr extensions never show copyright info or backlinks on the frontend." +; NR_WIDTH="Width" +; NR_WIDTH_DESC="Enter width in px, em or %

        Example: 400px" +; NR_HEIGHT="Height" +; NR_HEIGHT_DESC="Enter height in px, em or %

        Example: 400px" +; NR_PADDING="Padding" +; NR_PADDING_DESC="Enter padding in px, em or %

        Example: 20px" +; NR_MARGIN="Margin" +; NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +; NR_COLOR_HOVER="Hover Color" +; NR_COLOR="Color" +; NR_COLOR_DESC="Define a color in HEX or RGBA format." +; NR_TEXT_COLOR="Text Color" +; NR_BACKGROUND="Background" +; NR_BACKGROUND_COLOR="Background Color" +; NR_BACKGROUND_COLOR_DESC="Define a background color in HEX or RGBA format. To disable enter 'none'. For absolute transparency enter 'transparent'." +; NR_URL_SHORTENING_FAILED="Shortening %s with %s failed. %s." +; NR_EXPORT="Export" +; NR_IMPORT="Import" +; NR_PLEASE_CHOOSE_A_VALID_FILE="Please choose a valid filename" +; NR_IMPORT_ITEMS="Import Items" +; NR_PUBLISH_ITEMS="Publish items" +; NR_AS_EXPORTED="As exported" +; NR_TITLE="Title" +; NR_ACYMAILING="AcyMailing" +; NR_ACYMAILING_LIST="AcyMailing List" +; NR_ACYMAILING_LIST_DESC="Select AcyMailing lists to assign to." +; NR_ASSIGN_ACYMAILING_DESC="Target visitors who have subscribed to specific AcyMailing lists" +; NR_AKEEBASUBS="Akeeba Subscriptions" +; NR_AKEEBASUBS_LEVELS="Levels" +; NR_AKEEBASUBS_LEVELS_DESC="Select Akeeba Subscription levels to assign to." +; NR_ASSIGN_AKEEBASUBS_DESC="Target visitors who have subscribed to specific Akeeba Subscriptions" +; NR_MATCH="Match" +; NR_MATCH_DESC="The used matching method to compare the value" +; NR_ASSIGN_MATCHING_METHOD="Matching Method" +; NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +; NR_ANY="Any" +; NR_ASSIGN_REFERRER="Referrer URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +; NR_ONLY_AVAILABLE_IN_PRO="Only available in PRO version" +; NR_UPGRADE_TO_PRO="Upgrade to Pro" +; NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +; NR_LEFT_TO_RIGHT="Left to Right" +; NR_RIGHT_TO_LEFT="Right to Left" +; NR_BGIMAGE="Background Image" +; NR_BGIMAGE_DESC="Sets a background image" +; NR_BGIMAGE_FILE="Image" +; NR_BGIMAGE_FILE_DESC="Select or a upload a file for the background-image." +; NR_BGIMAGE_REPEAT="Repeat" +; NR_BGIMAGE_REPEAT_DESC="The background-repeat property sets if/how a background image will be repeated. By default, a background-image is repeated both vertically and horizontally.

        Repeat: The background image will be repeated both vertically and horizontally.

        Repeat-x: The background image will be repeated only horizontally

        Repeat-y: The background image will be repeated only vertically

        No-repeat: The background-image will not be repeated" +; NR_BGIMAGE_SIZE="Size" +; NR_BGIMAGE_SIZE_DESC="Specify the size of a background image.

        Auto:The background-image contains its width and height

        Cover: Scale the background image to be as large as possible so that the background area is completely covered by the background image. Some parts of the background image may not be in view within the background positioning area

        Contain: Scale the image to the largest size such that both its width and its height can fit inside the content area

        100% 100%: Stretch the background image to completely cover the content area." +; NR_BGIMAGE_POSITION="Position" +; NR_BGIMAGE_POSITION_DESC="The background-position property sets the starting position of a background image. By default, a background-image is placed at the top-left corner. The first value is the horizontal position and the second value is the vertical.

        You can use either one of the predefined values, or enter a custom value in percentage: x% y% or in pixel xPos yPos." +; NR_RTL="Enable RTL" +; NR_RTL_DESC="The right-to-left text direction is essential for right-to-left scripts such as Arabic, Hebrew, Syriac, and Thaana." +; NR_HORIZONTAL="Horizontal" +; NR_VERTICAL="Vertical" +; NR_FORM_ORIENTATION="Form Orientation" +; NR_FORM_ORIENTATION_DESC="Select the form orientation" +; NR_ASSIGN_CATEGORY="Categories" +; NR_ASSIGN_CATEGORY_DESC="Select the categories to assign to" +; NR_ASSIGN_CATEGORY_CHILD="Also on child items" +; NR_ASSIGN_CATEGORY_CHILD_DESC="Also assign to child items of the selected items?" +; NR_NEW="New" +; NR_LIST="List" +; NR_DOCUMENTATION="Documentation" +; NR_KNOWLEDGEBASE="Knowledgebase" +; NR_FAQ="FAQ" +; NR_INFORMATION="Information" +; NR_EXTENSION="Extension" +; NR_VERSION="Version" +; NR_CHANGELOG="Changelog" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +; NR_DOWNLOAD_KEY="Download Key" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +; NR_DOWNLOAD_KEY_HOW="To be able to update %s via the Joomla updater, you will need enter your Download Key in the settings of the Novarain Framework Plugin" +; NR_DOWNLOAD_KEY_FIND="Find Download Key" +; NR_DOWNLOAD_KEY_UPDATE="Update Download Key" +; NR_OK="OK" +; NR_MISSING="Missing" +; NR_LICENSE="License" +; NR_AUTHOR="Author" +; NR_FOLLOWME="Follow me" +; NR_FOLLOW="Follow %s" +; NR_TRANSLATE_INTEREST="Would you be interested in helping out with translating %s into your Language?" +; NR_TRANSIFEX_REQUEST="Send me a request on Transifex" +; NR_HELP_WITH_TRANSLATIONS="Help with translations" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +; NR_ADVANCED="Advanced" +; NR_USEGLOBAL="Use Global" +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +; NR_NEVER="Never" +; NR_SECONDS="Seconds" +; NR_MINUTES="Minutes" +; NR_HOURS="Hours" +; NR_DAYS="Days" +; NR_SESSION="Session" +; NR_EVER="Ever" +; NR_COOKIE="Cookie" +; NR_BOTH="Both" +; NR_NONE="None" +; NR_DESKTOPS="Desktop" +; NR_MOBILES="Mobile" +; NR_TABLETS="Tablet" +; NR_PER_SESSION="Per Session" +; NR_PER_DAY="Per Day" +; NR_PER_WEEK="Per Week" +; NR_PER_MONTH="Per Month" +; NR_FOREVER="Forever" +; NR_FEATURE_UNDER_DEV="This feature is under development" +; NR_LIKE_THIS_EXTENSION="Like this extension?" +; NR_LEAVE_A_REVIEW="Leave a review on JED" +; NR_SUPPORT="Support" +; NR_NEED_SUPPORT="Need support?" +; NR_DROP_EMAIL="Drop me an e-mail" +; NR_READ_DOCUMENTATION="Read the Documentation" +; NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +; NR_DASHBOARD="Dashboard" +; NR_NAME="Name" +; NR_WRONG_COORDINATES="The coordinates you provided are not valid" +; NR_ENTER_COORDINATES="Latitude,Longitude" +; NR_NO_ITEMS_FOUND="No Items Found" +; NR_ITEM_IDS="No Item IDs" +; NR_TOGGLE="Toggle" +; NR_EXPAND="Expand" +; NR_COLLAPSE="Collapse" +; NR_SELECTED="Selected" +; NR_MAXIMIZE="Maximize" +; NR_MINIMIZE="Minimize" +NR_SELECTION="Επιλογή" +; NR_INSTALL="Install" +; NR_INSTALL_NOW="Install Now" +; NR_INSTALLED="Installed" +; NR_COMING_SOON="Coming soon" +; NR_ROADMAP="On the roadmap" +; NR_MEDIA_VERSIONING="Use Media Versioning" +; NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +; NR_LOAD_JQUERY="Load jQuery" +; NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +; NR_SELECT_CURRENCY="Select a Currency" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +; NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +; NR_LEFT="Left" +; NR_CENTER="Center" +; NR_RIGHT="Right" +; NR_BOTTOM="Bottom" +; NR_TOP="Top" +; NR_AUTO="Auto" +; NR_CUSTOM="Custom" +; NR_UPLOAD="Upload" +; NR_IMAGE="Image" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +; NR_IMAGE_SELECT="Select Image" +; NR_IMAGE_SIZE_COVER="Cover" +; NR_IMAGE_SIZE_CONTAIN="Contain" +; NR_REPEAT="Repeat" +; NR_REPEAT_X="Repeat x" +; NR_REPEAT_Y="Repeat y" +; NR_REPEAT_NO="No repeat" +; NR_FIELD_STATE_DESC="Set item's state" +; NR_CREATED_DATE="Created Date" +; NR_CREATED_DATE_DESC="The date the item was created" +; NR_MODIFIFED_DATE="Modified Date" +; NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +; NR_CATEGORIES="Category" +; NR_CATEGORIES_DESC="Select the categories to assign to." +; NR_ALSO_ON_CHILD_ITEMS="Also on child items" +; NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +; NR_PAGE_TYPE="Page type" +; NR_PAGE_TYPES="Page types" +; NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +; NR_ARTICLES="Articles" +; NR_ARTICLES_DESC="Select the articles to assign to." +; NR_ARTICLE="Article" +; NR_ARTICLE_AUTHORS="Authors" +; NR_ARTICLE_AUTHORS_DESC="Select the authors to assign to." +; NR_ONLY="Only" +; NR_OTHERS="Others" +; NR_SMARTTAGS="Smart Tags" +; NR_SMARTTAGS_SHOW="Show Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +; NR_CONTACT_US="Contact us" +; NR_FONT_COLOR="Font Color" +; NR_FONT_SIZE="Font Size" +; NR_FONT_SIZE_DESC="Choose a font size in pixels" +; NR_TEXT="Text" +; NR_URL="URL" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +; NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +; NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +; NR_GEOLOCATING="Geolocating" +; NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +; NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +; NR_ASSIGN_CONTINENTS="Continent" +; NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +; NR_ARE_YOU_SURE="Are you sure?" +; NR_CUSTOMURL="Custom URL" +; NR_SAMPLE="Sample" +; NR_DEBUG="Debug" +; NR_CUSTOMURL="Custom URL" +; NR_READMORE="Read More" +; NR_IPADDRESS="IP Address" +; NR_ASSIGN_BROWSERS="Browser" +; NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +; NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +; NR_CHROME="Chrome" +; NR_FIREFOX="Firefox" +; NR_EDGE="Edge" +; NR_IE="Internet Explorer" +; NR_SAFARI="Safari" +; NR_OPERA="Opera" +; NR_ASSIGN_OS="Operating System" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +; NR_LINUX="Linux" +; NR_MAC="MacOS" +; NR_ANDROID="Android" +; NR_IOS="iOS" +; NR_WINDOWS="Windows" +; NR_BLACKBERRY="Blackberry" +; NR_CHROMEOS="Chrome OS" +; NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +; NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Ελλάδα" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/en-GB/en-GB.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/en-GB/en-GB.plg_system_nrframework.ini new file mode 100644 index 00000000..002d1eaa --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/en-GB/en-GB.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - used by Tassos.gr extensions" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignore" +NR_INCLUDE="Include" +NR_EXCLUDE="Exclude" +NR_SELECTION="Selection" +NR_ASSIGN_MENU_NOITEM="Include no Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="Also assign when no menu Itemid is set in URL?" +NR_ASSIGN_MENU_CHILD="Also on child items" +NR_ASSIGN_MENU_CHILD_DESC="Also assign to child items of the selected items?" +NR_COPY_OF="Copy of %s" +NR_ASSIGN_DATETIME_DESC="Target visitors based on your server's datetime" +NR_DATETIME="Datetime" +NR_TIME="Time" +NR_DATE="Date" +NR_DATETIME_DESC="Enter the datetime to auto publish/unpublish" +NR_START_PUBLISHING="Start Datetime" +NR_START_PUBLISHING_DESC="Enter the date to start publishing" +NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Enter the date to end publishing" +NR_DATETIME_NOTE="The date and time assignments use the date/time of your servers, not that of the visitors system." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP Code" +NR_ASSIGN_PHP_DESC="Enter a piece of PHP code to evaluate." +NR_ASSIGN_PHP_DESC2="Target visitors evaluating custom PHP code. The code must return the value true or false.

        For instance:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Time on Site" +NR_SECONDS="Seconds" +NR_ASSIGN_TIMEONSITE_DESC="Enter a duration in seconds to compare with the user's total time (Visit duration) spent on your entire site .

        Example:
        If you want to display a box after the user has spent 3 minutes on your the entire site, enter 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +NR_ASSIGN_URLS_DESC="Enter (part of) the URLs to match.
        Use a new line for each different match." +NR_ASSIGN_URLS_LIST="URL Matches" +NR_ASSIGN_URLS_REGEX="Use Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="Select to treat the value as regular expressions." +NR_ASSIGN_LANGS="Language" +NR_ASSIGN_LANGS_DESC="Target visitors who are browsing your website in specific language" +NR_ASSIGN_LANGS_LIST_DESC="Select the Languages to assign to" +NR_ASSIGN_DEVICES="Device" +NR_ASSIGN_DEVICES_DESC2="Target visitors using specific device such as Mobile, Tablet or Desktop." +NR_ASSIGN_DEVICES_DESC="Select the devices to assign to." +NR_ASSIGN_DEVICES_NOTE="Keep in mind that device detection is not always 100% accurate. Users can setup their browser to mimic other devices" +NR_MENU="Menu" +NR_MENU_ITEMS="Menu Item" +NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +NR_USERGROUP="User Group" +NR_ACCESSLEVEL="User Group" +NR_ACCESSLEVEL_DESC="Select the User Groups to assign to.

        Note: If you want to make it public just set to Ignore and not select the Public." +NR_SHOW_COPYRIGHT="Show Copyright" +NR_SHOW_COPYRIGHT_DESC="If selected, extra copyright info will be displayed in the admin views. Tassos.gr extensions never show copyright info or backlinks on the frontend." +NR_WIDTH="Width" +NR_WIDTH_DESC="Enter width in px, em or %

        Example: 400px" +NR_HEIGHT="Height" +NR_HEIGHT_DESC="Enter height in px, em or %

        Example: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Enter padding in px, em or %

        Example: 20px" +NR_MARGIN="Margin" +NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +NR_COLOR_HOVER="Hover Color" +NR_COLOR="Color" +NR_COLOR_DESC="Define a color in HEX or RGBA format." +NR_TEXT_COLOR="Text Color" +NR_BACKGROUND="Background" +NR_BACKGROUND_COLOR="Background Color" +NR_BACKGROUND_COLOR_DESC="Define a background color in HEX or RGBA format. To disable enter 'none'. For absolute transparency enter 'transparent'." +NR_URL_SHORTENING_FAILED="Shortening %s with %s failed. %s." +NR_EXPORT="Export" +NR_IMPORT="Import" +NR_PLEASE_CHOOSE_A_VALID_FILE="Please choose a valid filename" +NR_IMPORT_ITEMS="Import Items" +NR_PUBLISH_ITEMS="Publish items" +NR_AS_EXPORTED="As exported" +NR_TITLE="Title" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing List" +NR_ACYMAILING_LIST_DESC="Select AcyMailing lists to assign to." +NR_ASSIGN_ACYMAILING_DESC="Target visitors who have subscribed to specific AcyMailing lists" +NR_AKEEBASUBS="Akeeba Subscriptions" +NR_AKEEBASUBS_LEVELS="Levels" +NR_AKEEBASUBS_LEVELS_DESC="Select Akeeba Subscription levels to assign to." +NR_ASSIGN_AKEEBASUBS_DESC="Target visitors who have subscribed to specific Akeeba Subscriptions" +NR_MATCH="Match" +NR_MATCH_DESC="The used matching method to compare the value" +NR_ASSIGN_MATCHING_METHOD="Matching Method" +NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +NR_ANY="Any" +NR_ASSIGN_REFERRER="Referrer URL" +NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +NR_PROFEATURE_HEADER="%s is a PRO Feature" +NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +NR_ONLY_AVAILABLE_IN_PRO="Only available in PRO version" +NR_UPGRADE_TO_PRO="Upgrade to Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Left to Right" +NR_RIGHT_TO_LEFT="Right to Left" +NR_BGIMAGE="Background Image" +NR_BGIMAGE_DESC="Sets a background image" +NR_BGIMAGE_FILE="Image" +NR_BGIMAGE_FILE_DESC="Select or a upload a file for the background-image." +NR_BGIMAGE_REPEAT="Repeat" +NR_BGIMAGE_REPEAT_DESC="The background-repeat property sets if/how a background image will be repeated. By default, a background-image is repeated both vertically and horizontally.

        Repeat: The background image will be repeated both vertically and horizontally.

        Repeat-x: The background image will be repeated only horizontally

        Repeat-y: The background image will be repeated only vertically

        No-repeat: The background-image will not be repeated" +NR_BGIMAGE_SIZE="Size" +NR_BGIMAGE_SIZE_DESC="Specify the size of a background image.

        Auto:The background-image contains its width and height

        Cover: Scale the background image to be as large as possible so that the background area is completely covered by the background image. Some parts of the background image may not be in view within the background positioning area

        Contain: Scale the image to the largest size such that both its width and its height can fit inside the content area

        100% 100%: Stretch the background image to completely cover the content area." +NR_BGIMAGE_POSITION="Position" +NR_BGIMAGE_POSITION_DESC="The background-position property sets the starting position of a background image. By default, a background-image is placed at the top-left corner. The first value is the horizontal position and the second value is the vertical.

        You can use either one of the predefined values, or enter a custom value in percentage: x% y% or in pixel xPos yPos." +NR_RTL="Enable RTL" +NR_RTL_DESC="The right-to-left text direction is essential for right-to-left scripts such as Arabic, Hebrew, Syriac, and Thaana." +NR_HORIZONTAL="Horizontal" +NR_VERTICAL="Vertical" +NR_FORM_ORIENTATION="Form Orientation" +NR_FORM_ORIENTATION_DESC="Select the form orientation" +NR_ASSIGN_CATEGORY="Categories" +NR_ASSIGN_CATEGORY_DESC="Select the categories to assign to" +NR_ASSIGN_CATEGORY_CHILD="Also on child items" +NR_ASSIGN_CATEGORY_CHILD_DESC="Also assign to child items of the selected items?" +NR_NEW="New" +NR_LIST="List" +NR_DOCUMENTATION="Documentation" +NR_KNOWLEDGEBASE="Knowledgebase" +NR_FAQ="FAQ" +NR_INFORMATION="Information" +NR_EXTENSION="Extension" +NR_VERSION="Version" +NR_CHANGELOG="Changelog" +NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Download Key" +NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="To be able to update %s via the Joomla updater, you will need enter your Download Key in the settings of the Novarain Framework Plugin" +NR_DOWNLOAD_KEY_FIND="Find Download Key" +NR_DOWNLOAD_KEY_UPDATE="Update Download Key" +NR_OK="OK" +NR_MISSING="Missing" +NR_LICENSE="License" +NR_AUTHOR="Author" +NR_FOLLOWME="Follow me" +NR_FOLLOW="Follow %s" +NR_TRANSLATE_INTEREST="Would you be interested in helping out with translating %s into your Language?" +NR_TRANSIFEX_REQUEST="Send me a request on Transifex" +NR_HELP_WITH_TRANSLATIONS="Help with translations" +NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Advanced" +NR_USEGLOBAL="Use Global" +NR_WEEKDAY="Day of Week" +NR_MONTH="Month" +NR_MONDAY="Monday" +NR_TUESDAY="Tuesday" +NR_WEDNESDAY="Wednesday" +NR_THURSDAY="Thursday" +NR_FRIDAY="Friday" +NR_SATURDAY="Saturday" +NR_WEEKEND="Weekend" +NR_WEEKDAYS="Weekdays" +NR_SUNDAY="Sunday" +NR_JANUARY="January" +NR_FEBRUARY="February" +NR_MARCH="March" +NR_APRIL="April" +NR_MAY="May" +NR_JUNE="June" +NR_JULY="July" +NR_AUGUST="August" +NR_SEPTEMBER="September" +NR_OCTOBER="October" +NR_NOVEMBER="November" +NR_DECEMBER="December" +NR_NEVER="Never" +NR_SECONDS="Seconds" +NR_MINUTES="Minutes" +NR_HOURS="Hours" +NR_DAYS="Days" +NR_SESSION="Session" +NR_EVER="Ever" +NR_COOKIE="Cookie" +NR_BOTH="Both" +NR_NONE="None" +NR_DESKTOPS="Desktop" +NR_MOBILES="Mobile" +NR_TABLETS="Tablet" +NR_PER_SESSION="Per Session" +NR_PER_DAY="Per Day" +NR_PER_WEEK="Per Week" +NR_PER_MONTH="Per Month" +NR_FOREVER="Forever" +NR_FEATURE_UNDER_DEV="This feature is under development" +NR_LIKE_THIS_EXTENSION="Like this extension?" +NR_LEAVE_A_REVIEW="Leave a review on JED" +NR_SUPPORT="Support" +NR_NEED_SUPPORT="Need support?" +NR_DROP_EMAIL="Drop me an e-mail" +NR_READ_DOCUMENTATION="Read the Documentation" +NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +NR_DASHBOARD="Dashboard" +NR_NAME="Name" +NR_WRONG_COORDINATES="The coordinates you provided are not valid" +NR_ENTER_COORDINATES="Latitude,Longitude" +NR_NO_ITEMS_FOUND="No Items Found" +NR_ITEM_IDS="No Item IDs" +NR_TOGGLE="Toggle" +NR_EXPAND="Expand" +NR_COLLAPSE="Collapse" +NR_SELECTED="Selected" +NR_MAXIMIZE="Maximize" +NR_MINIMIZE="Minimize" +NR_SELECTION="Selection" +NR_INSTALL="Install" +NR_INSTALL_NOW="Install Now" +NR_INSTALLED="Installed" +NR_COMING_SOON="Coming soon" +NR_ROADMAP="On the roadmap" +NR_MEDIA_VERSIONING="Use Media Versioning" +NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +NR_LOAD_JQUERY="Load jQuery" +NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +NR_SELECT_CURRENCY="Select a Currency" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Campaign" +NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +NR_LEFT="Left" +NR_CENTER="Center" +NR_RIGHT="Right" +NR_BOTTOM="Bottom" +NR_TOP="Top" +NR_AUTO="Auto" +NR_CUSTOM="Custom" +NR_UPLOAD="Upload" +NR_IMAGE="Image" +NR_INTRO_IMAGE="Intro Image" +NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Select Image" +NR_IMAGE_SIZE_COVER="Cover" +NR_IMAGE_SIZE_CONTAIN="Contain" +NR_REPEAT="Repeat" +NR_REPEAT_X="Repeat x" +NR_REPEAT_Y="Repeat y" +NR_REPEAT_NO="No repeat" +NR_FIELD_STATE_DESC="Set item's state" +NR_CREATED_DATE="Created Date" +NR_CREATED_DATE_DESC="The date the item was created" +NR_MODIFIFED_DATE="Modified Date" +NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +NR_CATEGORIES="Category" +NR_CATEGORIES_DESC="Select the categories to assign to." +NR_ALSO_ON_CHILD_ITEMS="Also on child items" +NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +NR_PAGE_TYPE="Page type" +NR_PAGE_TYPES="Page types" +NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +NR_CONTENT_VIEW_CATEGORIES="List All Categories" +NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +NR_CONTENT_VIEW_FEATURES="Featured Articles" +NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +NR_CATEGORY_VIEW="Category View" +NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +NR_ARTICLES="Articles" +NR_ARTICLES_DESC="Select the articles to assign to." +NR_ARTICLE="Article" +NR_ARTICLE_AUTHORS="Authors" +NR_ARTICLE_AUTHORS_DESC="Select the authors to assign to." +NR_ONLY="Only" +NR_OTHERS="Others" +NR_SMARTTAGS="Smart Tags" +NR_SMARTTAGS_SHOW="Show Smart Tags" +NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +NR_CONTACT_US="Contact us" +NR_FONT_COLOR="Font Color" +NR_FONT_SIZE="Font Size" +NR_FONT_SIZE_DESC="Choose a font size in pixels" +NR_TEXT="Text" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +NR_GEOLOCATING="Geolocating" +NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +NR_CITY="City" +NR_CITY_NAME="City Name" +NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +NR_CONTINENT="Continent" +NR_REGION="Region" +NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +NR_ASSIGN_COUNTRIES="Country" +NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +NR_ASSIGN_CONTINENTS="Continent" +NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +NR_TAG_CLIENTDEVICE="Visitor Device Type" +NR_TAG_CLIENTOS="Visitor Operating System" +NR_TAG_CLIENTBROWSER="Visitor Browser" +NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +NR_TAG_IP="Visitor IP Address" +NR_TAG_URL="Page URL" +NR_TAG_URLENCODED="Page URL Encoded" +NR_TAG_URLPATH="Page Path" +NR_TAG_REFERRER="Page Referrer" +NR_TAG_SITENAME="Site Name" +NR_TAG_SITEURL="Site URL" +NR_TAG_PAGETITLE="Page Title" +NR_TAG_PAGEDESC="Page Meta Description" +NR_TAG_PAGELANG="Page Language Code" +NR_TAG_USERID="User ID" +NR_TAG_USERNAME="User Full Name" +NR_TAG_USERLOGIN="User Login" +NR_TAG_USEREMAIL="User Email" +NR_TAG_USERFIRSTNAME="User First Name" +NR_TAG_USERLASTNAME="User Last Name" +NR_TAG_USERGROUPS="User Groups IDs" +NR_TAG_DATE="Date" +NR_TAG_TIME="Time" +NR_TAG_RANDOMID="Random ID" +NR_ICON="Icon" +NR_SELECT_MODULE="Select a Module" +NR_SELECT_CONTINENT="Select a Continent" +NR_SELECT_COUNTRY="Select a Country" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Google Maps API Key" +NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +NR_GMAP_FIND_KEY="Get an API key" +NR_ARE_YOU_SURE="Are you sure?" +NR_CUSTOMURL="Custom URL" +NR_SAMPLE="Sample" +NR_DEBUG="Debug" +NR_CUSTOMURL="Custom URL" +NR_READMORE="Read More" +NR_IPADDRESS="IP Address" +NR_ASSIGN_BROWSERS="Browser" +NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Operating System" +NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +NR_FEWER_THAN="Fewer than" +NR_GREATER_THAN="Greater than" +NR_EXACTLY="Exactly" +NR_EXISTS="Exists" +NR_IS_EQUAL="Equals" +NR_CONTAINS="Contains" +NR_STARTS_WITH="Starts with" +NR_ENDS_WITH="Ends with" +NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="User ID" +NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +NR_ASSIGN_COMPONENTS="Component" +NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +NR_ASSIGN_TIMERANGE="Time Range" +NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +NR_START_TIME="Start Time" +NR_END_TIME="End Time" +NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Site Key" +NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +NR_RECAPTCHA_SECRET_KEY="Secret Key" +NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +NR_PREVIOUS_MONTH="Previous Month" +NR_NEXT_MONTH="Next Month" +NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +NR_ASSIGN_K2_ITEMS="Item" +NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +NR_ASSIGN_K2_ITEM_OPTION="Item" +NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +NR_ASSIGN_K2_TAG_OPTION="Tag Page" +NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +NR_CONTENT_KEYWORDS="Content keywords" +NR_META_KEYWORDS="Meta keywords" +NR_TAG="Tag" +NR_NORMAL="Normal" +NR_COMPACT="Compact" +NR_LIGHT="Light" +NR_DARK="Dark" +NR_SIZE="Size" +NR_THEME="Theme" +NR_SINGLE="Single" +NR_MULTIPLE="Multiple" +NR_RANGE="Range" +NR_RECAPTCHA="ReCaptcha" +NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +NR_PAGE="Page" +NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +NR_UPDATE="Update" +NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +NR_ASSIGN_ITEMS="Item" +NR_COUNTRY_AF="Afghanistan" +NR_COUNTRY_AX="Aland Islands" +NR_COUNTRY_AL="Albania" +NR_COUNTRY_DZ="Algeria" +NR_COUNTRY_AS="American Samoa" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antarctica" +NR_COUNTRY_AG="Antigua and Barbuda" +NR_COUNTRY_AR="Argentina" +NR_COUNTRY_AM="Armenia" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Australia" +NR_COUNTRY_AT="Austria" +NR_COUNTRY_AZ="Azerbaijan" +NR_COUNTRY_BS="Bahamas" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladesh" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Belarus" +NR_COUNTRY_BE="Belgium" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benin" +NR_COUNTRY_BM="Bermuda" +NR_COUNTRY_BQ_BO="Bonaire" +NR_COUNTRY_BQ_SA="Saba" +NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhutan" +NR_COUNTRY_BO="Bolivia" +NR_COUNTRY_BA="Bosnia and Herzegovina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Bouvet Island" +NR_COUNTRY_BR="Brazil" +NR_COUNTRY_IO="British Indian Ocean Territory" +NR_COUNTRY_BN="Brunei Darussalam" +NR_COUNTRY_BG="Bulgaria" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Cambodia" +NR_COUNTRY_CM="Cameroon" +NR_COUNTRY_CA="Canada" +NR_COUNTRY_CV="Cape Verde" +NR_COUNTRY_KY="Cayman Islands" +NR_COUNTRY_CF="Central African Republic" +NR_COUNTRY_TD="Chad" +NR_COUNTRY_CL="Chile" +NR_COUNTRY_CN="China" +NR_COUNTRY_CX="Christmas Island" +NR_COUNTRY_CC="Cocos (Keeling) Islands" +NR_COUNTRY_CO="Colombia" +NR_COUNTRY_KM="Comoros" +NR_COUNTRY_CG="Congo" +NR_COUNTRY_CD="Congo, The Democratic Republic of the" +NR_COUNTRY_CK="Cook Islands" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Cote d'Ivoire" +NR_COUNTRY_HR="Croatia" +NR_COUNTRY_CU="Cuba" +NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Cyprus" +NR_COUNTRY_CZ="Czech Republic" +NR_COUNTRY_DK="Denmark" +NR_COUNTRY_DJ="Djibouti" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="Dominican Republic" +NR_COUNTRY_EC="Ecuador" +NR_COUNTRY_EG="Egypt" +NR_COUNTRY_SV="El Salvador" +NR_COUNTRY_GQ="Equatorial Guinea" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Estonia" +NR_COUNTRY_ET="Ethiopia" +NR_COUNTRY_FK="Falkland Islands (Malvinas)" +NR_COUNTRY_FO="Faroe Islands" +NR_COUNTRY_FJ="Fiji" +NR_COUNTRY_FI="Finland" +NR_COUNTRY_FR="France" +NR_COUNTRY_GF="French Guiana" +NR_COUNTRY_PF="French Polynesia" +NR_COUNTRY_TF="French Southern Territories" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gambia" +NR_COUNTRY_GE="Georgia" +NR_COUNTRY_DE="Germany" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Greece" +NR_COUNTRY_GL="Greenland" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadeloupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haiti" +NR_COUNTRY_HM="Heard Island and McDonald Islands" +NR_COUNTRY_VA="Holy See (Vatican City State)" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Hungary" +NR_COUNTRY_IS="Iceland" +NR_COUNTRY_IN="India" +NR_COUNTRY_ID="Indonesia" +NR_COUNTRY_IR="Iran, Islamic Republic of" +NR_COUNTRY_IQ="Iraq" +NR_COUNTRY_IE="Ireland" +NR_COUNTRY_IM="Isle of Man" +NR_COUNTRY_IL="Israel" +NR_COUNTRY_IT="Italy" +NR_COUNTRY_JM="Jamaica" +NR_COUNTRY_JP="Japan" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordan" +NR_COUNTRY_KZ="Kazakhstan" +NR_COUNTRY_KE="Kenya" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="Korea, Democratic People's Republic of" +NR_COUNTRY_KR="Korea, Republic of" +NR_COUNTRY_KW="Kuwait" +NR_COUNTRY_KG="Kyrgyzstan" +NR_COUNTRY_LA="Lao People's Democratic Republic" +NR_COUNTRY_LV="Latvia" +NR_COUNTRY_LB="Lebanon" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Libyan Arab Jamahiriya" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Lithuania" +NR_COUNTRY_LU="Luxembourg" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Macedonia" +NR_COUNTRY_MG="Madagascar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malaysia" +NR_COUNTRY_MV="Maldives" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Marshall Islands" +NR_COUNTRY_MQ="Martinique" +NR_COUNTRY_MR="Mauritania" +NR_COUNTRY_MU="Mauritius" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Mexico" +NR_COUNTRY_FM="Micronesia, Federated States of" +NR_COUNTRY_MD="Moldova, Republic of" +NR_COUNTRY_MC="Monaco" +NR_COUNTRY_MN="Mongolia" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Morocco" +NR_COUNTRY_MZ="Mozambique" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibia" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="North Macedonia" +NR_COUNTRY_NP="Nepal" +NR_COUNTRY_NL="Netherlands" +NR_COUNTRY_AN="Netherlands Antilles" +NR_COUNTRY_NC="New Caledonia" +NR_COUNTRY_NZ="New Zealand" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigeria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Norfolk Island" +NR_COUNTRY_MP="Northern Mariana Islands" +NR_COUNTRY_NO="Norway" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Palestinian Territory" +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papua New Guinea" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Peru" +NR_COUNTRY_PH="Philippines" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Poland" +NR_COUNTRY_PT="Portugal" +NR_COUNTRY_PR="Puerto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="Reunion" +NR_COUNTRY_RO="Romania" +NR_COUNTRY_RU="Russian Federation" +NR_COUNTRY_RW="Rwanda" +NR_COUNTRY_SH="Saint Helena" +NR_COUNTRY_KN="Saint Kitts and Nevis" +NR_COUNTRY_LC="Saint Lucia" +NR_COUNTRY_PM="Saint Pierre and Miquelon" +NR_COUNTRY_VC="Saint Vincent and the Grenadines" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="Sao Tome and Principe" +NR_COUNTRY_SA="Saudi Arabia" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Serbia" +NR_COUNTRY_SC="Seychelles" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapore" +NR_COUNTRY_SK="Slovakia" +NR_COUNTRY_SI="Slovenia" +NR_COUNTRY_SB="Solomon Islands" +NR_COUNTRY_SO="Somalia" +NR_COUNTRY_ZA="South Africa" +NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +NR_COUNTRY_ES="Spain" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Sudan" +NR_COUNTRY_SS="South Sudan" +NR_COUNTRY_SR="Suriname" +NR_COUNTRY_SJ="Svalbard and Jan Mayen" +NR_COUNTRY_SZ="Swaziland" +NR_COUNTRY_SE="Sweden" +NR_COUNTRY_CH="Switzerland" +NR_COUNTRY_SY="Syrian Arab Republic" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tajikistan" +NR_COUNTRY_TZ="Tanzania, United Republic of" +NR_COUNTRY_TH="Thailand" +NR_COUNTRY_TL="Timor-Leste" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad and Tobago" +NR_COUNTRY_TN="Tunisia" +NR_COUNTRY_TR="Turkey" +NR_COUNTRY_TM="Turkmenistan" +NR_COUNTRY_TC="Turks and Caicos Islands" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ukraine" +NR_COUNTRY_AE="United Arab Emirates" +NR_COUNTRY_GB="United Kingdom" +NR_COUNTRY_US="United States" +NR_COUNTRY_UM="United States Minor Outlying Islands" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Uzbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Virgin Islands, British" +NR_COUNTRY_VI="Virgin Islands, U.S." +NR_COUNTRY_WF="Wallis and Futuna" +NR_COUNTRY_EH="Western Sahara" +NR_COUNTRY_YE="Yemen" +NR_COUNTRY_ZM="Zambia" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Africa" +NR_CONTINENT_AS="Asia" +NR_CONTINENT_EU="Europe" +NR_CONTINENT_NA="North America" +NR_CONTINENT_SA="South America" +NR_CONTINENT_OC="Oceania" +NR_CONTINENT_AN="Antarctica" +NR_FRONTEND="Front-end" +NR_BACKEND="Back-end" +NR_EMBED="Embed" +NR_RATE="Rate %s" +NR_REPORT_ISSUE="Report an issue" +NR_TAG_PAGEGENERATOR="Page Generator" +NR_TAG_PAGELANGURL="Page Language URL" +NR_TAG_PAGEKEYWORDS="Page Keywords" +NR_TAG_SITEEMAIL="Site Email" +NR_TAG_DAY="Day" +NR_TAG_MONTH="Month" +NR_TAG_YEAR="Year" +NR_TAG_USERREGISTERDATE="Register Date" +NR_TAG_PAGEBROWSERTITLE="Browser Title" +NR_TAG_EBID="Box ID" +NR_TAG_EBTITLE="Box Title" +NR_TAG_QUERYSTRINGOPTION="Query String : Option" +NR_TAG_QUERYSTRINGVIEW="Query String : View" +NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +NR_TAG_QUERYSTRINGTMPL="Query String : Template" +NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +NR_CANNOT_MOVE_FILE="Can't move file: %s" +NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +NR_START_OVER="Start over" +NR_TRY_AGAIN="Try again" +NR_ERROR="Error" +NR_CANCEL="Cancel" +NR_PLEASE_WAIT="Please wait" +NR_HCAPTCHA="hCaptcha" +NR_TYPE="Type" +NR_CHECKBOX="Checkbox" +NR_INVISIBLE="Invisible" +NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/language/en-GB/en-GB.plg_system_nrframework.sys.ini b/deployed/convertforms/plugins/system/nrframework/language/en-GB/en-GB.plg_system_nrframework.sys.ini new file mode 100644 index 00000000..4b5c4216 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/en-GB/en-GB.plg_system_nrframework.sys.ini @@ -0,0 +1,9 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - used by Tassos.gr extensions" +NOVARAIN_FRAMEWORK="Novarain Framework" \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/language/es-ES/es-ES.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/es-ES/es-ES.plg_system_nrframework.ini new file mode 100644 index 00000000..01e42e29 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/es-ES/es-ES.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Sistema - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - usado por Tassos.gr extensiones" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorar" +NR_INCLUDE="Incluir" +NR_EXCLUDE="Excluir" +NR_SELECTION="Selección" +NR_ASSIGN_MENU_NOITEM="No incluir Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="¿Asignar también cuando ningún menú Itemid está establecido en URL?" +NR_ASSIGN_MENU_CHILD="Asignar en elementos hijo" +NR_ASSIGN_MENU_CHILD_DESC="¿Asignar también a los elementos hijo de los elementos seleccionados?" +NR_COPY_OF="Copiar de %s" +NR_ASSIGN_DATETIME_DESC="Orientar a los visitantes en función de la hora de la fecha de su servidor" +NR_DATETIME="Fecha y hora" +NR_TIME="Hora" +NR_DATE="Fecha" +NR_DATETIME_DESC="Introduzca la fecha y hora para publicar/despublicar automáticamente" +NR_START_PUBLISHING="Fecha y hora de inicio" +NR_START_PUBLISHING_DESC="Introduzca la fecha para comenzar la publicación" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Introduzca la fecha para terminar la publicación" +NR_DATETIME_NOTE="Las asignaciones de fecha y hora utilizan la fecha y la hora de los servidores, no la del sistema de los visitantes." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="Código PHP" +NR_ASSIGN_PHP_DESC="Introduzca una parte de código PHP para evaluar." +NR_ASSIGN_PHP_DESC2="Orientación a los visitantes a evaluar código PHP personalizado. El código debe devolver el valor verdadero o falso.

        Por ejemplo:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Tiempo en el Sitio" +NR_SECONDS="Segundos" +NR_ASSIGN_TIMEONSITE_DESC="Ingrese una duración en segundos para compararla con el tiempo total del usuario (duración de la visita) gastado en todo el sitio.

        Ejemplo:
        Si desea mostrar una casilla después de que el usuario haya pasado 3 minutos en su sitio completo, escriba 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Orientar a visitantes que navegan por URL específicas" +NR_ASSIGN_URLS_DESC="Escriba (parte de) las URL a comparar
        Utilice una nueva línea para cada coincidencia diferente." +NR_ASSIGN_URLS_LIST="Emparejar URL" +NR_ASSIGN_URLS_REGEX="Usar Expresión Regular" +NR_ASSIGN_URLS_REGEX_DESC="Seleccione esta opción para tratar el valor como expresiones regulares." +NR_ASSIGN_LANGS="Idioma" +NR_ASSIGN_LANGS_DESC="Orientar a visitantes que están navegando por tu sitio web en un idioma específico" +NR_ASSIGN_LANGS_LIST_DESC="Seleccione los idiomas para asignar a" +NR_ASSIGN_DEVICES="Dispositivo" +NR_ASSIGN_DEVICES_DESC2="Orientar a visitantes que utilizan dispositivos específicos como Móviles, Tablet u Ordenadores" +NR_ASSIGN_DEVICES_DESC="Seleccione los dispositivos para asignar a" +NR_ASSIGN_DEVICES_NOTE="Tenga en cuenta que la detección de dispositivos no siempre es 100% precisa. Los usuarios pueden configurar su navegador para imitar otros dispositivos" +NR_MENU="Menú" +NR_MENU_ITEMS="Elementos del Menú" +NR_MENU_ITEMS_DESC="Orientar a visitantes que navegan por elementos del menú específicos" +NR_USERGROUP="Grupo de Usuarios" +NR_ACCESSLEVEL="Grupo de Usuarios" +NR_ACCESSLEVEL_DESC="Seleccione los grupos de usuarios a los que desea asignar a.

        Nota: Si desea publicarlo, establezca sólo en Ignorar y no seleccione Público." +NR_SHOW_COPYRIGHT="Mostrar Copyright" +NR_SHOW_COPYRIGHT_DESC="Si se selecciona, se mostrará información adicional sobre copyright en las vistas de administración. Las extensione de Tassos.gr nunca muestran información de copyright o vínculos de retroceso en el frontend." +NR_WIDTH="Anchura" +NR_WIDTH_DESC="Introduzca el ancho en px, em o %

        Ejemplo: 400px" +NR_HEIGHT="Altura" +NR_HEIGHT_DESC="Introduzca la altura en px, em o %

        Ejemplo: 400px" +NR_PADDING="Relleno" +NR_PADDING_DESC="Introduzca el relleno en px, em o %

        Ejemplo: 20px" +NR_MARGIN="Margen" +NR_MARGIN_DESC="La propiedad de margen CSS se utiliza para generar espacio alrededor de la caja y establecer el tamaño del espacio en blanco fuera del borde en píxeles o en %.

        Ejemplo 1: 25px
        Ejemplo 2: 5%

        Especificando el margen para cada lado [arriba a la derecha abajo a la izquierda]:

        Parte superior solamente: 25px 0 0 0
        Lado derecho solamente: 0 25px 0 0
        Parte inferior solamente: 0 0 25px 0
        Lado izquierdo solamente: 0 0 0 25px" +NR_COLOR_HOVER="Color Activo" +NR_COLOR="Color" +NR_COLOR_DESC="Define el color en formato HEX o RGBA." +NR_TEXT_COLOR="Color del texto" +NR_BACKGROUND="Fondo" +NR_BACKGROUND_COLOR="Color de fondo" +NR_BACKGROUND_COLOR_DESC="Defina un color de fondo en formato HEX o RGBA. Para deshabilitar, escriba 'none'. Para una transparencia absoluta escriba 'transparent'." +NR_URL_SHORTENING_FAILED="Acortamiento %s con %s fallido. %s" +NR_EXPORT="Exportar" +NR_IMPORT="Importar" +NR_PLEASE_CHOOSE_A_VALID_FILE="Elija un nombre de archivo válido" +NR_IMPORT_ITEMS="Importar Elementos" +NR_PUBLISH_ITEMS="Publicar Elementos" +NR_AS_EXPORTED="Como exportado" +NR_TITLE="Título" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Listado AcyMailing" +NR_ACYMAILING_LIST_DESC="Seleccione las listas de Acymailing a las que asignar." +NR_ASSIGN_ACYMAILING_DESC="Orientar a visitantes que se han suscrito a listas específicas de Acymailing" +NR_AKEEBASUBS="Suscripciones Akeeba" +NR_AKEEBASUBS_LEVELS="Niveles" +NR_AKEEBASUBS_LEVELS_DESC="Seleccione los niveles de suscripción de Akeeba a asignar." +NR_ASSIGN_AKEEBASUBS_DESC="Orientar a visitantes que se han suscrito a suscripciones específicas de Akeeba" +NR_MATCH="Combinar" +NR_MATCH_DESC="El método utilizado para comparar el valor" +NR_ASSIGN_MATCHING_METHOD="Método de Emparejamiento" +NR_ASSIGN_MATCHING_METHOD_DESC="¿Todas las asignaciones deben ser emparejadas?

        Todo
        Se publicará siTodaslas asignaciones inferiores coinciden.

        Cualquiera
        Se publicará si Cualquier(una o más) de las asignaciones inferiores se coinciden.
        Grupos de asignación donde 'Ignore' es seleccionado será ignorado." +NR_ANY="Cualquiera" +; NR_ASSIGN_REFERRER="Referrer URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +NR_ONLY_AVAILABLE_IN_PRO="Solo disponible en la versión PRO" +NR_UPGRADE_TO_PRO="Mejorar a Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Actualizar a la versión Pro para desbloquear" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +NR_UNLOCK_PRO_FEATURE="Desbloquear Función PRO" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Izquierda a derecha" +NR_RIGHT_TO_LEFT="Derecha a izquierda" +NR_BGIMAGE="Imagen de fondo" +NR_BGIMAGE_DESC="Establecer una imagen de fondo" +NR_BGIMAGE_FILE="Imagen" +NR_BGIMAGE_FILE_DESC="Seleccione o cargue un archivo para la imagen de fondo." +NR_BGIMAGE_REPEAT="Repetir" +NR_BGIMAGE_REPEAT_DESC="La propiedad repetir fondo establece si/cómo se repetirá una imagen de fondo. De forma predeterminada, una imagen de fondo se repite tanto verticalmente como horizontalmente.

        Repetir: La imagen de fondo se repetirá tanto verticalmente como horizontalmente.

        Repetir-x: La imagen de fondo solo se repetirá horizontalmente

        Repetir-y: La imagen de fondo solo se repetirá verticalmente

        No repetir: La imagen de fondo no se repetirá" +NR_BGIMAGE_SIZE="Tamaño" +NR_BGIMAGE_SIZE_DESC="Especifique el tamaño de una imagen de fondo.

        Auto: La imagen de fondo contiene su ancho y altura

        Cubierta: Escala la imagen de fondo para que sea lo más grande posible para que el área de fondo esté completamente cubierto por la imagen de fondo. Algunas partes de la imagen de fondo pueden no estar a la vista dentro del área de posicionamiento de fondo

        Contenido: Escala la imagen al tamaño más grande de manera que tanto su ancho como su altura puedan caber en el área de contenido

        100% 100%: Estira la imagen de fondo para cubrir completamente el área de contenido." +NR_BGIMAGE_POSITION="Posición" +NR_BGIMAGE_POSITION_DESC="La propiedad posición de fondo establece la posición inicial de una imagen de fondo. De forma predeterminada, una imagen de fondo se coloca en la esquina superior izquierda. El primer valor es la posición horizontal y el segundo es la vertical.

        Puede utilizar uno de los valores predefinidos o introducir un valor personalizado en porcentaje: x% y% o en píxeles xPos yPos." +NR_RTL="Habilitar RTL" +NR_RTL_DESC="La dirección del texto de derecha a izquierda es esencial para los scripts de derecha a izquierda como el Árabe, el Hebreo, el Siríaco y el Thaana." +NR_HORIZONTAL="Horizontal" +NR_VERTICAL="Vertical" +NR_FORM_ORIENTATION="Orientación del Formulario" +NR_FORM_ORIENTATION_DESC="Seleccione la orientación del formulario" +NR_ASSIGN_CATEGORY="Categorías" +NR_ASSIGN_CATEGORY_DESC="Seleccione las categorías a asignar a" +NR_ASSIGN_CATEGORY_CHILD="También en elementos heredados" +NR_ASSIGN_CATEGORY_CHILD_DESC="¿Asignar también a los elementos heredados de los elementos seleccionados?" +NR_NEW="Nuevo" +NR_LIST="Lista" +NR_DOCUMENTATION="Documentación" +NR_KNOWLEDGEBASE="Conocimiento" +NR_FAQ="Preguntas Frecuentes" +NR_INFORMATION="Información" +NR_EXTENSION="Extensión" +NR_VERSION="Versión" +NR_CHANGELOG="Registro de cambios" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Descargar clave" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Para poder actualizar %s a través del actualizador de Joomla, necesitará ingresar su código de descarga en la configuración del Novarain Framework Plugin" +NR_DOWNLOAD_KEY_FIND="Encontrar Clave de Descarga" +NR_DOWNLOAD_KEY_UPDATE="Actualizar Clave de Descarga" +NR_OK="De acuerdo" +NR_MISSING="Perdido" +NR_LICENSE="Licencia" +NR_AUTHOR="Autor" +NR_FOLLOWME="Sígueme" +NR_FOLLOW="Seguir %s" +NR_TRANSLATE_INTEREST="¿Estaría interesado en ayudar a traducir %s a su idioma?" +NR_TRANSIFEX_REQUEST="Envíeme una solicitud para Transifex" +NR_HELP_WITH_TRANSLATIONS="Ayuda con las traducciones" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Avanzado" +NR_USEGLOBAL="Usar Global" +NR_WEEKDAY="Día de la Semana" +NR_MONTH="Mes" +NR_MONDAY="Lunes" +NR_TUESDAY="Martes" +NR_WEDNESDAY="Miércoles" +NR_THURSDAY="Jueves" +NR_FRIDAY="Viernes" +NR_SATURDAY="Sábado" +NR_WEEKEND="Fin de Semana" +NR_WEEKDAYS="Días Laborables" +NR_SUNDAY="Domingo" +NR_JANUARY="Enero" +NR_FEBRUARY="Febrero" +NR_MARCH="Marzo" +NR_APRIL="Abril" +NR_MAY="Mayo" +NR_JUNE="Junio" +NR_JULY="Julio" +NR_AUGUST="Agosto" +NR_SEPTEMBER="Septiembre" +NR_OCTOBER="Octubre" +NR_NOVEMBER="Noviembre" +NR_DECEMBER="Diciembre" +NR_NEVER="Nunca" +NR_SECONDS="Segundos" +NR_MINUTES="Minutos" +NR_HOURS="Horas" +NR_DAYS="Días" +NR_SESSION="Sesión" +NR_EVER="Nunca" +NR_COOKIE="Cookie" +NR_BOTH="Ambos" +NR_NONE="Ninguno" +NR_DESKTOPS="Escritorio" +NR_MOBILES="Móvil" +NR_TABLETS="Tableta" +NR_PER_SESSION="Por Sesión" +NR_PER_DAY="Por Día" +NR_PER_WEEK="Por Semana" +NR_PER_MONTH="Por Mes" +NR_FOREVER="Para siempre" +NR_FEATURE_UNDER_DEV="Esta característica está en desarrollo" +NR_LIKE_THIS_EXTENSION="¿Te gusta esta extensión?" +NR_LEAVE_A_REVIEW="Dejar un comentado en JED" +NR_SUPPORT="Soporte" +NR_NEED_SUPPORT="¿Necesita ayuda?" +NR_DROP_EMAIL="Envíame un correo electrónico" +NR_READ_DOCUMENTATION="Lea la documentación" +NR_COPYRIGHT="%s - Tassos.gr Todos los derechos reservados" +NR_DASHBOARD="Tablero" +NR_NAME="Nombre" +NR_WRONG_COORDINATES="Las coordenadas proporcionadas no son válidas" +NR_ENTER_COORDINATES="Latitud,Longitud" +NR_NO_ITEMS_FOUND="No se encontraron elementos" +NR_ITEM_IDS="No hay elementos IDs" +NR_TOGGLE="Palanca" +NR_EXPAND="Expandir" +NR_COLLAPSE="Contraer" +NR_SELECTED="Seleccionado" +NR_MAXIMIZE="Maximizar" +NR_MINIMIZE="Minimizar" +NR_SELECTION="Selección" +NR_INSTALL="Instalar" +NR_INSTALL_NOW="Instalar Ahora" +NR_INSTALLED="Instalado" +NR_COMING_SOON="Próximamente" +NR_ROADMAP="En la hoja de ruta" +NR_MEDIA_VERSIONING="Utilizar el versionamiento de medios" +NR_MEDIA_VERSIONING_DESC="Seleccione para agregar el número de versión de extensión al final de las urls de medios (js/css), para que los navegadores fuercen la carga del archivo correcto." +NR_LOAD_JQUERY="Cargar jQuery" +NR_LOAD_JQUERY_DESC="Seleccione para cargar el script jQuery principal. Puede desactivar esto si experimenta conflictos si su plantilla u otras extensiones cargan su propia versión de jQuery." +NR_SELECT_CURRENCY="Seleccione Divisa" +NR_CONVERTFORMS="Convertir Formularios" +NR_CONVERTFORMS_LIST="Campaña" +NR_ASSIGN_CONVERTFORMS_DESC="Visitantes destinatarios que se han suscrito a campañas específicas de Convertforms" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +NR_LEFT="Izquierda" +NR_CENTER="Centro" +NR_RIGHT="Derecha" +NR_BOTTOM="Inferior" +NR_TOP="Superior" +NR_AUTO="Auto" +NR_CUSTOM="Personalizado" +NR_UPLOAD="Subir" +NR_IMAGE="Imagen" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Seleccionar Imagen" +NR_IMAGE_SIZE_COVER="Cubierta" +NR_IMAGE_SIZE_CONTAIN="Contiene" +NR_REPEAT="Repetir" +NR_REPEAT_X="Repetir x" +NR_REPEAT_Y="Repetir Y" +NR_REPEAT_NO="No repetir" +NR_FIELD_STATE_DESC="Establecer estados de los elementos" +NR_CREATED_DATE="Fecha de Creación" +NR_CREATED_DATE_DESC="La fecha del elemento ha sido creada" +NR_MODIFIFED_DATE="Fecha Modificada" +NR_MODIFIFED_DATE_DESC="La fecha en que el elemento se modificó por última vez." +NR_CATEGORIES="Categoría" +; NR_CATEGORIES_DESC="Select the categories to assign to." +; NR_ALSO_ON_CHILD_ITEMS="Also on child items" +; NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +; NR_PAGE_TYPE="Page type" +; NR_PAGE_TYPES="Page types" +; NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +NR_ARTICLES="Artículos" +NR_ARTICLES_DESC="Seleccione los artículos para asignar a." +NR_ARTICLE="Artículo" +NR_ARTICLE_AUTHORS="Autor" +NR_ARTICLE_AUTHORS_DESC="Seleccione los autores a asignar a" +NR_ONLY="Solo" +NR_OTHERS="Otros" +; NR_SMARTTAGS="Smart Tags" +; NR_SMARTTAGS_SHOW="Show Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +; NR_CONTACT_US="Contact us" +; NR_FONT_COLOR="Font Color" +; NR_FONT_SIZE="Font Size" +; NR_FONT_SIZE_DESC="Choose a font size in pixels" +; NR_TEXT="Text" +NR_URL="URL" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +; NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +; NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +; NR_GEOLOCATING="Geolocating" +; NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +; NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +; NR_ASSIGN_CONTINENTS="Continent" +; NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +NR_ARE_YOU_SURE="¿Está usted Seguro?" +NR_CUSTOMURL="URL Personalizada" +NR_SAMPLE="Muestra" +; NR_DEBUG="Debug" +NR_CUSTOMURL="URL Personalizada" +NR_READMORE="Leer Más" +NR_IPADDRESS="Dirección IP" +NR_ASSIGN_BROWSERS="Navegador" +NR_ASSIGN_BROWSERS_DESC="Seleccione los navegadores a asignar" +NR_ASSIGN_BROWSERS_DESC2="Los visitantes que están navegando por su sitio con navegadores específicos como Chrome, Firefox o Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Sistema Operativo" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Número de Páginas vistas" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +NR_ASSIGN_PAGEVIEWS_VIEWS="Páginas Vistas" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/et-EE/et-EE.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/et-EE/et-EE.plg_system_nrframework.ini new file mode 100644 index 00000000..a430d79f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/et-EE/et-EE.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Süsteem - Novarain raamistik" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain raamistik - kasutatakse Tassos.gr lisade juures" +NOVARAIN_FRAMEWORK="Novarain raamistik" + +; TRANSLATABLE +NR_IGNORE="Ignoreeri" +NR_INCLUDE="Kaasa" +NR_EXCLUDE="Vlista" +NR_SELECTION="Vali" +NR_ASSIGN_MENU_NOITEM="Ära kaasa Itemid'd" +NR_ASSIGN_MENU_NOITEM_DESC="Kaasa ka siis kui menüü Itemid on URL's määratud?" +NR_ASSIGN_MENU_CHILD="Ka alamkirjetele" +NR_ASSIGN_MENU_CHILD_DESC="Kas määrata ka alamkirjetele sinu valikus?" +NR_COPY_OF="Kopeeri %s" +NR_ASSIGN_DATETIME_DESC="Sihtitud külastajad käsitletakse sinu serveri kuupäev-kellaaja järgi" +NR_DATETIME="Kuupäev-kellaaeg" +NR_TIME="Kellaaeg" +NR_DATE="Kuupäev" +NR_DATETIME_DESC="Sisesta kuupäev-kellaaeg mil toimub atomaatne avalikustamine/peitmine" +NR_START_PUBLISHING="Alguse kuupäev-kellaaeg" +NR_START_PUBLISHING_DESC="Sisesta avalikustamise kuupäev" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Sisesta peitmise kuupäev" +NR_DATETIME_NOTE="Kuupäeva ja aja määrangutes kasuta serveri kuupäeva/aega mitte kasutajapoolset." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP kood" +NR_ASSIGN_PHP_DESC="Sisesta PHP kood mida analüüsida." +NR_ASSIGN_PHP_DESC2="Sihitud külastajale suunatud PHP kood. Kood peab tagastama väärtuse õige või vale.

        Näiteks:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Aeg lehel" +NR_SECONDS="Sekundit" +; NR_ASSIGN_TIMEONSITE_DESC="Enter a duration in seconds to compare with the user's total time (Visit duration) spent on your entire site .

        Example:
        If you want to display a box after the user has spent 3 minutes on your the entire site, enter 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Sihitav külastaja kes külastab määratud URL-e" +NR_ASSIGN_URLS_DESC="Sisesta (osa) URL-st mida otsida.
        Kasuta iga erineva otsingu jaoks uut rida." +NR_ASSIGN_URLS_LIST="URL-ide kookkulangevus" +NR_ASSIGN_URLS_REGEX="Kasuta regulaaravaldisi" +NR_ASSIGN_URLS_REGEX_DESC="Saad otsitavas väärtuses kasutada regulaaravaldisi." +NR_ASSIGN_LANGS="Keel" +NR_ASSIGN_LANGS_DESC="Külastajal, kes külastab sinu lehte, on ettemääratud keel" +NR_ASSIGN_LANGS_LIST_DESC="Määra keel millega siduda" +NR_ASSIGN_DEVICES="Seade" +NR_ASSIGN_DEVICES_DESC2="Külastaja kasutab määratud seadet nagu Mobiil, Tahvel või Arvuti." +NR_ASSIGN_DEVICES_DESC="Määra seadmed millega siduda." +NR_ASSIGN_DEVICES_NOTE="Tea, et seadme tuvastamine ei ole alati 100% õige. Kasutajad saavad oma brauserites emuleerida muid seadmeid." +NR_MENU="Menüü" +NR_MENU_ITEMS="Menüükirje" +NR_MENU_ITEMS_DESC="Külastajad, kes saavad kasutada ette määratud menüükirjeid" +NR_USERGROUP="Kasutajagrupp" +NR_ACCESSLEVEL="Kasutajagrupp" +NR_ACCESSLEVEL_DESC="Vali kasutajagrupp millega siduda.

        NB: Kui tahad määrata avalikuks, määra see lihtsalt Ignoreeri peale ja ära määra Avalik." +NR_SHOW_COPYRIGHT="Näita autoriõigusi" +NR_SHOW_COPYRIGHT_DESC="Kui on määratud, siis näidatakse admin vaadetes autoriõigusi. Tassos.gr lisad ei näita ise autoriõigusi kunagi ja ei loo ka linke oma lehele." +NR_WIDTH="Laius" +NR_WIDTH_DESC="Sisesta laius px, em or %

        Näiteks: 400px" +NR_HEIGHT="Kõrgus" +NR_HEIGHT_DESC="Sisesta kõrgus px, em or %

        Näiteks: 400px" +NR_PADDING="Nihe" +NR_PADDING_DESC="Sisesta nihe px, em or %

        Näiteks: 20px" +NR_MARGIN="Lüke" +; NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +NR_COLOR_HOVER="Üleliikumise värv" +NR_COLOR="Värv" +NR_COLOR_DESC="Määra värv HEX või RGBA formaadis." +NR_TEXT_COLOR="Teksti värv" +NR_BACKGROUND="Taust" +NR_BACKGROUND_COLOR="Tausta värv" +NR_BACKGROUND_COLOR_DESC="Määra värv HEX või RGBA formaadis. Et keelat, sisesta 'none'. Täielikuks läbipaistvuseks sisesta 'transparent'." +NR_URL_SHORTENING_FAILED="Lühendamine %s selliseks %s ebaõnnesuts. %s." +NR_EXPORT="Eksport" +NR_IMPORT="Import" +NR_PLEASE_CHOOSE_A_VALID_FILE="Palun vali korralik failinimi" +NR_IMPORT_ITEMS="Impordi kirjeid" +NR_PUBLISH_ITEMS="Avalikusta kirjeid" +NR_AS_EXPORTED="Nagu eksporditud" +NR_TITLE="Pealkiri" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing uudiskiri" +NR_ACYMAILING_LIST_DESC="Vali AcyMailing uudiskiri millega siduda." +NR_ASSIGN_ACYMAILING_DESC="Külastajad, keda liita AcyMailing uudiskirjaga" +NR_AKEEBASUBS="Akeeba liikmelisused" +NR_AKEEBASUBS_LEVELS="Tasemed" +NR_AKEEBASUBS_LEVELS_DESC="Vali Akeeba liikmelisuse tasemed millega siduda." +NR_ASSIGN_AKEEBASUBS_DESC="Külastajad kes liidetakse Akeeba liikmelisusega" +NR_MATCH="Kokkulangevus" +NR_MATCH_DESC="Kasutatud kokkusobivuse meetod millega väärtust võrrelda" +NR_ASSIGN_MATCHING_METHOD="Kokkusobivuse meetod" +; NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +NR_ANY="Iga" +NR_ASSIGN_REFERRER="Saatev URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +; NR_ONLY_AVAILABLE_IN_PRO="Only available in PRO version" +; NR_UPGRADE_TO_PRO="Upgrade to Pro" +; NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +; NR_LEFT_TO_RIGHT="Left to Right" +; NR_RIGHT_TO_LEFT="Right to Left" +; NR_BGIMAGE="Background Image" +; NR_BGIMAGE_DESC="Sets a background image" +; NR_BGIMAGE_FILE="Image" +; NR_BGIMAGE_FILE_DESC="Select or a upload a file for the background-image." +; NR_BGIMAGE_REPEAT="Repeat" +; NR_BGIMAGE_REPEAT_DESC="The background-repeat property sets if/how a background image will be repeated. By default, a background-image is repeated both vertically and horizontally.

        Repeat: The background image will be repeated both vertically and horizontally.

        Repeat-x: The background image will be repeated only horizontally

        Repeat-y: The background image will be repeated only vertically

        No-repeat: The background-image will not be repeated" +; NR_BGIMAGE_SIZE="Size" +; NR_BGIMAGE_SIZE_DESC="Specify the size of a background image.

        Auto:The background-image contains its width and height

        Cover: Scale the background image to be as large as possible so that the background area is completely covered by the background image. Some parts of the background image may not be in view within the background positioning area

        Contain: Scale the image to the largest size such that both its width and its height can fit inside the content area

        100% 100%: Stretch the background image to completely cover the content area." +; NR_BGIMAGE_POSITION="Position" +; NR_BGIMAGE_POSITION_DESC="The background-position property sets the starting position of a background image. By default, a background-image is placed at the top-left corner. The first value is the horizontal position and the second value is the vertical.

        You can use either one of the predefined values, or enter a custom value in percentage: x% y% or in pixel xPos yPos." +; NR_RTL="Enable RTL" +; NR_RTL_DESC="The right-to-left text direction is essential for right-to-left scripts such as Arabic, Hebrew, Syriac, and Thaana." +; NR_HORIZONTAL="Horizontal" +; NR_VERTICAL="Vertical" +; NR_FORM_ORIENTATION="Form Orientation" +; NR_FORM_ORIENTATION_DESC="Select the form orientation" +; NR_ASSIGN_CATEGORY="Categories" +; NR_ASSIGN_CATEGORY_DESC="Select the categories to assign to" +; NR_ASSIGN_CATEGORY_CHILD="Also on child items" +; NR_ASSIGN_CATEGORY_CHILD_DESC="Also assign to child items of the selected items?" +; NR_NEW="New" +; NR_LIST="List" +; NR_DOCUMENTATION="Documentation" +; NR_KNOWLEDGEBASE="Knowledgebase" +; NR_FAQ="FAQ" +; NR_INFORMATION="Information" +; NR_EXTENSION="Extension" +; NR_VERSION="Version" +; NR_CHANGELOG="Changelog" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +; NR_DOWNLOAD_KEY="Download Key" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +; NR_DOWNLOAD_KEY_HOW="To be able to update %s via the Joomla updater, you will need enter your Download Key in the settings of the Novarain Framework Plugin" +; NR_DOWNLOAD_KEY_FIND="Find Download Key" +; NR_DOWNLOAD_KEY_UPDATE="Update Download Key" +; NR_OK="OK" +; NR_MISSING="Missing" +; NR_LICENSE="License" +; NR_AUTHOR="Author" +; NR_FOLLOWME="Follow me" +; NR_FOLLOW="Follow %s" +; NR_TRANSLATE_INTEREST="Would you be interested in helping out with translating %s into your Language?" +; NR_TRANSIFEX_REQUEST="Send me a request on Transifex" +; NR_HELP_WITH_TRANSLATIONS="Help with translations" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +; NR_ADVANCED="Advanced" +; NR_USEGLOBAL="Use Global" +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +; NR_NEVER="Never" +NR_SECONDS="Sekundit" +; NR_MINUTES="Minutes" +; NR_HOURS="Hours" +; NR_DAYS="Days" +; NR_SESSION="Session" +; NR_EVER="Ever" +; NR_COOKIE="Cookie" +; NR_BOTH="Both" +; NR_NONE="None" +; NR_DESKTOPS="Desktop" +; NR_MOBILES="Mobile" +; NR_TABLETS="Tablet" +; NR_PER_SESSION="Per Session" +; NR_PER_DAY="Per Day" +; NR_PER_WEEK="Per Week" +; NR_PER_MONTH="Per Month" +; NR_FOREVER="Forever" +; NR_FEATURE_UNDER_DEV="This feature is under development" +; NR_LIKE_THIS_EXTENSION="Like this extension?" +; NR_LEAVE_A_REVIEW="Leave a review on JED" +; NR_SUPPORT="Support" +; NR_NEED_SUPPORT="Need support?" +; NR_DROP_EMAIL="Drop me an e-mail" +; NR_READ_DOCUMENTATION="Read the Documentation" +; NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +; NR_DASHBOARD="Dashboard" +; NR_NAME="Name" +; NR_WRONG_COORDINATES="The coordinates you provided are not valid" +; NR_ENTER_COORDINATES="Latitude,Longitude" +; NR_NO_ITEMS_FOUND="No Items Found" +; NR_ITEM_IDS="No Item IDs" +; NR_TOGGLE="Toggle" +; NR_EXPAND="Expand" +; NR_COLLAPSE="Collapse" +; NR_SELECTED="Selected" +; NR_MAXIMIZE="Maximize" +; NR_MINIMIZE="Minimize" +NR_SELECTION="Vali" +; NR_INSTALL="Install" +; NR_INSTALL_NOW="Install Now" +; NR_INSTALLED="Installed" +; NR_COMING_SOON="Coming soon" +; NR_ROADMAP="On the roadmap" +; NR_MEDIA_VERSIONING="Use Media Versioning" +; NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +; NR_LOAD_JQUERY="Load jQuery" +; NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +; NR_SELECT_CURRENCY="Select a Currency" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +; NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +; NR_LEFT="Left" +; NR_CENTER="Center" +; NR_RIGHT="Right" +; NR_BOTTOM="Bottom" +; NR_TOP="Top" +; NR_AUTO="Auto" +; NR_CUSTOM="Custom" +; NR_UPLOAD="Upload" +; NR_IMAGE="Image" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +; NR_IMAGE_SELECT="Select Image" +; NR_IMAGE_SIZE_COVER="Cover" +; NR_IMAGE_SIZE_CONTAIN="Contain" +; NR_REPEAT="Repeat" +; NR_REPEAT_X="Repeat x" +; NR_REPEAT_Y="Repeat y" +; NR_REPEAT_NO="No repeat" +; NR_FIELD_STATE_DESC="Set item's state" +; NR_CREATED_DATE="Created Date" +; NR_CREATED_DATE_DESC="The date the item was created" +; NR_MODIFIFED_DATE="Modified Date" +; NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +; NR_CATEGORIES="Category" +; NR_CATEGORIES_DESC="Select the categories to assign to." +; NR_ALSO_ON_CHILD_ITEMS="Also on child items" +; NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +; NR_PAGE_TYPE="Page type" +; NR_PAGE_TYPES="Page types" +; NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +; NR_ARTICLES="Articles" +; NR_ARTICLES_DESC="Select the articles to assign to." +; NR_ARTICLE="Article" +; NR_ARTICLE_AUTHORS="Authors" +; NR_ARTICLE_AUTHORS_DESC="Select the authors to assign to." +; NR_ONLY="Only" +; NR_OTHERS="Others" +; NR_SMARTTAGS="Smart Tags" +; NR_SMARTTAGS_SHOW="Show Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +; NR_CONTACT_US="Contact us" +; NR_FONT_COLOR="Font Color" +; NR_FONT_SIZE="Font Size" +; NR_FONT_SIZE_DESC="Choose a font size in pixels" +; NR_TEXT="Text" +; NR_URL="URL" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +; NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +; NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +; NR_GEOLOCATING="Geolocating" +; NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +; NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +; NR_ASSIGN_CONTINENTS="Continent" +; NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +; NR_ARE_YOU_SURE="Are you sure?" +; NR_CUSTOMURL="Custom URL" +; NR_SAMPLE="Sample" +; NR_DEBUG="Debug" +; NR_CUSTOMURL="Custom URL" +; NR_READMORE="Read More" +; NR_IPADDRESS="IP Address" +; NR_ASSIGN_BROWSERS="Browser" +; NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +; NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +; NR_CHROME="Chrome" +; NR_FIREFOX="Firefox" +; NR_EDGE="Edge" +; NR_IE="Internet Explorer" +; NR_SAFARI="Safari" +; NR_OPERA="Opera" +; NR_ASSIGN_OS="Operating System" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +; NR_LINUX="Linux" +; NR_MAC="MacOS" +; NR_ANDROID="Android" +; NR_IOS="iOS" +; NR_WINDOWS="Windows" +; NR_BLACKBERRY="Blackberry" +; NR_CHROMEOS="Chrome OS" +; NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +; NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/fa-IR/fa-IR.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/fa-IR/fa-IR.plg_system_nrframework.ini new file mode 100644 index 00000000..b45c078d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/fa-IR/fa-IR.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="سیستم - فریمورک Novarain" +PLG_SYSTEM_NRFRAMEWORK_DESC="فریمورک Novarain - استفاده شده توسط افزونه های Tassos.gr" +NOVARAIN_FRAMEWORK="فریمورک Novarain" + +; TRANSLATABLE +NR_IGNORE="چشم پوشی" +NR_INCLUDE="شامل" +NR_EXCLUDE="محروم" +NR_SELECTION="انتخاب" +NR_ASSIGN_MENU_NOITEM="شامل بدون شناسه مورد" +NR_ASSIGN_MENU_NOITEM_DESC="اختصاص موقعی که هیچ منویی به شناسه مورد تنظیم نشده باشد؟" +; NR_ASSIGN_MENU_CHILD="Also on child items" +; NR_ASSIGN_MENU_CHILD_DESC="Also assign to child items of the selected items?" +NR_COPY_OF="کپی از %s" +; NR_ASSIGN_DATETIME_DESC="Target visitors based on your server's datetime" +NR_DATETIME="زمان قرار" +; NR_TIME="Time" +; NR_DATE="Date" +NR_DATETIME_DESC="زمان قرار برای انتشار/عدم انتشار خودکار وارد کنید." +; NR_START_PUBLISHING="Start Datetime" +NR_START_PUBLISHING_DESC="تاریخ برای شروع انتشار وارد کنید." +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="تاریخ پایان انتشار را وارد کنید." +NR_DATETIME_NOTE="تخصیص تاریخ و زمان استفاده از تاریخ/زمان از سرور های خود ، نه سیستم بازدید کننده." +; NR_ASSIGN_PHP="PHP" +; NR_PHPCODE="PHP Code" +; NR_ASSIGN_PHP_DESC="Enter a piece of PHP code to evaluate." +; NR_ASSIGN_PHP_DESC2="Target visitors evaluating custom PHP code. The code must return the value true or false.

        For instance:
        return ($user->name == 'Tassos Marinos');" +; NR_ASSIGN_TIMEONSITE="Time on Site" +NR_SECONDS="ساعت" +; NR_ASSIGN_TIMEONSITE_DESC="Enter a duration in seconds to compare with the user's total time (Visit duration) spent on your entire site .

        Example:
        If you want to display a box after the user has spent 3 minutes on your the entire site, enter 180." +NR_ASSIGN_URLS="آدرس" +; NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +NR_ASSIGN_URLS_DESC=" آدرس ها (بخشی از ) را برای مطابقت وارد کنید.
        از یک خط جدید برای هر مورد متفاوت استفاده کنید." +NR_ASSIGN_URLS_LIST="آدرس های مشابه" +; NR_ASSIGN_URLS_REGEX="Use Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="انتخاب برای ارتباط ارزش به عنوان عبارات منظم." +; NR_ASSIGN_LANGS="Language" +; NR_ASSIGN_LANGS_DESC="Target visitors who are browsing your website in specific language" +NR_ASSIGN_LANGS_LIST_DESC="انتخاب زبان برای اختصاص به" +; NR_ASSIGN_DEVICES="Device" +; NR_ASSIGN_DEVICES_DESC2="Target visitors using specific device such as Mobile, Tablet or Desktop." +NR_ASSIGN_DEVICES_DESC="برای اختصاص به دستگاه ها انتخاب کنید" +NR_ASSIGN_DEVICES_NOTE="به خاطر داشته باشید که تشخیص دستگاه همیشه 100% دقیق نیست. کاربران می توانند مرورگر خود را به تقلید از دستگاه های دیگر نصب پیکربندی کنند" +; NR_MENU="Menu" +; NR_MENU_ITEMS="Menu Item" +; NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +; NR_USERGROUP="User Group" +; NR_ACCESSLEVEL="User Group" +NR_ACCESSLEVEL_DESC="انتخاب گروه کاربری برای اختصاص.

        توجه: اگر شما می خواهید آن را عمومی کنیدفقط نادیده گرفتن تنظیم و عمومی را انتخاب کنید." +NR_SHOW_COPYRIGHT="نمایش کپی رایت" +NR_SHOW_COPYRIGHT_DESC="اگر انتخاب شده باشد، اطلاعات اضافی به کپی رایت در دیدگاه مدیر نمایش داده میشود. افزونه های Tassos.gr هرگز اطلاعات کپی رایت و یا لینک دهنده در ظاهر را نمایش نمی دهند." +NR_WIDTH="عرض" +NR_WIDTH_DESC="عرض را به پیکسل، EM یا٪ وارد کنید

        به عنوان مثال: 400px " +NR_HEIGHT="ارتفاع" +NR_HEIGHT_DESC="ارتفاء را به پیکسل، EM یا٪ وارد کنید

        به عنوان مثال: 400px" +NR_PADDING="لایه گذاری" +NR_PADDING_DESC="لایه گذاری رابه پیکسل، EM یا٪ وارد کنید

        به عنوان مثال: 20px" +; NR_MARGIN="Margin" +; NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +; NR_COLOR_HOVER="Hover Color" +NR_COLOR="رنگ" +; NR_COLOR_DESC="Define a color in HEX or RGBA format." +NR_TEXT_COLOR="رنگ متن" +; NR_BACKGROUND="Background" +NR_BACKGROUND_COLOR="رنگ پس زمینه" +; NR_BACKGROUND_COLOR_DESC="Define a background color in HEX or RGBA format. To disable enter 'none'. For absolute transparency enter 'transparent'." +NR_URL_SHORTENING_FAILED="کوتاه%s با %s شکست خورد. %s." +NR_EXPORT="خروجی" +NR_IMPORT="وراد کردن" +NR_PLEASE_CHOOSE_A_VALID_FILE="لطفا یک نام فایل معتبر انتخاب کنید" +NR_IMPORT_ITEMS="وارد کردن موارد" +NR_PUBLISH_ITEMS="موارد انتشار" +NR_AS_EXPORTED="به عنوان خروجی گرفته شده" +; NR_TITLE="Title" +NR_ACYMAILING="خبرنامه AcyMailing" +; NR_ACYMAILING_LIST="AcyMailing List" +; NR_ACYMAILING_LIST_DESC="Select AcyMailing lists to assign to." +; NR_ASSIGN_ACYMAILING_DESC="Target visitors who have subscribed to specific AcyMailing lists" +NR_AKEEBASUBS="عضویت Akeeba " +NR_AKEEBASUBS_LEVELS="سطوح" +; NR_AKEEBASUBS_LEVELS_DESC="Select Akeeba Subscription levels to assign to." +; NR_ASSIGN_AKEEBASUBS_DESC="Target visitors who have subscribed to specific Akeeba Subscriptions" +; NR_MATCH="Match" +; NR_MATCH_DESC="The used matching method to compare the value" +NR_ASSIGN_MATCHING_METHOD="روش های مشابه" +; NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +NR_ANY="هر" +; NR_ASSIGN_REFERRER="Referrer URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +NR_ONLY_AVAILABLE_IN_PRO="فقط در نسخه تجاری فعال است." +NR_UPGRADE_TO_PRO="ارتقاء به نسخه تجاری" +; NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="چپ به راست" +NR_RIGHT_TO_LEFT="راست به چپ" +NR_BGIMAGE="تصویر پس زمینه" +NR_BGIMAGE_DESC="تنظیم تصویر پس زمینه" +NR_BGIMAGE_FILE="تصویر" +NR_BGIMAGE_FILE_DESC="یک فایل برای تصویر پس زمینه انتخاب و یا آپلود کنید." +NR_BGIMAGE_REPEAT="تکرار" +NR_BGIMAGE_REPEAT_DESC="ویژگی تکرار پس زمینه اگر تنظیم شده باشد/چگونه یک تصویر پس زمینه تکرار خواهد شد. به طور پیش فرض، تصویر پس زمینه صورت عمودی و افقی تکرار شده است.

        تکرار: تصویر پس زمینه صورت عمودی و افقی تکرار شود.

        X: تکرار تصویر پس زمینه را تکرار فقط به صورت افقی

        y: تکرار تصویر پس زمینه را تکرار فقط عمودی

        کننده: تصویر پس زمینه تکرار خواهد شد" +NR_BGIMAGE_SIZE="اندازه" +; NR_BGIMAGE_SIZE_DESC="Specify the size of a background image.

        Auto:The background-image contains its width and height

        Cover: Scale the background image to be as large as possible so that the background area is completely covered by the background image. Some parts of the background image may not be in view within the background positioning area

        Contain: Scale the image to the largest size such that both its width and its height can fit inside the content area

        100% 100%: Stretch the background image to completely cover the content area." +NR_BGIMAGE_POSITION="موقعیت" +NR_BGIMAGE_POSITION_DESC="موقعیت پس زمینهموقعیت شروع تصویر پس زمینه را تنظیم می کند. تصویر پس زمینه پیش فرض در گوشه بالا سمت چپ قرار می گیرد. مقدار اول موقعیت افقی و ارزش دوم عمودی است.

        شما می توانید یکی از مقادیر از پیش تعریف شده یا مقداری سفارشی وارد کنید بر حسب درصد: x y % و یا در yPos xPos پیکسل استفاده کنید." +NR_RTL="فعال کردن راست به چپ" +NR_RTL_DESC="جهت متن راست به چپ برای اسکریپت راست به چپ مانند عربی، عبری، سریانی، و ثنا ضروری است." +NR_HORIZONTAL="افقی" +NR_VERTICAL="عمودی" +NR_FORM_ORIENTATION="جهت فرم" +NR_FORM_ORIENTATION_DESC="جهت فرم را انتخاب کنید" +NR_ASSIGN_CATEGORY="دسته بندی ها" +NR_ASSIGN_CATEGORY_DESC="انتخاب دسته بندی ها برای اختصاص" +NR_ASSIGN_CATEGORY_CHILD="زیرمجموعه ها همچنین" +NR_ASSIGN_CATEGORY_CHILD_DESC=" به زیرمجموعه آیتم های انتخاب شده اختصاص می دهید؟" +NR_NEW="جدید" +NR_LIST="لیست" +NR_DOCUMENTATION="مستندات" +; NR_KNOWLEDGEBASE="Knowledgebase" +NR_FAQ="سوال و جواب" +NR_INFORMATION="اطلاعات" +NR_EXTENSION="افزونه" +NR_VERSION="نسخه" +NR_CHANGELOG="تغییرات" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="کلید دانلود" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="برای اینکه قادر به به روز رسانی %s از طریق به روز رسانی جوملا باشید ، شما نیاز درارید در تنظیمات پلاگین فریمورک Novarain خود کلید دانلود را وارد کنید." +NR_DOWNLOAD_KEY_FIND="پیدا کردن کلید دانلود" +NR_DOWNLOAD_KEY_UPDATE="بروزرسانی کلید دانلود" +NR_OK="تایید" +NR_MISSING="مفقود" +NR_LICENSE="لایسنس" +NR_AUTHOR="نویسنده" +NR_FOLLOWME="دنبال کردن من" +NR_FOLLOW="دنبال کردن %s" +NR_TRANSLATE_INTEREST="آیا علاقمند به کمک به ترجمه %s به زبان خود هستید؟" +NR_TRANSIFEX_REQUEST="اراسل درخواست به من در ترانسیفکس" +NR_HELP_WITH_TRANSLATIONS="کمک برای ترجمه" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="پیشرفته" +NR_USEGLOBAL="استفاده از پیکربندی کلی " +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +NR_NEVER="هیچوقت" +NR_SECONDS="ساعت" +NR_MINUTES="دقیقه" +NR_HOURS="ساعت" +NR_DAYS="روز" +NR_SESSION="نشست" +NR_EVER="همیشه" +NR_COOKIE="کوکی" +NR_BOTH="هردو" +NR_NONE="هیچکدام" +; NR_DESKTOPS="Desktop" +; NR_MOBILES="Mobile" +; NR_TABLETS="Tablet" +; NR_PER_SESSION="Per Session" +; NR_PER_DAY="Per Day" +; NR_PER_WEEK="Per Week" +; NR_PER_MONTH="Per Month" +; NR_FOREVER="Forever" +; NR_FEATURE_UNDER_DEV="This feature is under development" +; NR_LIKE_THIS_EXTENSION="Like this extension?" +; NR_LEAVE_A_REVIEW="Leave a review on JED" +; NR_SUPPORT="Support" +; NR_NEED_SUPPORT="Need support?" +; NR_DROP_EMAIL="Drop me an e-mail" +; NR_READ_DOCUMENTATION="Read the Documentation" +; NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +; NR_DASHBOARD="Dashboard" +; NR_NAME="Name" +; NR_WRONG_COORDINATES="The coordinates you provided are not valid" +; NR_ENTER_COORDINATES="Latitude,Longitude" +; NR_NO_ITEMS_FOUND="No Items Found" +; NR_ITEM_IDS="No Item IDs" +; NR_TOGGLE="Toggle" +; NR_EXPAND="Expand" +; NR_COLLAPSE="Collapse" +; NR_SELECTED="Selected" +; NR_MAXIMIZE="Maximize" +; NR_MINIMIZE="Minimize" +NR_SELECTION="انتخاب" +; NR_INSTALL="Install" +; NR_INSTALL_NOW="Install Now" +; NR_INSTALLED="Installed" +; NR_COMING_SOON="Coming soon" +; NR_ROADMAP="On the roadmap" +; NR_MEDIA_VERSIONING="Use Media Versioning" +; NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +; NR_LOAD_JQUERY="Load jQuery" +; NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +; NR_SELECT_CURRENCY="Select a Currency" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +; NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +; NR_LEFT="Left" +; NR_CENTER="Center" +; NR_RIGHT="Right" +; NR_BOTTOM="Bottom" +; NR_TOP="Top" +; NR_AUTO="Auto" +; NR_CUSTOM="Custom" +; NR_UPLOAD="Upload" +; NR_IMAGE="Image" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +; NR_IMAGE_SELECT="Select Image" +; NR_IMAGE_SIZE_COVER="Cover" +; NR_IMAGE_SIZE_CONTAIN="Contain" +; NR_REPEAT="Repeat" +; NR_REPEAT_X="Repeat x" +; NR_REPEAT_Y="Repeat y" +; NR_REPEAT_NO="No repeat" +; NR_FIELD_STATE_DESC="Set item's state" +; NR_CREATED_DATE="Created Date" +; NR_CREATED_DATE_DESC="The date the item was created" +; NR_MODIFIFED_DATE="Modified Date" +; NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +; NR_CATEGORIES="Category" +; NR_CATEGORIES_DESC="Select the categories to assign to." +; NR_ALSO_ON_CHILD_ITEMS="Also on child items" +; NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +; NR_PAGE_TYPE="Page type" +; NR_PAGE_TYPES="Page types" +; NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +; NR_ARTICLES="Articles" +; NR_ARTICLES_DESC="Select the articles to assign to." +; NR_ARTICLE="Article" +; NR_ARTICLE_AUTHORS="Authors" +; NR_ARTICLE_AUTHORS_DESC="Select the authors to assign to." +; NR_ONLY="Only" +; NR_OTHERS="Others" +; NR_SMARTTAGS="Smart Tags" +; NR_SMARTTAGS_SHOW="Show Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +; NR_CONTACT_US="Contact us" +; NR_FONT_COLOR="Font Color" +; NR_FONT_SIZE="Font Size" +; NR_FONT_SIZE_DESC="Choose a font size in pixels" +; NR_TEXT="Text" +; NR_URL="URL" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +; NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +; NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +; NR_GEOLOCATING="Geolocating" +; NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +; NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +; NR_ASSIGN_CONTINENTS="Continent" +; NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +; NR_ARE_YOU_SURE="Are you sure?" +; NR_CUSTOMURL="Custom URL" +; NR_SAMPLE="Sample" +; NR_DEBUG="Debug" +; NR_CUSTOMURL="Custom URL" +; NR_READMORE="Read More" +; NR_IPADDRESS="IP Address" +; NR_ASSIGN_BROWSERS="Browser" +; NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +; NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +; NR_CHROME="Chrome" +; NR_FIREFOX="Firefox" +; NR_EDGE="Edge" +; NR_IE="Internet Explorer" +; NR_SAFARI="Safari" +; NR_OPERA="Opera" +; NR_ASSIGN_OS="Operating System" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +; NR_LINUX="Linux" +; NR_MAC="MacOS" +; NR_ANDROID="Android" +; NR_IOS="iOS" +; NR_WINDOWS="Windows" +; NR_BLACKBERRY="Blackberry" +; NR_CHROMEOS="Chrome OS" +; NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +; NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/fi-FI/fi-FI.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/fi-FI/fi-FI.plg_system_nrframework.ini new file mode 100644 index 00000000..79ab3941 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/fi-FI/fi-FI.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - used by Tassos.gr extensions" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ohita" +NR_INCLUDE="Sisältää" +NR_EXCLUDE="Sulkea" +NR_SELECTION="Valinta" +NR_ASSIGN_MENU_NOITEM="Ei sisällä kohdetta" +NR_ASSIGN_MENU_NOITEM_DESC="Määritä myös, kun URL-osoitteeseen ei ole määritetty valikkokohtaa?" +NR_ASSIGN_MENU_CHILD="Myös alakohta" +NR_ASSIGN_MENU_CHILD_DESC="Määritetäänkö myös valittujen kohteiden alakohtiin?" +NR_COPY_OF="Kopioitu %s" +NR_ASSIGN_DATETIME_DESC="Kohdista vierailijat palvelimesi ajan perusteella" +NR_DATETIME="Aika" +NR_TIME="klo" +NR_DATE="pvm" +NR_DATETIME_DESC="Kirjoita päivämäärä, jolloin julkaistaan / julkaisu poistetaan automaattisesti" +NR_START_PUBLISHING="Aloitus aika" +NR_START_PUBLISHING_DESC="Anna aika kun julkaisu alkaa" +NR_FINISH_PUBLISHING="Lopetus aika" +NR_FINISH_PUBLISHING_DESC="Anna aika kun julkaisu päättyy" +NR_DATETIME_NOTE="Päivämäärä- ja aikamääritykset käyttävät palvelimesi, ei vierailijajärjestelmän, päivämäärää ja aikaa." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP koodi" +NR_ASSIGN_PHP_DESC="Kirjoita pätkä PHP-koodia arvioitavaksi." +NR_ASSIGN_PHP_DESC2="Kohdenna vierailijat arvioimaan mukautettua PHP-koodia. Koodin on palautettava arvo true tai false.

        Esimerkiksi:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Sivuston aika" +NR_SECONDS="Sekunnit" +NR_ASSIGN_TIMEONSITE_DESC="Anna kesto sekunteina käyttäjän kokonaisaikaan (vierailun kesto), joka vietetään koko sivustollasi.

        Esimerkki:
        Jos haluat näyttää ruudun sen jälkeen, kun käyttäjä on viettänyt 3 minuuttia koko sivustollasi, kirjoita 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Kävijät, jotka selailevat tiettyjä URL-osoitteita" +NR_ASSIGN_URLS_DESC="Kirjoita vastaavat URL-osoitteet (osa niistä).
        Käytä uutta riviä jokaiselle osoitteelle." +NR_ASSIGN_URLS_LIST="URL osumat" +NR_ASSIGN_URLS_REGEX="Käytä säännöllistä lauseketta" +NR_ASSIGN_URLS_REGEX_DESC="Valitse tämä, kun haluat käsitellä arvoa säännöllisinä lausekkeina." +NR_ASSIGN_LANGS="Kieli" +NR_ASSIGN_LANGS_DESC="Kävijät, jotka selailevat verkkosivustoasi tietyllä kielellä" +NR_ASSIGN_LANGS_LIST_DESC="Valitse määritettävät kielet" +NR_ASSIGN_DEVICES="Laite" +NR_ASSIGN_DEVICES_DESC2="Vierailijat jotka käyttävät tiettyä laitetta, kuten mobiili, tabletti tai työpöytä." +NR_ASSIGN_DEVICES_DESC="Valitse määritettävät laitteet." +NR_ASSIGN_DEVICES_NOTE="Muista, että laitteen tunnistus ei ole aina 100% tarkka. Käyttäjät voivat määrittää selaimensa jäljittelemään muita laitteita" +NR_MENU="Valikko" +NR_MENU_ITEMS="Valikko nimike" +NR_MENU_ITEMS_DESC="Vierailijat, jotka selailevat tiettyjä valikkonimikkeitä" +NR_USERGROUP="Käyttäjäryhmä" +NR_ACCESSLEVEL="Käyttäjäryhmä" +NR_ACCESSLEVEL_DESC="Valitse määritettävät käyttäjäryhmät.

        Huomaa: Jos haluat julkistaa sen, aseta Ohita, älä valitse Julkinen." +NR_SHOW_COPYRIGHT="Näytä tekijänoikeudet" +NR_SHOW_COPYRIGHT_DESC="Jos valittu, ylimääräiset tekijänoikeustiedot näkyvät järjestelmänvalvojan näkymissä. Tassos.gr-laajennukset eivät koskaan näytä tekijänoikeustietoja tai linkkejä käyttöliittymässä." +NR_WIDTH="Leveys" +NR_WIDTH_DESC="Kirjoita leveys px, em tai %.
        Esimerkki: 400px" +NR_HEIGHT="Korkeus" +NR_HEIGHT_DESC="Kirjoita korkeus px, em tai %.
        Esimerkki: 400px" +NR_PADDING="Täyte" +NR_PADDING_DESC="Kirjoita täyte px, em tai %.
        Esimerkki: 20px" +NR_MARGIN="Marginaali" +NR_MARGIN_DESC="CSS: n marginaaliominaisuutta käytetään luomaan tilaa laatikon ympärille ja asettamaan valkoisen tilan koko rajan ulkopuolella pikseleinä tai prosentteina.

        Esimerkki 1: 25px
        Esimerkki 2: 5%

        Marginaalin määrittäminen kummallekin puolelle [yläosa oikea alaosa vasen]:

        Vain yläpuoli: 25px 0 0 0
        Vain oikea puoli: 0 25px 0 0
        Vain alaosa: 0 0 25px 0
        Vain vasemmalla puolella: 0 0 0 25px" +NR_COLOR_HOVER="Kohdistus väri" +NR_COLOR="Väri" +NR_COLOR_DESC="Määritä väri HEX- tai RGBA-muodossa." +NR_TEXT_COLOR="Tekstin väri" +NR_BACKGROUND="Tausta" +NR_BACKGROUND_COLOR="Taustaväri" +NR_BACKGROUND_COLOR_DESC="Määritä taustaväri HEX- tai RGBA-muodossa. Syötä 'ei' käytöstä poistamiseksi. Absoluuttisen läpinäkyvyyden vuoksi kirjoita 'transparent'." +NR_URL_SHORTENING_FAILED="Lyhennys %s kanssa %s epäonnistui %s." +NR_EXPORT="Vie" +NR_IMPORT="Tuo" +NR_PLEASE_CHOOSE_A_VALID_FILE="Valitse kelvollinen tiedostonimi" +NR_IMPORT_ITEMS="Tuotavat kohteet" +NR_PUBLISH_ITEMS="Julkaistut kohteet" +NR_AS_EXPORTED="On viety" +NR_TITLE="Otsikko" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing lista" +NR_ACYMAILING_LIST_DESC="Valitse määritettävät AcyMailing-luettelot." +NR_ASSIGN_ACYMAILING_DESC="Vierailijat, jotka ovat tilanneet tiettyjä AcyMailing-luetteloita" +NR_AKEEBASUBS="Akeeba lähetykset" +NR_AKEEBASUBS_LEVELS="Tasot" +NR_AKEEBASUBS_LEVELS_DESC="Valitse Akeeba lähetysten tasot, jotka haluat määrittää." +NR_ASSIGN_AKEEBASUBS_DESC="Vierailijat, jotka ovat tilanneet tietyt Akeeba lähetykset" +NR_MATCH="Sopivuus" +NR_MATCH_DESC="Käytetty sopivuusmenetelmä arvon vertaamiseksi" +NR_ASSIGN_MATCHING_METHOD="Sopivuusmenetelmä" +NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +NR_ANY="Mikä tahansa" +NR_ASSIGN_REFERRER="Viittaava URL" +NR_ASSIGN_REFERRER_DESC2="Kävijät, jotka tulevat sivustollesi tietystä lähteestä" +NR_ASSIGN_REFERRER_DESC="Kirjoita yksi viittaava URL-osoite riviä kohti: Esimerkiksi:

        google.com
        facebook.com/sivu" +NR_ASSIGN_REFERRER_NOTE="Muista, että URL-osoitteen määrittäminen ei ole aina 100% tarkkaa. Jotkut palvelimet voivat käyttää välityspalvelimia, jotka poistavat nämä tiedot, ja ne voidaan helposti väärentää." +NR_PROFEATURE_HEADER="%s on PRO-version ominaisuus" +NR_PROFEATURE_DESC="Valitettavasti %s ei ole käytettävissäsi. Päivitä PRO-versioon avataksesi kaikki nämä mahtavat ominaisuudet käyttöösi." +NR_PROFEATURE_DISCOUNT="Bonus: %s ilmaisen version käyttäjät saavat 20% alennuksen normaalista hinnasta, joka otetaan automaattisesti käyttöön kassalla." +NR_ONLY_AVAILABLE_IN_PRO="Saatavilla PRO-versiossa" +NR_UPGRADE_TO_PRO="Päivitä PRO-versioon" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Päivitä Pro-versioon avataksesi" +NR_UPGRADE_TO_PRO_VERSION="Mahtavaa! Vain yksi askel jäljellä. Viimeistele päivitys Pro-versioon napsauttamalla alla olevaa painiketta." +NR_UNLOCK_PRO_FEATURE="Avaa Pro-ominaisuus" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Vasemmalta oikealle" +NR_RIGHT_TO_LEFT="Oikealta vasemmalle" +NR_BGIMAGE="Taustakuva" +NR_BGIMAGE_DESC="Aseta taustakuva" +NR_BGIMAGE_FILE="Kuva" +NR_BGIMAGE_FILE_DESC="Valitse tai lähetä tiedosto taustakuvaa varten." +NR_BGIMAGE_REPEAT="Toista" +NR_BGIMAGE_REPEAT_DESC="Taustan toista-ominaisuus määrittää, toistetaanko / miten toistetaan taustakuva. Oletuksena taustakuva toistuu sekä pystysuunnassa että vaakasuunnassa.

        Toista: Taustakuva toistetaan sekä pystysuunnassa että vaakasuunnassa.

        Toista x: Taustakuva toistetaan vain vaakasuunnassa

        Toista y: Taustakuva toistetaan vain pystysuunnassa.

        Ei toistoa: Taustakuvaa ei toisteta" +NR_BGIMAGE_SIZE="Koko" +NR_BGIMAGE_SIZE_DESC="Määritä taustakuvan koko.

        Automaattinen: Taustakuva sisältää kuvan leveyden ja korkeuden.

        Peitto: Skaalaa taustakuva niin suureksi kuin mahdollista, jotta tausta-alue on kokonaan taustakuvan peittämä. Jotkut taustakuvan osista eivät ehkä ole näkyvissä taustan sijoitusalueella

        Sisältö: Skaalaa kuva suurimpaan kokoon siten, että sekä sen leveys että korkeus mahtuvat sisältöalueelle

        100% 100%: Venytä taustakuva kattamaan kokonaan sisältöalueen." +NR_BGIMAGE_POSITION="Asema" +NR_BGIMAGE_POSITION_DESC="Taustan asema-ominaisuus asettaa taustakuvan aloitusaseman. Oletuksena taustakuva on sijoitettu vasempaan yläkulmaan. Ensimmäinen arvo on vaakasuora ja toinen arvo pystysuora.

        Voit käyttää joko yhtä ennalta määritettyä arvoa tai kirjoittaa mukautetun arvon prosenttimääränä: x% y% pikseleinä xPos yPos." +NR_RTL="Käytä RTL" +NR_RTL_DESC="Oikealta vasemmalle -suuntainen teksti on välttämätön oikealta vasemmalle -skripteille, kuten arabia, heprea, syyria ja thaana." +NR_HORIZONTAL="Vaakasuora" +NR_VERTICAL="Pystysuora" +NR_FORM_ORIENTATION="Lomakkeen suunta" +NR_FORM_ORIENTATION_DESC="Valitse lomakkeen suunta" +NR_ASSIGN_CATEGORY="Kategoriat" +NR_ASSIGN_CATEGORY_DESC="Valitse määritettävät katekoriat" +NR_ASSIGN_CATEGORY_CHILD="Myös alakohteet" +NR_ASSIGN_CATEGORY_CHILD_DESC="Määritetäänkö myös valittujen kohteiden alakohteisiin?" +NR_NEW="Uusi" +NR_LIST="Lista" +NR_DOCUMENTATION="Dokumentointi" +NR_KNOWLEDGEBASE="Tietopankki" +NR_FAQ="Ohje" +NR_INFORMATION="Tiedot" +NR_EXTENSION="Laajennus" +NR_VERSION="Versio" +NR_CHANGELOG="Muutosloki" +; NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Latausavain puuttuu" +NR_DOWNLOAD_KEY="Latausavain" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Jotta voit päivittää %s Joomla-päivittäjän kautta, sinun on kirjoitettava latausavaimesi Novarain Framework -laajennuksen asetuksiin." +NR_DOWNLOAD_KEY_FIND="Etsi latausavain" +NR_DOWNLOAD_KEY_UPDATE="Päivitä latausavain" +NR_OK="OK" +NR_MISSING="Puuttuu" +NR_LICENSE="Lisenssi" +NR_AUTHOR="Tekijä" +NR_FOLLOWME="Seuraa minua" +NR_FOLLOW="Seuraa %s" +NR_TRANSLATE_INTEREST="Oletko kiinnostunut kääntämään %s kielellesi?" +NR_TRANSIFEX_REQUEST="Lähetä minulle pyyntö Transifexiin" +NR_HELP_WITH_TRANSLATIONS="Apua käännöksiin" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Kehittynyt" +NR_USEGLOBAL="Käytä yleistä" +NR_WEEKDAY="Viikonpäivä" +NR_MONTH="Kuukausi" +NR_MONDAY="maanantai" +NR_TUESDAY="tiistai" +NR_WEDNESDAY="keskiviikko" +NR_THURSDAY="torstai" +NR_FRIDAY="perjantai" +NR_SATURDAY="lauantai" +NR_WEEKEND="viikonloppu" +NR_WEEKDAYS="viikonpäivät" +NR_SUNDAY="sunnuntai" +NR_JANUARY="tammikuu" +NR_FEBRUARY="helmikuu" +NR_MARCH="maaliskuu" +NR_APRIL="huhtikuu" +NR_MAY="toukokuu" +NR_JUNE="kesäkuu" +NR_JULY="heinäkuu" +NR_AUGUST="elokuu" +NR_SEPTEMBER="syyskuu" +NR_OCTOBER="lokakuu" +NR_NOVEMBER="marraskuu" +NR_DECEMBER="joulukuu" +NR_NEVER="Ei koskaan" +NR_SECONDS="Sekunnit" +NR_MINUTES="Minuutit" +NR_HOURS="Tunnit" +NR_DAYS="Päivät" +NR_SESSION="Istunto" +NR_EVER="Koskaan" +NR_COOKIE="Eväste" +NR_BOTH="Molemmat" +NR_NONE="Ei mitään" +NR_DESKTOPS="Työasema" +NR_MOBILES="Mobiili" +NR_TABLETS="Tabletti" +NR_PER_SESSION="Istuntoa kohti" +NR_PER_DAY="Päivää kohti" +NR_PER_WEEK="Viikkoa kohti" +NR_PER_MONTH="Kuukautta kohti" +NR_FOREVER="Ikuisesti" +NR_FEATURE_UNDER_DEV="Tämä ominaisuus on kehitteillä" +NR_LIKE_THIS_EXTENSION="Pidätkö tästä laajennuksesta?" +NR_LEAVE_A_REVIEW="Jätä arvostelu JED:ssä" +NR_SUPPORT="Tuki" +NR_NEED_SUPPORT="Tarvitsetko tukea?" +NR_DROP_EMAIL="Lähetä minulle sähköposti" +NR_READ_DOCUMENTATION="Lue ohjeet" +NR_COPYRIGHT="%s - Tassos.gr Kaikki oikeudet pidätetään" +NR_DASHBOARD="Hallintapaneli" +NR_NAME="Nimi" +NR_WRONG_COORDINATES="Antamasi koordinaatit eivät kelpaa" +NR_ENTER_COORDINATES="Leveysaste, Pituusaste" +NR_NO_ITEMS_FOUND="Kohteita ei löytynyt" +NR_ITEM_IDS="Ei kohteiden ID:tä" +NR_TOGGLE="Toggle" +NR_EXPAND="Laajentaa" +NR_COLLAPSE="Collapse" +NR_SELECTED="Valittu" +NR_MAXIMIZE="Maksimoida" +NR_MINIMIZE="Minimoida" +NR_SELECTION="Valinta" +NR_INSTALL="Asennus" +NR_INSTALL_NOW="Asenna nyt" +NR_INSTALLED="Asennettu" +NR_COMING_SOON="Tulossa pian" +NR_ROADMAP="Etenemissuunnitelmassa" +NR_MEDIA_VERSIONING="Käytä mediaversioita" +NR_MEDIA_VERSIONING_DESC="Valitse, jos haluat lisätä laajennusversion numeron medialle (js / css) URL-osoitteiden loppuun, jotta selaimet pakottavat lataamaan oikean tiedoston." +NR_LOAD_JQUERY="Lataa jQuery" +NR_LOAD_JQUERY_DESC="Valitse ladataksesi jQuery scripti. Voit poistaa tämän käytöstä, jos ilmenee ristiriitoja, kun sivupohja tai muut laajennukset lataavat oman jQuery-version." +NR_SELECT_CURRENCY="Valitse valuutta" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Kampanja" +NR_ASSIGN_CONVERTFORMS_DESC="Vierailijat, jotka ovat tilanneet tiettyjä Convert Forms-kampanjoita" +NR_CONVERTFORMS_LIST_DESC="Valitse määritettävät Convert Forms-kampanjat." +NR_LEFT="Vasen" +NR_CENTER="Keskusta" +NR_RIGHT="Oikea" +NR_BOTTOM="Ala" +NR_TOP="Ylä" +NR_AUTO="Automaattinen" +NR_CUSTOM="Mukautettu" +NR_UPLOAD="Lataus" +NR_IMAGE="Kuva" +NR_INTRO_IMAGE="Johdantokuva" +NR_FULL_IMAGE="Koko kuva" +NR_IMAGE_SELECT="Valitse kuva" +NR_IMAGE_SIZE_COVER="Peitto" +NR_IMAGE_SIZE_CONTAIN="Sisältö" +NR_REPEAT="Toista" +NR_REPEAT_X="Toista x" +NR_REPEAT_Y="Toista y" +NR_REPEAT_NO="Ei toistoa" +NR_FIELD_STATE_DESC="Aseta kohteen tila" +NR_CREATED_DATE="Luontipäivä" +NR_CREATED_DATE_DESC="Päivä, jolloin kohde luotiin" +NR_MODIFIFED_DATE="Muokkauspäivä" +NR_MODIFIFED_DATE_DESC="Päivä, jolloin kohdetta viimeksi muokattiin" +NR_CATEGORIES="Kategoria" +NR_CATEGORIES_DESC="Valitse kategoriat, jotka haluat määrittää." +NR_ALSO_ON_CHILD_ITEMS="Myös alakohteet" +NR_ALSO_ON_CHILD_ITEMS_DESC="Määritetäänkö myös valittujen kohteiden alakohteet?" +NR_PAGE_TYPE="Sivun tyyppi" +NR_PAGE_TYPES="Sivutyypit" +NR_PAGE_TYPES_DESC="Valitse, mitkä sivutyypit ovat aktivoitu tehtävään." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Valitse ottaaksesi käyttöön artikkelinäkymän." +NR_CATEGORY_VIEW="Kategorianäkymä" +NR_CATEGORY_VIEW_DESC="Valitse ottaaksesi käyttöön kategorianäkymän." +NR_ARTICLES="Artikkelit" +NR_ARTICLES_DESC="Valitse artikkelit, jotka haluat käyttää." +NR_ARTICLE="Artikkeli" +NR_ARTICLE_AUTHORS="Tekijät" +NR_ARTICLE_AUTHORS_DESC="Valitse tekijät." +NR_ONLY="Vain" +NR_OTHERS="Muut" +NR_SMARTTAGS="Älykkäät tunnisteet" +NR_SMARTTAGS_SHOW="Näytä älykkäät tunnisteet" +NR_SMARTTAGS_NOTFOUND="Älykkäitä tunnisteita ei löytynyt" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Etsi älykkäitä tunnisteita" +NR_CONTACT_US="Ota yhteyttä" +NR_FONT_COLOR="Fontin väri" +NR_FONT_SIZE="Fontin koko" +NR_FONT_SIZE_DESC="Valitse fonttikoko pikseleinä" +NR_TEXT="Teksti" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Ota käyttöön Output Override -toiminto" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Mahdollistaa laajennuksen renderoinnin, kun sivun asettelu (tmpl) ohitetaan. Esimerkkejä: tmpl = komponentti tai tmpl = modaali." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Ota käyttöön Format Override" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Mahdollistaa laajennuksen renderoinnin, kun sivumuoto ei ole muu kuin HTML. Esimerkkejä: format = raw tai format = json." +NR_GEOLOCATING="Geopaikantaminen" +NR_GEOLOCATING_DESC="Maantieteellinen sijainti ei ole aina 100%:n tarkka. Maantieteellinen sijainti perustuu vierailijan IP-osoitteeseen. Kaikki IP-osoitteet eivät ole kiinteitä tai tiedossa." +NR_CITY="Kaupunki" +NR_CITY_NAME="Kaupungin nimi" +NR_CONDITION_CITY_DESC="Kirjoita kaupungin nimi englanniksi. Erota pilkuilla useammat kaupungit." +NR_CONTINENT="Maanosa" +NR_REGION="Alue" +NR_CONDITION_REGION_DESC="Arvo koostuu kahdesta osasta, kaksikirjaimisesta ISO 3166-1-maakoodista ja aluekoodista. Joten arvon tulisi olla seuraavassa muodossa: COUNTRY_CODE-REGION_CODE. Katso täydellinen luettelo maakoodeista napsauttamalla Etsi aluekoodi -linkkiä." +NR_ASSIGN_COUNTRIES="Valtio" +NR_ASSIGN_COUNTRIES_DESC2="Vierailijat, jotka ovat fyysisesti tietyssä valtiossa" +NR_ASSIGN_COUNTRIES_DESC="Valitse valtiot, jotka määritetään" +NR_ASSIGN_CONTINENTS="Maanosa" +NR_ASSIGN_CONTINENTS_DESC="Valitse maanosat, jotka määritetään" +NR_ASSIGN_CONTINENTS_DESC2="Vierailijat, jotka ovat fyysisesti tietyssä maanosassa" +NR_ICONTACT_ACCOUNTID_ERROR="IContact-tilitunnusta ei voitu noutaa" +NR_TAG_CLIENTDEVICE="Vierailijan laitetyyppi" +NR_TAG_CLIENTOS="Vierailijan käyttöjärjestelmä" +NR_TAG_CLIENTBROWSER="Vierailijan selain" +NR_TAG_CLIENTUSERAGENT="Vierailija agentti" +NR_TAG_IP="Vierailijan IP-osoite" +NR_TAG_URL="Sivu URL" +NR_TAG_URLENCODED="Sivun koodattu URL" +NR_TAG_URLPATH="Sivun polku" +NR_TAG_REFERRER="Sivun viittaus" +NR_TAG_SITENAME="Sivun nimi" +NR_TAG_SITEURL="Sivun URL" +NR_TAG_PAGETITLE="Sivun otsikko" +NR_TAG_PAGEDESC="Sivun sisällönkuvaus" +NR_TAG_PAGELANG="Sivun maakoodi" +NR_TAG_USERID="Käyttäjän ID" +NR_TAG_USERNAME="Käyttäjän koko nimi" +NR_TAG_USERLOGIN="Käyttäjän kirjautuminen" +NR_TAG_USEREMAIL="Käyttäjän sähköposti" +NR_TAG_USERFIRSTNAME="Käyttäjän etunimi" +NR_TAG_USERLASTNAME="Käyttäjän sukunimi" +NR_TAG_USERGROUPS="Käyttäjän ryhmän ID" +NR_TAG_DATE="Päivämäärä" +NR_TAG_TIME="Aika" +NR_TAG_RANDOMID="Satunnainen ID" +NR_ICON="Kuvake" +NR_SELECT_MODULE="Valitse Moduuli" +NR_SELECT_CONTINENT="Valitse maanosa" +NR_SELECT_COUNTRY="Valitse valtio" +NR_PLUGIN="Liitännäinen" +NR_GMAP_KEY="Google Maps API Key" +NR_GMAP_KEY_DESC="Tassos.gr-laajennukset käyttävät Google Maps -sovellusliittymäavainta. Jos kohtaat ongelmia, kun Google Mapsia ei ladata, niin sinun on todennäköisesti annettava oma API-avaimesi." +NR_GMAP_FIND_KEY="Hanki API key" +NR_ARE_YOU_SURE="Oletko varma?" +NR_CUSTOMURL="Mukautettu URL" +NR_SAMPLE="Näyte" +NR_DEBUG="Debug" +NR_CUSTOMURL="Mukautettu URL" +NR_READMORE="Lue lisää" +NR_IPADDRESS="IP osoite" +NR_ASSIGN_BROWSERS="Selain" +NR_ASSIGN_BROWSERS_DESC="Valitse selaimet, jotka haluat määrittää" +NR_ASSIGN_BROWSERS_DESC2="Kävijät, jotka selailevat sivustoasi tietyillä selaimilla, kuten Chrome, Firefox tai Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Käyttöjärjestelmä" +NR_ASSIGN_OS_DESC="Valitse määritettävät käyttöjärjestelmät" +NR_ASSIGN_OS_DESC2="Vierailijat, jotka käyttävät tiettyjä käyttöjärjestelmiä, kuten Windows, Linux tai Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Sivun katselumäärä" +NR_ASSIGN_PAGEVIEWS_DESC="Kävijät, jotka ovat katselleet tietyn määrän sivuja" +NR_ASSIGN_PAGEVIEWS_VIEWS="Sivunäytöt" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Kirjoita sivun näyttökertojen lukumäärä" +NR_ASSIGN_COOKIENAME_NAME="Evästeen nimi" +NR_ASSIGN_COOKIENAME_NAME_DESC="Kirjoita evästeen nimi, jonka haluat määrittää" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Kävijät, joiden selaimeen on tallennettu tiettyjä evästeitä" +NR_FEWER_THAN="Vähemmän kuin" +NR_GREATER_THAN="Suurempi kuin" +NR_EXACTLY="Tarkalleen" +NR_EXISTS="Olemassa" +NR_IS_EQUAL="Vastaa" +NR_CONTAINS="Sisältää" +NR_STARTS_WITH="Alkaa" +NR_ENDS_WITH="Loppuu" +NR_ASSIGN_COOKIENAME_CONTENT="Evästeen sisältö" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Evästeen sisältö" +NR_ASSIGN_IP_ADDRESSES_DESC2="Käyttäjät, jotka ovat tietyn IP-osoitteen takana (alue)" +NR_ASSIGN_IP_ADDRESSES_DESC="Kirjoita luettelo pilkuilla ja / tai 'syötä' erotetut IP-osoitteet ja alueet

        Esimerkki:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="Käyttäjä ID" +NR_ASSIGN_USER_ID_DESC="Joomla käyttäjän ID-tunnus" +NR_ASSIGN_USER_ID_SELECTION_DESC="Käytä pilkkua erotellaksesi Joomla käyttäjien ID:t" +NR_ASSIGN_COMPONENTS="Komponentti" +NR_ASSIGN_COMPONENTS_DESC="Valitse komponentit, jotka määritetään" +NR_ASSIGN_COMPONENTS_DESC2="Vierailijat, jotka selailevat tiettyjä komponentteja" +NR_ASSIGN_TIMERANGE="Aikahaarukka" +NR_ASSIGN_TIMERANGE_DESC="Vierailijat palvelimesi ajan perusteella" +NR_START_TIME="Aloitusaika" +NR_END_TIME="Lopetusaika" +NR_START_PUBLISHING_TIMERANGE_DESC="Anna julkaisun aloittamisaika" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Anna julkaisun lopettamisaika" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Site Key" +NR_RECAPTCHA_SITE_KEY_DESC="Käytetään JavaScript-koodissa, jota tarjotaan käyttäjille." +NR_RECAPTCHA_SECRET_KEY="Secret Key" +NR_RECAPTCHA_SECRET_KEY_DESC="Käytetään palvelimen ja reCAPTCHA-palvelimen välisessä viestinnässä. Pidä avain salassa." +NR_RECAPTCHA_SITE_KEY_ERROR="ReCaptcha-sivuston avain puuttuu tai on väärä" +NR_PREVIOUS_MONTH="Edellinen kuukausi" +NR_NEXT_MONTH="Seuraava kuukausi" +NR_ASSIGN_GROUP_PAGE_URL="Sivu / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Kävijät, jotka selailevat tiettyjä valikkonimikkeitä tai URL-osoitteita" +NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla käyttäjä / Vierailija" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Rekisteröidyt käyttäjät tai vierailijat, jotka ovat katselleet tietyn määrän sivuja" +NR_ASSIGN_GROUP_PLATFORM="Vierailijan alusta" +NR_ASSIGN_GROUP_PLATFORM_DESC="Kävijät, jotka käyttävät mobiililaitetta, Google Chromea tai Windowsia" +NR_ASSIGN_GROUP_GEO_DESC="Vierailijat, jotka ovat fyysisesti tietyllä alueella" +NR_ASSIGN_GROUP_JCONTENT="Joomla! Sisältö" +NR_ASSIGN_GROUP_JCONTENT_DESC="Kävijät, jotka katsovat tiettyjä Joomla-artikkeleita tai kategorioita" +NR_ASSIGN_GROUP_SYSTEM="Järjestelmä / integraatiot" +NR_ASSIGN_GROUP_SYSTEM_DESC="Vierailijat, jotka ovat käyttäneet tiettyjä Joomla-laajennuksia" +NR_ASSIGN_GROUP_ADVANCED="Edistyneet vierailijakohdistukset" +NR_ASSIGN_USERGROUP_DESC="Tietyt Joomlan käyttäjäryhmät" +NR_ASSIGN_ARTICLE_DESC="Vierailijat, jotka katsovat tiettyjä Joomla-artikkeleita" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Vierailijat, jotka katsovat tiettyjä Joomla kategorioita" +NR_EXTENSION_REQUIRED="%s komponentti vaatii %s aajennuksen ottamisen käyttöön, jotta se toimii oikein." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Kävijät, jotka selailevat tiettyjä K2-kohteita, luokkia tai tunnisteita" +NR_ASSIGN_K2_ITEMS="Kohde" +NR_ASSIGN_K2_ITEMS_DESC="Kävijät, jotka selailevat tiettyjä K2-kohteita." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Valitse määritettävät K2-kohteet" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Yhdistä tiettyihin avainsanoihin kohteen sisällössä. Erota pilkulla tai uudella rivillä." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Yhdistä kohteen meta-avainsanoihin. Erota pilkulla tai uudella rivillä." +NR_ASSIGN_K2_PAGETYPES_DESC="Kävijät, jotka selailevat tiettyjä K2-sivutyyppejä" +NR_ASSIGN_K2_ITEM_OPTION="Kohde" +NR_ASSIGN_K2_LATEST_OPTION="Uusimmat kohteet käyttäjiltä tai kategorioilta" +NR_ASSIGN_K2_TAG_OPTION="Tag-sivu" +NR_ASSIGN_K2_CATEGORY_OPTION="Kategoria sivu" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Kohteen muokkauslomake" +NR_ASSIGN_K2_USER_PAGE_OPTION="Käyttäjän sivu (blog)" +NR_ASSIGN_K2_TAGS_DESC="Kävijät, jotka selaavat K2-kohteita erityisillä tunnisteilla" +NR_ASSIGN_K2_CATEGORIES_DESC="Kävijät, jotka selailevat tiettyjä K2-kategorioita" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Kategoriat" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Kohteet" +NR_ASSIGN_PAGE_TYPES_DESC="Valitse määritettävät sivutyypit" +NR_ASSIGN_TAGS_DESC="Valitse tunnisteet, jotka haluat määrittää" +NR_CONTENT_KEYWORDS="Sisällön avainsanat" +NR_META_KEYWORDS="Meta avainsanat" +NR_TAG="Tag" +NR_NORMAL="Normaali" +NR_COMPACT="Tiivis" +NR_LIGHT="Vaalea" +NR_DARK="Tumma" +NR_SIZE="Koko" +NR_THEME="Teema" +NR_SINGLE="Yksittäinen" +NR_MULTIPLE="Moninkertainen" +NR_RANGE="Alue" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Vahvista" +NR_RECAPTCHA_INVALID_SECRET_KEY="Virheellinen secret key" +NR_PAGE="Sivu" +NR_YOU_ARE_USING_EXTENSION="Käytät %s %s" +NR_UPDATE="Päivitys" +NR_SHOW_UPDATE_NOTIFICATION="Näytä päivitysilmoitus" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Jos valittu, päivitysilmoitus näkyy pääkomponenttinäkymässä, kun laajennukselle on uusi versio." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s saatavilla" +NR_ERROR_EMAIL_IS_DISABLED="Sähköpostin lähetys on poistettu käytöstä. Sähköposteja ei voitu lähettää." +NR_ASSIGN_ITEMS="Kohde" +NR_COUNTRY_AF="Afganistan" +NR_COUNTRY_AX="Ahvenanmaa" +NR_COUNTRY_AL="Albania" +NR_COUNTRY_DZ="Algeria" +NR_COUNTRY_AS="Amerikan Samoa" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Etelämanner" +NR_COUNTRY_AG="Antigua ja Barbuda" +NR_COUNTRY_AR="Argentiina" +NR_COUNTRY_AM="Armenia" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Australia" +NR_COUNTRY_AT="Itävalta" +NR_COUNTRY_AZ="Azerbaidžan" +NR_COUNTRY_BS="Bahamasaaret" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladesh" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Valko-Venäjä" +NR_COUNTRY_BE="Belgia" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benin" +NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhutan" +NR_COUNTRY_BO="Bolivia" +NR_COUNTRY_BA="Bosnia ja Hertsegovina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Bouvet’nsaari" +NR_COUNTRY_BR="Brasilia" +NR_COUNTRY_IO="Brittiläinen Intian valtameren alue" +NR_COUNTRY_BN="Brunei" +NR_COUNTRY_BG="Bulgaria" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Kambodža" +NR_COUNTRY_CM="Kamerun" +NR_COUNTRY_CA="Kanada" +NR_COUNTRY_CV="Kap Verde" +NR_COUNTRY_KY="Caymansaaret" +NR_COUNTRY_CF="Keski-Afrikan tasavalta" +NR_COUNTRY_TD="Tsad" +NR_COUNTRY_CL="Chile" +NR_COUNTRY_CN="Kiina" +NR_COUNTRY_CX="Joulusaari" +NR_COUNTRY_CC="Kookossaaret" +NR_COUNTRY_CO="Kolumbia" +NR_COUNTRY_KM="Komorit" +NR_COUNTRY_CG="Kongo" +NR_COUNTRY_CD="Kongon demokraattinen tasavalta" +NR_COUNTRY_CK="Cooksaaret" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Norsunluurannikko" +NR_COUNTRY_HR="Kroatia" +NR_COUNTRY_CU="Kuuba" +; NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Kypros" +NR_COUNTRY_CZ="Tšekki" +NR_COUNTRY_DK="Tanska" +NR_COUNTRY_DJ="Djibouti" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="Dominikaaninen tasavalta" +NR_COUNTRY_EC="Ecuador" +NR_COUNTRY_EG="Egypti" +NR_COUNTRY_SV="El Salvador" +NR_COUNTRY_GQ="Päiväntasaajan Guinea" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Viro" +NR_COUNTRY_ET="Etiopia" +NR_COUNTRY_FK="Falklandinsaaret" +NR_COUNTRY_FO="Färsaaret" +NR_COUNTRY_FJ="Fidzi" +NR_COUNTRY_FI="Suomi" +NR_COUNTRY_FR="Ranska" +NR_COUNTRY_GF="Ranskan Guayana" +NR_COUNTRY_PF="Ranskan Polynesia" +NR_COUNTRY_TF="Ranskan eteläiset ja antarktiset alueet" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gambia" +NR_COUNTRY_GE="Georgia" +NR_COUNTRY_DE="Saksa" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Kreikka" +NR_COUNTRY_GL="Grönlanti" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadeloupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haiti" +NR_COUNTRY_HM="Heard ja McDonaldinsaaret" +NR_COUNTRY_VA="Vatikaanivaltio" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Unkari" +NR_COUNTRY_IS="Islanti" +NR_COUNTRY_IN="Intia" +NR_COUNTRY_ID="Indonesia" +NR_COUNTRY_IR="Iran" +NR_COUNTRY_IQ="Irak" +NR_COUNTRY_IE="Irlanti" +NR_COUNTRY_IM="Mansaari" +NR_COUNTRY_IL="Israel" +NR_COUNTRY_IT="Italia" +NR_COUNTRY_JM="Jamaika" +NR_COUNTRY_JP="Japani" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordania" +NR_COUNTRY_KZ="Kazakstan" +NR_COUNTRY_KE="Kenia" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="Pohjois-Korea" +NR_COUNTRY_KR="Etelä-Korea" +NR_COUNTRY_KW="Kuwait" +NR_COUNTRY_KG="Kirgisia" +NR_COUNTRY_LA="Laos" +NR_COUNTRY_LV="Latvia" +NR_COUNTRY_LB="Libanon" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Libya" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Liettua" +NR_COUNTRY_LU="Luxemburg" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Pohjois-Makedonia" +NR_COUNTRY_MG="Madagaskar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malesia" +NR_COUNTRY_MV="Malediivit" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Marshallsaaret" +NR_COUNTRY_MQ="Martinique" +NR_COUNTRY_MR="Mauritania" +NR_COUNTRY_MU="Mauritius" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Meksiko" +NR_COUNTRY_FM="Mikronesian liittovaltio" +NR_COUNTRY_MD="Moldova" +NR_COUNTRY_MC="Monaco" +NR_COUNTRY_MN="Mongolia" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Marokko" +NR_COUNTRY_MZ="Mosambik" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibia" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="Pohjois-Makedonia" +NR_COUNTRY_NP="Nepal" +NR_COUNTRY_NL="Alankomaat" +NR_COUNTRY_AN="Alankomaiden Antillit" +NR_COUNTRY_NC="Uusi-Kaledonia" +NR_COUNTRY_NZ="Uusi-Seelanti" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigeria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Norfolkinsaari" +NR_COUNTRY_MP="Pohjois-Mariaanit" +NR_COUNTRY_NO="Norja" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Palestiina" +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papua-Uusi-Guinea" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Peru" +NR_COUNTRY_PH="Filippiinit" +NR_COUNTRY_PN="Pitcairnsaaret" +NR_COUNTRY_PL="Puola" +NR_COUNTRY_PT="Portugali" +NR_COUNTRY_PR="Puerto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="Reunion" +NR_COUNTRY_RO="Romania" +NR_COUNTRY_RU="Venäjä" +NR_COUNTRY_RW="Ruanda" +NR_COUNTRY_SH="Saint Helena" +NR_COUNTRY_KN="Saint Kitts ja Nevis" +NR_COUNTRY_LC="Saint Lucia" +NR_COUNTRY_PM="Saint-Pierre ja Miquelon" +NR_COUNTRY_VC="Saint Vincent ja Grenadiinit" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="São Tomé ja Príncipe" +NR_COUNTRY_SA="Saudi-Arabia" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Serbia" +NR_COUNTRY_SC="Seychellit" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapore" +NR_COUNTRY_SK="Slovakia" +NR_COUNTRY_SI="Slovenia" +NR_COUNTRY_SB="Salomonsaaret" +NR_COUNTRY_SO="Somalia" +NR_COUNTRY_ZA="Etelä-Afrikka" +NR_COUNTRY_GS="Etelä-Georgia ja Eteläiset Sandwichsaaret" +NR_COUNTRY_ES="Espanja" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Sudan" +NR_COUNTRY_SS="Etelä-Sudan" +NR_COUNTRY_SR="Surinam" +NR_COUNTRY_SJ="Huippuvuoret" +NR_COUNTRY_SZ="Swasimaa" +NR_COUNTRY_SE="Ruotsi" +NR_COUNTRY_CH="Sveitsi" +NR_COUNTRY_SY="Syyria" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tadžikistan" +NR_COUNTRY_TZ="Tansania" +NR_COUNTRY_TH="Thaimaa" +NR_COUNTRY_TL="Timor-Leste" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad ja Tobago" +NR_COUNTRY_TN="Tunisia" +NR_COUNTRY_TR="Turkki" +NR_COUNTRY_TM="Turkmenistan" +NR_COUNTRY_TC="Turks- ja Caicossaaret" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ukraina" +NR_COUNTRY_AE="Arabiemiirikunnat" +NR_COUNTRY_GB="Yhdistynyt kuningaskunta" +NR_COUNTRY_US="Yhdysvallat" +NR_COUNTRY_UM="Yhdysvaltain erillissaaret" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Uzbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Brittiläiset Neitsytsaaret" +NR_COUNTRY_VI="Yhdysvaltain Neitsytsaaret" +NR_COUNTRY_WF="Wallis ja Futuna" +NR_COUNTRY_EH="Länsi-Sahara" +NR_COUNTRY_YE="Jemen" +NR_COUNTRY_ZM="Sambia" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Afrikka" +NR_CONTINENT_AS="Aasia" +NR_CONTINENT_EU="Eurooppa" +NR_CONTINENT_NA="Pohjois-Ameriikka" +NR_CONTINENT_SA="Etelä-Ameriikka" +NR_CONTINENT_OC="Oseania" +NR_CONTINENT_AN="Antarktis" +NR_FRONTEND="Front-end" +NR_BACKEND="Back-end" +NR_EMBED="Upotus" +NR_RATE="Arvostele %s" +NR_REPORT_ISSUE="Ilmoita ongelma" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/fr-FR/fr-FR.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/fr-FR/fr-FR.plg_system_nrframework.ini new file mode 100644 index 00000000..cda74c4e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/fr-FR/fr-FR.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Système - Framework Novarain" +PLG_SYSTEM_NRFRAMEWORK_DESC="Framework Novarain - utilisé par les extensions de Tassos.gr" +NOVARAIN_FRAMEWORK="Framework Novarain" + +; TRANSLATABLE +NR_IGNORE="Ignorer" +NR_INCLUDE="Inclure" +NR_EXCLUDE="Exclure" +NR_SELECTION="Sélection" +NR_ASSIGN_MENU_NOITEM="Ne pas inclure d'élément ID" +NR_ASSIGN_MENU_NOITEM_DESC="Assigner également lorsqu'il n'y a pas d'élément ID de menu de défini dans l'URL ?" +NR_ASSIGN_MENU_CHILD="Également sur les éléments enfants" +NR_ASSIGN_MENU_CHILD_DESC="Assigné aussi sur les éléments enfants de l'élément sélectionné ?" +NR_COPY_OF="Copie de %s" +NR_ASSIGN_DATETIME_DESC="Ciblez les visiteurs en fonction de l’horodatage de votre serveur" +NR_DATETIME="Période" +NR_TIME="Temps" +NR_DATE="Date" +NR_DATETIME_DESC="Définir la période pour auto publier/dé-publier" +NR_START_PUBLISHING="Début de la période" +NR_START_PUBLISHING_DESC="Spécifier la date de début de publication" +NR_FINISH_PUBLISHING="Date et heure de fin" +NR_FINISH_PUBLISHING_DESC="Spécifier la date de fin de publication" +NR_DATETIME_NOTE="La date et l'heure définie utilisera la date et l'heure de votre serveur, pas celle du système de vos visiteurs." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="Code PHP" +NR_ASSIGN_PHP_DESC="Entrez un morceau de code PHP à évaluer." +NR_ASSIGN_PHP_DESC2="Ciblez les visiteurs qui testent un code PHP personnalisé. Le code doit retourner true ou false.

        Par exemple :
        retrun ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Heure sur le site" +NR_SECONDS="Secondes" +NR_ASSIGN_TIMEONSITE_DESC="Entrez une durée en seconde pour comparer avec le temps total de l'utilisateur passé sur l'ensemble de votre site (durée de visite).

        Exemple :
        Si vous voulez afficher une boîte après que l'utilisateur ai passé 3 minutes sur l'ensemble de votre site, entrez 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Cibler les visiteurs qui naviguent sur des URL spécifiques." +NR_ASSIGN_URLS_DESC="Entrez (une partie) des URLs à comparer.
        Utilisez une nouvelle ligne pour chaque comparaison." +NR_ASSIGN_URLS_LIST="Correspondance d'URL" +NR_ASSIGN_URLS_REGEX="Utiliser une expression régulière" +NR_ASSIGN_URLS_REGEX_DESC="Sélectionnez pour traiter la valeur comme des expressions régulières." +NR_ASSIGN_LANGS="Langage" +NR_ASSIGN_LANGS_DESC="Ciblez les visiteurs qui naviguent sur votre site Web dans une langue spécifique." +NR_ASSIGN_LANGS_LIST_DESC="Sélectionnez les langages à assigner" +NR_ASSIGN_DEVICES="Appareil" +NR_ASSIGN_DEVICES_DESC2="Ciblez les visiteurs utilisant des appareils spécifiques comme Mobile, Tablette ou Ordinateur." +NR_ASSIGN_DEVICES_DESC="Sélectionnez les appareils à assigner" +NR_ASSIGN_DEVICES_NOTE="Gardez en tête que la détection d'appareil n'est pas à 100% exacte. Les utilisateurs peuvent configurer leur navigateur pour imiter d'autres appareils." +NR_MENU="Menu" +NR_MENU_ITEMS="Élément du menu" +NR_MENU_ITEMS_DESC="Ciblez les visiteurs qui naviguent avec des éléments de menu spéciaux" +NR_USERGROUP="Groupe d'utilisateurs" +NR_ACCESSLEVEL="Groupe d'utilisateur" +NR_ACCESSLEVEL_DESC="Sélectionnez les groupes d'utilisateur à assigner.

        Note : si vous souhaitez rendre ça public, choisissez d'Ignorer et de ne pas sélectionner le Public" +NR_SHOW_COPYRIGHT="Afficher le copyright" +NR_SHOW_COPYRIGHT_DESC="Si selectionné, une supplément de copyright sera afficher sur la vue Admin. Les extensions Tassos.gr n'affichent jamais de copyright ou de liens externes sur le devant du site." +NR_WIDTH="Largeur" +NR_WIDTH_DESC="Entrez la largeur en px, em ou %

        Exemple : 400px" +NR_HEIGHT="Hauteur" +NR_HEIGHT_DESC="Entrez la hauteur en px, em ou %

        Exemple : 400px" +NR_PADDING="Espacement" +NR_PADDING_DESC="Entrez l'espacement en px, em ou %

        Exemple : 20px" +NR_MARGIN="Marge" +NR_MARGIN_DESC="La propriété CSS de marge est utilisée pour générer un espace autour de la boîte et deféinir la taille de la bordure exterieur en pixels ou en %.

        Exemple 1 : 25px
        Exemple 2 : 5%

        Spécifiez la marge de chaque coté [haut droite bas gauche] :

        En haut seulement : 25px 0 0 0
        A droite seulement : 0 25px 0 0
        En bas seulement : 0 0 25px 0
        A gauche seulement : 0 0 0 25px" +NR_COLOR_HOVER="Couleur au survol" +NR_COLOR="Couleur" +NR_COLOR_DESC="Définissez une couleur au format HEX ou RGBA." +NR_TEXT_COLOR="Couleur du texte" +NR_BACKGROUND="Arrière-plan" +NR_BACKGROUND_COLOR="Couleur de l'arrière-plan" +NR_BACKGROUND_COLOR_DESC="Définir une couleur d'arrière plan au format HEX ou RGBA. Pour désactiver, entrez 'none'. Pour une transparence absolue, entrez 'transparent'." +NR_URL_SHORTENING_FAILED="Erreur de la réduction de %s avec %s . %s." +NR_EXPORT="Exporter" +NR_IMPORT="Importer" +NR_PLEASE_CHOOSE_A_VALID_FILE="Veuillez choisir un nom de fichier valide" +NR_IMPORT_ITEMS="Importer des éléments" +NR_PUBLISH_ITEMS="Publier des éléments" +NR_AS_EXPORTED="Tel qu'exporté" +NR_TITLE="Titre" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing List" +NR_ACYMAILING_LIST_DESC="Sélectionnez les listes AcyMailing à assigner." +NR_ASSIGN_ACYMAILING_DESC="Ciblez les visiteurs qui ont souscrit à des listes spécifiques AcyMailing" +NR_AKEEBASUBS="Abonnements Akeeba" +NR_AKEEBASUBS_LEVELS="Niveaux" +NR_AKEEBASUBS_LEVELS_DESC="Sélectionnez les niveaux d'abonnements Akeeba à assigner." +NR_ASSIGN_AKEEBASUBS_DESC="Ciblez les visiteurs qui ont souscrit à des abonnements Akeeba spécifiques" +NR_MATCH="Comparer" +NR_MATCH_DESC="La méthode de comparaison utilisé pour comparer la valeur" +NR_ASSIGN_MATCHING_METHOD="Méthode de comparaison" +NR_ASSIGN_MATCHING_METHOD_DESC="Doit-on tout comparer ou seulement certains éléments ?

        Tous
        Afficher si tous les éléments ci-dessous correspondent.

        N'importe lequel
        Afficher si n'importe lequel (un ou plusieurs) des éléments ci-dessous correspondent.
        Les groupes d'éléments où 'Ignorer' est sélectionné seront ignorés." +NR_ANY="N'importe lequel" +NR_ASSIGN_REFERRER="URL de référence " +NR_ASSIGN_REFERRER_DESC2="Cibler les visiteurs qui arrivent sur votre site à partir d'une source de trafic spécifique." +NR_ASSIGN_REFERRER_DESC="Entrez une URL de référence par ligne : Exemple :

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Gardez en tête que la découverte d'URL de référence n'est pas sûre à 100%. Certains serveurs utilisent des proxies pour masquer ou fausser ces informations." +NR_PROFEATURE_HEADER="%s est une fonctionnalité premium" +NR_PROFEATURE_DESC="Nous sommes désolé, %s n'est pas disponible pour votre offre. Merci de migrer vers l'offre PRO pour débloquer toutes ces magnifiques fonctionnalités." +NR_PROFEATURE_DISCOUNT="Bonus: %s utilisateurs gratuits obtiennent 20% de rabais sur le prix régulier, appliqué directement lors de l'achat" +NR_ONLY_AVAILABLE_IN_PRO="Uniquement disponible dans la version PRO" +NR_UPGRADE_TO_PRO="Mettre à niveau vers Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Mettre à niveau vers la version Pro pour débloquer" +NR_UPGRADE_TO_PRO_VERSION="Magnifique ! Plus qu'une étape. Cliquez sur ce bouton ci dessous pour compléter la migration vers la version Pro." +NR_UNLOCK_PRO_FEATURE="Débloquer les fonctionnalités premiums" +NR_USING_THE_FREE_VERSION="Vous utilisez la version FREE de Convert Forms. Achetez la version PRO pour disposer de toutes les fonctionnalités" +NR_LEFT_TO_RIGHT="De gauche à droite" +NR_RIGHT_TO_LEFT="De droite à gauche" +NR_BGIMAGE="Image d'arrière-plan" +NR_BGIMAGE_DESC="Définir une image d'arrière-plan" +NR_BGIMAGE_FILE="Image" +NR_BGIMAGE_FILE_DESC="Sélectionner ou téléversé un fichier comme image d'arrière-plan." +NR_BGIMAGE_REPEAT="Répétition" +NR_BGIMAGE_REPEAT_DESC="La propriété de répétition de l'arrière-plan définit si/comment l'image de fond va se répéter. Par défaut, l'image de fond se répète à la fois verticalement et horizontalement.

        Repeat : l'image de fond se répétera à la fois verticalement et horizontalement.

        Repeat-x : l'image de fond se répétera horizontalement seulement

        Repeat-y : l'image de fond se répétera verticalement seulement

        No-repeat : l'image de fond ne se répétera pas." +NR_BGIMAGE_SIZE="Taille" +NR_BGIMAGE_SIZE_DESC="Définit la taille de l'image d'arrière plan.

        Auto : l'image de fond utilise sa largeur et sa hauteur

        Cover : redimensionne l'image de fond pour recouvrir complètement la zone d'arrière plan. Certaines parties de l'image peuvent donc ne plus être visible en fonction du positionnement de la zone d'arrière plan

        Contain : Redimensionne l'image de fond proportionnellement l'image afin qu'elle rentre parfaitement dans la zone d'arrière plan

        100% 100% : Recadre l'image de fond pour recouvrir complètement la zone de contenu." +NR_BGIMAGE_POSITION="Position" +NR_BGIMAGE_POSITION_DESC="La propriété position de l'arrière plan définit où se place l'image de fond. Par défaut, l'image est placé en haut à gauche de l'arrière plan. La première valeur correspond à la position horizontale, et la seconde à la verticale.

        Vous pouvez utilisez n'importe quelle valeur prédéfinie ou entrez une valeur personnalisée en pourcentage : x% y% ou en pixel xPos yPos." +NR_RTL="Activez le RTL" +NR_RTL_DESC="La direction du texte de droite à gauche est essentielle pour les écritures RTL comme l'arabe, l'hébreu, le syriaque et le thaïlandais." +NR_HORIZONTAL="Horizontal" +NR_VERTICAL="Vertical" +NR_FORM_ORIENTATION="Orientation du formulaire" +NR_FORM_ORIENTATION_DESC="Selectionnez l'orientation du formulaire" +NR_ASSIGN_CATEGORY="Catégories" +NR_ASSIGN_CATEGORY_DESC="Sélectionner les catégories à assigner" +NR_ASSIGN_CATEGORY_CHILD="Également sur les éléments enfants" +NR_ASSIGN_CATEGORY_CHILD_DESC="Assigné aussi sur les éléments enfants de l'élément sélectionné ?" +NR_NEW="Nouveau" +NR_LIST="Liste" +NR_DOCUMENTATION="Documentation" +NR_KNOWLEDGEBASE="Base de connaissance" +NR_FAQ="FAQ" +NR_INFORMATION="Information" +NR_EXTENSION="Extension" +NR_VERSION="Version" +NR_CHANGELOG=" Journal des modifications" +NR_DOWNLOAD="Clé de téléchargement" +NR_DOWNLOAD_KEY_MISSING="La clé de téléchargement est absente" +NR_DOWNLOAD_KEY="Clé de téléchargement" +NR_DOWNLOAD_KEY_DESC="Vous trouverez votre "_QQ_"Download Key"_QQ_" en vous connectant à votre compte sur Tassos.gr, dans la section "_QQ_"download"_QQ_".

        Note : saisir cette clé ici ne permet pas de mettre à jour une version gratuite vers la version Pro. Pour bénéficier des fonctionnalités Pro vous devez aussi installer la version Pro." +NR_DOWNLOAD_KEY_HOW="Pour pouvoir mettre à jour %s via la mise à jour Joomla, vous devrez entrer votre clé de téléchargement dans les paramètres du plugin du framework Novarain." +NR_DOWNLOAD_KEY_FIND="Trouver la clé de téléchargement" +NR_DOWNLOAD_KEY_UPDATE="Mettre à jour la clé de téléchargement" +NR_OK="OK" +NR_MISSING="Manquant" +NR_LICENSE="Licence" +NR_AUTHOR="Auteur" +NR_FOLLOWME="Suivez-moi" +NR_FOLLOW="Suivre %s" +NR_TRANSLATE_INTEREST="Seriez-vous intéresser pour participer à la traduction de %s dans votre langue ?" +NR_TRANSIFEX_REQUEST="Envoyez-moi une demande sur Transifex" +NR_HELP_WITH_TRANSLATIONS="Aider à la traduction" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Avancés" +NR_USEGLOBAL="Usage global" +NR_WEEKDAY="Jour de la semaine" +NR_MONTH="Mois" +NR_MONDAY="Lundi" +NR_TUESDAY="Mardi" +NR_WEDNESDAY="Mercredi" +NR_THURSDAY="Jeudi" +NR_FRIDAY="Vendredi" +NR_SATURDAY="Samedi" +NR_WEEKEND="Weekend" +NR_WEEKDAYS="Jours de la semaine" +NR_SUNDAY="Dimanche" +NR_JANUARY="Janvier" +NR_FEBRUARY="Février" +NR_MARCH="Mars" +NR_APRIL="Avril" +NR_MAY="Mai" +NR_JUNE="Juin" +NR_JULY="Juillet " +NR_AUGUST="Août " +NR_SEPTEMBER="Septembre" +NR_OCTOBER="Octobre" +NR_NOVEMBER="Novembre" +NR_DECEMBER="Décembre" +NR_NEVER="Jamais" +NR_SECONDS="Secondes" +NR_MINUTES="Minutes" +NR_HOURS="Heures" +NR_DAYS="Jours" +NR_SESSION="Session" +NR_EVER="Toujours" +NR_COOKIE="Cookie" +NR_BOTH="Les deux" +NR_NONE="Aucun" +NR_DESKTOPS="Ordinateur" +NR_MOBILES="Mobile" +NR_TABLETS="Tablette" +NR_PER_SESSION="Par session" +NR_PER_DAY="Par jour" +NR_PER_WEEK="Par semaine" +NR_PER_MONTH="Par mois" +NR_FOREVER="Pour toujours" +NR_FEATURE_UNDER_DEV="Cette fonctionnalité est en cours de développement" +NR_LIKE_THIS_EXTENSION="Vous aimez cette extension ?" +NR_LEAVE_A_REVIEW="Laissez un avis sur JED" +NR_SUPPORT="Support" +NR_NEED_SUPPORT="Besoin d'aide ?" +NR_DROP_EMAIL="Envoyer moi un mail" +NR_READ_DOCUMENTATION="Lire la documentation" +NR_COPYRIGHT="%s - Tassos.gr Tous Droits Réservés" +NR_DASHBOARD="Tableau de bord" +NR_NAME="Nom" +NR_WRONG_COORDINATES="Les coordonnées que vous avez fournies ne sont pas valides." +NR_ENTER_COORDINATES="Latitude,Longitude" +NR_NO_ITEMS_FOUND="Pas d'élément trouvé" +NR_ITEM_IDS="Aucun ID d'élément" +NR_TOGGLE="Basculer" +NR_EXPAND="Étendre " +NR_COLLAPSE="Rabattre " +NR_SELECTED="Sélectionné " +NR_MAXIMIZE="Maximiser" +NR_MINIMIZE="Minimiser" +NR_SELECTION="Sélection" +NR_INSTALL="Intaller" +NR_INSTALL_NOW="Installer dès à présent" +NR_INSTALLED="Installé" +NR_COMING_SOON="A venir" +NR_ROADMAP="Sur la feuille de route" +NR_MEDIA_VERSIONING="Utiliser la version média" +NR_MEDIA_VERSIONING_DESC="Sélectionnez cette option pour ajouter le numéro de version de l'extension à la fin des urls du média (js/css), afin de forcer les navigateurs à charger le bon fichier." +NR_LOAD_JQUERY="Importer jQuery" +NR_LOAD_JQUERY_DESC="Sélectionnez cette option pour charger le script de base de jQuery. Vous pouvez désactiver cette option si vous rencontrez des conflits, lorsque votre modèle ou d'autres extensions chargent leur propre version de jQuery." +NR_SELECT_CURRENCY="Sélectionner une monnaie" +NR_CONVERTFORMS="Convertir des formulaires" +NR_CONVERTFORMS_LIST="Campagne" +NR_ASSIGN_CONVERTFORMS_DESC="Cibler les visiteurs qui ont souscrit à des campagnes spécifiques de ConvertForms." +NR_CONVERTFORMS_LIST_DESC="Sélectionner une campagne du convertisseur de formulaire à assigner" +NR_LEFT="Gauche" +NR_CENTER="Centre" +NR_RIGHT="Droite" +NR_BOTTOM="Bas" +NR_TOP="Haut" +NR_AUTO="Auto" +NR_CUSTOM="Personnaliser" +NR_UPLOAD="Téléverser" +NR_IMAGE="Image" +NR_INTRO_IMAGE="Image d'intro" +NR_FULL_IMAGE="Image principale" +NR_IMAGE_SELECT="Sélectionner l'image" +NR_IMAGE_SIZE_COVER="Couvrir" +NR_IMAGE_SIZE_CONTAIN="Contenir" +NR_REPEAT="Répéter " +NR_REPEAT_X="Répéter sur l'axe X" +NR_REPEAT_Y="Répéter sur l'axe Y" +NR_REPEAT_NO="Non répéter" +NR_FIELD_STATE_DESC="Définir l'état de l'élément" +NR_CREATED_DATE="Date de création" +NR_CREATED_DATE_DESC="La date de création de l'élément" +NR_MODIFIFED_DATE="Date de modification" +NR_MODIFIFED_DATE_DESC="La dernière date de modification de cet élément." +NR_CATEGORIES="Catégorie" +NR_CATEGORIES_DESC="Sélectionnez les catégories à assigner" +NR_ALSO_ON_CHILD_ITEMS="Également sur les éléments enfants" +NR_ALSO_ON_CHILD_ITEMS_DESC="Assigné aussi sur les éléments enfants de l'élément sélectionné ?" +NR_PAGE_TYPE="Type de page" +NR_PAGE_TYPES="Types de page" +NR_PAGE_TYPES_DESC="Sélectionnez les types de page sur lesquels l'affectation doit être active." +NR_CONTENT_VIEW_CATEGORY_BLOG="Blog de catégorie" +NR_CONTENT_VIEW_CATEGORY_LIST="Liste de catégorie" +NR_CONTENT_VIEW_CATEGORIES="Liste de toutes les catégories" +NR_CONTENT_VIEW_ARCHIVED="Articles archivés" +NR_CONTENT_VIEW_FEATURES="Articles en vedette" +NR_CONTENT_VIEW_CREATE_ARTICLE="Créer un article" +NR_CONTENT_VIEW_ARTICLE="Article" +NR_ARTICLE_VIEW_DESC="Activer pour prendre en compte la vue Article" +NR_CATEGORY_VIEW="Vue par catégorie" +NR_CATEGORY_VIEW_DESC="Activer pour prendre en compte la vue Catégorie" +NR_ARTICLES="Articles" +NR_ARTICLES_DESC="Sélectionnez les articles à assigner." +NR_ARTICLE="Article" +NR_ARTICLE_AUTHORS="Auteurs" +NR_ARTICLE_AUTHORS_DESC="Sélectionnez les auteurs à assigner." +NR_ONLY="Seulement" +NR_OTHERS="Autres" +NR_SMARTTAGS="Smart Tags" +NR_SMARTTAGS_SHOW="Afficher Smart Tags" +NR_SMARTTAGS_NOTFOUND="Pas de Smart Tags trouvé" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Rechercher les Smarts Tags" +NR_CONTACT_US="Contactez-nous" +NR_FONT_COLOR="Couleur de la police" +NR_FONT_SIZE="Taille de la police" +NR_FONT_SIZE_DESC="Choisissez une taille de police en pixels" +NR_TEXT="Texte" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Activer sur la surcharge de la sortie" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Active le rendu de l'extension lorsque la mise en page (tmpl) est surchargée. Exemples : tmpl=composant ou tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Activer sur la surcharge du format" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Active le rendu de l'extension lorsque le format de page n'est pas autre chose que de HTML. Exemples : format=raw ou format=json." +NR_GEOLOCATING="Géolocalisation" +NR_GEOLOCATING_DESC="La géolocalisation n'est pas toujours exacte à 100 %. La géolocalisation est basée sur l'adresse IP du visiteur. Toutes les adresses IP ne sont pas fixes ou connues." +NR_CITY="Ville" +NR_CITY_NAME="Nom de Ville" +NR_CONDITION_CITY_DESC="Entrez un nom de ville en anglais. Entrez plusieurs villes séparées par une virgule." +NR_CONTINENT="Continent" +NR_REGION="Région" +NR_CONDITION_REGION_DESC="La valeur comprend deux parties, le code de pays à deux lettres ISO 3166-1 et le code de région. La valeur doit donc être sous la forme suivante: COUNTRY_CODE-REGION_CODE. Pour une liste complète des codes de région, cliquez sur le lien Trouver un code de région." +NR_ASSIGN_COUNTRIES="Pays" +NR_ASSIGN_COUNTRIES_DESC2="Ciblez les visiteurs qui se trouvent physiquement dans un pays spécifique." +NR_ASSIGN_COUNTRIES_DESC="Sélectionnez les pays à assigner" +NR_ASSIGN_CONTINENTS="Continent" +NR_ASSIGN_CONTINENTS_DESC="Sélectionnez les continents à assigner" +NR_ASSIGN_CONTINENTS_DESC2="Ciblez les visiteurs qui se trouvent physiquement sur un continent spécifique." +NR_ICONTACT_ACCOUNTID_ERROR="L'ID de compte AccountID n'a pas pu être récupéré" +NR_TAG_CLIENTDEVICE="Type d'appareil du visiteur" +NR_TAG_CLIENTOS="Système d'exploitation du visiteur" +NR_TAG_CLIENTBROWSER="Navigateur du visiteur" +NR_TAG_CLIENTUSERAGENT="Chaîne user agent du visiteur" +NR_TAG_IP="Adresse IP du visiteur" +NR_TAG_URL="URL de la page" +NR_TAG_URLENCODED="URL encodée de la page" +NR_TAG_URLPATH="Lien de la page" +NR_TAG_REFERRER="Référence de la page" +NR_TAG_SITENAME="Nom du site" +NR_TAG_SITEURL="URL du site" +NR_TAG_PAGETITLE="Titre de la page" +NR_TAG_PAGEDESC="Méta-description de la page" +NR_TAG_PAGELANG="Langage du code de la page" +NR_TAG_USERID="ID de l'utilisateur" +NR_TAG_USERNAME="Nom complet de l'utilisateur" +NR_TAG_USERLOGIN="Login de l'utilisateur" +NR_TAG_USEREMAIL="Mail de l'utilisateur" +NR_TAG_USERFIRSTNAME="Prénom de l'utilisateur" +NR_TAG_USERLASTNAME="Nom de famille de l'utilisateur" +NR_TAG_USERGROUPS="ID's des groupes d'utilisateurs" +NR_TAG_DATE="Date" +NR_TAG_TIME="Temps" +NR_TAG_RANDOMID="ID aléatoire" +NR_ICON="Icône" +NR_SELECT_MODULE="Sélectionnez un module" +NR_SELECT_CONTINENT="Sélectionner un continent" +NR_SELECT_COUNTRY="Sélectionner un pays" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Clé de l'API Google Maps" +NR_GMAP_KEY_DESC="Si vous rencontrez des problèmes avec Google Map qui ne se charge pas, vous devez probablement entrer votre propre clé API." +NR_GMAP_FIND_KEY="Obtenir une clé de l'API" +NR_ARE_YOU_SURE="Êtes-vous sur ?" +NR_CUSTOMURL="URL personnalisée" +NR_SAMPLE="Exemple" +NR_DEBUG="Debug" +NR_CUSTOMURL="URL personnalisée" +NR_READMORE="Lire plus" +NR_IPADDRESS="Adresse IP" +NR_ASSIGN_BROWSERS="Navigateur" +NR_ASSIGN_BROWSERS_DESC="Sélectionnez les navigateurs à assigner" +NR_ASSIGN_BROWSERS_DESC2="Ciblez les visiteurs qui naviguent sur votre site avec des navigateurs spécifiques tels que Chrome, Firefox ou Internet Explorer." +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Système d'exploitation" +NR_ASSIGN_OS_DESC="Sélectionnez les systèmes d'exploitations à assigner" +NR_ASSIGN_OS_DESC2="Ciblez les visiteurs qui utilisent des systèmes d'exploitation spécifiques tels que Windows, Linux ou Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Nombre de page" +NR_ASSIGN_PAGEVIEWS_DESC="Ciblez les visiteurs qui ont consulté un certain nombre de pages" +NR_ASSIGN_PAGEVIEWS_VIEWS="Pages" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Entrez le nombre de pages" +NR_ASSIGN_COOKIENAME_NAME="Nom du cookie" +NR_ASSIGN_COOKIENAME_NAME_DESC="Entrez le nom du cookie à assigner" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Ciblez les visiteurs qui ont des cookies spécifiques stockés dans leur navigateur." +NR_FEWER_THAN="Moins que" +NR_GREATER_THAN="Plus que" +NR_EXACTLY="Exactement" +NR_EXISTS="Existe" +NR_IS_EQUAL="Équivaut à" +NR_CONTAINS="Contient" +NR_STARTS_WITH="Commence par" +NR_ENDS_WITH="Fini avec" +NR_ASSIGN_COOKIENAME_CONTENT="Contenu du cookie" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Le contenu du cookie" +NR_ASSIGN_IP_ADDRESSES_DESC2="Cibler les visiteurs qui sont cachés derrière une adresse IP spécifique (intervalle)" +NR_ASSIGN_IP_ADDRESSES_DESC="Entrez une liste avec des adresses IP spécifiques séparé par 'entrée' et/ou par une virgule

        Exemple :
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="ID de l'utilisateur" +NR_ASSIGN_USER_ID_DESC="Cibler spécifiquement les utilisateurs Joomla par leur ID" +NR_ASSIGN_USER_ID_SELECTION_DESC="Entrez les IDs des utilisateurs Joomla séparé par une virgule" +NR_ASSIGN_COMPONENTS="Composant" +NR_ASSIGN_COMPONENTS_DESC="Sélectionnez les composants à assigner" +NR_ASSIGN_COMPONENTS_DESC2="Cibler les visiteurs qui naviguent sur des composants spécifiques." +NR_ASSIGN_TIMERANGE="Intervalle de temps" +NR_ASSIGN_TIMERANGE_DESC="Ciblez les visiteurs en fonction de l’heure de votre serveur" +NR_START_TIME="Début du temps" +NR_END_TIME="Fin du temps" +NR_START_PUBLISHING_TIMERANGE_DESC="Spécifier l'heure de début de publication" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Entrez l'heure de fin de publication" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Clé du site" +NR_RECAPTCHA_SITE_KEY_DESC="Utilisé dans le code JavaScript servi à vos utilisateurs" +NR_RECAPTCHA_SECRET_KEY="Clé secrète" +NR_RECAPTCHA_SECRET_KEY_DESC="Utilisé pour la communication entre votre serveur et celui de reCAPTCHA. Assurez-vous de garder le secret." +NR_RECAPTCHA_SITE_KEY_ERROR="La clé du site reCaptcha est soit manquante soit invalide" +NR_PREVIOUS_MONTH="Mois dernier" +NR_NEXT_MONTH="Mois suivant" +NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Cibler les visiteurs qui naviguent sur des éléments de menu spécifiques ou des URL." +NR_ASSIGN_GROUP_DATETIME_DESC="Déclencher une boîte en fonction de la date et de l'heure de votre serveur" +NR_ASSIGN_GROUP_USER_VISITOR="Utilisateur / Visiteur Joomla" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Cibler les utilisateurs enregistrés ou les visiteurs qui ont consulté un certain nombre de pages" +NR_ASSIGN_GROUP_PLATFORM="Plateforme Visiteur" +NR_ASSIGN_GROUP_PLATFORM_DESC="Ciblez les visiteurs qui utilisent Mobile, Google Chrome ou même Windows." +NR_ASSIGN_GROUP_GEO_DESC="Ciblez les visiteurs qui se trouvent physiquement dans une région spécifique." +NR_ASSIGN_GROUP_JCONTENT="Contenu Joomla!" +NR_ASSIGN_GROUP_JCONTENT_DESC="Ciblez les visiteurs qui regardent des articles ou des catégories spécifiques de Joomla" +NR_ASSIGN_GROUP_SYSTEM="Système / Intégration" +NR_ASSIGN_GROUP_SYSTEM_DESC="Ciblez les visiteurs qui interagissent avec des extensions Joomla spécifiques d'une tierce partie." +NR_ASSIGN_GROUP_ADVANCED="Ciblage avancé des visiteurs" +NR_ASSIGN_USERGROUP_DESC="Cibler spécifiquement les groupes d'utilisateurs Joomla" +NR_ASSIGN_ARTICLE_DESC="Cibler les visiteurs qui consultent des articles spécifiques de Joomla" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Cibler les visiteurs qui consultent des catégories spécifiques de Joomla" +NR_EXTENSION_REQUIRED="%scomposant nécessite%s que le plugin soit activé pour fonctionner correctement." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Cibler les visiteurs qui naviguent dans des éléments, des catégories ou des balises K2 spécifiques." +NR_ASSIGN_K2_ITEMS="Élément " +NR_ASSIGN_K2_ITEMS_DESC="Cibler les visiteurs qui naviguent dans des éléments K2 spécifiques." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Sélectionnez les éléments K2 à assigner" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Comparer un mot clé spécifique dans le contenu de l'élément; Séparer par une virgule ou un saut de ligne." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Comparez les méta-mots-clés de l'élément. Séparez par une virgule ou une nouvelle ligne." +NR_ASSIGN_K2_PAGETYPES_DESC="Cibler les visiteurs qui naviguent dans des types de page K2 spécifiques." +NR_ASSIGN_K2_ITEM_OPTION="Élément " +NR_ASSIGN_K2_LATEST_OPTION="Derniers éléments depuis les utilisateurs ou les catégories" +NR_ASSIGN_K2_TAG_OPTION="Baliser la page" +NR_ASSIGN_K2_CATEGORY_OPTION="Catégorie de page" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Formulaire de modification d'élément" +NR_ASSIGN_K2_USER_PAGE_OPTION="Page utilisateur (blog)" +NR_ASSIGN_K2_TAGS_DESC="Ciblez les visiteurs qui naviguent sur les articles K2 avec des balises spécifiques" +NR_ASSIGN_K2_CATEGORIES_DESC="Cibler les visiteurs qui naviguent dans des catégories K2 spécifiques." +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Catégories" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Éléments" +NR_ASSIGN_PAGE_TYPES_DESC="Sélectionnez les types de page à assigner" +NR_ASSIGN_TAGS_DESC="Sélectionnez les balises à assigner" +NR_CONTENT_KEYWORDS="Mots-clés du contenu" +NR_META_KEYWORDS="Méta-keywords" +NR_TAG="Balise" +NR_NORMAL="Normal" +NR_COMPACT="Compact" +NR_LIGHT="Léger" +NR_DARK="Sombre" +NR_SIZE="Taille" +NR_THEME="Thème" +NR_SINGLE="Seul" +NR_MULTIPLE="Multiple" +NR_RANGE="Intervalle" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Merci de valider" +NR_RECAPTCHA_INVALID_SECRET_KEY="Clé secrète invalide" +NR_PAGE="Page" +NR_YOU_ARE_USING_EXTENSION="Vous utilisez %s%s" +NR_UPDATE="Mettre à jour" +NR_SHOW_UPDATE_NOTIFICATION="Afficher la notification de mise à jour" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Si cette option est sélectionnée, une notification de mise à jour apparaît dans la vue des composants principaux lorsqu'il existe une nouvelle version pour cette extension." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%sest disponible" +NR_ERROR_EMAIL_IS_DISABLED="L'envoi de mails est désactivé. Les mails ne peuvent être envoyés" +NR_ASSIGN_ITEMS="Item" +NR_COUNTRY_AF="Afghanistan" +NR_COUNTRY_AX="Iles Aland" +NR_COUNTRY_AL="Albanie" +NR_COUNTRY_DZ="Algerie" +NR_COUNTRY_AS="American Samoa" +NR_COUNTRY_AD="Andorre" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antarctique" +NR_COUNTRY_AG="Antigua et Barbuda" +NR_COUNTRY_AR="Argentine" +NR_COUNTRY_AM="Arménie" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Australie" +NR_COUNTRY_AT="Autriche" +NR_COUNTRY_AZ="Azerbaidjan" +NR_COUNTRY_BS="Bahamas" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladesh" +NR_COUNTRY_BB="Barbades" +NR_COUNTRY_BY="Belarus" +NR_COUNTRY_BE="Belgique" +NR_COUNTRY_BZ="Bélize" +NR_COUNTRY_BJ="Bénin" +NR_COUNTRY_BM="Bermudes" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhoutan" +NR_COUNTRY_BO="Bolivie" +NR_COUNTRY_BA="Bosnie Herzégovine" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Ile Bouvet" +NR_COUNTRY_BR="Brésil" +NR_COUNTRY_IO="Territoire britannique de l'Océan Indien" +NR_COUNTRY_BN="Brunei Darussalam" +NR_COUNTRY_BG="Bulgarie" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Cambodge" +NR_COUNTRY_CM="Cameroun" +NR_COUNTRY_CA="Canada" +NR_COUNTRY_CV="Cap Vert" +NR_COUNTRY_KY="Iles Cayman" +NR_COUNTRY_CF="République Centrafricaine" +NR_COUNTRY_TD="Tchad" +NR_COUNTRY_CL="Chili" +NR_COUNTRY_CN="Chine" +NR_COUNTRY_CX="Ile Christmas" +NR_COUNTRY_CC="Iles Cocos (Keeling)" +NR_COUNTRY_CO="Colombie" +NR_COUNTRY_KM="Comors" +NR_COUNTRY_CG="Congo" +NR_COUNTRY_CD="Congo, République démocratique" +NR_COUNTRY_CK="Iles Cook" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Côte d'Ivoire" +NR_COUNTRY_HR="Croatie" +NR_COUNTRY_CU="Cuba" +NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Chypre" +NR_COUNTRY_CZ="République tchèque" +NR_COUNTRY_DK="Danemark" +NR_COUNTRY_DJ="Djibouti" +NR_COUNTRY_DM="Dominique" +NR_COUNTRY_DO="République dominicaine" +NR_COUNTRY_EC="Equateur" +NR_COUNTRY_EG="Egypte" +NR_COUNTRY_SV="Salvador" +NR_COUNTRY_GQ="Guinée Equatoriale" +NR_COUNTRY_ER="Érythrée" +NR_COUNTRY_EE="Estonie" +NR_COUNTRY_ET="Ethiopie" +NR_COUNTRY_FK="Iles Falkland (Malvines)" +NR_COUNTRY_FO="Iles Féroé " +NR_COUNTRY_FJ="Iles Fiji" +NR_COUNTRY_FI="Finlande" +NR_COUNTRY_FR="France" +NR_COUNTRY_GF="Guyane française" +NR_COUNTRY_PF="Polynésie française" +NR_COUNTRY_TF="Terres australes et antarctiques françaises" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gambie" +NR_COUNTRY_GE="Georgie" +NR_COUNTRY_DE="Allemagne" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Grèce" +NR_COUNTRY_GL="Groënland" +NR_COUNTRY_GD="Grenade" +NR_COUNTRY_GP="Guadeloupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernesey" +NR_COUNTRY_GN="Guinée" +NR_COUNTRY_GW="Guinée-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haïti" +NR_COUNTRY_HM="Îles Heard et McDonald" +NR_COUNTRY_VA="Vatican" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Hongrie" +NR_COUNTRY_IS="Islande" +NR_COUNTRY_IN="Inde" +NR_COUNTRY_ID="Indonésie" +NR_COUNTRY_IR="République Islamique d'Iran" +NR_COUNTRY_IQ="Irak" +NR_COUNTRY_IE="Irlande" +NR_COUNTRY_IM="Ile de Man" +NR_COUNTRY_IL="Israël" +NR_COUNTRY_IT="Italie" +NR_COUNTRY_JM="Jamaïque" +NR_COUNTRY_JP="Japon" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordan" +NR_COUNTRY_KZ="Kazakhstan" +NR_COUNTRY_KE="Kenya" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="République démocratique de Corée" +NR_COUNTRY_KR="République de Corée" +NR_COUNTRY_KW="Koweit" +NR_COUNTRY_KG="Kyrgyzstan" +NR_COUNTRY_LA="République populaire démocratique du Laos" +NR_COUNTRY_LV="Lettonie" +NR_COUNTRY_LB="Liban" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Libyan Arab Jamahiriya" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Lituanie " +NR_COUNTRY_LU="Luxembourg" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Macédoine" +NR_COUNTRY_MG="Madagascar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malaisie" +NR_COUNTRY_MV="Maldives" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malte" +NR_COUNTRY_MH="Iles Marshall" +NR_COUNTRY_MQ="Martinique" +NR_COUNTRY_MR="Mauritanie" +NR_COUNTRY_MU="Ile Maurice" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Mexique" +NR_COUNTRY_FM="Micronésie" +NR_COUNTRY_MD="Moldavie" +NR_COUNTRY_MC="Monaco" +NR_COUNTRY_MN="Mongolie" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Maroc" +NR_COUNTRY_MZ="Mozambique" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibie" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="North Macedonia" +NR_COUNTRY_NP="Népal" +NR_COUNTRY_NL="Pays-bas" +NR_COUNTRY_AN="Antilles néerlandaises" +NR_COUNTRY_NC="Nouvelle Calédonie" +NR_COUNTRY_NZ="Nouvelle Zélande" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigeria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Ile Norfolk" +NR_COUNTRY_MP="Iles Mariannes du Nord" +NR_COUNTRY_NO="Norvège" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Territoire Palestinien" +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papouasie Nouvelle-Guinée" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Pérou" +NR_COUNTRY_PH="Philippines" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Pologne" +NR_COUNTRY_PT="Portugal" +NR_COUNTRY_PR="Porto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="La réunion" +NR_COUNTRY_RO="Roumanie" +NR_COUNTRY_RU="Fédération de Russie" +NR_COUNTRY_RW="Rwanda" +NR_COUNTRY_SH="Sainte Hélène" +NR_COUNTRY_KN="Saint Kitts et Nevis" +NR_COUNTRY_LC="Sainte Lucie" +NR_COUNTRY_PM="Saint Pierre et Miquelon" +NR_COUNTRY_VC="Saint Vincent et Grenadines" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marin" +NR_COUNTRY_ST="Sao Tome et Principe" +NR_COUNTRY_SA="Arabie Saoudite" +NR_COUNTRY_SN="Sénégal" +NR_COUNTRY_RS="Serbie" +NR_COUNTRY_SC="Seychelles" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapour" +NR_COUNTRY_SK="Slovaquie" +NR_COUNTRY_SI="Slovénie" +NR_COUNTRY_SB="Iles Solomon" +NR_COUNTRY_SO="Somalie" +NR_COUNTRY_ZA="Afrique du Sud" +NR_COUNTRY_GS="Géorgie du Sud-et-les îles Sandwich du Sud" +NR_COUNTRY_ES="Espagne" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Soudan" +NR_COUNTRY_SS="Sud Soudan" +NR_COUNTRY_SR="Surinam" +NR_COUNTRY_SJ="Svalbard et Jan Mayen" +NR_COUNTRY_SZ="Swaziland" +NR_COUNTRY_SE="Suède" +NR_COUNTRY_CH="Suisse" +NR_COUNTRY_SY="Syrie" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tadjikistan" +NR_COUNTRY_TZ="Tanzanie" +NR_COUNTRY_TH="Thaïlande" +NR_COUNTRY_TL="Timor-Leste" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad et Tobago" +NR_COUNTRY_TN="Tunisie" +NR_COUNTRY_TR="Turquie" +NR_COUNTRY_TM="Turkménistan" +NR_COUNTRY_TC="Iles Turks-et-Caïcos" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Ouganda" +NR_COUNTRY_UA="Ukraine" +NR_COUNTRY_AE="Émirats Arabes Unis" +NR_COUNTRY_GB="Royaume Uni" +NR_COUNTRY_US="États Unis" +NR_COUNTRY_UM="Îles mineures éloignées des États-Unis" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Ouzbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela " +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Iles Vierges britanniques" +NR_COUNTRY_VI="Iles Vierges US" +NR_COUNTRY_WF="Wallis et Futuna" +NR_COUNTRY_EH="Sahara occidental" +NR_COUNTRY_YE="Yemen" +NR_COUNTRY_ZM="Zambie" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Afrique" +NR_CONTINENT_AS="Asie" +NR_CONTINENT_EU="Europe" +NR_CONTINENT_NA="Amérique du Nord" +NR_CONTINENT_SA="Amérique du sud" +NR_CONTINENT_OC="Océanie" +NR_CONTINENT_AN="Antarctique" +NR_FRONTEND="Site" +NR_BACKEND="Administration" +NR_EMBED="Intégrer" +NR_RATE="Notation %s" +NR_REPORT_ISSUE="Signaler une erreur" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +NR_CANNOT_CREATE_FOLDER="Impossible de créer le dossier pour y placer le fichier : %s" +NR_CANNOT_MOVE_FILE="Impossible de déplacer le fichier : %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Impossible d'envoyer le fichier : %s" +NR_START_OVER="Recommencer" +NR_TRY_AGAIN="Réessayer" +NR_ERROR="Erreur" +NR_CANCEL="Annuler" +NR_PLEASE_WAIT="Veuillez patienter" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/hu-HU/hu-HU.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/hu-HU/hu-HU.plg_system_nrframework.ini new file mode 100644 index 00000000..349dc8a1 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/hu-HU/hu-HU.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Rendszer - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - Tassos.gr által fejlesztett bővítményekhez" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Mellőz" +NR_INCLUDE="Befoglal" +NR_EXCLUDE="Kizár" +NR_SELECTION="Kiválasztás" +NR_ASSIGN_MENU_NOITEM="Elemazonosító nélküli befoglalás" +NR_ASSIGN_MENU_NOITEM_DESC="Hozzárendelés akkor is, ha nincs menüelem-azonosító beállítva az URL-ben?" +; NR_ASSIGN_MENU_CHILD="Also on child items" +; NR_ASSIGN_MENU_CHILD_DESC="Also assign to child items of the selected items?" +NR_COPY_OF="%s másolata" +; NR_ASSIGN_DATETIME_DESC="Target visitors based on your server's datetime" +NR_DATETIME="Dátum és idő" +; NR_TIME="Time" +; NR_DATE="Date" +NR_DATETIME_DESC="Dátum és idő megadása az automatikus közzététel/lejárat beállításához" +; NR_START_PUBLISHING="Start Datetime" +NR_START_PUBLISHING_DESC="Közzététel kezdetének megadása" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Közzététel végének megadása" +NR_DATETIME_NOTE="A dátum hozzárendelése a szerveridőhöz történik, és nem a látogató gépének idejéhez." +; NR_ASSIGN_PHP="PHP" +; NR_PHPCODE="PHP Code" +; NR_ASSIGN_PHP_DESC="Enter a piece of PHP code to evaluate." +; NR_ASSIGN_PHP_DESC2="Target visitors evaluating custom PHP code. The code must return the value true or false.

        For instance:
        return ($user->name == 'Tassos Marinos');" +; NR_ASSIGN_TIMEONSITE="Time on Site" +NR_SECONDS="Másodperc" +; NR_ASSIGN_TIMEONSITE_DESC="Enter a duration in seconds to compare with the user's total time (Visit duration) spent on your entire site .

        Example:
        If you want to display a box after the user has spent 3 minutes on your the entire site, enter 180." +NR_ASSIGN_URLS="URL" +; NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +NR_ASSIGN_URLS_DESC="(Rész) URL-ek megadása a találatokhoz.
        Használj új sort minden egyes megfeleltetésnek." +NR_ASSIGN_URLS_LIST="URL egyezések" +; NR_ASSIGN_URLS_REGEX="Use Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="A kezelni kívánt érték kiválasztása, úgy mint a reguláris kifejezések." +; NR_ASSIGN_LANGS="Language" +; NR_ASSIGN_LANGS_DESC="Target visitors who are browsing your website in specific language" +NR_ASSIGN_LANGS_LIST_DESC="Nyelv kiválasztása a hozzárendeléshez" +; NR_ASSIGN_DEVICES="Device" +; NR_ASSIGN_DEVICES_DESC2="Target visitors using specific device such as Mobile, Tablet or Desktop." +NR_ASSIGN_DEVICES_DESC="Eszközök kiválasztása a hozzárendeléshez" +NR_ASSIGN_DEVICES_NOTE="Tartsd szem előtt, hogy az eszközfelimerés pontossága nem mindig 100%-os. A felhasználók be tudják állítani úgy a böngészőjüket, hogy az más eszközöket emuláljon." +; NR_MENU="Menu" +; NR_MENU_ITEMS="Menu Item" +; NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +; NR_USERGROUP="User Group" +; NR_ACCESSLEVEL="User Group" +; NR_ACCESSLEVEL_DESC="Select the User Groups to assign to.

        Note: If you want to make it public just set to Ignore and not select the Public." +NR_SHOW_COPYRIGHT="Szerzői jogok megjelenítése" +NR_SHOW_COPYRIGHT_DESC="Ha kiválasztod, akkor extra szerzői jogi információ jelenik meg az adminisztrációs oldalon. A Tassos.gr bővítmények soha nem jelenítenek meg szerzői jogi információt vagy hivatkozásokat a felhasználói oldalon." +NR_WIDTH="Szélesség" +NR_WIDTH_DESC="Szélesség megadása, px-ben, em-ben, vagy %-ban

        Például: 400px" +NR_HEIGHT="Magasság" +NR_HEIGHT_DESC="Mgasság megadása, px-ben, em-ben, vagy %-ban

        Például: 400px" +NR_PADDING="Kitöltés (padding)" +NR_PADDING_DESC="Kitöltés (padding) megadása, px-ben, em-ben, vagy %-ban

        Például: 20px" +; NR_MARGIN="Margin" +; NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +; NR_COLOR_HOVER="Hover Color" +NR_COLOR="Szín" +; NR_COLOR_DESC="Define a color in HEX or RGBA format." +NR_TEXT_COLOR="Szövegszín" +; NR_BACKGROUND="Background" +NR_BACKGROUND_COLOR="Háttérszín" +; NR_BACKGROUND_COLOR_DESC="Define a background color in HEX or RGBA format. To disable enter 'none'. For absolute transparency enter 'transparent'." +NR_URL_SHORTENING_FAILED="%s (%s) rövidítése nem sikerült. %s." +NR_EXPORT="Export" +NR_IMPORT="Import" +NR_PLEASE_CHOOSE_A_VALID_FILE="Kérjük, hogy válassz egy érvényes fájnevet" +NR_IMPORT_ITEMS="Elemek importálása" +NR_PUBLISH_ITEMS="Elemek közzététele" +NR_AS_EXPORTED="Mint exportált" +; NR_TITLE="Title" +NR_ACYMAILING="AcyMailing" +; NR_ACYMAILING_LIST="AcyMailing List" +; NR_ACYMAILING_LIST_DESC="Select AcyMailing lists to assign to." +; NR_ASSIGN_ACYMAILING_DESC="Target visitors who have subscribed to specific AcyMailing lists" +NR_AKEEBASUBS="Akeeba feliratkozások" +NR_AKEEBASUBS_LEVELS="Szintek" +; NR_AKEEBASUBS_LEVELS_DESC="Select Akeeba Subscription levels to assign to." +; NR_ASSIGN_AKEEBASUBS_DESC="Target visitors who have subscribed to specific Akeeba Subscriptions" +; NR_MATCH="Match" +; NR_MATCH_DESC="The used matching method to compare the value" +NR_ASSIGN_MATCHING_METHOD="Találati módszer" +; NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +NR_ANY="Bármely" +; NR_ASSIGN_REFERRER="Referrer URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +NR_ONLY_AVAILABLE_IN_PRO="Csak a BŐVÍTETT verzióban érhető el." +NR_UPGRADE_TO_PRO="Frissítés a Bővített verzióra" +; NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Balról jobbra" +NR_RIGHT_TO_LEFT="Jobbról balra" +NR_BGIMAGE="Háttérkép" +NR_BGIMAGE_DESC="Háttérkép beállítása" +NR_BGIMAGE_FILE="Kép" +NR_BGIMAGE_FILE_DESC="Fájl kiválasztása vagy feltöltése háttérképnek." +NR_BGIMAGE_REPEAT="Ismétlés" +; NR_BGIMAGE_REPEAT_DESC="The background-repeat property sets if/how a background image will be repeated. By default, a background-image is repeated both vertically and horizontally.

        Repeat: The background image will be repeated both vertically and horizontally.

        Repeat-x: The background image will be repeated only horizontally

        Repeat-y: The background image will be repeated only vertically

        No-repeat: The background-image will not be repeated" +NR_BGIMAGE_SIZE="Méret" +; NR_BGIMAGE_SIZE_DESC="Specify the size of a background image.

        Auto:The background-image contains its width and height

        Cover: Scale the background image to be as large as possible so that the background area is completely covered by the background image. Some parts of the background image may not be in view within the background positioning area

        Contain: Scale the image to the largest size such that both its width and its height can fit inside the content area

        100% 100%: Stretch the background image to completely cover the content area." +NR_BGIMAGE_POSITION="Pozíció" +NR_BGIMAGE_POSITION_DESC="A háttérkép-pozíció tulajdonság határozza meg háttérkép a kiindulási pozícióját. Alapértelmezetten a háttérkép a bal felső sarokban van elhelyezbe. Az első érték a vizszintes pozíció, még a második érték a függőleges pozíció.

        Használhatod az egyik előre meghatározott értéket, vagy adhatsz meg egyedi értéket is százalékban (x% y%) vagy pixelben (xPos yPos)." +NR_RTL="RTL engedélyezése" +NR_RTL_DESC="A jobbról balra haladó szövegirány elengedhetelen olyan nyelvek esetében, mint péládul az arab, a héber, a szír és a thaanai." +NR_HORIZONTAL="Vizszintes" +NR_VERTICAL="Függőleges" +NR_FORM_ORIENTATION="Űrlap iránya" +NR_FORM_ORIENTATION_DESC="Űrlap irányának kiválasztása" +NR_ASSIGN_CATEGORY="Kategóriák" +NR_ASSIGN_CATEGORY_DESC="Kategória kiválasztása a hozzárendeléshez" +NR_ASSIGN_CATEGORY_CHILD="Szintén gyermek elemek" +NR_ASSIGN_CATEGORY_CHILD_DESC="Hozzá kell rendelni a gyermek elemeket a kiválasztott elemekhez?" +NR_NEW="Új" +NR_LIST="Lista" +NR_DOCUMENTATION="Dokumentáció" +; NR_KNOWLEDGEBASE="Knowledgebase" +NR_FAQ="GYIK" +NR_INFORMATION="Információ" +NR_EXTENSION="Bővítmény" +NR_VERSION="Verzió" +NR_CHANGELOG="Változási napló" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Letöltési kulcs" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Ahhoz, hogy frissíteni tudd a(z) %s bővítményt a Joomla bővítményfrissítőn keresztül, meg kelle adnod a letöltési kulcsod a Novorain Framework beépülőmodul beállításaiban." +NR_DOWNLOAD_KEY_FIND="Letöltési kulcs keresése" +NR_DOWNLOAD_KEY_UPDATE="Letöltési kulcs frissítése" +NR_OK="OKÉ" +NR_MISSING="Hiányzó" +NR_LICENSE="Licenc" +NR_AUTHOR="Szerző" +NR_FOLLOWME="Kövess engem" +NR_FOLLOW="Kövess %s" +NR_TRANSLATE_INTEREST="Lenne kedved segíteni a(z) %s fordításában a saját nyelvedre?" +NR_TRANSIFEX_REQUEST="Küldj nekem egy kérést a Transifexen" +NR_HELP_WITH_TRANSLATIONS="Fordítás segítése" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Haladó" +NR_USEGLOBAL="Globális használata" +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +NR_NEVER="Soha" +NR_SECONDS="Másodperc" +NR_MINUTES="Percek" +NR_HOURS="Órák" +NR_DAYS="Napok" +NR_SESSION="Munkamenet" +NR_EVER="Mindig" +NR_COOKIE="Süti" +NR_BOTH="Mindkettő" +NR_NONE="Egyik sem" +; NR_DESKTOPS="Desktop" +; NR_MOBILES="Mobile" +; NR_TABLETS="Tablet" +; NR_PER_SESSION="Per Session" +; NR_PER_DAY="Per Day" +; NR_PER_WEEK="Per Week" +; NR_PER_MONTH="Per Month" +; NR_FOREVER="Forever" +; NR_FEATURE_UNDER_DEV="This feature is under development" +; NR_LIKE_THIS_EXTENSION="Like this extension?" +; NR_LEAVE_A_REVIEW="Leave a review on JED" +; NR_SUPPORT="Support" +; NR_NEED_SUPPORT="Need support?" +; NR_DROP_EMAIL="Drop me an e-mail" +; NR_READ_DOCUMENTATION="Read the Documentation" +; NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +; NR_DASHBOARD="Dashboard" +; NR_NAME="Name" +; NR_WRONG_COORDINATES="The coordinates you provided are not valid" +; NR_ENTER_COORDINATES="Latitude,Longitude" +; NR_NO_ITEMS_FOUND="No Items Found" +; NR_ITEM_IDS="No Item IDs" +; NR_TOGGLE="Toggle" +; NR_EXPAND="Expand" +; NR_COLLAPSE="Collapse" +; NR_SELECTED="Selected" +; NR_MAXIMIZE="Maximize" +; NR_MINIMIZE="Minimize" +NR_SELECTION="Kiválasztás" +; NR_INSTALL="Install" +; NR_INSTALL_NOW="Install Now" +; NR_INSTALLED="Installed" +; NR_COMING_SOON="Coming soon" +; NR_ROADMAP="On the roadmap" +; NR_MEDIA_VERSIONING="Use Media Versioning" +; NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +; NR_LOAD_JQUERY="Load jQuery" +; NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +; NR_SELECT_CURRENCY="Select a Currency" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +; NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +; NR_LEFT="Left" +; NR_CENTER="Center" +; NR_RIGHT="Right" +; NR_BOTTOM="Bottom" +; NR_TOP="Top" +; NR_AUTO="Auto" +; NR_CUSTOM="Custom" +; NR_UPLOAD="Upload" +; NR_IMAGE="Image" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +; NR_IMAGE_SELECT="Select Image" +; NR_IMAGE_SIZE_COVER="Cover" +; NR_IMAGE_SIZE_CONTAIN="Contain" +; NR_REPEAT="Repeat" +; NR_REPEAT_X="Repeat x" +; NR_REPEAT_Y="Repeat y" +; NR_REPEAT_NO="No repeat" +; NR_FIELD_STATE_DESC="Set item's state" +; NR_CREATED_DATE="Created Date" +; NR_CREATED_DATE_DESC="The date the item was created" +; NR_MODIFIFED_DATE="Modified Date" +; NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +; NR_CATEGORIES="Category" +; NR_CATEGORIES_DESC="Select the categories to assign to." +; NR_ALSO_ON_CHILD_ITEMS="Also on child items" +; NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +; NR_PAGE_TYPE="Page type" +; NR_PAGE_TYPES="Page types" +; NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +; NR_ARTICLES="Articles" +; NR_ARTICLES_DESC="Select the articles to assign to." +; NR_ARTICLE="Article" +; NR_ARTICLE_AUTHORS="Authors" +; NR_ARTICLE_AUTHORS_DESC="Select the authors to assign to." +; NR_ONLY="Only" +; NR_OTHERS="Others" +; NR_SMARTTAGS="Smart Tags" +; NR_SMARTTAGS_SHOW="Show Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +; NR_CONTACT_US="Contact us" +; NR_FONT_COLOR="Font Color" +; NR_FONT_SIZE="Font Size" +; NR_FONT_SIZE_DESC="Choose a font size in pixels" +; NR_TEXT="Text" +; NR_URL="URL" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +; NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +; NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +; NR_GEOLOCATING="Geolocating" +; NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +; NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +; NR_ASSIGN_CONTINENTS="Continent" +; NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +; NR_ARE_YOU_SURE="Are you sure?" +; NR_CUSTOMURL="Custom URL" +; NR_SAMPLE="Sample" +; NR_DEBUG="Debug" +; NR_CUSTOMURL="Custom URL" +; NR_READMORE="Read More" +; NR_IPADDRESS="IP Address" +; NR_ASSIGN_BROWSERS="Browser" +; NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +; NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +; NR_CHROME="Chrome" +; NR_FIREFOX="Firefox" +; NR_EDGE="Edge" +; NR_IE="Internet Explorer" +; NR_SAFARI="Safari" +; NR_OPERA="Opera" +; NR_ASSIGN_OS="Operating System" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +; NR_LINUX="Linux" +; NR_MAC="MacOS" +; NR_ANDROID="Android" +; NR_IOS="iOS" +; NR_WINDOWS="Windows" +; NR_BLACKBERRY="Blackberry" +; NR_CHROMEOS="Chrome OS" +; NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +; NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/it-IT/it-IT.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/it-IT/it-IT.plg_system_nrframework.ini new file mode 100644 index 00000000..cc618ddf --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/it-IT/it-IT.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - usato dalle estensioni di Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignora" +NR_INCLUDE="Includi" +NR_EXCLUDE="Escludi" +NR_SELECTION="Selezione" +NR_ASSIGN_MENU_NOITEM="Non includere Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="Assegnare anche se nessun Itemid di menu è impostato nell'URL?" +NR_ASSIGN_MENU_CHILD="Anche su oggetti figli" +NR_ASSIGN_MENU_CHILD_DESC="Assegna anche agli oggetti figli degli oggetti selezionati?" +NR_COPY_OF="Copia di %s" +NR_ASSIGN_DATETIME_DESC="Indirizza i visitatori in base all'orologio (data e ora) impostati sul tuo server" +NR_DATETIME="Dataora" +NR_TIME="Ora" +NR_DATE="Data" +NR_DATETIME_DESC="Inserisci Dataora per pubblicare/annullare automaticamente" +NR_START_PUBLISHING="Avvia Dataora" +NR_START_PUBLISHING_DESC="Inserisci la data di inizio della pubblicazione" +NR_FINISH_PUBLISHING="Fine Dataora" +NR_FINISH_PUBLISHING_DESC="Inserisci la data per terminare la pubblicazione" +NR_DATETIME_NOTE="Le assegnazioni di data e ora utilizzano la data/ora dei tuoi server, non quella del sistema dei visitatori." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="Codice PHP" +NR_ASSIGN_PHP_DESC="Inserisci un pezzo di codice PHP da controllare." +NR_ASSIGN_PHP_DESC2="Destinatari che valutano il codice PHP personalizzato. Il codice deve restituire il valore true o false.

        Ad esempio:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Tempo sul sito" +NR_SECONDS="Secondi" +NR_ASSIGN_TIMEONSITE_DESC="Inserisci una durata in secondi da confrontare con il tempo totale dell'utente (durata della visita) trascorso visitando tutto il tuo sito.

        Esempio:
        Se vuoi visualizzare una casella dopo che l'utente ha trascorso 3 minuti sul tuo intero sito, inserisci 180. " +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Scegli come target i visitatori che stanno esplorando URL specifici" +NR_ASSIGN_URLS_DESC="Inserisci parte degli URL corrispondenti.
        Usa una nuova riga per ogni corrispondenza diversa." +NR_ASSIGN_URLS_LIST="Corrispondenze URL" +NR_ASSIGN_URLS_REGEX="Usa l'espressione regolare" +NR_ASSIGN_URLS_REGEX_DESC="Seleziona per usare il valore come Regex (espressioni regolari)." +NR_ASSIGN_LANGS="Lingua" +NR_ASSIGN_LANGS_DESC="Indirizza i visitatori che stanno navigando nel tuo sito web in una lingua specifica" +NR_ASSIGN_LANGS_LIST_DESC="Seleziona le lingue da assegnare a" +NR_ASSIGN_DEVICES="Dispositivo" +NR_ASSIGN_DEVICES_DESC2="Scegli come target i visitatori che utilizzano dispositivi specifici come Mobile, Tablet o Desktop." +NR_ASSIGN_DEVICES_DESC="Seleziona i dispositivi da assegnare a"_QQ_"" +NR_ASSIGN_DEVICES_NOTE="Ricorda che il rilevamento dei dispositivi non è sempre accurato al 100%. Gli utenti possono configurare il loro browser per simulare altri dispositivi" +NR_MENU="Menu" +NR_MENU_ITEMS="Voce di menu" +NR_MENU_ITEMS_DESC="Scegli come target i visitatori che stanno sfogliando voci di menu specifiche" +NR_USERGROUP="Gruppo utenti" +NR_ACCESSLEVEL="Gruppo utenti" +NR_ACCESSLEVEL_DESC="Seleziona i gruppi utenti da assegnare.

        Nota: se vuoi renderlo pubblico, imposta Ignora e non selezionare la voce Pubblico." +NR_SHOW_COPYRIGHT="Visualizza copyright" +NR_SHOW_COPYRIGHT_DESC="Se selezionato, verranno visualizzate ulteriori informazioni sul copyright nelle pagine di amministrazione. Le estensioni di Tassos.gr non mostrano mai le informazioni sul copyright o i backlink sulla parte pubblica (frontend)." +NR_WIDTH="Larghezza" +NR_WIDTH_DESC="Inserisci larghezza in px, em o %

        Esempio: 400px" +NR_HEIGHT="Altezza" +NR_HEIGHT_DESC="Inserisci altezza in px, em o %

        Esempio: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Inserisci padding in px, em o %

        Esempio: 20px" +NR_MARGIN="Margine" +NR_MARGIN_DESC="L'impostazione del margine CSS viene utilizzata per generare spazio attorno al riquadro e impostare la dimensione dello spazio bianco al di fuori del bordo in pixel o in %.

        Esempio 1: 25px
        Esempio 2: 5%

        Specifica del margine per ciascun lato [in alto a destra in basso a sinistra]:

        Solo lato superiore: 25px 0 0 0
        Solo lato destro: 0 25px 0 0
        Solo lato inferiore : 0 0 25px 0
        Solo lato sinistro: 0 0 0 25px " +NR_COLOR_HOVER="Colore al passaggio del mouse" +NR_COLOR="Colore" +NR_COLOR_DESC="Definisci un colore in formato HEX o RGBA." +NR_TEXT_COLOR="Colore del testo" +NR_BACKGROUND="Background" +NR_BACKGROUND_COLOR="Colore di fondo" +NR_BACKGROUND_COLOR_DESC="Definisci un colore di sfondo in formato HEX o RGBA.Per disabilitare inserisci 'none'. Per trasparenza assoluta inserisci 'transparent'." +NR_URL_SHORTENING_FAILED="Abbreviazione %s con %s fallito. %S." +NR_EXPORT="Esporta" +NR_IMPORT="Importa" +NR_PLEASE_CHOOSE_A_VALID_FILE="Scegli un nome file valido" +NR_IMPORT_ITEMS="Importa elementi" +NR_PUBLISH_ITEMS="Pubblica articoli" +NR_AS_EXPORTED="Come esportato" +NR_TITLE="Titolo" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Lista AcyMailing" +NR_ACYMAILING_LIST_DESC="Seleziona gli elenchi AcyMailing che sono da assegnare." +NR_ASSIGN_ACYMAILING_DESC="Indirizza i visitatori che si sono abbonati a specifici elenchi AcyMailing" +NR_AKEEBASUBS="Iscrizioni Akeeba" +NR_AKEEBASUBS_LEVELS="Livelli" +NR_AKEEBASUBS_LEVELS_DESC="Seleziona i livelli di iscrizione Akeeba che sono da assegnare." +NR_ASSIGN_AKEEBASUBS_DESC="Fai riferimento ai visitatori che hanno sottoscritto iscrizioni Akeeba specifiche" +NR_MATCH="Confronto" +NR_MATCH_DESC="Il metodo di comparazione utilizzato per confrontare il valore" +NR_ASSIGN_MATCHING_METHOD="Metodo di comparazione" +NR_ASSIGN_MATCHING_METHOD_DESC="Si devono comparare tutte o qualsiasi?

        Tutti
        saranno pubblicati se Tutti i metodi sottostanti sono abbinati.

        Qualsiasi
        sarà pubblicato se Qualsiasi (uno o più) dei seguenti metodi sono abbinati.
        Gruppi di assegnazione dove Ignora è selezionato, saranno ignorati." +NR_ANY="Qualsiasi" +NR_ASSIGN_REFERRER="URL di riferimento" +NR_ASSIGN_REFERRER_DESC2="Indirizza i visitatori che arriveranno sul tuo sito da una sorgente di traffico specifica" +NR_ASSIGN_REFERRER_DESC="Inserisci un URL di riferimento per ogni riga: Es:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Ricorda che l'individuazione di un URL di riferimento non è sempre accurata al 100%. Alcuni server potrebbero utilizzare proxy che estendono questa informazione e possono essere facilmente falsificati." +NR_PROFEATURE_HEADER="%s È una funzionalità disponibile nella versione PRO" +NR_PROFEATURE_DESC="Siamo spiacenti, %s non è disponibile sul tuo piano. Esegui l'upgrade al piano PRO per sbloccare tutte queste fantastiche funzionalità." +NR_PROFEATURE_DISCOUNT="Bonus: gli utenti %s gratuiti ottengono il 20% di sconto sul prezzo normale, automaticamente applicato al momento del pagamento." +NR_ONLY_AVAILABLE_IN_PRO="Disponibile solo in versione PRO" +NR_UPGRADE_TO_PRO="Aggiorna a Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Esegui l'upgrade alla versione Pro per sbloccare" +NR_UPGRADE_TO_PRO_VERSION="Fantastico! Solo manca solo un ulteriore passo al completamento della procedura. Fai clic sul pulsante in basso per completare l'aggiornamento alla versione Pro." +NR_UNLOCK_PRO_FEATURE="Sblocca le funzioni Pro" +NR_USING_THE_FREE_VERSION="Stai utilizzando la versione GRATUITA di Convert Forms. Acquista la versione PRO per la piena funzionalità." +NR_LEFT_TO_RIGHT="Da sinistra a destra" +NR_RIGHT_TO_LEFT="Da destra a sinistra" +NR_BGIMAGE="Immagine di sfondo" +NR_BGIMAGE_DESC="Imposta un'immagine di sfondo" +NR_BGIMAGE_FILE="Immagine" +NR_BGIMAGE_FILE_DESC="Seleziona o carica un file per l'immagine di sfondo." +NR_BGIMAGE_REPEAT="Ripeti" +NR_BGIMAGE_REPEAT_DESC="La proprietà background-repeat imposta se o come verrà ripetuta un'immagine di sfondo. Per impostazione predefinita, un'immagine di sfondo viene ripetuta sia verticalmente che orizzontalmente.

        Ripeti: l'immagine di sfondo verrà ripetuta sia in verticale che in orizzontale.

        Ripeti-x: l'immagine di sfondo verràripetuta solo in orizzontale

        Ripeti-y: l'immagine di sfondo verrà ripetuta solo in verticale

        Nessuna ripetizione: l'immagine non sarà ripetuta" +NR_BGIMAGE_SIZE="Formato" +NR_BGIMAGE_SIZE_DESC="Specifica la dimensione di un'immagine di sfondo.

        Auto: l'immagine di sfondo contiene la sua larghezza e altezza

        Copertina: ridimensiona l'immagine di fondo sarà il più grande possibile in modo che l'area è completamente coperta dall'immagine di fondo. Alcune parti dell'immagine, in questo caso, potrebbero non essere visibili nell'area di posizionamento dello sfondo

        Contiene: ridimensiona l'immagine alla dimensione più grande in modo che sia la sua larghezza che la sua altezza possano adattarsi all'interno dell'area del contenuto

        100% 100%: estende l'immagine di fondo fino a coprire completamente l'area del contenuto." +NR_BGIMAGE_POSITION="Posizione" +NR_BGIMAGE_POSITION_DESC="La proprietà background-position imposta la posizione iniziale di un'immagine di sfondo: per impostazione predefinita, l'immagine di sfondo viene posizionata nell'angolo in alto a sinistra.Il primo valore è la posizione orizzontale e il secondo valore è la posizione verticale.

        È possibile utilizzare uno dei valori predefiniti oppure immettere un valore personalizzato in percentuale: x% y% o in pixel xPos yPos. " +NR_RTL="Abilita RTL" +NR_RTL_DESC="La direzione del testo da destra a sinistra è essenziale per le scritture in lingue come l'Arabo, l'Ebraico, il Siriaco o della lingua maldiviana." +NR_HORIZONTAL="orizzontale" +NR_VERTICAL="verticale" +NR_FORM_ORIENTATION="Orientamento modulo" +NR_FORM_ORIENTATION_DESC="Seleziona l'orientamento del modulo" +NR_ASSIGN_CATEGORY="Categorie" +NR_ASSIGN_CATEGORY_DESC="Seleziona le categorie da assegnare a" +NR_ASSIGN_CATEGORY_CHILD="Anche su oggetti secondari" +NR_ASSIGN_CATEGORY_CHILD_DESC="Assegna anche agli oggetti figli degli oggetti selezionati?" +NR_NEW="Nuovo" +NR_LIST="Lista" +NR_DOCUMENTATION="Documentazione" +NR_KNOWLEDGEBASE="knowledge base" +NR_FAQ="FAQ" +NR_INFORMATION="Informazioni" +NR_EXTENSION="Estensione" +NR_VERSION="Versione" +NR_CHANGELOG="Changelog" +NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Manca la chiave di download" +NR_DOWNLOAD_KEY="Chiave di download" +NR_DOWNLOAD_KEY_DESC="Per trovare la chiave di download, accedi al tuo account su Tassos.gr e vai alla sezione Download.

        Nota: impostando la chiave di download qui non aggiornerai le versioni gratuite alle versioni Pro. Per sbloccare le funzionalità Pro, dovrai installare anche la versione Pro sopra la versione gratuita." +NR_DOWNLOAD_KEY_HOW="Per poter aggiornare %s tramite l'aggiornamento di Joomla, dovrai inserire la tua chiave di download nelle impostazioni del plugin Novarain Framework" +NR_DOWNLOAD_KEY_FIND="Trova chiave di download" +NR_DOWNLOAD_KEY_UPDATE="Aggiorna chiave di download" +NR_OK="OK" +NR_MISSING="Missing" +NR_LICENSE="Licenza" +NR_AUTHOR="Autore" +NR_FOLLOWME="Seguimi" +NR_FOLLOW="Segui %s" +NR_TRANSLATE_INTEREST="Saresti interessato a dare una mano nella traduzione di %s nella tua lingua?" +NR_TRANSIFEX_REQUEST="Inviami una richiesta su Transifex" +NR_HELP_WITH_TRANSLATIONS="Aiuto con le traduzioni" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Avanzate" +NR_USEGLOBAL="Usa globale" +NR_WEEKDAY="Giorno della settimana" +NR_MONTH="Mese" +NR_MONDAY="Lunedi" +NR_TUESDAY="Martedì" +NR_WEDNESDAY="Mercoledì" +NR_THURSDAY="Giovedi" +NR_FRIDAY="Venerdì" +NR_SATURDAY="Sabato" +NR_WEEKEND="Weekend" +NR_WEEKDAYS="Giorni della settimana" +NR_SUNDAY="Domenica" +NR_JANUARY="Gennaio" +NR_FEBRUARY="Febbraio" +NR_MARCH="Marzo" +NR_APRIL="Aprile" +NR_MAY="Maggio" +NR_JUNE="Giugno" +NR_JULY="Luglio" +NR_AUGUST="Agosto" +NR_SEPTEMBER="Settembre" +NR_OCTOBER="Ottobre" +NR_NOVEMBER="Novembre" +NR_DECEMBER="Dicembre" +NR_NEVER="Mai" +NR_SECONDS="Secondi" +NR_MINUTES="Minutes" +NR_HOURS="Ore" +NR_DAYS="Giorni" +NR_SESSION="Session1" +NR_EVER="mai" +NR_COOKIE="Cookie" +NR_BOTH="Entrambi" +NR_NONE="Nessuno" +NR_DESKTOPS="Desktop" +NR_MOBILES="Mobile" +NR_TABLETS="Tablet" +NR_PER_SESSION="Per sessione" +NR_PER_DAY="Al giorno" +NR_PER_WEEK="Per settimana" +NR_PER_MONTH="Al mese" +NR_FOREVER="Per sempre" +NR_FEATURE_UNDER_DEV="Questa funzione è in fase di sviluppo" +NR_LIKE_THIS_EXTENSION="Ti piace questa estensione?" +NR_LEAVE_A_REVIEW="Lascia una recensione su JED" +NR_SUPPORT="Supporto" +NR_NEED_SUPPORT="Hai bisogno di supporto?" +NR_DROP_EMAIL="Inviami una e-mail" +NR_READ_DOCUMENTATION="Leggi la documentazione" +NR_COPYRIGHT=" %s - Tassos.gr Tutti i diritti riservati" +NR_DASHBOARD="Dashboard" +NR_NAME="Nome" +NR_WRONG_COORDINATES="Le coordinate fornite non sono valide" +NR_ENTER_COORDINATES="Latitudine, Longitudine" +NR_NO_ITEMS_FOUND="Nessun elemento trovato" +NR_ITEM_IDS="Nessun ID elemento" +NR_TOGGLE="Commuta" +NR_EXPAND="Espandi" +NR_COLLAPSE="Comprimi" +NR_SELECTED="selezionato" +NR_MAXIMIZE="Massimizzare" +NR_MINIMIZE="Riduci" +NR_SELECTION="Selezione" +NR_INSTALL="Installa" +NR_INSTALL_NOW="Installa ora" +NR_INSTALLED="installato" +NR_COMING_SOON="Prossimamente" +NR_ROADMAP="Sulla roadmap" +NR_MEDIA_VERSIONING="Utilizza il controllo dei contenuti multimediali" +NR_MEDIA_VERSIONING_DESC="Seleziona per aggiungere il numero di versione dell'estensione alla fine dei file multimediali (js/css), in modo che i browser forzino il caricamento del file corretto." +NR_LOAD_JQUERY="Carica jQuery" +NR_LOAD_JQUERY_DESC="Seleziona per caricare lo script jQuery di base. Puoi disabilitarlo in caso di conflitti se il tuo modello o altre estensioni caricano la propria versione di jQuery." +NR_SELECT_CURRENCY="Seleziona una valuta" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Campagna" +NR_ASSIGN_CONVERTFORMS_DESC="Indirizza i visitatori che si sono iscritti a specifiche campagne ConvertForms" +NR_CONVERTFORMS_LIST_DESC="Seleziona le campagne ConvertForms da assegnare a." +NR_LEFT="sinistra" +NR_CENTER="Centro" +NR_RIGHT="destra" +NR_BOTTOM="sotto" +NR_TOP="sopra" +NR_AUTO="Auto" +NR_CUSTOM="Persnalizzato" +NR_UPLOAD="Upload" +NR_IMAGE="Immagine" +NR_INTRO_IMAGE="Immagine di introduzione" +NR_FULL_IMAGE="Immagine completa" +NR_IMAGE_SELECT="Seleziona immagine" +NR_IMAGE_SIZE_COVER="Copertina" +NR_IMAGE_SIZE_CONTAIN="contenere" +NR_REPEAT="Ripeti" +NR_REPEAT_X="Ripeti x" +NR_REPEAT_Y="Ripeti y" +NR_REPEAT_NO="Nessuna ripetizione" +NR_FIELD_STATE_DESC="Imposta lo stato dell'oggetto" +NR_CREATED_DATE="Data di creazione" +NR_CREATED_DATE_DESC="La data di creazione dell'articolo" +NR_MODIFIFED_DATE="Data modificata" +NR_MODIFIFED_DATE_DESC="La data in cui l'elemento è stato modificato l'ultima volta." +NR_CATEGORIES="Categoria" +NR_CATEGORIES_DESC="Seleziona le categorie da assegnare a." +NR_ALSO_ON_CHILD_ITEMS="Anche su oggetti secondari" +NR_ALSO_ON_CHILD_ITEMS_DESC="Assegna anche agli oggetti figli degli oggetti selezionati?" +NR_PAGE_TYPE="Tipo di pagina" +NR_PAGE_TYPES="Tipi di pagina" +NR_PAGE_TYPES_DESC="Seleziona su quali tipi di pagina deve essere attivo il compito." +NR_CONTENT_VIEW_CATEGORY_BLOG="Blog di categoria" +NR_CONTENT_VIEW_CATEGORY_LIST="Lista categorie" +NR_CONTENT_VIEW_CATEGORIES="elenca tutte le categorie" +NR_CONTENT_VIEW_ARCHIVED="Articoli archiviati" +NR_CONTENT_VIEW_FEATURES="Articoli consigliati" +NR_CONTENT_VIEW_CREATE_ARTICLE="Crea articolo" +NR_CONTENT_VIEW_ARTICLE="Articolo singolo" +NR_ARTICLE_VIEW_DESC="Abilita per prendere in considerazione la vista Articolo" +NR_CATEGORY_VIEW="Vista categorie" +NR_CATEGORY_VIEW_DESC="Abilita per prendere in considerazione la vista Categoria" +NR_ARTICLES="Statuto" +NR_ARTICLES_DESC="Seleziona gli articoli da assegnare a"_QQ_"" +NR_ARTICLE="articolo" +NR_ARTICLE_AUTHORS="Autori" +NR_ARTICLE_AUTHORS_DESC="Seleziona gli autori da assegnare a"_QQ_"" +NR_ONLY="Solo" +NR_OTHERS="Altri" +NR_SMARTTAGS="Smart tag" +NR_SMARTTAGS_SHOW="Mostra smart tag" +NR_SMARTTAGS_NOTFOUND="Nessun tag smart trovato" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Cerca gli smart tag" +NR_CONTACT_US="Contattaci" +NR_FONT_COLOR="Colore carattere" +NR_FONT_SIZE="Dimensione carattere" +NR_FONT_SIZE_DESC="Scegli una dimensione del carattere in pixel" +NR_TEXT="testo" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Abilita su Output Override" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Abilita il rendering dell'estensione quando il layout della pagina (tmpl) è sovrascritto. Esempi: tmpl=componente o tmpl=modale." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Abilita su sovrascrittura del formato" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Abilita il rendering dell'estensione quando il formato della pagina non è diverso da HTML. Esempi: format=raw o format=json." +NR_GEOLOCATING="geolocalizzazione" +NR_GEOLOCATING_DESC="LA geolocalizzazione non è sempre accurata al 100%. Essa si basa sull'indirizzo IP del visitatore e non tutti gli indirizzi IP sono fissi o conosciuti." +NR_CITY="City" +NR_CITY_NAME="Nome città" +NR_CONDITION_CITY_DESC="Inserisci il nome di una città in inglese. Inserisci più città separate da una virgola." +NR_CONTINENT="Continente" +NR_REGION="Regione" +NR_CONDITION_REGION_DESC="Il valore è composto da due parti, il codice paese ISO 3166-1 e il codice regionale delle due lettere. Quindi il valore dovrebbe essere nella seguente forma: COUNTRY_CODE-REGION_CODE. Per un elenco completo dei codici regionali fai clic su Trova Collegamento al codice regionale. " +NR_ASSIGN_COUNTRIES="Nazione" +NR_ASSIGN_COUNTRIES_DESC2="Indirizza i visitatori fisicamente in un paese specifico" +NR_ASSIGN_COUNTRIES_DESC="Seleziona i Paesi da assegnare a" +NR_ASSIGN_CONTINENTS="Continente" +NR_ASSIGN_CONTINENTS_DESC="Seleziona i continenti da assegnare a" +NR_ASSIGN_CONTINENTS_DESC2="Scegli come target i visitatori fisicamente in un determinato continente" +NR_ICONTACT_ACCOUNTID_ERROR="Impossibile recuperare l'ID account iContact" +NR_TAG_CLIENTDEVICE="Tipo dispositivo visitatore" +NR_TAG_CLIENTOS="Sistema operativo visitatore" +NR_TAG_CLIENTBROWSER="browser visitatori" +NR_TAG_CLIENTUSERAGENT="Stringa agente visitatore" +NR_TAG_IP="Indirizzo IP visitatore" +NR_TAG_URL="URL della pagina" +NR_TAG_URLENCODED="URL pagina codificato" +NR_TAG_URLPATH="Percorso pagina" +NR_TAG_REFERRER="Referente di pagina" +NR_TAG_SITENAME="Nome sito" +NR_TAG_SITEURL="URL del sito" +NR_TAG_PAGETITLE="Titolo pagina" +NR_TAG_PAGEDESC="Descrizione tags Meta della pagina" +NR_TAG_PAGELANG="Codice lingua della pagina" +NR_TAG_USERID="ID utente" +NR_TAG_USERNAME="Nome utente completo" +NR_TAG_USERLOGIN="Login utente" +NR_TAG_USEREMAIL="Email utente" +NR_TAG_USERFIRSTNAME="Nome utente" +NR_TAG_USERLASTNAME="Cognome utente" +NR_TAG_USERGROUPS="ID gruppi utente" +NR_TAG_DATE="Data" +NR_TAG_TIME="Ora" +NR_TAG_RANDOMID="ID casuale" +NR_ICON="icona" +NR_SELECT_MODULE="Seleziona un modulo" +NR_SELECT_CONTINENT="Seleziona un continente" +NR_SELECT_COUNTRY="Seleziona un Paese" +NR_PLUGIN="plugin" +NR_GMAP_KEY="Chiave API di Google Maps" +NR_GMAP_KEY_DESC="La chiave API di Google Maps viene utilizzata dalle estensioni Tassos.gr. Se si riscontrano problemi con una mappa di Google non caricata, probabilmente è necessario inserire la propria chiave API." +NR_GMAP_FIND_KEY="Ottieni una chiave API" +NR_ARE_YOU_SURE="Sei sicuro?" +NR_CUSTOMURL="URL personalizzato" +NR_SAMPLE="campione" +NR_DEBUG="Debug" +NR_CUSTOMURL="URL personalizzato" +NR_READMORE="Leggi altro" +NR_IPADDRESS="Indirizzo IP" +NR_ASSIGN_BROWSERS="browser" +NR_ASSIGN_BROWSERS_DESC="Seleziona i browser da assegnare a" +NR_ASSIGN_BROWSERS_DESC2="Indirizza i visitatori che stanno esplorando il tuo sito con browser specifici come Chrome, Firefox o Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Sistema operativo" +NR_ASSIGN_OS_DESC="Seleziona i sistemi operativi da assegnare a" +NR_ASSIGN_OS_DESC2="Indirizza i visitatori che utilizzano sistemi operativi specifici come Windows, Linux o Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Numero di pagine visualizzate" +NR_ASSIGN_PAGEVIEWS_DESC="Scegli come target i visitatori che hanno visualizzato un certo numero di pagine" +NR_ASSIGN_PAGEVIEWS_VIEWS="Pagine" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Inserisci il numero di visualizzazioni di pagina" +NR_ASSIGN_COOKIENAME_NAME="Nome cookie" +NR_ASSIGN_COOKIENAME_NAME_DESC="Inserisci il nome del cookie da assegnare a" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Indirizza i visitatori che hanno cookie specifici memorizzati nel loro browser" +NR_FEWER_THAN="Meno di" +NR_GREATER_THAN="Maggiore di" +NR_EXACTLY="Esattamente" +NR_EXISTS="esiste" +NR_IS_EQUAL="Equals" +NR_CONTAINS="Contiene" +NR_STARTS_WITH="Inizia con" +NR_ENDS_WITH="Termina con" +NR_ASSIGN_COOKIENAME_CONTENT="Contenuto cookie" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Contenuto del cookie" +NR_ASSIGN_IP_ADDRESSES_DESC2="Indirizza i visitatori che si trovano dietro un indirizzo IP specifico (intervallo)" +NR_ASSIGN_IP_ADDRESSES_DESC="Inserisci una lista di virgola e / o 'inserisci' indirizzi IP separati e intervalli

        Esempio:
        127.0.0.1,
        192.10-120.2,
        168 " +NR_ASSIGN_USER_ID="ID utente" +NR_ASSIGN_USER_ID_DESC="Specifica come target utenti Joomla per i loro ID" +NR_ASSIGN_USER_ID_SELECTION_DESC="Inserisci ID utente Joomla separati da virgola" +NR_ASSIGN_COMPONENTS="Componente" +NR_ASSIGN_COMPONENTS_DESC="Seleziona i componenti da assegnare a" +NR_ASSIGN_COMPONENTS_DESC2="Scegli come target i visitatori che stanno esplorando componenti specifici" +NR_ASSIGN_TIMERANGE="Intervallo di tempo" +NR_ASSIGN_TIMERANGE_DESC="Indirizza i visitatori in base al tempo del tuo server" +NR_START_TIME="Ora di inizio" +NR_END_TIME="Ora di fine" +NR_START_PUBLISHING_TIMERANGE_DESC="Inserisci l'ora di inizio della pubblicazione" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Inserisci il tempo per terminare la pubblicazione" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Chiave sito" +NR_RECAPTCHA_SITE_KEY_DESC="Utilizzato nel codice JavaScript che viene offerto ai tuoi utenti." +NR_RECAPTCHA_SECRET_KEY="Chiave segreta" +NR_RECAPTCHA_SECRET_KEY_DESC="Utilizzato nella comunicazione tra il tuo server e il server reCAPTCHA. Assicurati di tenerlo segreto." +NR_RECAPTCHA_SITE_KEY_ERROR="La chiave del sito reCaptcha è mancante o non valida" +NR_PREVIOUS_MONTH="Mese precedente" +NR_NEXT_MONTH="Il prossimo mese" +NR_ASSIGN_GROUP_PAGE_URL="Pagina/URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Scegli come target i visitatori che stanno sfogliando voci di menu o URL specifici" +NR_ASSIGN_GROUP_DATETIME_DESC="Attiva una casella in base alla data e all'ora del tuo server" +NR_ASSIGN_GROUP_USER_VISITOR="Utente/visitatore di Joomla" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Targeting di utenti o visitatori che hanno visualizzato un certo numero di pagine" +NR_ASSIGN_GROUP_PLATFORM="Piattaforma visitatore" +NR_ASSIGN_GROUP_PLATFORM_DESC="Scegli come target i visitatori che utilizzano Mobile, Google Chrome o anche Windows" +NR_ASSIGN_GROUP_GEO_DESC="Indirizza i visitatori fisicamente in una regione specifica" +NR_ASSIGN_GROUP_JCONTENT="Contenuto Joomla!" +NR_ASSIGN_GROUP_JCONTENT_DESC="Scegli come target i visitatori che visualizzano articoli o categorie specifici di Joomla" +NR_ASSIGN_GROUP_SYSTEM="Sistema/Integrazioni" +NR_ASSIGN_GROUP_SYSTEM_DESC="Indirizza i visitatori che hanno interagito con specifiche estensioni di Joomla di terze parti" +NR_ASSIGN_GROUP_ADVANCED="Targeting per visitatore avanzato" +NR_ASSIGN_USERGROUP_DESC="Target specifici per gruppi di utenti Joomla" +NR_ASSIGN_ARTICLE_DESC="Scegli come target i visitatori che visualizzano articoli specifici di Joomla" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Scegli come target i visitatori che visualizzano categorie specifiche di Joomla" +NR_EXTENSION_REQUIRED="Il componente %s richiede che il plugin %s sia abilitato per funzionare correttamente." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Indirizza i visitatori che stanno sfogliando specifici articoli, categorie o tag K2" +NR_ASSIGN_K2_ITEMS="Item" +NR_ASSIGN_K2_ITEMS_DESC="Indirizza i visitatori che stanno sfogliando elementi K2 specifici." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Seleziona gli oggetti K2 da assegnare a" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Corrispondenza per parole chiave specifiche nel contenuto dell'articolo. Separa con una virgola o una nuova riga." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Corrispondenza tra le meta parole chiave dell'elemento. Separa con una virgola o una nuova riga." +NR_ASSIGN_K2_PAGETYPES_DESC="Scegli come target i visitatori che stanno esplorando tipi di pagine K2 specifici" +NR_ASSIGN_K2_ITEM_OPTION="Item" +NR_ASSIGN_K2_LATEST_OPTION="Ultimi articoli da utenti o categorie" +NR_ASSIGN_K2_TAG_OPTION="Pagina tag" +NR_ASSIGN_K2_CATEGORY_OPTION="Pagina delle categorie" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Modulo di modifica articolo" +NR_ASSIGN_K2_USER_PAGE_OPTION="Pagina utente (blog)" +NR_ASSIGN_K2_TAGS_DESC="Indirizza i visitatori che stanno sfogliando articoli K2 con tag specifici" +NR_ASSIGN_K2_CATEGORIES_DESC="Scegli come target i visitatori che stanno esplorando categorie K2 specifiche" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categorie" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Elementi" +NR_ASSIGN_PAGE_TYPES_DESC="Seleziona i tipi di pagina da assegnare a" +NR_ASSIGN_TAGS_DESC="Seleziona i tag da assegnare a" +NR_CONTENT_KEYWORDS="Parole chiave contenuto" +NR_META_KEYWORDS="Meta keywords" +NR_TAG="tag" +NR_NORMAL="Normale" +NR_COMPACT="Compatto" +NR_LIGHT="Chiaro" +NR_DARK="Scuro" +NR_SIZE="Formato" +NR_THEME="Tema" +NR_SINGLE="single" +NR_MULTIPLE="Multiplo" +NR_RANGE="Range" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Si prega di convalidare" +NR_RECAPTCHA_INVALID_SECRET_KEY="Chiave segreta non valida" +NR_PAGE="Pagina" +NR_YOU_ARE_USING_EXTENSION="Stai utilizzando %s %s" +NR_UPDATE="Aggiorna" +NR_SHOW_UPDATE_NOTIFICATION="Mostra notifica aggiornamenti" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Se selezionato, verrà mostrata una notifica di aggiornamento nella vista componente principale quando c'è una nuova versione per questa estensione." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE=" %s è disponibile" +NR_ERROR_EMAIL_IS_DISABLED="L'invio della posta è disattivato. Non è stato possibile inviare email." +NR_ASSIGN_ITEMS="Elemento" +NR_COUNTRY_AF="Afghanistan" +NR_COUNTRY_AX="Isole Aland" +NR_COUNTRY_AL="Albania" +NR_COUNTRY_DZ="Algeria" +NR_COUNTRY_AS="Samoa americane" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antartide" +NR_COUNTRY_AG="Antigua e Barbuda" +NR_COUNTRY_AR="Argentina" +NR_COUNTRY_AM="Armenia" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Australia" +NR_COUNTRY_AT="Austria" +NR_COUNTRY_AZ="Azerbaijan" +NR_COUNTRY_BS="Bahamas" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladesh" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Bielorussia" +NR_COUNTRY_BE="Belgio" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benin" +NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhutan" +NR_COUNTRY_BO="Bolivia" +NR_COUNTRY_BA="Bosnia Erzegovina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Bouvet, Isola " +NR_COUNTRY_BR="Brasile" +NR_COUNTRY_IO="Territorio britannico dell'Oceano Indiano" +NR_COUNTRY_BN="Brunei" +NR_COUNTRY_BG="Bulgaria" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Cambogia" +NR_COUNTRY_CM="Camerun" +NR_COUNTRY_CA="Canada" +NR_COUNTRY_CV="Capo Verde" +NR_COUNTRY_KY="Isole Cayman" +NR_COUNTRY_CF="Repubblica Centrafricana" +NR_COUNTRY_TD="Ciad" +NR_COUNTRY_CL="Cile" +NR_COUNTRY_CN="Cina" +NR_COUNTRY_CX="Natale, Isola di " +NR_COUNTRY_CC="Isole Cocos (Keeling)" +NR_COUNTRY_CO="Colombia" +NR_COUNTRY_KM="Comore" +NR_COUNTRY_CG="Congo" +NR_COUNTRY_CD="Congo, Repubblica Democratica" +NR_COUNTRY_CK="Isole Cook" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Costa d'avorio" +NR_COUNTRY_HR="Croazia" +NR_COUNTRY_CU="Cuba" +NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Cipro" +NR_COUNTRY_CZ="Repubblica Ceca" +NR_COUNTRY_DK="Danimarca" +NR_COUNTRY_DJ="Gibuti" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="Repubblica Dominicana" +NR_COUNTRY_EC="Ecuador" +NR_COUNTRY_EG="Egitto" +NR_COUNTRY_SV="El Salvador" +NR_COUNTRY_GQ="Guinea Equatoriale" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Estonia" +NR_COUNTRY_ET="Etiopia" +NR_COUNTRY_FK="Isole Falkland (Malvinas)" +NR_COUNTRY_FO="Isole Faroe" +NR_COUNTRY_FJ="Fiji" +NR_COUNTRY_FI="Finlandia" +NR_COUNTRY_FR="Francia" +NR_COUNTRY_GF="Guyana Francese" +NR_COUNTRY_PF="Polinesia Francese" +NR_COUNTRY_TF="Terre australi e antartiche francesi" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gambia" +NR_COUNTRY_GE="Georgia" +NR_COUNTRY_DE="Germania" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibilterra" +NR_COUNTRY_GR="Grecia" +NR_COUNTRY_GL="Groenlandia" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadalupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haiti" +NR_COUNTRY_HM="Heard e McDonald, Isole" +NR_COUNTRY_VA="Santa Sede (Stato della Città del Vaticano)" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Ungheria" +NR_COUNTRY_IS="Islanda" +NR_COUNTRY_IN="India" +NR_COUNTRY_ID="Indonesia" +NR_COUNTRY_IR="Iran, Repubblica Islamica dell'" +NR_COUNTRY_IQ="Iraq" +NR_COUNTRY_IE="Irlanda" +NR_COUNTRY_IM="Man, Isola di" +NR_COUNTRY_IL="Israele" +NR_COUNTRY_IT="Italia" +NR_COUNTRY_JM="Giamaica" +NR_COUNTRY_JP="Giappone" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Giordania" +NR_COUNTRY_KZ="Kazakistan" +NR_COUNTRY_KE="Kenya" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="Corea, Repubblica Popolare di " +NR_COUNTRY_KR="Corea, Repubblica di " +NR_COUNTRY_KW="Kuwait" +NR_COUNTRY_KG="Kirghizistan" +NR_COUNTRY_LA="Laos, Repubblica Popolare Democratica del" +NR_COUNTRY_LV="Lettonia" +NR_COUNTRY_LB="Libano" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Libia" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Lituania" +NR_COUNTRY_LU="Lussemburgo" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Macedonia" +NR_COUNTRY_MG="Madagascar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malesia" +NR_COUNTRY_MV="Maldive" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Isole Marshall" +NR_COUNTRY_MQ="Martinica" +NR_COUNTRY_MR="Mauritania" +NR_COUNTRY_MU="Mauritius" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Messico" +NR_COUNTRY_FM="Micronesia, Stati Federati di " +NR_COUNTRY_MD="Moldavia, Repubblica di" +NR_COUNTRY_MC="Monaco, Principato di" +NR_COUNTRY_MN="Mongolia" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Marocco" +NR_COUNTRY_MZ="Mozambico" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibia" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="Macedonia del Nord" +NR_COUNTRY_NP="Nepal" +NR_COUNTRY_NL="Paesi Bassi" +NR_COUNTRY_AN="Antille olandesi" +NR_COUNTRY_NC="Nuova Caledonia" +NR_COUNTRY_NZ="Nuova Zelanda" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigeria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Norfolk, Isola di " +NR_COUNTRY_MP="Marianne Settentrionali, Isole " +NR_COUNTRY_NO="Norvegia" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Territori palestinesi " +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papua Nuova Guinea" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Perù" +NR_COUNTRY_PH="Filippine" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Polonia" +NR_COUNTRY_PT="Portogallo" +NR_COUNTRY_PR="Porto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="Reunion" +NR_COUNTRY_RO="Romania" +NR_COUNTRY_RU="Russia" +NR_COUNTRY_RW="Ruanda" +NR_COUNTRY_SH="Sant'Elena" +NR_COUNTRY_KN="Saint Kitts e Nevis" +NR_COUNTRY_LC="Santa Lucia" +NR_COUNTRY_PM="Saint Pierre e Miquelon" +NR_COUNTRY_VC="Saint Vincent e Grenadine" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="São Tomé e Príncipe" +NR_COUNTRY_SA="Arabia Saudita" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Serbia" +NR_COUNTRY_SC="Seychelles" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapore" +NR_COUNTRY_SK="Slovacchia" +NR_COUNTRY_SI="Slovenia" +NR_COUNTRY_SB="Salomone, Isole " +NR_COUNTRY_SO="Somalia" +NR_COUNTRY_ZA="Sud Africa" +NR_COUNTRY_GS="Georgia del Sud e Isole Sandwich Australi" +NR_COUNTRY_ES="Spagna" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Sudan" +NR_COUNTRY_SS="Sudan del Sud" +NR_COUNTRY_SR="Suriname" +NR_COUNTRY_SJ="Svalbard e Jan Mayen" +NR_COUNTRY_SZ="Swaziland" +NR_COUNTRY_SE="Svezia" +NR_COUNTRY_CH="Svizzera" +NR_COUNTRY_SY="Siria" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tagikistan" +NR_COUNTRY_TZ="Tanzania" +NR_COUNTRY_TH="Thailandia" +NR_COUNTRY_TL="Timor Est" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad e Tobago" +NR_COUNTRY_TN="Tunisia" +NR_COUNTRY_TR="Turchia" +NR_COUNTRY_TM="Turkmenistan" +NR_COUNTRY_TC="Turks e Caicos, Isole" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ucraina" +NR_COUNTRY_AE="Emirati Arabi Uniti" +NR_COUNTRY_GB="Regno Unito" +NR_COUNTRY_US="Stati Uniti" +NR_COUNTRY_UM="Stati Uniti, Isole Minori Esterne degli" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Uzbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Isole Vergini Britanniche" +NR_COUNTRY_VI="Isole Vergini Americane" +NR_COUNTRY_WF="Wallis e Futuna" +NR_COUNTRY_EH="Sahara Occidentale" +NR_COUNTRY_YE="Yemen" +NR_COUNTRY_ZM="Zambia" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Africa" +NR_CONTINENT_AS="Asia" +NR_CONTINENT_EU="Europa" +NR_CONTINENT_NA="America del Nord" +NR_CONTINENT_SA="America del Sud" +NR_CONTINENT_OC="Oceania" +NR_CONTINENT_AN="Antartide" +NR_FRONTEND="Front-end" +NR_BACKEND="Amministrazione" +NR_EMBED="Incorpora" +NR_RATE="Valuta %s" +NR_REPORT_ISSUE="Segnala un problema" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +NR_CANNOT_CREATE_FOLDER="Impossibile creare una cartella per spostare il file. %s" +NR_CANNOT_MOVE_FILE="Impossibile spostare il file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Impossibile caricare il file: %s" +NR_START_OVER="Inizia da capo" +NR_TRY_AGAIN="Riprova" +NR_ERROR="Errore" +NR_CANCEL="Cancella" +NR_PLEASE_WAIT="Si prega di attendere" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/nl-NL/nl-NL.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/nl-NL/nl-NL.plg_system_nrframework.ini new file mode 100644 index 00000000..1e5e33cd --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/nl-NL/nl-NL.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Systeem - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - gebruikt door Tassos.gr extensions" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Negeren" +NR_INCLUDE="Insluiten" +NR_EXCLUDE="Uitsluiten" +NR_SELECTION="Selectie" +NR_ASSIGN_MENU_NOITEM="Geen Itemid insluiten" +NR_ASSIGN_MENU_NOITEM_DESC="Ook toewijzen indien de URL geen Itemid bevat?" +NR_ASSIGN_MENU_CHILD="Ook onderliggende items" +NR_ASSIGN_MENU_CHILD_DESC="Ook onderliggende items van de geselecteerde items?" +NR_COPY_OF="Kopie van %s" +NR_ASSIGN_DATETIME_DESC="Target bezoekers op basis van de datetime van uw server" +NR_DATETIME="Datum en tijd" +NR_TIME="Tijd" +NR_DATE="Datum" +NR_DATETIME_DESC="Vul datum en tijdstip in voor automatische publicatie/depublicatie" +NR_START_PUBLISHING="Start DatumTijd" +NR_START_PUBLISHING_DESC="Vul startdatum publicatie in" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Vul einddatum publicatie in" +NR_DATETIME_NOTE="De datum- en tijdgegevens zijn deze van de server waarop uw website gehost wordt, niet de datum/tijd van de bezoekers van uw website." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP Code" +NR_ASSIGN_PHP_DESC="Voer een stuk van de PHP in om te evalueren" +NR_ASSIGN_PHP_DESC2="Target bezoekers die aangepaste PHP-code evalueren. De code moet de waarde true of false teruggeven.

        Bijvoorbeeld:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Tijd op website" +NR_SECONDS="Seconden" +NR_ASSIGN_TIMEONSITE_DESC="Vul de tijd in die een bezoeker op je website moet doorbrengen (Bezoekerstijd) in seconden.

        Voorbeeld:
        Als je een box wil tonen nadat een bezoeker 3 minuten op je website doorgebracht heeft, vul dan 180 in." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Target bezoekers die specifieke URL's bekijken" +NR_ASSIGN_URLS_DESC="Vul (deel van) de URLs in dat moet overeenstemmen.
        Gebruik een nieuwe regel voor elke nieuwe URL." +NR_ASSIGN_URLS_LIST="URL Overeenkomsten" +NR_ASSIGN_URLS_REGEX="Gebruik reguliere expressies" +NR_ASSIGN_URLS_REGEX_DESC="Selecteer om de waarde te gebruiken als regular expressions." +NR_ASSIGN_LANGS="Taal" +NR_ASSIGN_LANGS_DESC="Target bezoekers die uw website in specifieke taal bekijken" +NR_ASSIGN_LANGS_LIST_DESC="Selecteer de talen om aan toe te wijzen" +NR_ASSIGN_DEVICES="Toestel" +NR_ASSIGN_DEVICES_DESC2="Target bezoekers met een specifiek apparaat, zoals mobiel, tablet of desktop." +NR_ASSIGN_DEVICES_DESC="Selecteer de apparaten om aan toe te wijzen." +NR_ASSIGN_DEVICES_NOTE="Hou er rekening mee dat apparaat detectie niet altijd 100% accuraat is. Gebruikers kunnen hun browser configureren om andere apparaten na te bootsen" +NR_MENU="Menu" +NR_MENU_ITEMS="Menu Item" +NR_MENU_ITEMS_DESC="Target bezoekers die specifieke menu-items bekijken" +NR_USERGROUP="Gebruikers Groep" +NR_ACCESSLEVEL="Gebruiker Groep" +NR_ACCESSLEVEL_DESC="Selecteer de Gebruikersgroep om aan toe te wijzen.

        Opmerking: Indien je het publiek toegankelijk wenst te maken, selecteer dan Negeren en niet de Gebruikersgroep Publiek." +NR_SHOW_COPYRIGHT="Toon Copyright" +NR_SHOW_COPYRIGHT_DESC="Indien geselecteerd zal extra copyright informatie getoond worden in het beheerspanel. Novarain Extensions toont nooit copyright informatie of backlinks in de frontend." +NR_WIDTH="Breedte" +NR_WIDTH_DESC="Vul de breedte in px, em of % in

        Voorbeeld: 400px" +NR_HEIGHT="Hoogte" +NR_HEIGHT_DESC="Vul de hoogte in px, em of % in

        Voorbeeld: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Vul de padding in px, em of % in

        Voorbeeld: 20px" +NR_MARGIN="Margin" +NR_MARGIN_DESC="De functie CSS-marge wordt gebruikt om ruimte rond de box te genereren en de grootte van de witte ruimte buiten de rand in pixels of in% in te stellen.

        Voorbeeld 1: 25px
        Voorbeeld 2: 5%

        De marge voor elke zijde opgeven [rechtsboven linksonder]:

        Alleen bovenzijde: 25px 0 0 0
        Alleen rechterzijde: 0 25px 0 0
        Alleen onderkant alleen: 0 0 25px 0
        Alleen linkerzijde: 0 0 0 25px" +NR_COLOR_HOVER="Hover Kleur" +NR_COLOR="Kleur" +NR_COLOR_DESC="Geef een kleur op in HEX of RGBA formaat." +NR_TEXT_COLOR="Tekst Kleur" +NR_BACKGROUND="Achtergrond" +NR_BACKGROUND_COLOR="Achtergrond Kleur" +NR_BACKGROUND_COLOR_DESC="Geef een kleur op in HEX of RGBA voor de achtergrond. Vul 'none' in om deze optie uit te schakelen. Vul 'transparent' in voor een volledig transparante achtergrond." +NR_URL_SHORTENING_FAILED="Afkorting %s met %s niet gelukt. %s." +NR_EXPORT="Exporteren" +NR_IMPORT="Importeren" +NR_PLEASE_CHOOSE_A_VALID_FILE="Kies een geldige bestandsnaam" +NR_IMPORT_ITEMS="Importeer items" +NR_PUBLISH_ITEMS="Publiceer items" +NR_AS_EXPORTED="Zoals geexporteerd" +NR_TITLE="Titel" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Acymailing Lijst" +NR_ACYMAILING_LIST_DESC="Selecteer AcyMailing lijst om toe te wijzen" +NR_ASSIGN_ACYMAILING_DESC="Target bezoekers die geabonneerd zijn op specifieke AcyMailing-lijsten" +NR_AKEEBASUBS="Akeeba Subscriptions" +NR_AKEEBASUBS_LEVELS="Niveau's" +NR_AKEEBASUBS_LEVELS_DESC="Selecteer Akeeba abonnement niveau om toe te wijzen." +NR_ASSIGN_AKEEBASUBS_DESC="Target bezoekers die geabonneerd zijn op specifieke Akeeba-abonnementen" +NR_MATCH="Overeenkomen " +NR_MATCH_DESC="De gebruikte bijpassende methode om de waarde te vergelijken" +NR_ASSIGN_MATCHING_METHOD="Overeenstemmingsmethode" +NR_ASSIGN_MATCHING_METHOD_DESC="Moeten alle of minstens 1 toewijzing overeenstemmen?

        Alle
        Wordt gepubliceerd indien Alle hieronder vermelde toewijzingen overeenstemmen.

        Minstens 1
        Wordt gepubliceerd indien Minstens 1 (ιιn of meerdere) hieronder vermelde toewijzingen overeenstemmen.
        Toewijzingingsopties waarvoor 'Negeren' is geselecteerd, worden genegeerd." +NR_ANY="Minstens 1" +NR_ASSIGN_REFERRER="Doorverwijzings URL" +NR_ASSIGN_REFERRER_DESC2="Target bezoekers die op uw site terechtkomen via een specifieke verkeersbron" +NR_ASSIGN_REFERRER_DESC="Voer één verwijzende URL per regel in:

        Bijvoorbeeld: google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Houd er rekening mee dat het zoeken naar URL-referrers niet altijd 100% nauwkeurig is. Sommige servers kunnen proxies gebruiken die deze informatie verwijderen en deze kan gemakkelijk worden vervalst." +NR_PROFEATURE_HEADER="%sis een PRO-functie" +NR_PROFEATURE_DESC="Het spijt ons, %shet is niet beschikbaar in uw abonnement. Voer een upgrade uit naar het PRO-plan om al deze geweldige functies te ontgrendelen." +NR_PROFEATURE_DISCOUNT="Bonus: %sgratis gebruikers krijgen 20%#37 korting op de normale prijs, automatisch toegepast bij het afrekenen." +NR_ONLY_AVAILABLE_IN_PRO="Enkel beschikbaar in PRO versie" +NR_UPGRADE_TO_PRO="Upgraden naar PRO" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade naar Pro versie om toegang te verkrijgen" +NR_UPGRADE_TO_PRO_VERSION="Geweldig! Nog maar één stap over. Klik op de onderstaande knop om de upgrade naar de Pro-versie te voltooien." +NR_UNLOCK_PRO_FEATURE="Ontgrendel de Pro-functie" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Links naar Rechts" +NR_RIGHT_TO_LEFT="Rechts naar Links" +NR_BGIMAGE="Achtergrond Afbeelding" +NR_BGIMAGE_DESC="Stelt een achtergrond afbeelding in" +NR_BGIMAGE_FILE="Afbeelding" +NR_BGIMAGE_FILE_DESC="Selecteer of upload een bestand als achtergrond afbeelding" +NR_BGIMAGE_REPEAT="Herhalen" +NR_BGIMAGE_REPEAT_DESC="De background-repeat eigenschap zorgt ervoor of en op welke wijze een achtergrond-afbeelding wordt herhaald. Standaard wordt een achtergrond-afbeelding zowel horizontaal als verticaal herhaald.

        Repeat: De achtergrond-afbeelding wordt zowel horizontaal als verticaal herhaald.

        Repeat-x: De achtergrond-afbeelding wordt enkel horizontaal herhaald.

        Repeat-y: De achtergrond-afbeelding wordt enkel verticaal herhaald.

        No-repeat: De achtergrond-afbeelding wordt niet herhaald." +NR_BGIMAGE_SIZE="Afmetingen" +NR_BGIMAGE_SIZE_DESC="Geef de afmetingen van een achtergrond-afbeelding op.

        Auto: De achtergrond-afbeelding behoudt zijn originele breedte en hoogte.

        Cover: De afmetingen van de achtergrond-afbeelding worden zo aangepast dat deze de achtergrond volledige bedekt. Hierdoor kunnen sommige delen van de achtergrond-afbeelding onzichtbaar (weggesneden) worden.

        Contain: De achtergrond-afbeelding wordt zo groot mogelijk weergegeven binnen de achtergrond. Mogelijks wordt de achtergrond in dit geval niet volledig bedekt.

        100% 100%: De achtergrond-afbeelding wordt over de volledige achtergrond uitgerekt. Mogelijks wordt de achtergrond-afbeelding in dit geval vervormd weergegeven." +NR_BGIMAGE_POSITION="Positie" +NR_BGIMAGE_POSITION_DESC="De background-position eigenschap geeft de beginpositie van een achtergrond-afbeelding aan. Standaard wordt een achtergrond-afbeelding in de top-left hoek geplaatst. De eerste waarde is de horizontale en de tweede waarde is de verticale positie.

        Je kan ofwel één van de vooringestelde waarden invullen, ofwel een aangepaste waarde in percent: x% y% of in pixel xPos yPos." +NR_RTL="RTL activeren" +NR_RTL_DESC="De rechts-naar-links tekstrichting is essentieel voor rechts-naar-links geschriften zoals Arabisch, Syrisch en Thanaa." +NR_HORIZONTAL="Horizontaal" +NR_VERTICAL="Verticaal" +NR_FORM_ORIENTATION="Formulier orientatie" +NR_FORM_ORIENTATION_DESC="Kies de orientatie van het formulier" +NR_ASSIGN_CATEGORY="Categorieen" +NR_ASSIGN_CATEGORY_DESC="Kies de categorieen om aan toe te wijzen" +NR_ASSIGN_CATEGORY_CHILD="Ook aan child items" +NR_ASSIGN_CATEGORY_CHILD_DESC="Ook toewijzen aan child items van de geselecteerde items?" +NR_NEW="Nieuw" +NR_LIST="Lijst" +NR_DOCUMENTATION="Documentatie" +NR_KNOWLEDGEBASE="Kennisbank" +NR_FAQ="FAQ" +NR_INFORMATION="Informatie" +NR_EXTENSION="Extensie" +NR_VERSION="Versie" +NR_CHANGELOG="Wijzigingen" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Download Sleutel" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Wil je %s updaten door middel van de Joomla update functie, dan moet je je Download Sleutel invullen in de Novarain Framework Plugin instellingen." +NR_DOWNLOAD_KEY_FIND="Vind je Download Sleutel" +NR_DOWNLOAD_KEY_UPDATE="Update je Download Sleutel" +NR_OK="OK" +NR_MISSING="Ontbrekend" +NR_LICENSE="Licensie" +NR_AUTHOR="Auteur" +NR_FOLLOWME="Volg mij" +NR_FOLLOW="Volg %s" +NR_TRANSLATE_INTEREST="Heb je interesse om te helpen bij de vertaling van %s in je eigen Taal?" +NR_TRANSIFEX_REQUEST="Stuur me een verzoek op Transifex" +NR_HELP_WITH_TRANSLATIONS="Help met vertalingen" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Gevorderd" +NR_USEGLOBAL="Gebruik Standaard" +NR_WEEKDAY="Dag van de Week" +NR_MONTH="Maand" +NR_MONDAY="Maandag" +NR_TUESDAY="Dinsdag" +NR_WEDNESDAY="Woensdag" +NR_THURSDAY="Donderdag" +NR_FRIDAY="Vrijdag" +NR_SATURDAY="Zaterdag" +NR_WEEKEND="Weekend" +NR_WEEKDAYS="Werkdagen" +NR_SUNDAY="Zondag" +NR_JANUARY="Januari" +NR_FEBRUARY="Februari" +NR_MARCH="Maart" +NR_APRIL="April" +NR_MAY="Mei" +NR_JUNE="Juni" +NR_JULY="Juli" +NR_AUGUST="Augustus" +NR_SEPTEMBER="September" +NR_OCTOBER="Oktober" +NR_NOVEMBER="November" +NR_DECEMBER="December" +NR_NEVER="Nooit" +NR_SECONDS="Seconden" +NR_MINUTES="Minuten" +NR_HOURS="Uren" +NR_DAYS="Dagen" +NR_SESSION="Sessie" +NR_EVER="Altijd" +NR_COOKIE="Cookie" +NR_BOTH="Beide" +NR_NONE="Geen" +NR_DESKTOPS="Desktop" +NR_MOBILES="Mobiel" +NR_TABLETS="Tablet" +NR_PER_SESSION="Per Sessie" +NR_PER_DAY="Per Dag" +NR_PER_WEEK="Per Week" +NR_PER_MONTH="Per Maand" +NR_FOREVER="Altijd" +NR_FEATURE_UNDER_DEV="Deze functie is in ontwikkeling" +NR_LIKE_THIS_EXTENSION="Vind je deze extensie leuk?" +NR_LEAVE_A_REVIEW="Schrijf een beoordeling op JED" +NR_SUPPORT="Support" +NR_NEED_SUPPORT="Support nodig?" +NR_DROP_EMAIL="Stuur me een e-mailbericht" +NR_READ_DOCUMENTATION="Lees de documentatie" +NR_COPYRIGHT="%s - Tassos.gr Alle Rechten Voorbehouden" +NR_DASHBOARD="Dashboard" +NR_NAME="Naam" +NR_WRONG_COORDINATES="De coördinaten die je opgaf zijn ongeldig" +NR_ENTER_COORDINATES="Breedtegraad,Lengtegraad" +NR_NO_ITEMS_FOUND="Geen Items gevonden" +NR_ITEM_IDS="Geen item IDs" +NR_TOGGLE="Wisselen" +NR_EXPAND="Openklappen" +NR_COLLAPSE="Dichtklappen" +NR_SELECTED="Gekozen" +NR_MAXIMIZE="Maximaliseren" +NR_MINIMIZE="Minimaliseren" +NR_SELECTION="Selectie" +NR_INSTALL="Installeren" +NR_INSTALL_NOW="Installeer Nu" +NR_INSTALLED="Geïnstalleerd" +NR_COMING_SOON="Binnenkort beschikbaar" +NR_ROADMAP="Op de wegenkaart" +NR_MEDIA_VERSIONING="Gebruik Media Versiebeheer" +NR_MEDIA_VERSIONING_DESC="Selecteer om het extensie versie nummer toe te voegen op het einde van de media (js/css) urls, om zo browsers te forceren het correcte bestand te laden." +NR_LOAD_JQUERY="jQuery laden" +NR_LOAD_JQUERY_DESC="Selecteer om het basis jQuery bestand te laden. Je kan dit uitschakelen als je conflicten ervaart indien je template of andere extensies hun eigen jQuery versie laden." +NR_SELECT_CURRENCY="Kies een Munteenheid" +NR_CONVERTFORMS="Converteer Formulieren" +NR_CONVERTFORMS_LIST="Campagnes" +NR_ASSIGN_CONVERTFORMS_DESC="Target bezoekers die zich hebben geabonneerd op specifieke ConvertForms-campagnes" +NR_CONVERTFORMS_LIST_DESC="Selecteer ConvertForms-campagnes waaraan u wilt toewijzen." +NR_LEFT="Left" +NR_CENTER="Center" +NR_RIGHT="Right" +NR_BOTTOM="Bottom" +NR_TOP="Top" +NR_AUTO="Auto" +NR_CUSTOM="Aangepast" +NR_UPLOAD="Upload" +NR_IMAGE="Afbeelding" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Selecteer Afbeelding" +NR_IMAGE_SIZE_COVER="Cover" +NR_IMAGE_SIZE_CONTAIN="Contain" +NR_REPEAT="Repeat" +NR_REPEAT_X="Repeat x" +NR_REPEAT_Y="Repeat y" +NR_REPEAT_NO="No repeat" +NR_FIELD_STATE_DESC="Status van het item instellen" +NR_CREATED_DATE="Aanmaak datum" +NR_CREATED_DATE_DESC="Datum waarop het item werd gemaakt" +NR_MODIFIFED_DATE="Datum wijziging" +NR_MODIFIFED_DATE_DESC="Datum waarop het item voor het laatst werd gewijzigd." +NR_CATEGORIES="Categorie" +NR_CATEGORIES_DESC="Selecteer de categorieën om aan toe te wijzen." +NR_ALSO_ON_CHILD_ITEMS="Ook aan ondergeschikte items" +NR_ALSO_ON_CHILD_ITEMS_DESC="Ook toewijzen aan ondergeschikte elementen van de geselecteerde items?" +NR_PAGE_TYPE="Pagina Type" +NR_PAGE_TYPES="Pagina types" +NR_PAGE_TYPES_DESC="Selecteer op welke pagina types de toewijzing actief moet zijn." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Schakel in om rekening te houden met de artikelweergave" +NR_CATEGORY_VIEW="Categorie weergave" +NR_CATEGORY_VIEW_DESC="Schakel in om rekening te houden met de categorieweergave" +NR_ARTICLES="Artikelen" +NR_ARTICLES_DESC="Selecteer de artikelen om aan toe te wijzen." +NR_ARTICLE="Artikel" +NR_ARTICLE_AUTHORS="Auteurs" +NR_ARTICLE_AUTHORS_DESC="Selecteer de auteurs om aan toe te wijzen." +NR_ONLY="Uitsluitend" +NR_OTHERS="Andere" +NR_SMARTTAGS="Smart Tags" +NR_SMARTTAGS_SHOW="Toon Smart Tags" +NR_SMARTTAGS_NOTFOUND="Geen Smart Tags gevonden" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Zoeken op Smart Tags" +NR_CONTACT_US="Contacteer ons" +NR_FONT_COLOR="Tekst Kleur" +NR_FONT_SIZE="Tekengrootte" +NR_FONT_SIZE_DESC="Kies een tekengrootte in pixels" +NR_TEXT="Tekst" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Inschakelen op Output OVerschrijven" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Schakelt het renderen van de extensie in wanneer de paginalay-out (tmpl) wordt overschreven. Voorbeelden: tmpl=component of tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Inschakelen bij Format Override" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Schakelt het renderen van de extensie in wanneer het paginaformaat niet anders is dan HTML. Voorbeelden: format=raw of format=json." +NR_GEOLOCATING="Geolocatie" +NR_GEOLOCATING_DESC="Geolocatie is niet altijd 100% nauwkeurig. De geolocatie is gebaseerd op het IP-adres van de bezoeker. Niet alle IP-adressen zijn vast of bekend." +NR_CITY="Plaats" +NR_CITY_NAME="Plaatsnaam" +NR_CONDITION_CITY_DESC="Voer een plaatsnaam in het Engels in. Voer meerdere steden in, gescheiden door een komma." +NR_CONTINENT="Continent" +NR_REGION="Regio" +NR_CONDITION_REGION_DESC="De waarde bestaat uit twee delen, de tweeletterige ISO 3166-1 landcode en de regiocode. De waarde moet dus de volgende vorm hebben: COUNTRY_CODE-REGION_CODE. Voor een volledige lijst van regiocodes klikt u op de koppeling Een regiocode zoeken." +NR_ASSIGN_COUNTRIES="Land" +NR_ASSIGN_COUNTRIES_DESC2="Target bezoekers die fysiek in een bepaald land zijn" +NR_ASSIGN_COUNTRIES_DESC="Selecteer de landen waaraan u wilt toewijzen" +NR_ASSIGN_CONTINENTS="Continent" +NR_ASSIGN_CONTINENTS_DESC="Selecteer de continenten waaraan u wilt toewijzen" +NR_ASSIGN_CONTINENTS_DESC2="Target bezoekers die fysiek in een bepaald continent zijn" +NR_ICONTACT_ACCOUNTID_ERROR="Het iContact-account-ID kon niet worden opgehaald" +NR_TAG_CLIENTDEVICE="Bezoeker Toestel Type" +NR_TAG_CLIENTOS="Bezoeker OS" +NR_TAG_CLIENTBROWSER="Bezoeker Browser" +NR_TAG_CLIENTUSERAGENT="Bezoeker Agent String" +NR_TAG_IP="Bezoeker IP Adres" +NR_TAG_URL="Pagina URL" +NR_TAG_URLENCODED="Pagina URL Encoded" +NR_TAG_URLPATH="Pagina Pad" +NR_TAG_REFERRER="Pagina Doorverwijzing" +NR_TAG_SITENAME="Site Naam" +NR_TAG_SITEURL="Site URL" +NR_TAG_PAGETITLE="Pagina Titel" +NR_TAG_PAGEDESC="Pagina Meta Omschrijving" +NR_TAG_PAGELANG="Pagina Taal Code" +NR_TAG_USERID="Gebruiker ID" +NR_TAG_USERNAME="Gebruiker Volledige Naam" +NR_TAG_USERLOGIN="Gebruiker Login" +NR_TAG_USEREMAIL="Gebruiker E-mail" +NR_TAG_USERFIRSTNAME="Gebruiker Voornaam" +NR_TAG_USERLASTNAME="Gebruiker Achternaam" +NR_TAG_USERGROUPS="Gebruiker Groeps ID" +NR_TAG_DATE="Datum" +NR_TAG_TIME="Tijd" +NR_TAG_RANDOMID="Willekeurige ID" +NR_ICON="Pictogram" +NR_SELECT_MODULE="Selecteer een Module" +NR_SELECT_CONTINENT="Selecteer een Continent" +NR_SELECT_COUNTRY="Selecteer een Land" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Google Maps API Key" +NR_GMAP_KEY_DESC="De Google Maps API Key wordt gebruikt door Tassos.gr-extensies. Als u problemen ondervindt met het niet laden van een Google Map, moet u waarschijnlijk uw eigen API Key invoeren." +NR_GMAP_FIND_KEY="Krijg een API Key" +NR_ARE_YOU_SURE="Weet je het zeker?" +NR_CUSTOMURL="Aangepaste URL" +NR_SAMPLE="Voorbeeld" +NR_DEBUG="Debuggen" +NR_CUSTOMURL="Aangepaste URL" +NR_READMORE="Lees Meer" +NR_IPADDRESS="IP Adres" +NR_ASSIGN_BROWSERS="Browser" +NR_ASSIGN_BROWSERS_DESC="Selecteer de browser om aan te wijzen" +NR_ASSIGN_BROWSERS_DESC2="Target bezoekers die op uw site browsen met specifieke browsers zoals Chrome, Firefox of Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="OS - Besturingssyteem" +NR_ASSIGN_OS_DESC="Selecteer de besturingssystemen die u wilt toewijzen" +NR_ASSIGN_OS_DESC2="Target bezoekers die specifieke besturingssystemen gebruiken, zoals Windows, Linux of Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Aantal Paginaweergaves" +NR_ASSIGN_PAGEVIEWS_DESC="Target bezoekers die een bepaald aantal pagina's hebben bekeken" +NR_ASSIGN_PAGEVIEWS_VIEWS="Paginaweergaves" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Voer aantal paginaweergaves in" +NR_ASSIGN_COOKIENAME_NAME="Cookie Naam" +NR_ASSIGN_COOKIENAME_NAME_DESC="Voer de naam in van de cookie die u wilt toewijzen" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Target bezoekers die specifieke cookies hebben opgeslagen in hun browser" +NR_FEWER_THAN="Minder dan" +NR_GREATER_THAN="Groter dan" +NR_EXACTLY="Exact" +NR_EXISTS="Bestaat" +NR_IS_EQUAL="Vergelijkbaar" +NR_CONTAINS="Bevat" +NR_STARTS_WITH="Start met" +NR_ENDS_WITH="Eindigt met" +NR_ASSIGN_COOKIENAME_CONTENT="Cookie Inhoud" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="De inhoud van de cookie" +NR_ASSIGN_IP_ADDRESSES_DESC2="Target bezoekers die achter een specifiek IP-adres staan (bereik)" +NR_ASSIGN_IP_ADDRESSES_DESC="Voer een lijst in van komma's en / of 'enter' gescheiden ip-adressen en bereiken

        Voorbeeld:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="Gebruiker ID" +NR_ASSIGN_USER_ID_DESC="Target specifieke Joomla-gebruikers op basis van hun ID's" +NR_ASSIGN_USER_ID_SELECTION_DESC="Voer door komma's gescheiden Joomla-gebruikers-ID's in" +NR_ASSIGN_COMPONENTS="Component" +NR_ASSIGN_COMPONENTS_DESC="Selecteer de componenten waaraan u wilt toewijzen" +NR_ASSIGN_COMPONENTS_DESC2="Target bezoekers die specifieke componenten doorzoeken" +NR_ASSIGN_TIMERANGE="Tijdsbestek" +NR_ASSIGN_TIMERANGE_DESC="Target bezoekers op basis van de tijd van uw server" +NR_START_TIME="Starttijd" +NR_END_TIME="Eindtijd" +NR_START_PUBLISHING_TIMERANGE_DESC="Voer de tijd in om te beginnen met publiceren" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Voer de tijd in om het publiceren te beëindigen" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Site Sleutel" +NR_RECAPTCHA_SITE_KEY_DESC="Gebruikt in de JavaScript-code die wordt aangeboden aan uw gebruikers." +NR_RECAPTCHA_SECRET_KEY="Geheime Sleutel" +NR_RECAPTCHA_SECRET_KEY_DESC="Gebruikt in de communicatie tussen uw server en de reCAPTCHA-server. Zorg dat je het geheim houdt." +NR_RECAPTCHA_SITE_KEY_ERROR="De reCaptcha-sitesleutel ontbreekt of is ongeldig" +NR_PREVIOUS_MONTH="Afgelopen Maand" +NR_NEXT_MONTH="Volgende Maand" +NR_ASSIGN_GROUP_PAGE_URL="Painga /URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Target bezoekers die browsen op specifieke menu-items of URL's" +NR_ASSIGN_GROUP_DATETIME_DESC="Activeer een box op basis van de datum en tijd van uw server" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla Gebuiker / Bezoeker" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +NR_ASSIGN_GROUP_PLATFORM="Bezoekersplatform" +NR_ASSIGN_GROUP_PLATFORM_DESC="Target bezoekers die Mobile, Google Chrome of zelfs Windows gebruiken" +NR_ASSIGN_GROUP_GEO_DESC="Target bezoekers die fysiek in een specifieke regio zijn" +NR_ASSIGN_GROUP_JCONTENT="Joomla! Inhoud" +NR_ASSIGN_GROUP_JCONTENT_DESC="Target bezoekers die specifieke Joomla-artikelen of -categorieën bekijken" +NR_ASSIGN_GROUP_SYSTEM="Systeem / Integraties" +NR_ASSIGN_GROUP_SYSTEM_DESC="Target bezoekers die interactie hebben gehad met specifieke externe Joomla-extensies" +NR_ASSIGN_GROUP_ADVANCED="Geavanceerde doelgerichtheid van bezoekers" +NR_ASSIGN_USERGROUP_DESC="Target specifieke Joomla gebruikersgroepen" +NR_ASSIGN_ARTICLE_DESC="Target bezoekers die specifieke Joomla-artikelen bekijken" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target bezoekers die specifieke Joomla-categorieën bekijken" +NR_EXTENSION_REQUIRED="%scomponent vereist%s plugin om ingeschakeld te worden om goed te kunnen functioneren." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Target bezoekers die specifieke K2-items, categorieën of tags doorzoeken" +NR_ASSIGN_K2_ITEMS="Item" +NR_ASSIGN_K2_ITEMS_DESC="Target bezoekers die specifieke K2-items bekijken." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Selecteer de K2-items waaraan u wilt toewijzen" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Overeenkomen met specifieke zoekwoorden in de inhoud van het item. Gescheiden door een komma of een nieuwe regel." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Overeenkomen met de meta-trefwoorden van het item. Gescheiden door een komma of een nieuwe regel." +NR_ASSIGN_K2_PAGETYPES_DESC="Target bezoekers die specifieke K2-paginatypen doorbladeren" +NR_ASSIGN_K2_ITEM_OPTION="Item" +NR_ASSIGN_K2_LATEST_OPTION="Laatste items van gebruikers of categorieën" +NR_ASSIGN_K2_TAG_OPTION="Tag Pagina" +NR_ASSIGN_K2_CATEGORY_OPTION="Categorie Pagina" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Bewerk Formulier" +NR_ASSIGN_K2_USER_PAGE_OPTION="Gebruikers Pagina (blog)" +NR_ASSIGN_K2_TAGS_DESC="Target bezoekers die K2-items bekijken met specifieke tags" +NR_ASSIGN_K2_CATEGORIES_DESC="Target bezoekers die in specifieke K2-categorieën browsen" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categorieën" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +NR_ASSIGN_PAGE_TYPES_DESC="Selecteer de paginatypes waaraan u wilt toewijzen" +NR_ASSIGN_TAGS_DESC="Selecteer de labels die u wilt toewijzen" +NR_CONTENT_KEYWORDS="Inhoudszoekwoorden" +NR_META_KEYWORDS="Meta-trefwoorden" +NR_TAG="Tag" +NR_NORMAL="Normaal" +NR_COMPACT="Compact" +NR_LIGHT="Licht" +NR_DARK="Donker" +NR_SIZE="Grootte" +NR_THEME="Thema" +NR_SINGLE="Enkele" +NR_MULTIPLE="Meerdere" +NR_RANGE="Bereik" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Aub Controleren" +NR_RECAPTCHA_INVALID_SECRET_KEY="Ongeldige Geheime Sleutel" +NR_PAGE="Pagina" +NR_YOU_ARE_USING_EXTENSION="U gebruikt %s%s" +NR_UPDATE="Bijwerken" +NR_SHOW_UPDATE_NOTIFICATION="Toon updatemelding" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Indien geselecteerd, wordt een updatemelding weergegeven in de hoofdcomponentweergave wanneer er een nieuwe versie voor deze extensie is." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%sis beschikbaar" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/pt-BR/pt-BR.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/pt-BR/pt-BR.plg_system_nrframework.ini new file mode 100644 index 00000000..884acfda --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/pt-BR/pt-BR.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Sistema - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - usado pelas extensões Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorar" +NR_INCLUDE="Incluir" +NR_EXCLUDE="Excluir" +NR_SELECTION="Seleção" +NR_ASSIGN_MENU_NOITEM="Incluir Sem Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="Também atribuir quando nenhum Itemid do menu for definido na URL?" +NR_ASSIGN_MENU_CHILD="Também em itens filhos" +NR_ASSIGN_MENU_CHILD_DESC="Atribuir também aos itens filhos dos itens selecionados?" +NR_COPY_OF="Copiar de %s" +NR_ASSIGN_DATETIME_DESC="Segmentar visitantes com base na data e hora do seu servidor" +NR_DATETIME="Data/Hora" +NR_TIME="Hora" +NR_DATE="Data" +NR_DATETIME_DESC="Digite a data e hora para publicar/despublicar." +NR_START_PUBLISHING="Data/Hora Inicial" +NR_START_PUBLISHING_DESC="Digite a data para iniciar a publicação." +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Digite a data para finalizar a publicação." +NR_DATETIME_NOTE="As atribuições de data e hora usa a data/hora de seus servidores, não do sistema dos visitantes." +NR_ASSIGN_PHP="PHP Personalizado" +NR_PHPCODE="Código PHP" +NR_ASSIGN_PHP_DESC="Digite um pedaço de código PHP para avaliar." +NR_ASSIGN_PHP_DESC2="Segmentar visitantes avaliando o código PHP personalizado. O código deve retornar o valor verdadeiro ou false.

        Por exemplo:
        retorna ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Hora no site" +NR_SECONDS="Segundos" +NR_ASSIGN_TIMEONSITE_DESC="Digite uma duração em segundos para comparar com a hora total do usuário (duração da visita) gasto em todo o seu site.

        Exemplo:
        Se você deseja exibir uma caixa após o usuário tiver gasto 3 minutos no seu site inteiro, digite 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Segmentar visitantes que estão navegando por URLs específicos." +NR_ASSIGN_URLS_DESC="Digite (parte da) a URLs para corresponder.
        Use uma nova linha para cada correspondência diferente." +NR_ASSIGN_URLS_LIST="Correspondência de URL" +NR_ASSIGN_URLS_REGEX="Usar Expressão Regular" +NR_ASSIGN_URLS_REGEX_DESC="Selecione para tratar o valor como expressões regulares." +NR_ASSIGN_LANGS="Idioma" +NR_ASSIGN_LANGS_DESC="Segmentar visitantes que estão navegando em seu website em um idioma específico." +NR_ASSIGN_LANGS_LIST_DESC="Selecione o Idioma para atribuir." +NR_ASSIGN_DEVICES="Dispositivo" +NR_ASSIGN_DEVICES_DESC2="Segmentar visitantes usando um dispositivo específico, como celular, tablet ou computador." +NR_ASSIGN_DEVICES_DESC="Selecione os dispositivos para atribuir." +NR_ASSIGN_DEVICES_NOTE="Tenha em mente que a detecção de dispositivos nem sempre é 100% precisa. Os usuários podem configurar seu navegador para imitar outros dispositivos." +NR_MENU="Menu" +NR_MENU_ITEMS="Item de Menu" +NR_MENU_ITEMS_DESC="Segmentar visitantes que estão navegando em itens de menu específicos" +NR_USERGROUP="Grupo de Usuário" +NR_ACCESSLEVEL="Grupo de Usuários" +NR_ACCESSLEVEL_DESC="Selecione os Grupos de Usuários para atribuir.

        Nota: Se você quiser torná-lo público, basta defini-lo para Ignorar e não selecionar o público." +NR_SHOW_COPYRIGHT="Exibir Copyright" +NR_SHOW_COPYRIGHT_DESC="Se selecionado, informações extras sobre direitos autorais serão exibidas nas visualizações do admin. As extensões Tassos.gr nunca exibe as informações de copyright ou links de retorno no frontend." +NR_WIDTH="Largura" +NR_WIDTH_DESC="Digite a largura em px, em ou %

        Exemplo: 400px" +NR_HEIGHT="Altura" +NR_HEIGHT_DESC="Digite a altura em px, em or %

        Exemplo: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Digite o padding em px, em ou %

        Exemplo: 20px" +NR_MARGIN="Margem" +NR_MARGIN_DESC="A propriedade de margem CSS é usada para gerar espaço ao redor da caixa e definir o tamanho do espaço em branco fora da borda em pixels ou em %.

        Exemplo 1: 25px
        Exemplo 2: 5%

        Especificando a margem para cada lado [superior direita inferior esquerda]:

        Apenas lado superior: 25px 0 0 0
        Apenas lado direito: 0 25px 0 0
        Apenas lado inferior: 0 0 25px 0
        Apenas lado esquerdo: 0 0 0 25px" +NR_COLOR_HOVER="Cor ao Passar o Mouse" +NR_COLOR="Cor" +NR_COLOR_DESC="Defina uma cor no formato HEX ou RGBA." +NR_TEXT_COLOR="Cor do Texto" +NR_BACKGROUND="Fundo" +NR_BACKGROUND_COLOR="Cor de Fundo" +NR_BACKGROUND_COLOR_DESC="Defina uma cor de fundo em formato HEX ou RGBA. Para desativar digite 'none'. Para transper~encia absoluta digite 'transparent'." +NR_URL_SHORTENING_FAILED="Shortening %s com %s falhou. %s." +NR_EXPORT="Exportar" +NR_IMPORT="Importar" +NR_PLEASE_CHOOSE_A_VALID_FILE="Por favor, escolha um nome de arquivo válido." +NR_IMPORT_ITEMS="Importar Itens" +NR_PUBLISH_ITEMS="Publicar Itens" +NR_AS_EXPORTED="Como exportado" +NR_TITLE="Título" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Listas" +NR_ACYMAILING_LIST_DESC="Selecione listas AcyMailing para atribuir." +NR_ASSIGN_ACYMAILING_DESC="Segmentar visitantes inscritos em listas específicas do AcyMailing." +NR_AKEEBASUBS="Akeeba Subscriptions" +NR_AKEEBASUBS_LEVELS="Níveis" +NR_AKEEBASUBS_LEVELS_DESC="Selecione os níveis de Assinatura Akeeba para atribuir." +NR_ASSIGN_AKEEBASUBS_DESC="Segmentar visitantes inscritos em Assinaturas Akeeba específicas." +NR_MATCH="Corresponder" +NR_MATCH_DESC="O método de correspondência usado para comparar o valor." +NR_ASSIGN_MATCHING_METHOD="Método de Correspondência" +NR_ASSIGN_MATCHING_METHOD_DESC="Todas as atribuições devem ser correspondidas?

        Todas
        será publicada se Todas as atribuições abaixo são correspondentes.

        Qualquer
        será publicada se Qualquer (uma ou mais) das atribuições abaixo são correspondentes.
        Grupos de atribuição onde 'Ignorar' está selecionado será ignorado." +NR_ANY="Qualquer" +NR_ASSIGN_REFERRER="URL do Referenciador" +NR_ASSIGN_REFERRER_DESC2="Segmentar visitantes que chegam ao seu site de uma fonte de tráfego específica." +NR_ASSIGN_REFERRER_DESC="Digite um URL de referenciador por linha: Ex:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Lembre-se de que a descoberta do referenciador de URL nem sempre é 100% precisa. Alguns servidores podem usar proxies que retiram essa informação e podem ser facilmente forjados." +NR_PROFEATURE_HEADER="%s é um Recurso PRO" +NR_PROFEATURE_DESC="Nós lamentamos, %s não está disponível no seu plano. Por favor, atualize para o plano PRO para desbloquear todos esses recursos impressionantes." +NR_PROFEATURE_DISCOUNT="Bônus: %s usuários gratuitos recebem 20% preço normal, aplicado automaticamente no checkout." +NR_ONLY_AVAILABLE_IN_PRO="Apenas disponível na versão PRO" +NR_UPGRADE_TO_PRO="Atualizar para Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Atualizar para versão Pro para desbloquear" +NR_UPGRADE_TO_PRO_VERSION="Fantástico! Só falta um passo. Clique no botão abaixo para completar a atualização para a versão Pro." +NR_UNLOCK_PRO_FEATURE="Desbloquear Recurso Pro" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Esquerda para Direita" +NR_RIGHT_TO_LEFT="Direita para Esquerda" +NR_BGIMAGE="Imagem de Fundo" +NR_BGIMAGE_DESC="Defina a imagem de fundo." +NR_BGIMAGE_FILE="Imagem" +NR_BGIMAGE_FILE_DESC="Selecione ou carregue um arquivo para o background-image." +NR_BGIMAGE_REPEAT="Repetir" +NR_BGIMAGE_REPEAT_DESC="A propriedade background-repeat define se/como uma imagem de fundo será repetida. Por padrão, uma background-image é repetida vertical e horizontalmente.

        Repeat: A imagem de fundo será repetida tanto na vertical como na horizontal.

        Repeat-x: A imagem de fundo será repetida apenas horizontalmente

        Repeat-y: A imagem de fundo será repetida apenas verticalmente

        No-repeat: A imagem de fundo não será repetida." +NR_BGIMAGE_SIZE="Tamanho" +NR_BGIMAGE_SIZE_DESC="Especifique o tamanho de uma imagem de fundo.

        Auto: A background-image contém a sua largura e altura

        Cover: Dimensiona a imagem de fundo para ser o maior possível para que a área de fundo seja completamente coberta pela imagem de fundo. Algumas partes da imagem de fundo podem não estar visíveis dentro da área de posicionamento de fundo

        Contain: Dimensiona a imagem para o tamanho maior, de forma que a largura e a altura possam se ajustar dentro da área de conteúdo

        100% 100%: Estique a imagem de plano de fundo para cobrir completamente a área de conteúdo." +NR_BGIMAGE_POSITION="Posição" +NR_BGIMAGE_POSITION_DESC="A propriedade background-position define a posição inicial de uma imagem de fundo. Por padrão, uma background-image é colocada no canto superior esquerdo. O primeiro valor é a posição horizontal e o segundo valor é a posição vertical.

        Você pode usar um dos valores predefinidos ou inserir um valor personalizado em porcentagem: x% y% ou em pixel xPos yPos." +NR_RTL="Ativar RTL" +NR_RTL_DESC="A direção do texto da direita para a esquerda é essencial para scripts da direita para a esquerda, como Árabe, Hebraico, Siríaco e Thaana." +NR_HORIZONTAL="Horizontal" +NR_VERTICAL="Vertical" +NR_FORM_ORIENTATION="Orientação do Formulário" +NR_FORM_ORIENTATION_DESC="Selecione a orientação do formulário." +NR_ASSIGN_CATEGORY="Categorias" +NR_ASSIGN_CATEGORY_DESC="Selecione as categorias para atribuir." +NR_ASSIGN_CATEGORY_CHILD="Também em Itens Filhos" +NR_ASSIGN_CATEGORY_CHILD_DESC="Também atribuir para itens filhos dos itens selecionados?" +NR_NEW="Novo" +NR_LIST="Lista" +NR_DOCUMENTATION="Documentação" +NR_KNOWLEDGEBASE="Base de Conhecimento" +NR_FAQ="FAQ" +NR_INFORMATION="Informação" +NR_EXTENSION="Extensão" +NR_VERSION="Versão" +NR_CHANGELOG="Changelog" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Chave de Download" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Para ser capaz de atualizar %s via o atualizador do Joomla, você precisará digitar sua Chave de Download nas configurações do Plugin Novarain Framework." +NR_DOWNLOAD_KEY_FIND="Encontrar a Chave de Download" +NR_DOWNLOAD_KEY_UPDATE="Atualizar Chave de Download" +NR_OK="OK" +NR_MISSING="Faltando" +NR_LICENSE="Licença" +NR_AUTHOR="Autor" +NR_FOLLOWME="Siga-me" +NR_FOLLOW="Siga %s" +NR_TRANSLATE_INTEREST="Você estaria interessado em ajudar com a tradução do %s para o seu Idioma?" +NR_TRANSIFEX_REQUEST="Envie-me um pedido no Transifex" +NR_HELP_WITH_TRANSLATIONS="Ajuda com Traduções" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Avançado" +NR_USEGLOBAL="Usar Global" +NR_WEEKDAY="Dia da Semana" +NR_MONTH="Mês" +NR_MONDAY="Segunda" +NR_TUESDAY="Terça" +NR_WEDNESDAY="Quarta" +NR_THURSDAY="Quinta" +NR_FRIDAY="Sexta" +NR_SATURDAY="Sábado" +NR_WEEKEND="Final de Semana" +NR_WEEKDAYS="Finais de Semanas" +NR_SUNDAY="Domingo" +NR_JANUARY="Janeiro" +NR_FEBRUARY="Fevereiro" +NR_MARCH="Março" +NR_APRIL="Abril" +NR_MAY="Maio" +NR_JUNE="Junho" +NR_JULY="Julho" +NR_AUGUST="Agosto" +NR_SEPTEMBER="Setembro" +NR_OCTOBER="Outubro" +NR_NOVEMBER="Novembro" +NR_DECEMBER="Dezembro" +NR_NEVER="Nunca" +NR_SECONDS="Segundos" +NR_MINUTES="Minutos" +NR_HOURS="Horas" +NR_DAYS="Dias" +NR_SESSION="Sessão" +NR_EVER="Sempre" +NR_COOKIE="Cookie" +NR_BOTH="Ambos" +NR_NONE="Nenhum" +NR_DESKTOPS="Computador" +NR_MOBILES="Celular" +NR_TABLETS="Tablet" +NR_PER_SESSION="Por Sessão" +NR_PER_DAY="Por Dia" +NR_PER_WEEK="Por Semana" +NR_PER_MONTH="Por Mês" +NR_FOREVER="Para Sempre" +NR_FEATURE_UNDER_DEV="Este recurso está em desenvolvimento" +NR_LIKE_THIS_EXTENSION="Curtir esta extensão?" +NR_LEAVE_A_REVIEW="Deixe um comentário no JED" +NR_SUPPORT="Suporte" +NR_NEED_SUPPORT="Precisa de suporte?" +NR_DROP_EMAIL="Me envie um e-mail" +NR_READ_DOCUMENTATION="Ler a Documentação" +NR_COPYRIGHT="%s - Tassos.gr Todos os Direitos Reservados" +NR_DASHBOARD="Painel" +NR_NAME="Nome" +NR_WRONG_COORDINATES="As coordenadas que você forneceu não são válidas!" +NR_ENTER_COORDINATES="Latitude, Longitude" +NR_NO_ITEMS_FOUND="Nenhum Item Foi Encontrado!" +NR_ITEM_IDS="Nenhum IDs de Item" +NR_TOGGLE="Alternar" +NR_EXPAND="Expandir" +NR_COLLAPSE="Recolher" +NR_SELECTED="Selecionado" +NR_MAXIMIZE="Maximizar" +NR_MINIMIZE="Minimizar" +NR_SELECTION="Seleção" +NR_INSTALL="Instalar" +NR_INSTALL_NOW="Instalar Agora" +NR_INSTALLED="Instalado" +NR_COMING_SOON="Em breve" +NR_ROADMAP="No roteiro" +NR_MEDIA_VERSIONING="Usar Versão de Mídia" +NR_MEDIA_VERSIONING_DESC="Selecione para adicionar o número da versão da extensão ao final da urls de mídia (js/css), para fazer os navegadores forçar o carregamento do arquivo correto." +NR_LOAD_JQUERY="Carregar jQuery" +NR_LOAD_JQUERY_DESC="Selecione para carregar o script do core do jQuery. Você pode desativar isso se você tiver conflitos se seu template ou outras extensões carregarem sua própria versão do jQuery." +NR_SELECT_CURRENCY="Selecionar a Moeda" +NR_CONVERTFORMS="Formulários de Conversão" +NR_CONVERTFORMS_LIST="Campanhas" +NR_ASSIGN_CONVERTFORMS_DESC="Segmente os visitantes que se inscreveram em campanhas específicas do Formulários de Conversão." +NR_CONVERTFORMS_LIST_DESC="Selecione campanhas do Formulários de Conversão para atribuir." +NR_LEFT="Esquerda" +NR_CENTER="Centro" +NR_RIGHT="Direita" +NR_BOTTOM="Rodapé" +NR_TOP="Topo" +NR_AUTO="Auto" +NR_CUSTOM="Personalizar" +NR_UPLOAD="Carregar" +NR_IMAGE="Imagem" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Selecionar Imagem" +NR_IMAGE_SIZE_COVER="Capa" +NR_IMAGE_SIZE_CONTAIN="Contém" +NR_REPEAT="Repetir" +NR_REPEAT_X="Repetir x" +NR_REPEAT_Y="Repetir y" +NR_REPEAT_NO="Não repetir" +NR_FIELD_STATE_DESC="Defina o estado do item." +NR_CREATED_DATE="Data de Criação" +NR_CREATED_DATE_DESC="A data em que o item foi criado." +NR_MODIFIFED_DATE="Data de Modificação" +NR_MODIFIFED_DATE_DESC="A data que o item foi modificado pela última vez." +NR_CATEGORIES="Categoria" +NR_CATEGORIES_DESC="Selecione as categorias para o trabalho." +NR_ALSO_ON_CHILD_ITEMS="Também nos itens do tema pendente" +NR_ALSO_ON_CHILD_ITEMS_DESC="Também atribuir os itens selecionados aos itens pendentes?" +NR_PAGE_TYPE="Tipo de página" +NR_PAGE_TYPES="Tipos de páginas" +NR_PAGE_TYPES_DESC="Selecione quais os tipos de páginas que serão ativados no trabalho." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Ativar para levar em conta a visualização do artigo." +NR_CATEGORY_VIEW="Visualização da Categoria" +NR_CATEGORY_VIEW_DESC="Ativar para levar em conta a visualização de categoria." +NR_ARTICLES="Artigos" +NR_ARTICLES_DESC="Selecione os artigos designados" +NR_ARTICLE="Artigo" +NR_ARTICLE_AUTHORS="Autor" +NR_ARTICLE_AUTHORS_DESC="Escolha o autor designado" +NR_ONLY="Somente" +NR_OTHERS="outros" +NR_SMARTTAGS="Tags Inteligente" +NR_SMARTTAGS_SHOW="Mostrar Smart Tags" +NR_SMARTTAGS_NOTFOUND="Nenhuma Tags Inteligente foi encontrada!" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Pesquisar por Tags Inteligente" +NR_CONTACT_US="Entre em contato conosco." +NR_FONT_COLOR="Seleção de cor" +NR_FONT_SIZE="Seleção do tamanho da fonte" +NR_FONT_SIZE_DESC="Escolha o tamanho da fonte em Pixel" +NR_TEXT="Texto" +NR_URL="Endereço da Web" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Ativar na Substituição de Saída" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Ativa a renderização da extensão quando o layout da página (tmpl) é substituído. Exemplos: tmpl=component ou tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Ativar na Substituição de Formato" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Ativa a renderização da extensão quando o formato da página não é diferente de HTML. Exemplos: format=raw ou format=json." +NR_GEOLOCATING="Geolocalização" +NR_GEOLOCATING_DESC="A geolocalização nem sempre é 100% precisa. A geolocalização é baseada no endereço IP do visitante. Nem todos os endereços IP são fixos ou conhecidos." +NR_CITY="Cidade" +NR_CITY_NAME="Nome da Cidade" +NR_CONDITION_CITY_DESC="Digite o nome da cidade em inglês. Insira várias cidades separadas por vírgula." +NR_CONTINENT="Continente" +NR_REGION="Região" +NR_CONDITION_REGION_DESC="O valor consiste em duas partes, o código de país de duas letras ISO 3166-1 e o código de região. Portanto, o valor deve estar no seguinte formato: COUNTRY_CODE-REGION_CODE. Para obter uma lista completa de códigos de região, clique no link Localizar um código de região." +NR_ASSIGN_COUNTRIES="País" +NR_ASSIGN_COUNTRIES_DESC2="Segmentar visitantes que estão fisicamente em um país específico." +NR_ASSIGN_COUNTRIES_DESC="Selecione os países para atribuir." +NR_ASSIGN_CONTINENTS="Continente" +NR_ASSIGN_CONTINENTS_DESC="Selecione os continentes para atribuir." +NR_ASSIGN_CONTINENTS_DESC2="Segmentar visitantes que estão fisicamente em um continente específico." +NR_ICONTACT_ACCOUNTID_ERROR="O ID da conta do iContact não pôde ser recuperado!" +NR_TAG_CLIENTDEVICE="Tipo de Dispositivo do Visitante" +NR_TAG_CLIENTOS="Sistema Operacional Visitante" +NR_TAG_CLIENTBROWSER="Navegador do Visitante" +NR_TAG_CLIENTUSERAGENT="String do Agente do Visitante" +NR_TAG_IP="Endereço IP do Visitante" +NR_TAG_URL="URL da Página" +NR_TAG_URLENCODED="URL da Página Codificada" +NR_TAG_URLPATH="Caminho da Página" +NR_TAG_REFERRER="Referenciador de Página" +NR_TAG_SITENAME="Nome do Site" +NR_TAG_SITEURL="URL do Site" +NR_TAG_PAGETITLE="Título da Página" +NR_TAG_PAGEDESC="Descrição Meta da Página" +NR_TAG_PAGELANG="Código do Idioma da Página" +NR_TAG_USERID="ID do Usuário" +NR_TAG_USERNAME="Nome Completo do Usuário" +NR_TAG_USERLOGIN="Login do Usuário" +NR_TAG_USEREMAIL="E-mail do Usuário" +NR_TAG_USERFIRSTNAME="Primeiro Nome do Usuário" +NR_TAG_USERLASTNAME="Sobrenome do Usuário" +NR_TAG_USERGROUPS="IDs dos Grupos de Usuário" +NR_TAG_DATE="Data" +NR_TAG_TIME="Hora" +NR_TAG_RANDOMID="ID Aleatório" +NR_ICON="Ícone" +NR_SELECT_MODULE="Selecione um Módulo" +NR_SELECT_CONTINENT="Selecione um Continente" +NR_SELECT_COUNTRY="Selecione um País" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Chave API do Google Maps" +NR_GMAP_KEY_DESC="A chave API do Google Maps API está sendo usado por extensões Tassos.gr. Se você enfrentar algum problema com o Google Map não sendo carregado, provavelmente precisará inserir sua própria chave de API." +NR_GMAP_FIND_KEY="Obter uma chave API" +NR_ARE_YOU_SURE="Você tem certeza?" +NR_CUSTOMURL="URL Personalizada" +NR_SAMPLE="Exemplo" +NR_DEBUG="Depurar" +NR_CUSTOMURL="URL Personalizada" +NR_READMORE="Leia Mais" +NR_IPADDRESS="Endereço de IP" +NR_ASSIGN_BROWSERS="Navegador" +NR_ASSIGN_BROWSERS_DESC="Selecione os navegadores para atribuir." +NR_ASSIGN_BROWSERS_DESC2="Segmentar visitantes que estão navegando em seu site com navegadores específicos, como Chrome, Firefox ou Internet Explorer." +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Sistema Operacional" +NR_ASSIGN_OS_DESC="Selecione os sistemas operacionais para atribuir." +NR_ASSIGN_OS_DESC2="Segmente os visitantes que estão usando sistemas operacionais específicos, como Windows, Linux ou Mac." +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Número de Exibições de Página" +NR_ASSIGN_PAGEVIEWS_DESC="Segmentar visitantes que visualizaram determinado número de páginas" +NR_ASSIGN_PAGEVIEWS_VIEWS="Exibições de Página" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Digite o número de visualizações de página." +NR_ASSIGN_COOKIENAME_NAME="Nome do Cookie" +NR_ASSIGN_COOKIENAME_NAME_DESC="Digite o nome do cookie para atribuir." +NR_ASSIGN_COOKIENAME_NAME_DESC2="Segmentar visitantes que possuem cookies específicos armazenados em seus navegadores." +NR_FEWER_THAN="Menor que" +NR_GREATER_THAN="Maior que" +NR_EXACTLY="Exatamente" +NR_EXISTS="Existe" +NR_IS_EQUAL="É Igual" +NR_CONTAINS="Contém" +NR_STARTS_WITH="Inicia com" +NR_ENDS_WITH="Termina com" +NR_ASSIGN_COOKIENAME_CONTENT="Conteúdo do Cookie" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="O conteúdo do cookie." +NR_ASSIGN_IP_ADDRESSES_DESC2="Segmentar visitantes que estão por trás de um endereço IP específico (intervalo)." +NR_ASSIGN_IP_ADDRESSES_DESC="Digite uma lista de endereços de IP e intervalos separados por vírgula e/ou 'enter'

        Exemplo:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="ID do Usuário" +NR_ASSIGN_USER_ID_DESC="Segmentar usuários específicos do Joomla por seus IDs." +NR_ASSIGN_USER_ID_SELECTION_DESC="Digite IDs de usuário do Joomla separados por vírgula." +NR_ASSIGN_COMPONENTS="Componente" +NR_ASSIGN_COMPONENTS_DESC="Selecione os componentes para atribuir." +NR_ASSIGN_COMPONENTS_DESC2="Segmentar visitantes que estão navegando em componentes específicos." +NR_ASSIGN_TIMERANGE="Intervalo de Tempo" +NR_ASSIGN_TIMERANGE_DESC="Segmentar visitantes com base no horário do seu servidor." +NR_START_TIME="Hora Inicial" +NR_END_TIME="Hora Final" +NR_START_PUBLISHING_TIMERANGE_DESC="Digite o horário para iniciar a publicação." +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Digite o horário para finalizar a publicação" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Chave do Site" +NR_RECAPTCHA_SITE_KEY_DESC="Usado no código JavaScript que é servido para seus usuários." +NR_RECAPTCHA_SECRET_KEY="Chave Secreta" +NR_RECAPTCHA_SECRET_KEY_DESC="Usado na comunicação entre seu servidor e o servidor reCAPTCHA. Certifique-se de manter isso em segredo." +NR_RECAPTCHA_SITE_KEY_ERROR="A chave do site reCaptcha está ausente ou é inválida" +NR_PREVIOUS_MONTH="Mês Anterior" +NR_NEXT_MONTH="Próximo Mês" +NR_ASSIGN_GROUP_PAGE_URL="Página / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Segmentar visitantes que estão navegando por itens de menu ou URLs específicos." +NR_ASSIGN_GROUP_DATETIME_DESC="Aciona uma caixa com base na data e hora do seu servidor" +NR_ASSIGN_GROUP_USER_VISITOR="Usuário do Joomla / Visitante" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Segmente usuários registrados ou visitantes que visualizaram um determinado número de páginas." +NR_ASSIGN_GROUP_PLATFORM="Plataforma do Visitante" +NR_ASSIGN_GROUP_PLATFORM_DESC="Segmente os visitantes que estão usando o celular, o Google Chrome ou até o Windows." +NR_ASSIGN_GROUP_GEO_DESC="Segmentar visitantes que estão fisicamente em uma região específica" +NR_ASSIGN_GROUP_JCONTENT="Conteúdo do Joomla!" +NR_ASSIGN_GROUP_JCONTENT_DESC="Segmentar visitantes que estão visualizando artigos ou categorias específicas do Joomla" +NR_ASSIGN_GROUP_SYSTEM="Sistema / Integrações" +NR_ASSIGN_GROUP_SYSTEM_DESC="Segmentar visitantes que interagiram com extensões do Joomla de terceiros específicas." +NR_ASSIGN_GROUP_ADVANCED="Segmentação avançada por visitante" +NR_ASSIGN_USERGROUP_DESC="Segmentar grupos de usuários específicos do Joomla." +NR_ASSIGN_ARTICLE_DESC="Segmentar visitantes que estão visualizando artigos específicos do Joomla." +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Segmentar visitantes que estão visualizando categorias específicas do Joomla." +NR_EXTENSION_REQUIRED="%s requer %s para ser ativado, a fim de funcionar corretamente." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Segmentar visitantes que estão navegando por itens, categorias ou tags específicos do K2." +NR_ASSIGN_K2_ITEMS="Item" +NR_ASSIGN_K2_ITEMS_DESC="Segmentar visitantes que estão navegando em itens específicos do K2." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Selecione os itens do K2 para atribuir." +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Corresponder palavras-chave específicas no conteúdo do item. Separado por uma vírgula ou uma nova linha." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Corresponder às meta palavras-chave do item. Separado por uma vírgula ou por uma nova linha." +NR_ASSIGN_K2_PAGETYPES_DESC="Segmentar visitantes que estão navegando por tipos de página específicos do K2" +NR_ASSIGN_K2_ITEM_OPTION="Item" +NR_ASSIGN_K2_LATEST_OPTION="Últimos itens de usuários ou categorias" +NR_ASSIGN_K2_TAG_OPTION="Página de Tag" +NR_ASSIGN_K2_CATEGORY_OPTION="Página de Categoria" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Formulário de Edição de Item" +NR_ASSIGN_K2_USER_PAGE_OPTION="Página do Usuário (blog)" +NR_ASSIGN_K2_TAGS_DESC="Segmentar visitantes que estão navegando em itens do K2 com tags específicas." +NR_ASSIGN_K2_CATEGORIES_DESC="Segmentar visitantes que estão navegando em categorias específicas do K2" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categorias" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Itens" +NR_ASSIGN_PAGE_TYPES_DESC="Selecione os tipos de página para atribuir." +NR_ASSIGN_TAGS_DESC="Selecione as tags para atribuir." +NR_CONTENT_KEYWORDS="Palavras-chave do Conteúdo" +NR_META_KEYWORDS="Palavras-chave Meta" +NR_TAG="Tag" +NR_NORMAL="Normal" +NR_COMPACT="Compacto" +NR_LIGHT="Claro" +NR_DARK="Escuro" +NR_SIZE="Tamanho" +NR_THEME="Tema" +NR_SINGLE="Único" +NR_MULTIPLE="Vários" +NR_RANGE="Intervalo" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Por favor, valide" +NR_RECAPTCHA_INVALID_SECRET_KEY="Chave secreta inválida" +NR_PAGE="Página" +NR_YOU_ARE_USING_EXTENSION="Você está usando %s %s" +NR_UPDATE="Atualizar" +NR_SHOW_UPDATE_NOTIFICATION="Exibir Notificação de Atualização Update Notification" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Se selecionado, uma notificação de atualização será mostrada na visualização do componente principal quando houver uma nova versão para essa extensão." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s está disponível" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/pt-PT/pt-PT.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/pt-PT/pt-PT.plg_system_nrframework.ini new file mode 100644 index 00000000..ff6b811b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/pt-PT/pt-PT.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Sistema - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - usado pelas extensões Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorar" +NR_INCLUDE="Incluir" +NR_EXCLUDE="Excluir" +NR_SELECTION="Seleção" +NR_ASSIGN_MENU_NOITEM="Incluir Sem Itemid" +NR_ASSIGN_MENU_NOITEM_DESC="Também atribuir quando nenhum Itemid do menu for definido na URL?" +NR_ASSIGN_MENU_CHILD="Também em items dependentes" +NR_ASSIGN_MENU_CHILD_DESC="Atribuir também itens dependentes de itens selecionados?" +NR_COPY_OF="Copiar de %s" +NR_ASSIGN_DATETIME_DESC="Segmentar visitantes com base na data e hora do seu servidor" +NR_DATETIME="Data/Hora" +NR_TIME="Tempo" +NR_DATE="Data" +NR_DATETIME_DESC="Digite a data e hora para publicar/despublicar." +NR_START_PUBLISHING="Iniciar data e hora" +NR_START_PUBLISHING_DESC="Digite a data para iniciar a publicação." +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Digite a data para finalizar a publicação." +NR_DATETIME_NOTE="As atribuições de data e hora usa a data/hora de seus servidores, não do sistema dos visitantes." +; NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP Code" +NR_ASSIGN_PHP_DESC="Digite um pedaço de código PHP para avaliar." +NR_ASSIGN_PHP_DESC2="Segmentar visitantes avaliando o código PHP personalizado. o código deve retornar o valor true ou false.

        Por exemplo:
        Retorna ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Tempo no site" +NR_SECONDS="Segundos" +NR_ASSIGN_TIMEONSITE_DESC="Digite uma duração em segundos para comparar com a hora total do utilizador (duração da visita) gasto em todo o seu site.

        Exemplo:
        Se você deseja exibir uma caixa após o utilizador tiver gasto 3 minutos no seu site inteiro, digite 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Segmentar visitantes que estão a navegar em URLs específicos" +NR_ASSIGN_URLS_DESC="Digite (parte da) a URLs para corresponder.
        Use uma nova linha para cada correspondência diferente." +NR_ASSIGN_URLS_LIST="Correspondência de URL" +NR_ASSIGN_URLS_REGEX="Use a Expressão Regular" +NR_ASSIGN_URLS_REGEX_DESC="Selecione para tratar o valor como expressões regulares." +NR_ASSIGN_LANGS="Língua" +NR_ASSIGN_LANGS_DESC="Segmente os visitantes que estão navegando em seu website em um idioma específico" +NR_ASSIGN_LANGS_LIST_DESC="Selecione o Idioma para atribuir." +NR_ASSIGN_DEVICES="Dispositivo" +NR_ASSIGN_DEVICES_DESC2="Segmentar visitantes usando um dispositivo específico, como Mobile, Tablet or Desktop." +NR_ASSIGN_DEVICES_DESC="Selecione os dispositivos para atribuir." +NR_ASSIGN_DEVICES_NOTE="Tenha em mente que a detecção de dispositivos nem sempre é 100% precisa. Os usuários podem configurar seu navegador para imitar outros dispositivos." +; NR_MENU="Menu" +NR_MENU_ITEMS="Item do Menu" +NR_MENU_ITEMS_DESC="Segmentar visitantes que estão a navegar em itens de menu específicos" +; NR_USERGROUP="User Group" +NR_ACCESSLEVEL="Grupo de Utilizadores" +NR_ACCESSLEVEL_DESC="Selecione os Grupos de Usuários para atribuir.

        Nota: Se você quiser torná-lo público, basta defini-lo para Ignorar e não selecionar o público." +NR_SHOW_COPYRIGHT="Exibir Copyright" +NR_SHOW_COPYRIGHT_DESC="Se selecionado, informações extras sobre direitos autorais serão exibidas nas visualizações do admin. As extensões Tassos.gr nunca exibe as informações de copyright ou links de retorno no frontend." +NR_WIDTH="Largura" +NR_WIDTH_DESC="Digite a largura em px, em ou %

        Exemplo: 400px" +NR_HEIGHT="Altura" +NR_HEIGHT_DESC="Digite a altura em px, em or %

        Exemplo: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Digite o padding em px, em ou %

        Exemplo: 20px" +NR_MARGIN="Margem" +NR_MARGIN_DESC="A propriedade de margem CSS é usada para gerar espaço ao redor da caixa e definir o tamanho do espaço em branco fora da borda em pixels ou em %.

        Exemplo 1: 25px
        Exemplo 2: 5%

        Especificando a margem para cada lado [parte superior direita inferior esquerda]:

        Apenas Lado Superior: 25px 0 0 0
        Apenas Lado Direito: 0 25px 0 0
        Apenas Lado inferior: 0 0 25px 0
        A+enas Lado Esquerdo: 0 0 0 25px" +NR_COLOR_HOVER="Cor do Hover (rato em cima)" +NR_COLOR="Cor" +NR_COLOR_DESC="Defina uma cor no formato HEX ou RGBA." +NR_TEXT_COLOR="Cor do Texto" +NR_BACKGROUND="Fundo" +NR_BACKGROUND_COLOR="Cor de Fundo" +NR_BACKGROUND_COLOR_DESC="Defina uma cor de fundo em formato HEX ou RGBA. Para desativar digite 'none'. Para transper~encia absoluta digite 'transparent'." +NR_URL_SHORTENING_FAILED="Shortening %s com %s falhou. %s." +NR_EXPORT="Exportar" +NR_IMPORT="Importar" +NR_PLEASE_CHOOSE_A_VALID_FILE="Por favor, escolha um nome de arquivo válido." +NR_IMPORT_ITEMS="Importar Itens" +NR_PUBLISH_ITEMS="Publicar Itens" +NR_AS_EXPORTED="Como exportado" +NR_TITLE="Titulo" +NR_ACYMAILING="AcyMailing" +; NR_ACYMAILING_LIST="AcyMailing List" +NR_ACYMAILING_LIST_DESC="Selecione as listas de AcyMailing a atribuir." +NR_ASSIGN_ACYMAILING_DESC="Segmentar visitantes que se inscreveram em listas específicas do AcyMailing" +NR_AKEEBASUBS="Akeeba Subscriptions" +NR_AKEEBASUBS_LEVELS="Níveis" +NR_AKEEBASUBS_LEVELS_DESC="Selecione niveis da Subscrição do Akeeba a atribuir." +NR_ASSIGN_AKEEBASUBS_DESC="Segmentar visitantes inscritos em Assinaturas Akeeba específicas" +NR_MATCH="Corresponder-Combinar" +NR_MATCH_DESC="o usado método de comparação para comparar o valor" +NR_ASSIGN_MATCHING_METHOD="Método de Correspondência" +NR_ASSIGN_MATCHING_METHOD_DESC="Todas as atribuições devem ser correspondidas?

        Todas
        será publicada se Todas as atribuições abaixo são correspondentes.

        Qualquer
        será publicada se Qualquer (uma ou mais) das atribuições abaixo são correspondentes.
        Grupos de atribuição onde 'Ignorar' está selecionado será ignorado." +NR_ANY="Qualquer" +NR_ASSIGN_REFERRER="URL do referenciador" +NR_ASSIGN_REFERRER_DESC2="Segmentar visitantes que chegam ao seu site de uma fonte de tráfego específica" +NR_ASSIGN_REFERRER_DESC="Insira um URL de referenciador por linha: Eg:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Tenha em mente que a descoberta do referenciador de URL nem sempre é 100% precisa. Alguns servidores podem usar proxies que retiram essas informações e podem ser facilmente falsificadas." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +NR_ONLY_AVAILABLE_IN_PRO="Apenas disponível na versão PRO" +NR_UPGRADE_TO_PRO="Atualizar para Pro" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Atualizar para versão Pro para desbloquear" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Esquerda para Direita" +NR_RIGHT_TO_LEFT="Direita para Esquerda" +NR_BGIMAGE="Imagem de Fundo" +NR_BGIMAGE_DESC="Defina a imagem de fundo." +NR_BGIMAGE_FILE="Imagem" +NR_BGIMAGE_FILE_DESC="Selecione ou carregue um arquivo para o background-image." +NR_BGIMAGE_REPEAT="Repetir" +NR_BGIMAGE_REPEAT_DESC="A propriedade background-repeat define se/como uma imagem de fundo será repetida. Por padrão, uma background-image é repetida vertical e horizontalmente.

        Repeat: A imagem de fundo será repetida tanto na vertical como na horizontal.

        Repeat-x: A imagem de fundo será repetida apenas horizontalmente

        Repeat-y: A imagem de fundo será repetida apenas verticalmente

        No-repeat: A imagem de fundo não será repetida." +NR_BGIMAGE_SIZE="Tamanho" +NR_BGIMAGE_SIZE_DESC="Especifique o tamanho de uma imagem de fundo.

        Auto: A background-image contém a sua largura e altura

        Cover: Dimensiona a imagem de fundo para ser o maior possível para que a área de fundo seja completamente coberta pela imagem de fundo. Algumas partes da imagem de fundo podem não estar visíveis dentro da área de posicionamento de fundo

        Contain: Dimensiona a imagem para o tamanho maior, de forma que a largura e a altura possam se ajustar dentro da área de conteúdo

        100% 100%: Estique a imagem de plano de fundo para cobrir completamente a área de conteúdo." +NR_BGIMAGE_POSITION="Posição" +NR_BGIMAGE_POSITION_DESC="A propriedade background-position define a posição inicial de uma imagem de fundo. Por padrão, uma background-image é colocada no canto superior esquerdo. O primeiro valor é a posição horizontal e o segundo valor é a posição vertical.

        Você pode usar um dos valores predefinidos ou inserir um valor personalizado em porcentagem: x% y% ou em pixel xPos yPos." +NR_RTL="Ativar RTL" +NR_RTL_DESC="A direção do texto da direita para a esquerda é essencial para scripts da direita para a esquerda, como Árabe, Hebraico, Siríaco e Thaana." +NR_HORIZONTAL="Horizontal" +NR_VERTICAL="Vertical" +NR_FORM_ORIENTATION="Orientação do Formulário" +NR_FORM_ORIENTATION_DESC="Selecione a orientação do formulário." +NR_ASSIGN_CATEGORY="Categorias" +NR_ASSIGN_CATEGORY_DESC="Selecione as categorias para atribuir." +NR_ASSIGN_CATEGORY_CHILD="Também em Itens Filhos" +NR_ASSIGN_CATEGORY_CHILD_DESC="Também atribuir para itens filhos dos itens selecionados?" +NR_NEW="Novo" +NR_LIST="Lista" +NR_DOCUMENTATION="Documentação" +NR_KNOWLEDGEBASE="Base de Conhecimento" +NR_FAQ="FAQ" +NR_INFORMATION="Informação" +NR_EXTENSION="Extensão" +NR_VERSION="Versão" +NR_CHANGELOG="Changelog" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Chave de Download" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Para ser capaz de atualizar %s via o atualizador do Joomla, você precisará digitar sua Chave de Download nas configurações do Plugin Novarain Framework." +NR_DOWNLOAD_KEY_FIND="Encontrar a Chave de Download" +NR_DOWNLOAD_KEY_UPDATE="Atualizar Chave de Download" +NR_OK="OK" +NR_MISSING="Faltando" +NR_LICENSE="Licença" +NR_AUTHOR="Autor" +NR_FOLLOWME="Siga-me" +NR_FOLLOW="Siga %s" +NR_TRANSLATE_INTEREST="Você estaria interessado em ajudar com a tradução do %s para o seu Idioma?" +NR_TRANSIFEX_REQUEST="Envie-me um pedido no Transifex" +NR_HELP_WITH_TRANSLATIONS="Ajuda com Traduções" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Avançado" +NR_USEGLOBAL="Usar Global" +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +NR_NEVER="Nunca" +NR_SECONDS="Segundos" +NR_MINUTES="Minutos" +NR_HOURS="Horas" +NR_DAYS="Dias" +NR_SESSION="Sessão" +NR_EVER="Sempre" +NR_COOKIE="Cookie" +NR_BOTH="Ambos" +NR_NONE="Nenhum" +NR_DESKTOPS="Desktop" +NR_MOBILES="Mobile" +NR_TABLETS="Tablet" +NR_PER_SESSION="Por Sessão" +NR_PER_DAY="Por Dia" +NR_PER_WEEK="Por Semana" +NR_PER_MONTH="Por Mês" +NR_FOREVER="Para Sempre" +NR_FEATURE_UNDER_DEV="Este recurso está em desenvolvimento" +NR_LIKE_THIS_EXTENSION="Curtir esta extensão?" +NR_LEAVE_A_REVIEW="Deixe um comentário no JED" +; NR_SUPPORT="Support" +NR_NEED_SUPPORT="Precisa de suporte?" +NR_DROP_EMAIL="Me envie um e-mail" +NR_READ_DOCUMENTATION="Ler a Documentação" +NR_COPYRIGHT="%s - Tassos.gr Todos os Direitos Reservados" +NR_DASHBOARD="Painel" +NR_NAME="Nome" +NR_WRONG_COORDINATES="As coordenadas que você forneceu não são válidas!" +NR_ENTER_COORDINATES="Latitude, Longitude" +NR_NO_ITEMS_FOUND="Nenhum Item Foi Encontrado!" +NR_ITEM_IDS="Nenhum IDs de Item" +NR_TOGGLE="Alternar" +NR_EXPAND="Expandir" +NR_COLLAPSE="Recolher" +NR_SELECTED="Selecionado" +NR_MAXIMIZE="Maximizar" +NR_MINIMIZE="Minimizar" +NR_SELECTION="Seleção" +NR_INSTALL="Instalar" +NR_INSTALL_NOW="Instalar Agora" +NR_INSTALLED="Instalado" +NR_COMING_SOON="Em breve" +; NR_ROADMAP="On the roadmap" +NR_MEDIA_VERSIONING="Usar Versão de Mídia" +NR_MEDIA_VERSIONING_DESC="Selecione para adicionar o número da versão da extensão ao final da urls de mídia (js/css), para fazer os navegadores forçar o carregamento do arquivo correto." +NR_LOAD_JQUERY="Carregar jQuery" +NR_LOAD_JQUERY_DESC="Selecione para carregar o script do core do jQuery. Você pode desativar isso se você tiver conflitos se seu template ou outras extensões carregarem sua própria versão do jQuery." +NR_SELECT_CURRENCY="Selecionar a Moeda" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +NR_ASSIGN_CONVERTFORMS_DESC="Segmentar visitantes que se inscreveram em campanhas específicas do ConvertForms" +NR_CONVERTFORMS_LIST_DESC="Selecione campanhas ConvertForms para atribuir a." +NR_LEFT="Esquerda" +NR_CENTER="Centro" +NR_RIGHT="Direita" +NR_BOTTOM="Rodapé" +NR_TOP="Topo" +NR_AUTO="Auto" +NR_CUSTOM="Personalizar" +NR_UPLOAD="Carregar" +NR_IMAGE="Imagem" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Selecionar Imagem" +NR_IMAGE_SIZE_COVER="Capa" +NR_IMAGE_SIZE_CONTAIN="Contém" +NR_REPEAT="Repetir" +NR_REPEAT_X="Repetir x" +NR_REPEAT_Y="Repetir y" +NR_REPEAT_NO="Não repetir" +NR_FIELD_STATE_DESC="Defina o estado do item." +NR_CREATED_DATE="Data de Criação" +NR_CREATED_DATE_DESC="A data em que o item foi criado." +NR_MODIFIFED_DATE="Data de Modificação" +NR_MODIFIFED_DATE_DESC="A data que o item foi modificado pela última vez." +NR_CATEGORIES="Categorias" +NR_CATEGORIES_DESC="Selecione as categorias para o trabalho." +NR_ALSO_ON_CHILD_ITEMS="Também nos itens do tema pendente" +NR_ALSO_ON_CHILD_ITEMS_DESC="Também atribuir os itens selecionados aos itens pendentes?" +NR_PAGE_TYPE="Tipo de Página" +NR_PAGE_TYPES="Tipos de páginas" +NR_PAGE_TYPES_DESC="Selecione quais os tipos de páginas que serão ativados no trabalho." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +NR_ARTICLES="Artigos" +NR_ARTICLES_DESC="Selecione os artigos designados" +NR_ARTICLE="Artigo" +NR_ARTICLE_AUTHORS="Autor" +NR_ARTICLE_AUTHORS_DESC="Escolha o autor designado" +NR_ONLY="Somente" +NR_OTHERS="outros" +NR_SMARTTAGS="Smart Tags" +NR_SMARTTAGS_SHOW="Mostrar Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +NR_CONTACT_US="Entre em contato conosco." +NR_FONT_COLOR="Seleção de cor" +NR_FONT_SIZE="Seleção do tamanho da fonte" +NR_FONT_SIZE_DESC="Escolha o tamanho da fonte em Pixel" +NR_TEXT="Texto" +NR_URL="Endereço da Web" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Ativar na saída Override" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Permite o processamento de extensão quando o layout da página (tmpl) éoverriden. Exemplos: tmpl=component or tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Ativar na Substituição de Formato" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Permite renderização de extensão quando o formato de página não é diferente de HTML. Exemplos: format=raw or format=json." +NR_GEOLOCATING="Geolocalização" +NR_GEOLOCATING_DESC="A localização geográfica nem sempre é 100% precisa. o geolocalização é baseada no endereço IP do visitante. Nem todos os endereços IP são fixos ou conhecidos." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +NR_ASSIGN_COUNTRIES="País" +NR_ASSIGN_COUNTRIES_DESC2="Segmentar visitantes que estão fisicamente num país específico" +NR_ASSIGN_COUNTRIES_DESC="Selecione os paíse a atribuir" +NR_ASSIGN_CONTINENTS="Continente" +NR_ASSIGN_CONTINENTS_DESC="Selecione os continentes a atribuir" +NR_ASSIGN_CONTINENTS_DESC2="Segmentar visitantes que estão fisicamente num continente específico" +NR_ICONTACT_ACCOUNTID_ERROR="O iContact AccountID não pôde ser recuperado" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +NR_TAG_USERID="ID do Utilizador" +NR_TAG_USERNAME="Nome Completo do Utilizador" +NR_TAG_USERLOGIN="Login do Utilizador" +NR_TAG_USEREMAIL="Email do Utilizador" +NR_TAG_USERFIRSTNAME="Primeiro Nome do utilizador" +NR_TAG_USERLASTNAME="Ultimo Nome do utilizador" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +NR_ICON="Icon"_QQ_"NR_SELECT_MODULE="_QQ_"Selecione o Modulo" +; NR_SELECT_MODULE="Select a Module" +NR_SELECT_CONTINENT="Selecione o Continente" +NR_SELECT_COUNTRY="Selecione o País" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Google Maps API Key" +NR_GMAP_KEY_DESC="A chave API do Google Maps está a ser usada pelas extensões Tassos.gr. Se enfrentar algum problema com o Google Map não sendo carregado, provavelmente precisará inserir sua própria chave de API." +NR_GMAP_FIND_KEY="Obter uma chave de API" +NR_ARE_YOU_SURE="Tem a certeza?" +NR_CUSTOMURL="URL Personalizado" +NR_SAMPLE="Exemplo" +NR_DEBUG="Depurar" +NR_CUSTOMURL="URL Personalizado" +NR_READMORE="Ler Mais" +NR_IPADDRESS="https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Chave do Site" +NR_RECAPTCHA_SITE_KEY_DESC="Usado no código JavaScript que é servido para seus usuários." +NR_RECAPTCHA_SECRET_KEY="Chave secreta" +NR_RECAPTCHA_SECRET_KEY_DESC="Usado em comunicação entre o servidor e o servidor reCAPTCHA. Certifique-se de manter isso em segredo." +NR_RECAPTCHA_SITE_KEY_ERROR="o reCaptcha Chave do Site está ausente ou é inválida" +NR_PREVIOUS_MONTH="Mês Anterior" +NR_NEXT_MONTH="Próximo Mês" +NR_ASSIGN_GROUP_PAGE_URL="Page / Endereço URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Segmentar visitantes que estão navegando por itens de menu ou URLs específicos" +NR_ASSIGN_GROUP_DATETIME_DESC="Aciona uma caixa com base na data e hora do seu servidor" +NR_ASSIGN_GROUP_USER_VISITOR="Utilizador Joomla / Visitante" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Segmente usuários registrados ou visitantes que visualizaram um determinado número de páginas" +NR_ASSIGN_GROUP_PLATFORM="Plataforma do Visitante" +NR_ASSIGN_GROUP_PLATFORM_DESC="Segmente os visitantes que estão usando o telemóvel, o Google Chrome ou até o Windows" +NR_ASSIGN_GROUP_GEO_DESC="Segmentar visitantes que estão fisicamente em uma região específica" +NR_ASSIGN_GROUP_JCONTENT="Conteúdo de Joomla!" +NR_ASSIGN_GROUP_JCONTENT_DESC="Segmentar visitantes que estão visualizando artigos ou categorias específicas do Joomla" +NR_ASSIGN_GROUP_SYSTEM="Sistema / Integrações" +NR_ASSIGN_GROUP_SYSTEM_DESC="Segmentar visitantes que interagiram com extensões Específicas do Joomla 3rd party" +NR_ASSIGN_GROUP_ADVANCED="Segmentação avançada por visitante" +NR_ASSIGN_USERGROUP_DESC="Segmentar grupos de usuários específicos do Joomla" +NR_ASSIGN_ARTICLE_DESC="Segmentar visitantes que estão visualizando artigos específicos do Joomla" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Segmentar visitantes que estão visualizando categorias específicos do Joomla" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Segmentar visitantes que estão s navegar por itens, categorias ou tags específicos do K2" +NR_ASSIGN_K2_ITEMS="Item" +NR_ASSIGN_K2_ITEMS_DESC="Segmente os visitantes que navegam em itens específicos do K2." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Selecione o items do K2 a atribuir" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Corresponder palavras-chave específicas no conteúdo do item. Separado por uma vírgula ou por uma nova linha." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Corresponder palavras-chave meta de um item. Separado por uma vírgula ou uma nova linha." +NR_ASSIGN_K2_PAGETYPES_DESC="Segmentar visitantes que estão navegando por tipos de página específicos do K2" +NR_ASSIGN_K2_ITEM_OPTION="Item" +NR_ASSIGN_K2_LATEST_OPTION="Últimos itens de utilizadores ou categorias" +NR_ASSIGN_K2_TAG_OPTION="Tag Page" +NR_ASSIGN_K2_CATEGORY_OPTION="Categoria da Página" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Formulário de edição de item" +NR_ASSIGN_K2_USER_PAGE_OPTION="Página de utilizador(blog)" +NR_ASSIGN_K2_TAGS_DESC="Segmentar visitantes que estão a navegar em itens do K2 com tags específicas" +NR_ASSIGN_K2_CATEGORIES_DESC="Segmentar visitantes que estão a navegar em categorias específicas do K2" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categorias" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Artigos" +NR_ASSIGN_PAGE_TYPES_DESC="Selecione os tipos de página para atribuir a" +NR_ASSIGN_TAGS_DESC="Selecione as tags para atribuir a" +NR_CONTENT_KEYWORDS="Palavras-chave de conteúdo" +NR_META_KEYWORDS="Meta palavras-chave" +NR_TAG="Tag" +NR_NORMAL="Normal" +NR_COMPACT="Compacto" +NR_LIGHT="Claro" +NR_DARK="Escuro" +NR_SIZE="Tamanho" +NR_THEME="Tema" +NR_SINGLE="Simples" +NR_MULTIPLE="Múltiplo" +NR_RANGE="Alcance" +NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/ru-RU/ru-RU.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/ru-RU/ru-RU.plg_system_nrframework.ini new file mode 100644 index 00000000..9e0aeb0e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/ru-RU/ru-RU.plg_system_nrframework.ini @@ -0,0 +1,735 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Фреймворк 'Novarain Framework' используется расширениями, выпускаемыми веб-сайтом Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Игнорировать" +NR_INCLUDE="Включить" +NR_EXCLUDE="Исключить" +NR_SELECTION="Выбор" +NR_ASSIGN_MENU_NOITEM="Не включать ID номер" +NR_ASSIGN_MENU_NOITEM_DESC="Назначить также когда в URL ссылке отсутствует ID номер меню?" +NR_ASSIGN_MENU_CHILD="Также и дочерние объекты" +NR_ASSIGN_MENU_CHILD_DESC="Назначить также и вложенным пунктам меню выбранных пунктов меню?" +NR_COPY_OF="Копия %s" +NR_ASSIGN_DATETIME_DESC="Нацеливаться на посетителей на основе времени на Вашем сервере" +NR_DATETIME="Дата" +NR_TIME="Время" +NR_DATE="Дата" +NR_DATETIME_DESC="Введите дату автоматической публикации/автоматического снятия с публикации" +NR_START_PUBLISHING="Время начала" +NR_START_PUBLISHING_DESC="Введите дату начала публикации" +NR_FINISH_PUBLISHING="Время окончания" +NR_FINISH_PUBLISHING_DESC="Введите дату снятия с публикации" +NR_DATETIME_NOTE="Дата и время используют данные вашего сервера, а не ваших пользователей." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="Код PHP" +NR_ASSIGN_PHP_DESC="Введите фрагмент кода PHP для его проверки" +NR_ASSIGN_PHP_DESC2="Нацеливаться на посетителей, оценивающих определенный произвольный код PHP. Данный код должен возвращать значение true или false.

        Например:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Время на сайте" +NR_SECONDS="Секунды" +NR_ASSIGN_TIMEONSITE_DESC="Введите время в секундах, чтобы сравнить общее время пользователя (Длительность посещения) потраченного на весь сайт.

        Пример:
        Если вы хотите отобразить окно после того, как пользователь потратил 3 минуты на вашем сайте, введите 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Нацеливаться на посетителей, которые просматривают конкретные страницы, с конкретными ссылками URL." +NR_ASSIGN_URLS_DESC="Введите URL (или его часть) для сравнения.
        Используйте новую строку для каждого отдельного элемента." +NR_ASSIGN_URLS_LIST="URL совпадения" +NR_ASSIGN_URLS_REGEX="Использовать регулярные выражения" +NR_ASSIGN_URLS_REGEX_DESC="Выберите значение, как регулярное выражение." +NR_ASSIGN_LANGS="Язык" +NR_ASSIGN_LANGS_DESC="Нацелиться на посетителей, которые просматривают Ваш сайт на конкретном языке" +NR_ASSIGN_LANGS_LIST_DESC="Выберите языки" +NR_ASSIGN_DEVICES="Устройство" +NR_ASSIGN_DEVICES_DESC2="Нацеливаться на посетителей, которые используют определенное устройство. Например, мобильное устройство, планшет или рабочий стол." +NR_ASSIGN_DEVICES_DESC="Выберите устройства" +NR_ASSIGN_DEVICES_NOTE="Имейте в виду, что обнаружение устройств не всегда на 100% точное. Пользователи могут настроить их браузер, чтобы имитировать другие устройства." +NR_MENU="Меню" +NR_MENU_ITEMS="Пункт меню" +NR_MENU_ITEMS_DESC="Нацелиться на посетителей, которые просматривают конкретное меню" +NR_USERGROUP="Группа пользователей" +NR_ACCESSLEVEL="Группа пользователей" +NR_ACCESSLEVEL_DESC="Назначьте группы пользователей.

        Примечание: Если хотите сделать публичным установите параметр Игнорировать и не устанавливайте Public." +NR_SHOW_COPYRIGHT="Показать копирайт" +NR_SHOW_COPYRIGHT_DESC="Если вкл, дополнительная информация авторских прав будет отображаться в представлениях администратора. Расширения Tassos.gr никогда не отображают копирайты или обратные ссылки на сайте." +NR_WIDTH="Ширина" +NR_WIDTH_DESC="Укажите ширину в px, em или %

        Пример: 400px" +NR_HEIGHT="Высота" +NR_HEIGHT_DESC="Укажите высоту в px, em или %

        Пример: 400px" +NR_PADDING="Отступ" +NR_PADDING_DESC="Укажите отступ в px, em или %

        Пример: 20px" +NR_MARGIN="Отступ" +NR_MARGIN_DESC="Стилевое CSS свойство 'margin' используется для создания свободного пространства вокруг блока. Оно настраивает размер такого белого пространства за пределами блока в пикселя или %.

        Пример 1:-ый 25px
        Пример 2-ой: 5%

        Примеры назначения свойства 'margin' для каждой стороны [сверху справа снизу слева]:

        только сверху: 25px 0 0 0
        только справа: 0 25px 0 0
        только снизу: 0 0 25px 0
        только слева: 0 0 0 25px" +NR_COLOR_HOVER="Цвет для ховера (hover)" +NR_COLOR="Цвет" +NR_COLOR_DESC="Введите цвет в форматах HEX или RGBA" +NR_TEXT_COLOR="Цвет текста" +NR_BACKGROUND="Фон" +NR_BACKGROUND_COLOR="Цвет фона" +NR_BACKGROUND_COLOR_DESC="Укажите цвет фона в форматах HEX или RGBA. Чтобы отключить укажите "_QQ_"Нет"_QQ_". Для абсолютной прозрачности введите "_QQ_"прозрачно"_QQ_"." +NR_URL_SHORTENING_FAILED="Не удалось укоротить %s с %s. %s." +NR_EXPORT="Экспорт" +NR_IMPORT="Импорт" +NR_PLEASE_CHOOSE_A_VALID_FILE="Пожалуйста, выберите корректное имя файла" +NR_IMPORT_ITEMS="Импорт элементов" +NR_PUBLISH_ITEMS="Публикация элементов" +NR_AS_EXPORTED="Как экспортировано" +NR_TITLE="Заголовок" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Список AcyMailing" +NR_ACYMAILING_LIST_DESC="Выбрать список рассылки компонента AcyMailing для назначения" +NR_ASSIGN_ACYMAILING_DESC="Нацеливаться на посетителей, которые подписались на определенный список рассылки компонента AcyMailing" +NR_AKEEBASUBS="Подписки Akeeba" +NR_AKEEBASUBS_LEVELS="Уровни" +NR_AKEEBASUBS_LEVELS_DESC="Выбрать уровень компонента Akeeba Subscription для назначения" +NR_ASSIGN_AKEEBASUBS_DESC="Нацеливаться на посетителей, которые подписались на конкретный план, созданные расширением Akeeba Subscriptions" +NR_MATCH="Сходится" +NR_MATCH_DESC="Метод для сравнения значений" +NR_ASSIGN_MATCHING_METHOD="Метод совпадения" +NR_ASSIGN_MATCHING_METHOD_DESC="Должны ли все назначения совпадать??

        Все
        Будет опубликовано если все назначения ниже совпадают.

        Любой
        Будет опубликовано еслилюбое (одно или более) из назначений ниже совпадают.
        Назначенные группы 'Ignore' будут проигнорированы." +NR_ANY="Любой" +NR_ASSIGN_REFERRER="Реферальная ссылка" +NR_ASSIGN_REFERRER_DESC2="Нацеливаться на посетителей, которые прибыли на Ваш веб сайт с определенном источника трафика" +NR_ASSIGN_REFERRER_DESC="Вводите по одной реферальной ссылке на строчку. Например:

        google.com
        facebook.com/moja-stranica" +NR_ASSIGN_REFERRER_NOTE="Имейте в виду, что определение реферальной ссылки не всегда точны на 100%. Некоторые серверы могут использовать прокси, которые удаляют такую реферельную. информацию и ее можно легко подделать злоумышленнику." +NR_PROFEATURE_HEADER="%s это PRO функция" +NR_PROFEATURE_DESC="Извините, %s это недоступно в вашей подписке. Пожалуйста подпишитесь на PRO чтобы иметь доступ к данным функциям." +NR_PROFEATURE_DISCOUNT="Бонус: %s пользователей получают 20% скидку автоматически при оплате." +NR_ONLY_AVAILABLE_IN_PRO="Доступно только в версии PRO" +NR_UPGRADE_TO_PRO="Обновить до PRO" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Обновиться до версии Pro" +NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +NR_UNLOCK_PRO_FEATURE="Разблокировать ПРО функции" +NR_USING_THE_FREE_VERSION="Вы используете бесплатную версию Convert Forms. Купите PRO версию для полной функциональности." +NR_LEFT_TO_RIGHT="Слева направо" +NR_RIGHT_TO_LEFT="Справа налево" +NR_BGIMAGE="Изображение фона" +NR_BGIMAGE_DESC="Установить изображение фона" +NR_BGIMAGE_FILE="Изображение" +NR_BGIMAGE_FILE_DESC="Выберите или загрузите файл, в качестве фона." +NR_BGIMAGE_REPEAT="Повтор" +NR_BGIMAGE_REPEAT_DESC="Повтор фона устанавливает, режим, в котором фотове изображение будет повторяться. По умолчанию, фоновое изображение повторяется как по вертикали, так и по горизонтали.

        Повтор: Фоновое изображение повторяется как по вертикали, так и по горизонтали.

        Повтор-x: Фоновое изображение повторяется по горизонтали

        Повтор-y: Фоновое изображение повторяется по вертикали

        Нет-повтора: Повтор изображения отключен." +NR_BGIMAGE_SIZE="Размер" +NR_BGIMAGE_SIZE_DESC="Укажите размер фонового изображения.

        Авто: Фоновое изображение содержит собственные ширину и высоту

        Обложка: Масштабирует фоновое изображение на максимальный размер, чтобы покрыть фоновое пространство

        Контейнер: Масштабирует изображение таким образом, что его ширина и высота его может поместиться внутри области содержимого

        100% 100%: Растягивает фоновое изображение, чтобы полностью покрыть область контента." +NR_BGIMAGE_POSITION="Позиция" +NR_BGIMAGE_POSITION_DESC="Свойство background-position задает начальное положение изображения. По умолачнию размещается сверху-слева. Первое значение для горизонтального позиционирования, второе для вертикального

        Вы можете использовать одно из предопределенных значений, или введите значение в процентах: x% y% или в пикселях xPos yPos." +NR_RTL="Включить RTL" +NR_RTL_DESC="Направление текста справа налево имеет важное значение для таких языков как арабский, иврит, сирийский и тд." +NR_HORIZONTAL="Горизонтально" +NR_VERTICAL="Вертикально" +NR_FORM_ORIENTATION="Ориентация формы" +NR_FORM_ORIENTATION_DESC="Выберите ориентацию формы" +NR_ASSIGN_CATEGORY="Категории" +NR_ASSIGN_CATEGORY_DESC="Выберите категории" +NR_ASSIGN_CATEGORY_CHILD="Также для дочерних элементов" +NR_ASSIGN_CATEGORY_CHILD_DESC="Также назначить выделенные элементы к дочерним?" +NR_NEW="Новый" +NR_LIST="Список" +NR_DOCUMENTATION="Документация" +NR_KNOWLEDGEBASE="База знаний" +NR_FAQ="FAQ" +NR_INFORMATION="Информация" +NR_EXTENSION="Расширение" +NR_VERSION="Версия" +NR_CHANGELOG="Что нового" +; NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Ключ загрузки отсутствует" +NR_DOWNLOAD_KEY="Ключ" +NR_DOWNLOAD_KEY_DESC="Чтобы найти ключ загрузки, войдите в свою учетную запись на Tassos.gr и перейдите в раздел «Загрузки».

        Примечание. Установка здесь ключа загрузки не приводит к обновлению бесплатных версий до версий Pro. Чтобы разблокировать функции Pro, вам также необходимо установить версию Pro поверх бесплатной." +NR_DOWNLOAD_KEY_HOW="Для того, чтобы компонент обновлялся вместе с Joomla updater, нужно ввести Ключ в настройках Novarain Framework Plugin." +NR_DOWNLOAD_KEY_FIND="Найти ключ" +NR_DOWNLOAD_KEY_UPDATE="Обновить ключ" +NR_OK="Ок" +NR_MISSING="Не найдено" +NR_LICENSE="Лицензия" +NR_AUTHOR="Автор" +NR_FOLLOWME="Подписаться" +NR_FOLLOW="Подписаться на %s" +NR_TRANSLATE_INTEREST="Заинтересованы в помощи с переводом %s на свой язык?" +NR_TRANSIFEX_REQUEST="Пришлите мне запрос на Transifex" +NR_HELP_WITH_TRANSLATIONS="Помощь с переводами" +NR_PUBLISHING_ASSIGNMENTS="Привязка публикации" +NR_ADVANCED="Расширенные" +NR_USEGLOBAL="По умолчанию" +NR_WEEKDAY="День недели" +NR_MONTH="Месяц" +NR_MONDAY="Понедельник" +NR_TUESDAY="Вторник" +NR_WEDNESDAY="Среда" +NR_THURSDAY="Четверг" +NR_FRIDAY="Пятница" +NR_SATURDAY="Суббота" +NR_WEEKEND="Выходные" +NR_WEEKDAYS="Будни" +NR_SUNDAY="Воскресенье" +NR_JANUARY="Январь" +NR_FEBRUARY="Февраль" +NR_MARCH="Март" +NR_APRIL="Апрель" +NR_MAY="Май" +NR_JUNE="Июнь" +NR_JULY="Июль" +NR_AUGUST="Август" +NR_SEPTEMBER="Сентябрь" +NR_OCTOBER="Октябрь" +NR_NOVEMBER="ноябрь" +NR_DECEMBER="Декабрь" +NR_NEVER="Никогда" +NR_SECONDS="Секунды" +NR_MINUTES="Минут" +NR_HOURS="Часов" +NR_DAYS="Дней" +NR_SESSION="Сессия" +NR_EVER="Когда-либо" +NR_COOKIE="Куки" +NR_BOTH="Оба" +NR_NONE="Нет" +NR_DESKTOPS="Рабочий стол" +NR_MOBILES="Мобильное устройство" +NR_TABLETS="Планшет" +NR_PER_SESSION="Раз в сессию" +NR_PER_DAY="Каждый день" +NR_PER_WEEK="Раз в неделю" +NR_PER_MONTH="Раз в месяц" +NR_FOREVER="Всегда" +NR_FEATURE_UNDER_DEV="Эта опция в стадии разработки" +NR_LIKE_THIS_EXTENSION="Нравится это расширение?" +NR_LEAVE_A_REVIEW="Оставить отзыв на JED" +NR_SUPPORT="Поддержка" +NR_NEED_SUPPORT="Нужна поддержка?" +NR_DROP_EMAIL="Напишите мне по электронной почте" +NR_READ_DOCUMENTATION="Читать документацию" +NR_COPYRIGHT="%s - Tassos.gr - Все права защищены" +NR_DASHBOARD="Панель" +NR_NAME="Имя" +NR_WRONG_COORDINATES="Предоставленные координаты некорректные" +NR_ENTER_COORDINATES="Широта, Долгота" +NR_NO_ITEMS_FOUND="Элементы не найдены" +NR_ITEM_IDS="Нет ID элементов" +NR_TOGGLE="Переключиться" +NR_EXPAND="Развернуть" +NR_COLLAPSE="Свернуть" +NR_SELECTED="Выбранные" +NR_MAXIMIZE="Максимизировать" +NR_MINIMIZE="Мнимизировать" +NR_SELECTION="Выбор" +NR_INSTALL="Установка" +NR_INSTALL_NOW="Установить сейчас" +NR_INSTALLED="Установлено" +NR_COMING_SOON="Скоро..." +NR_ROADMAP="Запланировано" +NR_MEDIA_VERSIONING="Использовать версии медиа" +NR_MEDIA_VERSIONING_DESC="Выберите, чтобы добавить дополнительный номер версии до конца носителя (JS / CSS) URL-адресов, чтобы заставить браузеры загружать правильный файл." +NR_LOAD_JQUERY="Загрузка jQuery" +NR_LOAD_JQUERY_DESC="Выберите загрузку ядра JQuery скрипт. Вы можете отключить эту функцию, если у вас есть конфликты, или если ваш шаблон или другие расширения загружают собственную версию JQuery." +NR_SELECT_CURRENCY="Выберите валюту" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Кампания" +NR_ASSIGN_CONVERTFORMS_DESC="Нацеливаться на посетителей, которые подписались на конкретную рекламную кампанию компонента ConvertForms" +NR_CONVERTFORMS_LIST_DESC="Выберите компанию компонента ConvertForm для назначения:" +NR_LEFT="Лево" +NR_CENTER="Центр" +NR_RIGHT="Право" +NR_BOTTOM="Низ" +NR_TOP="Верх" +NR_AUTO="Авто" +NR_CUSTOM="Пользовательский" +NR_UPLOAD="Загрузка" +NR_IMAGE="Изображение" +NR_INTRO_IMAGE="Предварительное изображение" +NR_FULL_IMAGE="Полное изображение" +NR_IMAGE_SELECT="Выбрать изображение" +NR_IMAGE_SIZE_COVER="Обложка" +NR_IMAGE_SIZE_CONTAIN="Содержит" +NR_REPEAT="Повторять" +NR_REPEAT_X="Повторять по X" +NR_REPEAT_Y="Повторять по Y" +NR_REPEAT_NO="Не повторять" +NR_FIELD_STATE_DESC="Установить состояние элемента" +NR_CREATED_DATE="Дата создания" +NR_CREATED_DATE_DESC="Дата создания элемента" +NR_MODIFIFED_DATE="Дата изменения" +NR_MODIFIFED_DATE_DESC="Дата изменения элемента" +NR_CATEGORIES="Категория" +NR_CATEGORIES_DESC="Выберите категорию для назначения." +NR_ALSO_ON_CHILD_ITEMS="Также и для вложенных объектов" +NR_ALSO_ON_CHILD_ITEMS_DESC="Назначить ли выбранные объекты также и вложенным объектам?" +NR_PAGE_TYPE="Тип страницы" +NR_PAGE_TYPES="Типы страниц" +NR_PAGE_TYPES_DESC="Выбрать на страницах какого типа данное назначение будет активным." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +NR_CATEGORY_VIEW="Category View" +NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +NR_ARTICLES="Материалы" +NR_ARTICLES_DESC="Выберите материал для назначения." +NR_ARTICLE="Материал" +NR_ARTICLE_AUTHORS="Авторы" +NR_ARTICLE_AUTHORS_DESC="Выберите автора для назначения." +NR_ONLY="Только" +NR_OTHERS="Другие" +NR_SMARTTAGS="Умные теги" +NR_SMARTTAGS_SHOW="Показать сообразительные метки" +NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +NR_CONTACT_US="Свяжитесь с нами" +NR_FONT_COLOR="Цвет шрифта" +NR_FONT_SIZE="Размер шрифта" +NR_FONT_SIZE_DESC="Выберите размер шрифта в пикселях" +NR_TEXT="Текст" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Включить для переопределения выданных данных" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Включает выдачу данных расширения если макет страницы (tmpl) был переопределен. Пример: tmpl=component или tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Включить для переопределения формата" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Включает выдачу данных расширения если формат страницы был выполнен только в HTML. Пример: format=raw or format=json." +NR_GEOLOCATING="Геопринадлежность" +NR_GEOLOCATING_DESC="Геопринадлежность не всегда точна на 100%. Она основана на IP адресе посетителя. Не все IP адреса постоянны или известны." +NR_CITY="City" +NR_CITY_NAME="City Name" +NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +NR_CONTINENT="Continent" +NR_REGION="Region" +NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +NR_ASSIGN_COUNTRIES="Страна" +NR_ASSIGN_COUNTRIES_DESC2="Нацеливаться на посетителей, которые физически находятся в определенной стране" +NR_ASSIGN_COUNTRIES_DESC="Выберите страну для назначения" +NR_ASSIGN_CONTINENTS="Континент" +NR_ASSIGN_CONTINENTS_DESC="Выберите континенты для назначения" +NR_ASSIGN_CONTINENTS_DESC2="Нацелиться на посетителей, которые физически находятся на определенном континенте" +NR_ICONTACT_ACCOUNTID_ERROR="Не удалось извлечь ID номер iContact AccountID" +NR_TAG_CLIENTDEVICE="Visitor Device Type" +NR_TAG_CLIENTOS="Visitor Operating System" +NR_TAG_CLIENTBROWSER="Visitor Browser" +NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +NR_TAG_IP="Visitor IP Address" +NR_TAG_URL="Page URL" +NR_TAG_URLENCODED="Page URL Encoded" +NR_TAG_URLPATH="Page Path" +NR_TAG_REFERRER="Page Referrer" +NR_TAG_SITENAME="Site Name" +NR_TAG_SITEURL="Site URL" +NR_TAG_PAGETITLE="Page Title" +NR_TAG_PAGEDESC="Page Meta Description" +NR_TAG_PAGELANG="Page Language Code" +NR_TAG_USERID="ID номер пользователя" +NR_TAG_USERNAME="Полное имя пользователя" +NR_TAG_USERLOGIN="Логин пользователя" +NR_TAG_USEREMAIL="Адрес эл.почты пользователя" +NR_TAG_USERFIRSTNAME="Имя пользователя" +NR_TAG_USERLASTNAME="Фамилия пользователя" +NR_TAG_USERGROUPS="User Groups IDs" +NR_TAG_DATE="Date" +NR_TAG_TIME="Time" +NR_TAG_RANDOMID="Random ID" +NR_ICON="Иконка" +NR_SELECT_MODULE="Выбрать модуль" +NR_SELECT_CONTINENT="Выбрать континент" +NR_SELECT_COUNTRY="Выбрать страну" +NR_PLUGIN="Плагин" +NR_GMAP_KEY="Ключ Google Maps API Key" +NR_GMAP_KEY_DESC="Расширения от Tassos.gr используют ключ ' Google Maps API Key'. Если у Вас возникают какие-либо проблемы с загрузкой карт сервиса Google Map на Ваши страницы, то скорее всего Вам необходимо ввести свой собственный ключ API от Google Map." +NR_GMAP_FIND_KEY="Получить ключ API" +NR_ARE_YOU_SURE="Вы действительно желаете выполнить это действие?" +NR_CUSTOMURL="Произвольный URL" +NR_SAMPLE="Пример" +NR_DEBUG="Отладка" +NR_CUSTOMURL="Произвольный URL" +NR_READMORE="Подробнее" +NR_IPADDRESS="IP адрес" +NR_ASSIGN_BROWSERS="Браузер" +NR_ASSIGN_BROWSERS_DESC="Выберите браузер для назначения" +NR_ASSIGN_BROWSERS_DESC2="Нацелиться на посетителей, которые просматривают Ваш сайт с конкретных браузеров, таких как Chrome, Firefox или Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Оперативная система" +NR_ASSIGN_OS_DESC="Выберите операционную систему для назначения" +NR_ASSIGN_OS_DESC2="Нацеливаться на посетителей, которые используют определенную операционную систему. Например, Windows, Linux или Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Число просмотров страницы" +NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +NR_ASSIGN_PAGEVIEWS_VIEWS="Просмотров" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Введите число просмотров страницы" +NR_ASSIGN_COOKIENAME_NAME="Название файла cookie" +NR_ASSIGN_COOKIENAME_NAME_DESC="Введите название файла cookie к которому будет привязано это действие" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Нацеливаться на посетителей, в браузере которых хранится конкретный файл cookie" +NR_FEWER_THAN="Меньше чем" +NR_GREATER_THAN="Больше чем" +NR_EXACTLY="В точности" +NR_EXISTS="Существует" +NR_IS_EQUAL="Равно" +NR_CONTAINS="Содержит" +NR_STARTS_WITH="Начать с" +NR_ENDS_WITH="Заканчивается с" +NR_ASSIGN_COOKIENAME_CONTENT="Контент файла Cookie" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Содержимое файла cookie" +NR_ASSIGN_IP_ADDRESSES_DESC2="Нацеливаться на посетилей с определенным IP адресом (или диапазоном IP адресов)" +NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="ID номер пользователя" +NR_ASSIGN_USER_ID_DESC="Нацеливаться на конкретных пользователей Joomla на основе их ID номера" +NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +NR_ASSIGN_COMPONENTS="Компонент" +NR_ASSIGN_COMPONENTS_DESC="Выберите компонент для назначения" +NR_ASSIGN_COMPONENTS_DESC2="Нацеливаться на посетителей, которые просматривают содержимое, созданное определенным компонентом" +NR_ASSIGN_TIMERANGE="Диапазон времени" +NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +NR_START_TIME="Время начала" +NR_END_TIME="Время окончания" +NR_START_PUBLISHING_TIMERANGE_DESC="Введите время начала публикации" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Введите время снятия с публикации" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_DESC="Для получения ключа сайта и секретного ключа своего домена, пройдите на https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Ключ сайта" +NR_RECAPTCHA_SITE_KEY_DESC="Используется в коде JavaScript, который предоставляется Вашим пользователям." +NR_RECAPTCHA_SECRET_KEY="Секретный ключ" +NR_RECAPTCHA_SECRET_KEY_DESC="Используется для соединния между Вашим сервером и сервером на котором находится reCaptcha. Обязательно держите этот ключ в секрете." +NR_RECAPTCHA_SITE_KEY_ERROR="Ключ 'Site Key' для Вашей reCaptcha либо отсутствует, либо недействителен" +NR_PREVIOUS_MONTH="Предыдущий месяц" +NR_NEXT_MONTH="Следующий месяц" +NR_ASSIGN_GROUP_PAGE_URL="Страница/URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Нацеливаться на посетителей, которые просматривают страницу, принадлежащую какому-либо конкретному пункту меню или ссылкам URL." +NR_ASSIGN_GROUP_DATETIME_DESC="Запустить коробку на основе даны и времени на Вашем сервере" +NR_ASSIGN_GROUP_USER_VISITOR="Посетитель/пользователь Joomla" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Нацеливаться на посетителей или пользователей, которые просмотрели определенное число веб страниц" +NR_ASSIGN_GROUP_PLATFORM="Платформа посетителя" +NR_ASSIGN_GROUP_PLATFORM_DESC="Нацеливаться на посетителей, которые используют мобильные устройства, Goolge Chrome или даже Windows" +NR_ASSIGN_GROUP_GEO_DESC="Нацеливаться на посетителей, которые физически находятся в определенном регионе" +NR_ASSIGN_GROUP_JCONTENT="Содержимое Joomla" +NR_ASSIGN_GROUP_JCONTENT_DESC="Нацеливаться на посетителей, просматривающих определенные материалы или категории материалов Joomla" +NR_ASSIGN_GROUP_SYSTEM="Система/интеграции" +NR_ASSIGN_GROUP_SYSTEM_DESC="Нацеливаться на посетителей, которые получили контент какого-либо конкретного стороннего расширения Joomla" +NR_ASSIGN_GROUP_ADVANCED="Расширенное нацеливание на посетителей" +NR_ASSIGN_USERGROUP_DESC="Нацеливаться на конкретную группу/группы пользователей Joomla" +NR_ASSIGN_ARTICLE_DESC="Нацеливаться на посетителей которые просматривают конкретные материалы, созданные в Joomla" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Нацеливаться на посетителей, которые просматривают конкретные категории Joomla" +NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Нацеливаться на посетителей, которые просматривают определенные объекты, категории или метки компонента К2" +NR_ASSIGN_K2_ITEMS="Объект" +NR_ASSIGN_K2_ITEMS_DESC="Нацеливаться на посетителей, которые просматривают какие-либо конкретные объекты, созданные компонентом К2." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Выберите объекты К2 для назначения" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Соответствовать определенным ключевым словам в содержимом объекта. Отделяйте значения запятой или вводите их по одному на строчку." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Соответствовать ключевым словам объекта. Отделяйте значения запятой или вводите их по одному на строчку." +NR_ASSIGN_K2_PAGETYPES_DESC="Нацеливаться на посетителей, которые просматривают определенные типы страниц компонента К2" +NR_ASSIGN_K2_ITEM_OPTION="Объект" +NR_ASSIGN_K2_LATEST_OPTION="Недавно созданное пользователями или в категориях" +NR_ASSIGN_K2_TAG_OPTION="Пометить страницу" +NR_ASSIGN_K2_CATEGORY_OPTION="Страница категории" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Форма правки объекта" +NR_ASSIGN_K2_USER_PAGE_OPTION="Страница пользователя (блог)" +NR_ASSIGN_K2_TAGS_DESC="Нацеливаться на посетителей, которые просматривают объекты компонента К2 с определенными метками" +NR_ASSIGN_K2_CATEGORIES_DESC="Нацеливаться на посетителей, которые просматривают определенную категорию компонента К2" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Категории" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Объекты" +NR_ASSIGN_PAGE_TYPES_DESC="Выберите типы страниц для назначения" +NR_ASSIGN_TAGS_DESC="Выберите метки для назначения" +NR_CONTENT_KEYWORDS="Ключевые слова в контенте" +NR_META_KEYWORDS="Ключевые слова" +NR_TAG="Метка" +NR_NORMAL="Нормальный" +NR_COMPACT="Компактный" +NR_LIGHT="Светлый" +NR_DARK="Темный" +NR_SIZE="Размер" +NR_THEME="Тема" +NR_SINGLE="Single" +NR_MULTIPLE="Multiple" +NR_RANGE="Диапазон" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Пожалуйста, подтвердите" +NR_RECAPTCHA_INVALID_SECRET_KEY="Неверный секретный ключ" +NR_PAGE="Страница" +NR_YOU_ARE_USING_EXTENSION="Вы используете %s %s" +NR_UPDATE="Обновить" +NR_SHOW_UPDATE_NOTIFICATION="Показать уведомление об обновлении" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Если выбрано, уведомление об обновлении будет отображаться в представлении основного компонента, когда есть новая версия для этого расширения." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s доступен" +NR_ERROR_EMAIL_IS_DISABLED="Отправка почты отключена. Письма не могут быть отправлены." +NR_ASSIGN_ITEMS="Элемент" +NR_COUNTRY_AF="Афганистан" +NR_COUNTRY_AX="Аландские острова" +NR_COUNTRY_AL="Албания" +NR_COUNTRY_DZ="Алжир" +NR_COUNTRY_AS="Американское Самоа" +NR_COUNTRY_AD="Андорра" +NR_COUNTRY_AO="Ангола" +NR_COUNTRY_AI="Ангилья" +NR_COUNTRY_AQ="Антарктика" +NR_COUNTRY_AG="Антигуа и Барбуда" +NR_COUNTRY_AR="Аргентина" +NR_COUNTRY_AM="Армения" +NR_COUNTRY_AW="Аруба" +NR_COUNTRY_AU="Австралия" +NR_COUNTRY_AT="Австрия" +NR_COUNTRY_AZ="Азербайджан" +NR_COUNTRY_BS="Багамы" +NR_COUNTRY_BH="Бахрейн" +NR_COUNTRY_BD="Бангладеш" +NR_COUNTRY_BB="Барбадос" +NR_COUNTRY_BY="Беларусь" +NR_COUNTRY_BE="Бельгия" +NR_COUNTRY_BZ="Белиз" +NR_COUNTRY_BJ="Бенин" +NR_COUNTRY_BM="Bermuda" +NR_COUNTRY_BT="Бутан" +NR_COUNTRY_BO="Боливия" +NR_COUNTRY_BA="Босния и Герцеговина" +NR_COUNTRY_BW="Ботсвана" +NR_COUNTRY_BV="Остров Буве" +NR_COUNTRY_BR="Бразилия" +NR_COUNTRY_IO="Британская территория в Индийском океане" +NR_COUNTRY_BN="Бруней-Даруссалам" +NR_COUNTRY_BG="Болгария" +NR_COUNTRY_BF="Буркина-Фасо" +NR_COUNTRY_BI="Бурунди" +NR_COUNTRY_KH="Камбоджа" +NR_COUNTRY_CM="Камерун" +NR_COUNTRY_CA="Канада" +NR_COUNTRY_CV="Кабо-Верде" +NR_COUNTRY_KY="Каймановы острова" +NR_COUNTRY_CF="Центральноафриканская Республика" +NR_COUNTRY_TD="Чад" +NR_COUNTRY_CL="Чили" +NR_COUNTRY_CN="Китай" +NR_COUNTRY_CX="Остров Рождества" +NR_COUNTRY_CC="Кокосовые (Килинг) острова" +NR_COUNTRY_CO="Колумбия" +NR_COUNTRY_KM="Коморские острова" +NR_COUNTRY_CG="Конго" +NR_COUNTRY_CD="Конго, Демократическая Республика" +NR_COUNTRY_CK="Острова Кука" +NR_COUNTRY_CR="Коста-Рика" +NR_COUNTRY_CI="Кот-д'Ивуар" +NR_COUNTRY_HR="Хорватия" +NR_COUNTRY_CU="Куба" +; NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Кипр" +NR_COUNTRY_CZ="Чешская республика" +NR_COUNTRY_DK="Дания" +NR_COUNTRY_DJ="Джибути" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="Доминиканская Республика" +NR_COUNTRY_EC="Эквадор" +NR_COUNTRY_EG="Египет" +NR_COUNTRY_SV="Сальвадор" +NR_COUNTRY_GQ="Экваториальная Гвинея" +NR_COUNTRY_ER="Эритрея" +NR_COUNTRY_EE="Эстония" +NR_COUNTRY_ET="Эфиопия" +NR_COUNTRY_FK="Фолклендские (Мальвинские) острова" +NR_COUNTRY_FO="Фарерские острова" +NR_COUNTRY_FJ="Фиджи" +NR_COUNTRY_FI="Финляндия" +NR_COUNTRY_FR="Франция" +NR_COUNTRY_GF="Французская Гвиана" +NR_COUNTRY_PF="Французская Полинезия" +NR_COUNTRY_TF="Французские Южные Территории" +NR_COUNTRY_GA="Габон" +NR_COUNTRY_GM="Гамбия" +NR_COUNTRY_GE="Грузия" +NR_COUNTRY_DE="Германия" +NR_COUNTRY_GH="Гана" +NR_COUNTRY_GI="Гибралтар" +NR_COUNTRY_GR="Греция" +NR_COUNTRY_GL="Гренландия" +NR_COUNTRY_GD="Гренада" +NR_COUNTRY_GP="Гваделупа" +NR_COUNTRY_GU="Гуам" +NR_COUNTRY_GT="Гватемала" +NR_COUNTRY_GG="Гернси" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Гвинея-Бисау" +NR_COUNTRY_GY="Гайана" +NR_COUNTRY_HT="Гаити" +NR_COUNTRY_HM="Остров Херд и острова Макдональд" +NR_COUNTRY_VA="Святой Престол (город-государство Ватикан)" +NR_COUNTRY_HN="Гондурас" +NR_COUNTRY_HK="Гонконг" +NR_COUNTRY_HU="Венгрия" +NR_COUNTRY_IS="Исландия" +NR_COUNTRY_IN="Индия" +NR_COUNTRY_ID="Индонезия" +NR_COUNTRY_IR="Иран, Исламская Республика" +NR_COUNTRY_IQ="Ирак" +NR_COUNTRY_IE="Ирландия" +NR_COUNTRY_IM="Остров Мэн" +NR_COUNTRY_IL="Израиль" +NR_COUNTRY_IT="Италия" +NR_COUNTRY_JM="Ямайка" +NR_COUNTRY_JP="Япония" +NR_COUNTRY_JE="Джерси" +NR_COUNTRY_JO="Джордан" +NR_COUNTRY_KZ="Казахстан" +NR_COUNTRY_KE="Кения" +NR_COUNTRY_KI="Кирибати" +NR_COUNTRY_KP="Корея, Народно-Демократическая Республика" +NR_COUNTRY_KR="Республика Корея" +NR_COUNTRY_KW="Кувейт" +NR_COUNTRY_KG="Кыргызстан" +NR_COUNTRY_LA="Лаосская Народно-Демократическая Республика" +NR_COUNTRY_LV="Латвия" +NR_COUNTRY_LB="Ливан" +NR_COUNTRY_LS="Лесото" +NR_COUNTRY_LR="Либерия" +NR_COUNTRY_LY="Ливийская Арабская Джамахирия" +NR_COUNTRY_LI="Лихтенштейн" +NR_COUNTRY_LT="Литва" +NR_COUNTRY_LU="Люксембург" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Македония" +NR_COUNTRY_MG="Мадагаскар" +NR_COUNTRY_MW="Малави" +NR_COUNTRY_MY="Малайзия" +NR_COUNTRY_MV="Мальдивы" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Мальта" +NR_COUNTRY_MH="Маршалловы острова" +NR_COUNTRY_MQ="Мартиника" +NR_COUNTRY_MR="Мавритания" +NR_COUNTRY_MU="Маврикий" +NR_COUNTRY_YT="Майотта" +NR_COUNTRY_MX="Мексика" +NR_COUNTRY_FM="Микронезия, Федеративные Штаты" +NR_COUNTRY_MD="Республика Молдова" +NR_COUNTRY_MC="Монако" +NR_COUNTRY_MN="Монголия" +NR_COUNTRY_ME="Черногория" +NR_COUNTRY_MS="Монсеррат" +NR_COUNTRY_MA="Марокко" +NR_COUNTRY_MZ="Мозамбик" +NR_COUNTRY_MM="Мьянма" +NR_COUNTRY_NA="Намибия" +NR_COUNTRY_NR="Науру" +NR_COUNTRY_NM="Северная македония" +NR_COUNTRY_NP="Непал" +NR_COUNTRY_NL="Нидерланды" +NR_COUNTRY_AN="Нидерландские Антильские острова" +NR_COUNTRY_NC="Новая Каледония" +NR_COUNTRY_NZ="Новая Зеландия" +NR_COUNTRY_NI="Никарагуа" +NR_COUNTRY_NE="Нигер" +NR_COUNTRY_NG="Нигерия" +NR_COUNTRY_NU="Ниуэ" +NR_COUNTRY_NF="Остров Норфолк" +NR_COUNTRY_MP="Северные Марианские острова" +NR_COUNTRY_NO="Норвегия" +NR_COUNTRY_OM="Оман" +NR_COUNTRY_PK="Пакистан" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Палестинская территория" +NR_COUNTRY_PA="Панама" +NR_COUNTRY_PG="Папуа-Новая Гвинея" +NR_COUNTRY_PY="Парагвай" +NR_COUNTRY_PE="Перу" +NR_COUNTRY_PH="Филиппины" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Польша" +NR_COUNTRY_PT="Португалия" +NR_COUNTRY_PR="Пуэрто-Рико" +NR_COUNTRY_QA="Катар" +NR_COUNTRY_RE="Reunion" +NR_COUNTRY_RO="Румыния" +NR_COUNTRY_RU="Российская Федерация" +NR_COUNTRY_RW="Руанда" +NR_COUNTRY_SH="Святая Елена" +NR_COUNTRY_KN="Сент-Китс и Невис" +NR_COUNTRY_LC="Сент-Люсия" +NR_COUNTRY_PM="Сен-Пьер и Микелон" +NR_COUNTRY_VC="Сент-Винсент и Гренадины" +NR_COUNTRY_WS="Самоа" +NR_COUNTRY_SM="Сан-Марино" +NR_COUNTRY_ST="Сан-Томе и Принсипи" +NR_COUNTRY_SA="Саудовская Аравия" +NR_COUNTRY_SN="Сенегал" +NR_COUNTRY_RS="Сербия" +NR_COUNTRY_SC="Сейшельские острова" +NR_COUNTRY_SL="Сьерра-Леоне" +NR_COUNTRY_SG="Сингапур" +NR_COUNTRY_SK="Словакия" +NR_COUNTRY_SI="Словения" +NR_COUNTRY_SB="Соломоновы Острова" +NR_COUNTRY_SO="Сомали" +NR_COUNTRY_ZA="Южная Африка" +NR_COUNTRY_GS="Южная Георгия и Южные Сандвичевы острова" +NR_COUNTRY_ES="Испания" +NR_COUNTRY_LK="Шри-Ланка" +NR_COUNTRY_SD="Судан" +NR_COUNTRY_SS="Южный Судан" +NR_COUNTRY_SR="Суринам" +NR_COUNTRY_SJ="Шпицберген и Ян Майен" +NR_COUNTRY_SZ="Свазиленд" +NR_COUNTRY_SE="Швеция" +NR_COUNTRY_CH="Швейцария" +NR_COUNTRY_SY="Сирийская Арабская Республика" +NR_COUNTRY_TW="Тайвань" +NR_COUNTRY_TJ="Таджикистан" +NR_COUNTRY_TZ="Танзания, Объединенная Республика" +NR_COUNTRY_TH="Таиланд" +NR_COUNTRY_TL="Восточный Тимор" +NR_COUNTRY_TG="Того" +NR_COUNTRY_TK="Токелау" +NR_COUNTRY_TO="Тонга" +NR_COUNTRY_TT="Тринидад и Тобаго" +NR_COUNTRY_TN="Тунис" +NR_COUNTRY_TR="Турция" +NR_COUNTRY_TM="Туркменистан" +NR_COUNTRY_TC="Острова Теркс и Кайкос" +NR_COUNTRY_TV="Тувалу" +NR_COUNTRY_UG="Уганда" +NR_COUNTRY_UA="Украина" +NR_COUNTRY_AE="Объединенные Арабские Эмираты" +NR_COUNTRY_GB="Великобритания" +NR_COUNTRY_US="Соединенные Штаты" +NR_COUNTRY_UM="Малые отдаленные острова США" +NR_COUNTRY_UY="Уругвай" +NR_COUNTRY_UZ="Узбекистан" +NR_COUNTRY_VU="Вануату" +NR_COUNTRY_VE="Венесуэла" +NR_COUNTRY_VN="Вьетнам" +NR_COUNTRY_VG="Британские Виргинские острова" +NR_COUNTRY_VI="Виргинские острова, США" +NR_COUNTRY_WF="Уоллис и Футуна" +NR_COUNTRY_EH="Западная Сахара" +NR_COUNTRY_YE="Йемен" +NR_COUNTRY_ZM="Замбия" +NR_COUNTRY_ZW="Зимбабве" +NR_CONTINENT_AF="Африка" +NR_CONTINENT_AS="Азия" +NR_CONTINENT_EU="Европа" +NR_CONTINENT_NA="Северная Америка" +NR_CONTINENT_SA="Южная Америка" +NR_CONTINENT_OC="Океания" +NR_CONTINENT_AN="Антарктика" +NR_FRONTEND="Пользовательский интерфейс" +NR_BACKEND="Администрация" +NR_EMBED="Присоединен" +NR_RATE="Ставка %s" +NR_REPORT_ISSUE="Сообщить о проблеме" +NR_CANNOT_CREATE_FOLDER="Невозможно создать папку для перемещения файла. %s" +NR_CANNOT_MOVE_FILE="Невозможно переместить файл: %s" +NR_UPLOAD_INVALID_FILE_TYPE="Неподдерживаемый файл: %s. Допустимые типы файлов:%s" +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Невозможно загрузить файл: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" diff --git a/deployed/convertforms/plugins/system/nrframework/language/sl-SI/sl-SI.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/sl-SI/sl-SI.plg_system_nrframework.ini new file mode 100644 index 00000000..497d5954 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/sl-SI/sl-SI.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Sistem - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - uporablja se z Tassos.gr razširitvami" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Prezri" +NR_INCLUDE="Vključi" +NR_EXCLUDE="Izključi" +NR_SELECTION="Izbira" +NR_ASSIGN_MENU_NOITEM="Vključi id postavke" +NR_ASSIGN_MENU_NOITEM_DESC="Določite, kateri ne-menu se nastavi v URL-ju??" +; NR_ASSIGN_MENU_CHILD="Also on child items" +; NR_ASSIGN_MENU_CHILD_DESC="Also assign to child items of the selected items?" +NR_COPY_OF="Kopija %s" +; NR_ASSIGN_DATETIME_DESC="Target visitors based on your server's datetime" +NR_DATETIME="Datum, čas" +; NR_TIME="Time" +; NR_DATE="Date" +NR_DATETIME_DESC="Vnesite datum in čas za samodejno objavljanje/prekinitev objave" +; NR_START_PUBLISHING="Start Datetime" +NR_START_PUBLISHING_DESC="Vnesite začetni datum objave" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Vnesite končni datum objave" +NR_DATETIME_NOTE="Datum in čas uporablja časovne nastavitve vašega strežnika in nastavitve obiskovalca." +; NR_ASSIGN_PHP="PHP" +; NR_PHPCODE="PHP Code" +; NR_ASSIGN_PHP_DESC="Enter a piece of PHP code to evaluate." +; NR_ASSIGN_PHP_DESC2="Target visitors evaluating custom PHP code. The code must return the value true or false.

        For instance:
        return ($user->name == 'Tassos Marinos');" +; NR_ASSIGN_TIMEONSITE="Time on Site" +NR_SECONDS="Sekund" +NR_ASSIGN_TIMEONSITE_DESC="Vnesite trajanje v sekundah za primerjavo z uporabnikovim skupnim časom (trajanje obiska), porabljen za celotno spletno stran.

        Na primer:
        Če želite po 3 minutnem obisku prikazati okno, potem vnesite 180." +NR_ASSIGN_URLS="URL" +; NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +NR_ASSIGN_URLS_DESC="Vnesite (del) URL-jev za ujemanje.
        Vsak URL v svojo vrstico" +NR_ASSIGN_URLS_LIST="URL ujemanje" +; NR_ASSIGN_URLS_REGEX="Use Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="Za obravnavo določite regularni izraz" +; NR_ASSIGN_LANGS="Language" +; NR_ASSIGN_LANGS_DESC="Target visitors who are browsing your website in specific language" +NR_ASSIGN_LANGS_LIST_DESC="Določite jezik dodeljen za" +; NR_ASSIGN_DEVICES="Device" +; NR_ASSIGN_DEVICES_DESC2="Target visitors using specific device such as Mobile, Tablet or Desktop." +NR_ASSIGN_DEVICES_DESC="Določite naprave." +NR_ASSIGN_DEVICES_NOTE="Imejte v mislih, da odkrivanje naprav ni vedno 100% natančno. Uporabniki namreč lahko nastavijo brskalnik tako, da le ti posnemajo druge naprave." +; NR_MENU="Menu" +; NR_MENU_ITEMS="Menu Item" +; NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +; NR_USERGROUP="User Group" +; NR_ACCESSLEVEL="User Group" +NR_ACCESSLEVEL_DESC="Določite uporabniške skupine.

        Opomba: Če želite narediti da je javno, samo nastavite na prezri in ne izberite javno" +NR_SHOW_COPYRIGHT="Prikaži avtorske pravice" +NR_SHOW_COPYRIGHT_DESC="Če je izbrano, bodo avtorske pravice prikazane v administraciji. Razširitve Tassos.gr v ospredju nikoli ne prikazujejo avtorskih pravic in ne vsebujejo skritih reklamnih povezav." +NR_WIDTH="Širina" +NR_WIDTH_DESC="Vnesite širino v px, em ali %

        Primer: 400px" +NR_HEIGHT="Višina" +NR_HEIGHT_DESC="Vnesite višino v px, em ali %

        Primer 400px" +NR_PADDING="Odmik" +NR_PADDING_DESC="Vnesite odmik v px, em ali %

        Primer: 20px" +NR_MARGIN="Rob" +; NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +; NR_COLOR_HOVER="Hover Color" +NR_COLOR="Barva" +NR_COLOR_DESC="Določite barvo v HEX ali RGBA formatu." +NR_TEXT_COLOR="Barva besedila" +; NR_BACKGROUND="Background" +NR_BACKGROUND_COLOR="Barva ozadja" +NR_BACKGROUND_COLOR_DESC="Določite barvo ozadja v HEX ali RGBA formatu. Za onemogočanje vnesite 'none'. Za popolno prosojnost vnesite 'transparency'." +NR_URL_SHORTENING_FAILED="Krajšanje %s z %s ni možno. %s." +NR_EXPORT="Izvoz" +NR_IMPORT="Uvoz" +NR_PLEASE_CHOOSE_A_VALID_FILE="Določite pravilno ime datoteke" +NR_IMPORT_ITEMS="Uvoz postavk" +NR_PUBLISH_ITEMS="Objava postavk" +NR_AS_EXPORTED="Kot izvozi" +; NR_TITLE="Title" +NR_ACYMAILING="AcyMailing" +; NR_ACYMAILING_LIST="AcyMailing List" +; NR_ACYMAILING_LIST_DESC="Select AcyMailing lists to assign to." +; NR_ASSIGN_ACYMAILING_DESC="Target visitors who have subscribed to specific AcyMailing lists" +NR_AKEEBASUBS="Akeeba naročnine" +NR_AKEEBASUBS_LEVELS="Nivoji" +; NR_AKEEBASUBS_LEVELS_DESC="Select Akeeba Subscription levels to assign to." +; NR_ASSIGN_AKEEBASUBS_DESC="Target visitors who have subscribed to specific Akeeba Subscriptions" +; NR_MATCH="Match" +; NR_MATCH_DESC="The used matching method to compare the value" +NR_ASSIGN_MATCHING_METHOD="Metoda primerjanja" +NR_ASSIGN_MATCHING_METHOD_DESC="Ali se ujema?

        Vse
        Bo objavljeno če se VSEl od spodnjega ujema.

        Karkoli
        Bo objavljeno če se Karkoli (eno ali več) od spodnjega ujema.
        Dodelitev skupinam, kjer je izbrano 'Prezri', bodo prezrte." +NR_ANY="Karkoli" +; NR_ASSIGN_REFERRER="Referrer URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +NR_ONLY_AVAILABLE_IN_PRO="Samo v PRO različici" +NR_UPGRADE_TO_PRO="Nadgradi na PRO" +; NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +NR_LEFT_TO_RIGHT="Z leve na desno" +NR_RIGHT_TO_LEFT="Z desne na levo" +NR_BGIMAGE="Slika ozadja" +NR_BGIMAGE_DESC="Določite sliko ozadja" +NR_BGIMAGE_FILE="Slika" +NR_BGIMAGE_FILE_DESC="Izberite ali naložite sliko za ozadje" +NR_BGIMAGE_REPEAT="Ponovi" +NR_BGIMAGE_REPEAT_DESC="Določi, kako se bo slika ozadja ponavljala. Privzeto je, da se slika ponavlja v vodoravni in navpišni smeri.

        Ponovi: Slika se bo ponavljala v navpični in vodoravni smeri.

        Ponovi X: Slika se bo ponavljala samo v vodoravni smeri

        Ponovi Y: Slika se bo ponavljala samo v navpični smeri

        Brez ponavljanja: Slika ozadja se ne bo ponavljala." +NR_BGIMAGE_SIZE="Velikost" +NR_BGIMAGE_SIZE_DESC="Velikost slike za ozadje.

        Samodejno: Slika uporablja svojo širino in višino

        Prekrij: Slika bo popolnoma prekrila prostor za sliko ozadja. Nekateri deli ozadja ne bodo vidni

        Okvir: Slika se bo prilagodila okvirju

        100% 100%: Slika bo popolnoma prekrila prostor za prispevke" +NR_BGIMAGE_POSITION="Pozicija" +NR_BGIMAGE_POSITION_DESC="Pozicija slike za ozadje. Privzeto je, da se slika postavi v zgornji levi kot. Prva vrednost je vodoravna pozicija, druga pa navpična pozicija.

        Lahko uporabite eno izmed naprej določenih vrednosti, ali pa vnesete svoje vrednosti v procentih: x% y% ali pa v pikslih xPoz yPoz." +NR_RTL="Omogoči RTL" +NR_RTL_DESC="Smer besedila z desne proti levi se uporablja le pri arabščini, hebrejščini, sirskih in Tana jezikih" +NR_HORIZONTAL="Vodoravno" +NR_VERTICAL="Navpično" +NR_FORM_ORIENTATION="Smer obrazca" +NR_FORM_ORIENTATION_DESC="Določite smer obrazca" +NR_ASSIGN_CATEGORY="Kategorije" +NR_ASSIGN_CATEGORY_DESC="Določite kategorije" +NR_ASSIGN_CATEGORY_CHILD="Podrejene postavke" +NR_ASSIGN_CATEGORY_CHILD_DESC="Dodeli podrejene postavke" +NR_NEW="Nov" +NR_LIST="Seznam" +NR_DOCUMENTATION="Dokumentacija" +; NR_KNOWLEDGEBASE="Knowledgebase" +NR_FAQ="Pogosta vprašanja" +NR_INFORMATION="Informacija" +NR_EXTENSION="Razširitev" +NR_VERSION="Različica" +NR_CHANGELOG="Dnevnik sprememb" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +NR_DOWNLOAD_KEY="Prenos ključa" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +NR_DOWNLOAD_KEY_HOW="Da omogočite posodobitve %s preko Joomla posodobitev, potem potrebujete svoj ključ za prenos, katerega vnesete v Novarain Framework vtičnik" +NR_DOWNLOAD_KEY_FIND="Najdi ključ za prenos" +NR_DOWNLOAD_KEY_UPDATE="Posodobi ključ za prenos" +NR_OK="Vredu" +NR_MISSING="Manjkajoče" +NR_LICENSE="Licenca" +NR_AUTHOR="Avtor" +NR_FOLLOWME="Sledi mi" +NR_FOLLOW="Sledi %s" +NR_TRANSLATE_INTEREST="Nam želite pomagati pri prevodu %s v vaš jezik?" +NR_TRANSIFEX_REQUEST="Pošljite zahtevek na Transifex" +NR_HELP_WITH_TRANSLATIONS="Pomoč pri prevodih" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +NR_ADVANCED="Napredno" +NR_USEGLOBAL="Uporabi globalno" +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +NR_NEVER="Nikoli" +NR_SECONDS="Sekund" +NR_MINUTES="Minute" +NR_HOURS="Ure" +NR_DAYS="Dnevi" +NR_SESSION="Seja" +NR_EVER="Vedno" +NR_COOKIE="Piškotek" +NR_BOTH="Oboje" +NR_NONE="Nič" +; NR_DESKTOPS="Desktop" +; NR_MOBILES="Mobile" +; NR_TABLETS="Tablet" +NR_PER_SESSION="Na sejo" +NR_PER_DAY="Na dan" +NR_PER_WEEK="Na vikend" +NR_PER_MONTH="Na mesec" +NR_FOREVER="Vedno" +NR_FEATURE_UNDER_DEV="Ta funkcija je v fazi razvoja" +; NR_LIKE_THIS_EXTENSION="Like this extension?" +; NR_LEAVE_A_REVIEW="Leave a review on JED" +; NR_SUPPORT="Support" +; NR_NEED_SUPPORT="Need support?" +; NR_DROP_EMAIL="Drop me an e-mail" +; NR_READ_DOCUMENTATION="Read the Documentation" +; NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +; NR_DASHBOARD="Dashboard" +; NR_NAME="Name" +; NR_WRONG_COORDINATES="The coordinates you provided are not valid" +; NR_ENTER_COORDINATES="Latitude,Longitude" +; NR_NO_ITEMS_FOUND="No Items Found" +; NR_ITEM_IDS="No Item IDs" +; NR_TOGGLE="Toggle" +; NR_EXPAND="Expand" +; NR_COLLAPSE="Collapse" +; NR_SELECTED="Selected" +; NR_MAXIMIZE="Maximize" +; NR_MINIMIZE="Minimize" +NR_SELECTION="Izbira" +; NR_INSTALL="Install" +; NR_INSTALL_NOW="Install Now" +; NR_INSTALLED="Installed" +; NR_COMING_SOON="Coming soon" +; NR_ROADMAP="On the roadmap" +; NR_MEDIA_VERSIONING="Use Media Versioning" +; NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +; NR_LOAD_JQUERY="Load jQuery" +; NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +; NR_SELECT_CURRENCY="Select a Currency" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +; NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +; NR_LEFT="Left" +; NR_CENTER="Center" +; NR_RIGHT="Right" +; NR_BOTTOM="Bottom" +; NR_TOP="Top" +; NR_AUTO="Auto" +; NR_CUSTOM="Custom" +; NR_UPLOAD="Upload" +; NR_IMAGE="Image" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +; NR_IMAGE_SELECT="Select Image" +; NR_IMAGE_SIZE_COVER="Cover" +; NR_IMAGE_SIZE_CONTAIN="Contain" +; NR_REPEAT="Repeat" +; NR_REPEAT_X="Repeat x" +; NR_REPEAT_Y="Repeat y" +; NR_REPEAT_NO="No repeat" +; NR_FIELD_STATE_DESC="Set item's state" +; NR_CREATED_DATE="Created Date" +; NR_CREATED_DATE_DESC="The date the item was created" +; NR_MODIFIFED_DATE="Modified Date" +; NR_MODIFIFED_DATE_DESC="The date that the item was last modified." +; NR_CATEGORIES="Category" +; NR_CATEGORIES_DESC="Select the categories to assign to." +; NR_ALSO_ON_CHILD_ITEMS="Also on child items" +; NR_ALSO_ON_CHILD_ITEMS_DESC="Also assign to child items of the selected items?" +; NR_PAGE_TYPE="Page type" +; NR_PAGE_TYPES="Page types" +; NR_PAGE_TYPES_DESC="Select on what page types the assignment should be active." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +; NR_ARTICLES="Articles" +; NR_ARTICLES_DESC="Select the articles to assign to." +; NR_ARTICLE="Article" +; NR_ARTICLE_AUTHORS="Authors" +; NR_ARTICLE_AUTHORS_DESC="Select the authors to assign to." +; NR_ONLY="Only" +; NR_OTHERS="Others" +; NR_SMARTTAGS="Smart Tags" +; NR_SMARTTAGS_SHOW="Show Smart Tags" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +; NR_CONTACT_US="Contact us" +; NR_FONT_COLOR="Font Color" +; NR_FONT_SIZE="Font Size" +; NR_FONT_SIZE_DESC="Choose a font size in pixels" +; NR_TEXT="Text" +; NR_URL="URL" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE="Enable on Output Override" +; NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Enables the extension rendering when the page layout (tmpl) is overriden. Examples: tmpl=component or tmpl=modal." +; NR_EXECUTE_ON_FORMAT_OVERRIDE="Enable on Format Override" +; NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Enables the extension rendering when the page format is not other than HTML. Examples: format=raw or format=json." +; NR_GEOLOCATING="Geolocating" +; NR_GEOLOCATING_DESC="Geolocating is not always 100% accurate. The geolocation is based on the IP address of the visitor. Not all IP addresses are fixed or known." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +; NR_ASSIGN_COUNTRIES_DESC="Select the countries to assign to" +; NR_ASSIGN_CONTINENTS="Continent" +; NR_ASSIGN_CONTINENTS_DESC="Select the continents to assign to" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +; NR_ARE_YOU_SURE="Are you sure?" +; NR_CUSTOMURL="Custom URL" +; NR_SAMPLE="Sample" +; NR_DEBUG="Debug" +; NR_CUSTOMURL="Custom URL" +; NR_READMORE="Read More" +; NR_IPADDRESS="IP Address" +; NR_ASSIGN_BROWSERS="Browser" +; NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +; NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +; NR_CHROME="Chrome" +; NR_FIREFOX="Firefox" +; NR_EDGE="Edge" +; NR_IE="Internet Explorer" +; NR_SAFARI="Safari" +; NR_OPERA="Opera" +; NR_ASSIGN_OS="Operating System" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +; NR_LINUX="Linux" +; NR_MAC="MacOS" +; NR_ANDROID="Android" +; NR_IOS="iOS" +; NR_WINDOWS="Windows" +; NR_BLACKBERRY="Blackberry" +; NR_CHROMEOS="Chrome OS" +; NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +; NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/sv-SE/sv-SE.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/sv-SE/sv-SE.plg_system_nrframework.ini new file mode 100644 index 00000000..c688754d --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/sv-SE/sv-SE.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - används av Tassos.gr tillägg" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ignorera" +NR_INCLUDE="Inkludera" +NR_EXCLUDE="Exkludera" +NR_SELECTION="Urval" +NR_ASSIGN_MENU_NOITEM="Inkludera inga itemID" +NR_ASSIGN_MENU_NOITEM_DESC="Tilldela även när inget meny ItemID finns i URLen?" +NR_ASSIGN_MENU_CHILD="Även på underliggande objekt" +NR_ASSIGN_MENU_CHILD_DESC="Tilldela även underliggande objekt till de valda objekten?" +NR_COPY_OF="Kopia av %s" +NR_ASSIGN_DATETIME_DESC="Rikta till besökare baserat på din servers datum/tid" +NR_DATETIME="Datum/Tid" +NR_TIME="Tid" +NR_DATE="Datum" +NR_DATETIME_DESC="Ange datum/tid att auto publicera/avpublicera." +NR_START_PUBLISHING="Start Datum/Tid" +NR_START_PUBLISHING_DESC="Ange datum att starta publicering." +NR_FINISH_PUBLISHING="Slut Datum/Tid" +NR_FINISH_PUBLISHING_DESC="Ange datum att avsluta publicering." +NR_DATETIME_NOTE="Tilldelning för datum och tid använder DIN SERVERS datum/tid, inte besökarnas system." +NR_ASSIGN_PHP="PHP" +NR_PHPCODE="PHP-kod" +NR_ASSIGN_PHP_DESC="Ange PHP-kod att utvärdera." +NR_ASSIGN_PHP_DESC2="Rikta till besökare genom att utvärdera anpassad PHP-kod. Koden måste returnera värdet true eller false.

        Till exempel:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Tid på webbplatsen" +NR_SECONDS="Sekunder" +NR_ASSIGN_TIMEONSITE_DESC="Ange varaktighet i sekunder för att jämföra med användarens totala tid (besökslängd) på hela din webbplats .

        Example:
        Om du vill visa en ruta efter att användaren har vistats 3 minuter på hela webbplatsen, ange 180." +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Rikta till besökare som surfar på specifika URLer." +NR_ASSIGN_URLS_DESC="Ange (del av) URLer som ska matchas. Använd en ny rad för varje annan matchning." +NR_ASSIGN_URLS_LIST="URL matchning" +NR_ASSIGN_URLS_REGEX="Använd Regular Expressions" +NR_ASSIGN_URLS_REGEX_DESC="Välj för att behandla värdet som regular expressions." +NR_ASSIGN_LANGS="Språk" +NR_ASSIGN_LANGS_DESC="Rikta till besökare som surfar på din webbplats med ett specifikt språk" +NR_ASSIGN_LANGS_LIST_DESC="Välj de språk du vill tilldela" +NR_ASSIGN_DEVICES="Enhet" +NR_ASSIGN_DEVICES_DESC2="Rikta till besökare med en specifik enhet som mobil, surfplatta eller stationär dator." +NR_ASSIGN_DEVICES_DESC="Välj de enheter du vill tilldela." +NR_ASSIGN_DEVICES_NOTE="Tänk på att enhetsdetektering inte alltid är 100% korrekt. Användare kan ställa in sin webbläsare att efterlikna andra enheter" +NR_MENU="Meny" +NR_MENU_ITEMS="Menyobjekt" +NR_MENU_ITEMS_DESC="Rikta till besökare som surfar till specifika menyalternativ" +NR_USERGROUP="Användargrupp" +NR_ACCESSLEVEL="Användargrupp" +NR_ACCESSLEVEL_DESC="Välj de användargrupper du vill tilldela.

        Obs: Om du vill göra det offentligt, ställer du bara in Ignorera och väljer inte Public." +NR_SHOW_COPYRIGHT="Visa Copyright" +NR_SHOW_COPYRIGHT_DESC="Om valt, kommer extra copyrightinformation att visas i administratörsvyerna. Tassos.gr-tillägg visar aldrig copyrightinformation eller bakåtlänkar i frontend." +NR_WIDTH="Bredd" +NR_WIDTH_DESC="Ange bredd i px, em eller%

        Exempel: 400px" +NR_HEIGHT="Höjd" +NR_HEIGHT_DESC="Ange höjd i px, em eller%

        Exempel: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Ange padding i px, em eller%

        Exempel: 20px" +NR_MARGIN="Marginal" +NR_MARGIN_DESC="CSS-marginal används för att skapa utrymme runt rutan och ställa in storleken på det vita utrymmet utanför ramen i pixlar eller i%.

        Exempel 1: 25px
        Exempel 2: 5%

        Ange marginalen för varje sida [övre höger nedre vänster]:

        Bara översidan: 25px 0 0 0
        Bara höger sida: 0 25px 0 0
        Bara nedre sidan: 0 0 25px 0
        Bara vänster sida: 0 0 0 25px" +NR_COLOR_HOVER="Hoverfärg" +NR_COLOR="Färg" +NR_COLOR_DESC="Definiera en färg i HEX- eller RGBA-format." +NR_TEXT_COLOR="Textfärg" +NR_BACKGROUND="Bakgrund" +NR_BACKGROUND_COLOR="Bakgrundsfärg" +NR_BACKGROUND_COLOR_DESC="Definiera en bakgrundsfärg i HEX- eller RGBA-format. För att inaktivera, ange 'none'. För absolut transparens anger du 'transparent'." +NR_URL_SHORTENING_FAILED="Förkortning av %s med %s misslyckades. %s." +NR_EXPORT="Exportera" +NR_IMPORT="Importera" +NR_PLEASE_CHOOSE_A_VALID_FILE="Välj ett giltigt filnamn." +NR_IMPORT_ITEMS="Importera objekt" +NR_PUBLISH_ITEMS="Publicera objekt" +NR_AS_EXPORTED="Som exporterat" +NR_TITLE="Titel" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="AcyMailing lista" +NR_ACYMAILING_LIST_DESC="Välj AcyMailing listor att tilldelas.." +NR_ASSIGN_ACYMAILING_DESC="Rikta till besökare som har prenumererat på specifika AcyMailing-listor." +NR_AKEEBASUBS="Akeeba prenumerationer" +NR_AKEEBASUBS_LEVELS="Nivåer" +NR_AKEEBASUBS_LEVELS_DESC="Välj Akeeba-prenumerationsnivåer som du vill tilldela." +NR_ASSIGN_AKEEBASUBS_DESC="Rikta till besökare som har prenumererat på specifika Akeeba-prenumerationsplaner" +NR_MATCH="Matchning" +NR_MATCH_DESC="Den använda matchningsmetoden för att jämföra värdet" +NR_ASSIGN_MATCHING_METHOD="Matchningsmetod" +NR_ASSIGN_MATCHING_METHOD_DESC="Ska alla eller några uppgifter matchas?

        All
        Kommer att publiceras om Alla nedanstående uppgifter matchar.

        Någon
        Kommer att publiceras om Någon (en eller fler) av nedanstående uppgifter matchar.
        Uppgiftsgrupper där "_QQ_"Ignorera"_QQ_" är valt kommer att ignoreras." +NR_ANY="Någon" +NR_ASSIGN_REFERRER="Hänvisande URL" +NR_ASSIGN_REFERRER_DESC2="Rikta till besökare som kommer till din webbplats från en specifik trafikkälla" +NR_ASSIGN_REFERRER_DESC="Ange en Hänvisande URL per rad: T.ex.

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Tänk på att URL-hänvisningsupptäckt inte alltid är 100% korrekt. Vissa servrar kan använda proxyservrar som tar bort denna information och den kan lätt förfalskas." +NR_PROFEATURE_HEADER="%s är en PRO-funktion" +NR_PROFEATURE_DESC="Tyvärr, %s är inte tillgänglig i din prenumerationsplan. Uppgradera till PRO-planen för att låsa upp alla dessa fantastiska funktioner." +NR_PROFEATURE_DISCOUNT="Bonus: %s gratis-användare får 20% rabatt på ordinarie pris, tillämpas automatiskt i kassan." +NR_ONLY_AVAILABLE_IN_PRO="Endast tillgänglig i PRO-versionen" +NR_UPGRADE_TO_PRO="Uppgradera till PRO" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Uppgradera till Pro-versionen för att låsa upp den" +NR_UPGRADE_TO_PRO_VERSION="Fantastiskt! Bara ett steg kvar. Klicka på knappen nedan för att slutföra uppgraderingen till Pro-versionen." +NR_UNLOCK_PRO_FEATURE="Lås upp Pro-funktioner" +NR_USING_THE_FREE_VERSION="Du använder GRATIS versionen av Convert Forms. Köp PRO-versionen för full funktionalitet." +NR_LEFT_TO_RIGHT="Vänster till höger" +NR_RIGHT_TO_LEFT="Höger till vänster" +NR_BGIMAGE="Bakgrundsbild" +NR_BGIMAGE_DESC="Ställer in en bakgrundsbild." +NR_BGIMAGE_FILE="Bild" +NR_BGIMAGE_FILE_DESC="Välj eller ladda upp en fil för bakgrundsbild." +NR_BGIMAGE_REPEAT="Upprepa" +NR_BGIMAGE_REPEAT_DESC="Egenskapen bakgrundsupprepning anger om / hur en bakgrundsbild ska upprepas. Som standard upprepas en bakgrundsbild både vertikalt och horisontellt.

        Upprepa: Bakgrundsbilden upprepas både vertikalt och horisontellt.

        Upprepa-x: Bakgrundsbilden upprepas endast horisontellt

        Upprepa-y: Bakgrundsbilden upprepas endast vertikalt

        Ingen upprepning: Bakgrundsbilden upprepas inte" +NR_BGIMAGE_SIZE="Storlek" +NR_BGIMAGE_SIZE_DESC="Ange bakgrundsbildens storlek.

        Auto: Bakgrundsbilden innehåller dess bredd och höjd

        Omslag: Skala bakgrundsbilden så stor som möjligt så att bakgrundsområdet täcks helt av bakgrundsbilden. Vissa delar av bakgrundsbilden kanske inte syns inom bakgrundsområdetVissa delar av bakgrundsbilden kanske inte syns inom bakgrundsområdet

        Innehålll: Skala bilden till den största storleken så att både dess bredd och höjd kan passa in i innehållsområdet

        100% 100%: Sträck ut bakgrundsbilden för att helt täcka innehållsområdet." +NR_BGIMAGE_POSITION="Position" +NR_BGIMAGE_POSITION_DESC="Egenskapen bakgrundsposition ställer in startpositionen för en bakgrundsbild. Som standard placeras en bakgrundsbild längst upp till vänster. Det första värdet är det horisontella läget och det andra värdet är det vertikala.

        Du kan använda något av de fördefinierade värdena eller ange ett anpassat värde i procent: x% y% eller i pixel xPos yPos." +NR_RTL="Aktivera RTL" +NR_RTL_DESC="Textriktningen från höger till vänster är viktig för skrft från höger till vänster som arabiska, hebreiska, syriska och taana." +NR_HORIZONTAL="Horisontell" +NR_VERTICAL="Vertikal" +NR_FORM_ORIENTATION="Formulär riktning" +NR_FORM_ORIENTATION_DESC="Välj formulärets riktning." +NR_ASSIGN_CATEGORY="Kategorier" +NR_ASSIGN_CATEGORY_DESC="Välj kategorier att tilldela." +NR_ASSIGN_CATEGORY_CHILD="Även underliggande objekt" +NR_ASSIGN_CATEGORY_CHILD_DESC="Tilldela även underliggande objekt till de valda objekten?" +NR_NEW="Ny" +NR_LIST="Lista" +NR_DOCUMENTATION="Dokumentation" +NR_KNOWLEDGEBASE="Knowledgebase" +NR_FAQ="FAQ" +NR_INFORMATION="Information" +NR_EXTENSION="Tillägg" +NR_VERSION="Version" +NR_CHANGELOG="Ändringslogg" +NR_DOWNLOAD="Ladda ner" +NR_DOWNLOAD_KEY_MISSING="Nedladdningsnyckel saknas" +NR_DOWNLOAD_KEY="Nedladdningsnyckel" +NR_DOWNLOAD_KEY_DESC="För att hitta din nedladdningsnyckel loggar du in på ditt konto på Tassos.gr och går till Downloads section.

        Obs! Om du ställer in nedladdningsnyckeln här uppgraderas inte gratisversioner till Pro-versioner. För att låsa upp Pro-funktioner måste du också installera Pro-versionen över gratisversionen." +NR_DOWNLOAD_KEY_HOW="För att kunna uppdatera %s via Joomla uppdatering, måste du ange din uppdateringsnyckel i Novarain Framework Plugins inställningar." +NR_DOWNLOAD_KEY_FIND="Hitta nedladdningsnyckel" +NR_DOWNLOAD_KEY_UPDATE="Uppdatera nedladdningsnyckel" +NR_OK="Ok" +NR_MISSING="Saknas" +NR_LICENSE="Licens" +NR_AUTHOR="Författare" +NR_FOLLOWME="Följ mig" +NR_FOLLOW="Följ" +NR_TRANSLATE_INTEREST="Skulle du vara intresserad av att hjälpa till med översättningen av %s till ditt språk?" +NR_TRANSIFEX_REQUEST="Skicka mig en förfrågan på Transifex" +NR_HELP_WITH_TRANSLATIONS="Hjälp till med översättningar" +NR_PUBLISHING_ASSIGNMENTS="Publiceringsregler" +NR_ADVANCED="Avancerat" +NR_USEGLOBAL="Använd Global" +NR_WEEKDAY="Veckodag" +NR_MONTH="Månad" +NR_MONDAY="Måndag" +NR_TUESDAY="Tisdag" +NR_WEDNESDAY="Onsdag" +NR_THURSDAY="Torsdag" +NR_FRIDAY="Fredag" +NR_SATURDAY="Lördag" +NR_WEEKEND="Helg" +NR_WEEKDAYS="Veckodagar" +NR_SUNDAY="Söndag" +NR_JANUARY="Januari" +NR_FEBRUARY="Februari" +NR_MARCH="Mars" +NR_APRIL="April" +NR_MAY="Maj" +NR_JUNE="Juni" +NR_JULY="Juli" +NR_AUGUST="Augusti" +NR_SEPTEMBER="September" +NR_OCTOBER="Oktober" +NR_NOVEMBER="November" +NR_DECEMBER="December" +NR_NEVER="Aldrig" +NR_SECONDS="Sekunder" +NR_MINUTES="Minuter" +NR_HOURS="Timmar" +NR_DAYS="Dagar" +NR_SESSION="Session" +NR_EVER="Välj de kategorier du vill tilldela." +NR_COOKIE="Cookie" +NR_BOTH="Båda" +NR_NONE="Ingen" +NR_DESKTOPS="Dator" +NR_MOBILES="Mobil" +NR_TABLETS="Läsplatta" +NR_PER_SESSION="Per Session" +NR_PER_DAY="Per dag" +NR_PER_WEEK="Per vecka" +NR_PER_MONTH="Per månad" +NR_FOREVER="Evig" +NR_FEATURE_UNDER_DEV="Denna funktion är under utveckling." +NR_LIKE_THIS_EXTENSION="Gillar du det här tillägget?" +NR_LEAVE_A_REVIEW="Skriv en recension på JED" +NR_SUPPORT="Support" +NR_NEED_SUPPORT="Behöver du support?" +NR_DROP_EMAIL="Skicka ett mail till mig" +NR_READ_DOCUMENTATION="Läs dokumentationen" +NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +NR_DASHBOARD="Kontrollpanel" +NR_NAME="Namn" +NR_WRONG_COORDINATES="koordinater du angav är ogiltiga." +NR_ENTER_COORDINATES="Latitude,Longitud" +NR_NO_ITEMS_FOUND="Hittade inga objekt" +NR_ITEM_IDS="Det finns inga objekt-IDn" +NR_TOGGLE="Växla" +NR_EXPAND="Expandera" +NR_COLLAPSE="Kollapsa" +NR_SELECTED="Vald" +NR_MAXIMIZE="Maximera" +NR_MINIMIZE="Minimera" +NR_SELECTION="Urval" +NR_INSTALL="Installera" +NR_INSTALL_NOW="Installera nu" +NR_INSTALLED="Installerad" +NR_COMING_SOON="Kommer snart" +NR_ROADMAP="I utvecklingsplanen" +NR_MEDIA_VERSIONING="Använd Media versionshantering" +NR_MEDIA_VERSIONING_DESC="Välj för att lägga till tilläggets versionsnummer i slutet av media (js / css) -webbadresser, för att få webbläsare att tvinga in rätt fil." +NR_LOAD_JQUERY="Ladda jQuery" +NR_LOAD_JQUERY_DESC="Välj för att ladda kärnans jQuery script. Du kan inaktivera detta om du upplever konflikter om din mall eller andra tillägg laddar sin egen version av jQuery." +NR_SELECT_CURRENCY="Välj en valuta" +NR_CONVERTFORMS="Convert Forms" +NR_CONVERTFORMS_LIST="Kampanj" +NR_ASSIGN_CONVERTFORMS_DESC="Rikta till besökare som har prenumererat på specifika ConvertForms-kampanjer." +NR_CONVERTFORMS_LIST_DESC="Välj ConvertForms-kampanjer att tilldela." +NR_LEFT="Vänster" +NR_CENTER="Centrera" +NR_RIGHT="Höger" +NR_BOTTOM="Nederkant" +NR_TOP="Överkant" +NR_AUTO="Auto" +NR_CUSTOM="Anpassad" +NR_UPLOAD="Ladda upp" +NR_IMAGE="Bild" +NR_INTRO_IMAGE="Ingressbild" +NR_FULL_IMAGE="Fullstor bild" +NR_IMAGE_SELECT="Välj bild" +NR_IMAGE_SIZE_COVER="Omslag" +NR_IMAGE_SIZE_CONTAIN="Innehåll" +NR_REPEAT="Upprepa" +NR_REPEAT_X="Upprepa-x" +NR_REPEAT_Y="Upprepa-y" +NR_REPEAT_NO="Ingen upprepning" +NR_FIELD_STATE_DESC="Ange objektets status" +NR_CREATED_DATE="Skapad datum" +NR_CREATED_DATE_DESC="Datumet då objektet skapades." +NR_MODIFIFED_DATE="Ändrad datum" +NR_MODIFIFED_DATE_DESC="Datumet då objektet senast ändrades." +NR_CATEGORIES="Kategori" +NR_CATEGORIES_DESC="Välj de kategorier du vill tilldela." +NR_ALSO_ON_CHILD_ITEMS="Även underliggande objekt" +NR_ALSO_ON_CHILD_ITEMS_DESC="Tilldela även underliggande objekt till de valda objekten?" +NR_PAGE_TYPE="Sidtyp" +NR_PAGE_TYPES="Sidtyper" +NR_PAGE_TYPES_DESC="Välj på vilka sidtyper tilldelningen ska vara aktiv." +NR_CONTENT_VIEW_CATEGORY_BLOG="Kategori - Blogglayout" +NR_CONTENT_VIEW_CATEGORY_LIST="Kategori - Listlayout" +NR_CONTENT_VIEW_CATEGORIES="Lista Alla kategorier" +NR_CONTENT_VIEW_ARCHIVED="Arkiverade artiklar" +NR_CONTENT_VIEW_FEATURES="Utvalda artiklar" +NR_CONTENT_VIEW_CREATE_ARTICLE="Skapa artikel" +NR_CONTENT_VIEW_ARTICLE="En artikel" +NR_ARTICLE_VIEW_DESC="Aktivera för att ta hänsyn till artikelvyn" +NR_CATEGORY_VIEW="Kategorivy" +NR_CATEGORY_VIEW_DESC="Aktivera för att ta hänsyn till kategorivyn" +NR_ARTICLES="Artiklar" +NR_ARTICLES_DESC="Välj artiklar att tilldela." +NR_ARTICLE="Artikel" +NR_ARTICLE_AUTHORS="Författare" +NR_ARTICLE_AUTHORS_DESC="Välj de författare du vill tilldela." +NR_ONLY="Bara" +NR_OTHERS="Andra" +NR_SMARTTAGS="Smarta taggar" +NR_SMARTTAGS_SHOW="Visa Smarta taggar" +NR_SMARTTAGS_NOTFOUND="Hittade inga Smarta taggar" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Sök efter Smarta taggar" +NR_CONTACT_US="Kontakta oss" +NR_FONT_COLOR="Teckenfärg" +NR_FONT_SIZE="Teckenstorlek" +NR_FONT_SIZE_DESC="Välj teckenstorlek i pixlar" +NR_TEXT="Text" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Aktivera vid åsidosättning av utdata" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Aktiverar tilläggsrendering när sidlayouten (tmpl) åsidosätts. Exempel: tmpl=component eller tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Aktivera vid åsidosättning av format" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Aktiverar tilläggs rendering när sidformatet inte är annat än HTML. Examples: format=raw or format=json." +NR_GEOLOCATING="Geolokalisering" +NR_GEOLOCATING_DESC="Geolokalisering är inte alltid 100% korrekt. Geolokaliseringen baseras på besökarens IP-adress. Det är inte alla IP-adresser är fasta eller kända." +NR_CITY="Ort" +NR_CITY_NAME="Ortens namn" +NR_CONDITION_CITY_DESC="Ange ett stadsnamn på engelska. Ange flera städer åtskilda med komma." +NR_CONTINENT="Kontinent" +NR_REGION="Region" +NR_CONDITION_REGION_DESC="Värdet består av två delar, den tvåbokstavs ISO 3166-1 landskoden och regionskoden. Så värdet bör vara i följande form: COUNTRY_CODE-REGION_CODE. Klicka på länken Hitta en regionkod för en fullständig lista med regionkoder." +NR_ASSIGN_COUNTRIES="Land" +NR_ASSIGN_COUNTRIES_DESC2="Rikta till besökare som fysiskt befinner sig i ett visst land." +NR_ASSIGN_COUNTRIES_DESC="Välj länder du vill tilldela" +NR_ASSIGN_CONTINENTS="Kontinent" +NR_ASSIGN_CONTINENTS_DESC="Välj de kontinenter du vill tilldela." +NR_ASSIGN_CONTINENTS_DESC2="Rikta till besökare som fysiskt befinner sig i en viss kontinent" +NR_ICONTACT_ACCOUNTID_ERROR="Det gick inte att hämta iContact AccountID" +NR_TAG_CLIENTDEVICE="Besökarens enhetstyp" +NR_TAG_CLIENTOS="Besökarens operativsystem" +NR_TAG_CLIENTBROWSER="Besökarens webbläsare" +NR_TAG_CLIENTUSERAGENT="Besökarens agentsträng" +NR_TAG_IP="Besökarens IP-adress" +NR_TAG_URL="Sidans URL" +NR_TAG_URLENCODED="Sidans URL kodad" +NR_TAG_URLPATH="Sidans sökväg" +NR_TAG_REFERRER="Sidhänvisare" +NR_TAG_SITENAME="Webbplatsens namn" +NR_TAG_SITEURL="Webbplatsens URL" +NR_TAG_PAGETITLE="Sidans titel" +NR_TAG_PAGEDESC="Sidans metabeskrivning" +NR_TAG_PAGELANG="Sidans språk" +NR_TAG_USERID="Användar-ID" +NR_TAG_USERNAME="Namn" +NR_TAG_USERLOGIN="Användarnamn" +NR_TAG_USEREMAIL="E-post" +NR_TAG_USERFIRSTNAME="Förnamn" +NR_TAG_USERLASTNAME="Efternamn" +NR_TAG_USERGROUPS="Användargrupper IDn" +NR_TAG_DATE="Datum" +NR_TAG_TIME="Tid" +NR_TAG_RANDOMID="Slumpmässigt ID" +NR_ICON="Ikon" +NR_SELECT_MODULE="Välj en modul" +NR_SELECT_CONTINENT="Välj en kontinent" +NR_SELECT_COUNTRY="Välj ett land" +NR_PLUGIN="Plugin" +NR_GMAP_KEY="Google Maps API-nyckel" +NR_GMAP_KEY_DESC="Google Maps API-nyckel används av Tassos.gr-tillägg. Om du får problem med att en Google Map inte laddas måste du antagligen ange en egen API-nyckel." +NR_GMAP_FIND_KEY="Skaffa en API-nyckel" +NR_ARE_YOU_SURE="Är du säker?" +NR_CUSTOMURL="Anpassad URL" +NR_SAMPLE="Exempel" +NR_DEBUG="Felsök" +NR_CUSTOMURL="Anpassad URL" +NR_READMORE="Läs mer" +NR_IPADDRESS="IP-adress" +NR_ASSIGN_BROWSERS="Webbläsare" +NR_ASSIGN_BROWSERS_DESC="Välj de webbläsare du vill tilldela" +NR_ASSIGN_BROWSERS_DESC2="Rikta till besökare som surfar på din webbplats med specifika webbläsare, som Chrome, Firefox eller Internet Explorer." +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Edge" +NR_IE="Internet Explorer" +NR_SAFARI="Safari" +NR_OPERA="Opera" +NR_ASSIGN_OS="Operativsystem" +NR_ASSIGN_OS_DESC="Välj de operativsystem du vill tilldela." +NR_ASSIGN_OS_DESC2="Rikta till besökare som använder specifika operativsystem som Windows, Linux eller Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Antal sidvisningar" +NR_ASSIGN_PAGEVIEWS_DESC="Rikta till besökare som har visat ett visst antal sidor" +NR_ASSIGN_PAGEVIEWS_VIEWS="Sidvisningar" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Ange antalet sidvisningar" +NR_ASSIGN_COOKIENAME_NAME="Cookie namn" +NR_ASSIGN_COOKIENAME_NAME_DESC="Ange namnet på cookien du vill tilldela" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Rikta till besökare som har specifika cookies lagrade i sin webbläsare" +NR_FEWER_THAN="Mindre än" +NR_GREATER_THAN="Större än" +NR_EXACTLY="Exakt" +NR_EXISTS="Finns" +NR_IS_EQUAL="Lika med" +NR_CONTAINS="Innehåller" +NR_STARTS_WITH="Börjar med" +NR_ENDS_WITH="Slutar med" +NR_ASSIGN_COOKIENAME_CONTENT="Cookie innehåll" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Cookiens innehåll" +NR_ASSIGN_IP_ADDRESSES_DESC2="Rikta besökare som befinner sig bakom en specifik IP-adress (intervall)" +NR_ASSIGN_IP_ADDRESSES_DESC="Ange en lista med komma och/eller 'enter' separerad IP-adressee och intervall

        Exempel:
        127.0.0.1,
        192.10-120.2,
        168" +NR_ASSIGN_USER_ID="Användar-ID" +NR_ASSIGN_USER_ID_DESC="Rikta till specifika Joomla-användare efter deras ID" +NR_ASSIGN_USER_ID_SELECTION_DESC="Ange kommaseparerade Joomla användar-IDn" +NR_ASSIGN_COMPONENTS="Komponent" +NR_ASSIGN_COMPONENTS_DESC="Välj de komponenter du vill tilldela." +NR_ASSIGN_COMPONENTS_DESC2="Rikta till besökare som surfar till specifika komponenter" +NR_ASSIGN_TIMERANGE="Tidsintervall" +NR_ASSIGN_TIMERANGE_DESC="Rikta till besökare baserat på din servers tid" +NR_START_TIME="Starttid" +NR_END_TIME="Sluttid" +NR_START_PUBLISHING_TIMERANGE_DESC="Ange tid att starta publicering" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Ange tid att avsluta publicering" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_DESC="För att få en webbplatsnyckel och en hemlig nyckel för din domän, gå till https://www.google.com/recaptcha" +NR_RECAPTCHA_SITE_KEY="Webbplatsnyckel" +NR_RECAPTCHA_SITE_KEY_DESC="Används i JavaScript-koden som presenteras för dina användare." +NR_RECAPTCHA_SECRET_KEY="Hemlig nyckel" +NR_RECAPTCHA_SECRET_KEY_DESC="Används i kommunikationen mellan din server och reCAPTCHA-servern. Se till att hålla det hemligt." +NR_RECAPTCHA_SITE_KEY_ERROR="Webbplatsnyckeln för reCaptcha saknas eller är ogiltig" +NR_PREVIOUS_MONTH="Förra månaden" +NR_NEXT_MONTH="Nästa månad" +NR_ASSIGN_GROUP_PAGE_URL="Sidans URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Rikta till besökare som surfar till specifika menyalternativ eller URLer" +NR_ASSIGN_GROUP_DATETIME_DESC="Trigga en ruta baserat på din servers datum och tid" +NR_ASSIGN_GROUP_USER_VISITOR="Joomla användare / besökare" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Rikta till registrerade användare eller besökare som har tittat på ett visst antal sidor" +NR_ASSIGN_GROUP_PLATFORM="Besökares plattform" +NR_ASSIGN_GROUP_PLATFORM_DESC="Rikta till besökare som använder mobil, Google Chrome eller Windows." +NR_ASSIGN_GROUP_GEO_DESC="Rikta till besökare som fysiskt befinner sig i en viss region." +NR_ASSIGN_GROUP_JCONTENT="Joomla! innehåll" +NR_ASSIGN_GROUP_JCONTENT_DESC="Rikta till besökare som tittar på specifika Joomla-artiklar eller kategorier." +NR_ASSIGN_GROUP_SYSTEM="System / Integration" +NR_ASSIGN_GROUP_SYSTEM_DESC="Rikta till besökare som interagerat med specifika Joomla-tillägg från tredje part." +NR_ASSIGN_GROUP_ADVANCED="Avancerad inriktning till besökare" +NR_ASSIGN_USERGROUP_DESC="Rikta till specifika Joomla användargrupper" +NR_ASSIGN_ARTICLE_DESC="Rikta till besökare som tittar på specifika Joomla-artiklar." +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Rikta till besökare som tittar på specifika Joomla kategorier" +NR_EXTENSION_REQUIRED="%s komponenten kräver att %s plugin är aktiverad iför att fungera korrekt." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Rikta till besökare som surfar till specifika K2-artiklar, kategorier eller taggar." +NR_ASSIGN_K2_ITEMS="Objekt" +NR_ASSIGN_K2_ITEMS_DESC="Rikta till besökare som surfar till specifika K2-objekt." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Välj de K2-objekt du vill tilldela" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Matcha specifika nyckelord i objektens innehåll. Separera med komma eller ny rad." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Matcha med objektets metanyckelord. Separera med ett komma eller ny rad." +NR_ASSIGN_K2_PAGETYPES_DESC="Rikta till besökare som surfar till specifika K2-sidtyper" +NR_ASSIGN_K2_ITEM_OPTION="Objekt" +NR_ASSIGN_K2_LATEST_OPTION="Senaste objekten från användare eller kategorier" +NR_ASSIGN_K2_TAG_OPTION="Taggsida" +NR_ASSIGN_K2_CATEGORY_OPTION="Kategorisida" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Objekt redigeringsformulär" +NR_ASSIGN_K2_USER_PAGE_OPTION="Användarsida (blogg)" +NR_ASSIGN_K2_TAGS_DESC="Rikta till besökare som surfar på K2-objekt med specifika taggar" +NR_ASSIGN_K2_CATEGORIES_DESC="Rikta till besökare som surfar till specifika K2-kategorier." +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Kategorier" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Objekt" +NR_ASSIGN_PAGE_TYPES_DESC="Välj sidtyper som du vill tilldela" +NR_ASSIGN_TAGS_DESC="Välj taggarna du vill tilldela" +NR_CONTENT_KEYWORDS="Innehåll nyckelord" +NR_META_KEYWORDS="Meta nyckelord" +NR_TAG="Tagg" +NR_NORMAL="Normal" +NR_COMPACT="Kompakt" +NR_LIGHT="Ljus" +NR_DARK="Mörk" +NR_SIZE="Storlek" +NR_THEME="Tema" +NR_SINGLE="Enstaka" +NR_MULTIPLE="Flera" +NR_RANGE="Intervall" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Bekräfta" +NR_RECAPTCHA_INVALID_SECRET_KEY="Ogiltig hemlig nyckel" +NR_PAGE="Sida" +NR_YOU_ARE_USING_EXTENSION="Du använder%s%s" +NR_UPDATE="Uppdatera" +NR_SHOW_UPDATE_NOTIFICATION="Visa meddelande om uppdatering" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Om vald, visas en uppdateringsnotis i huvudkomponentvyn när det finns en ny version av detta tillägg." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s är tillgänglig" +NR_ERROR_EMAIL_IS_DISABLED="E-postsändning är avstängd. E-postmeddelanden kunde inte skickas." +NR_ASSIGN_ITEMS="Objekt" +NR_COUNTRY_AF="Afghanistan" +NR_COUNTRY_AX="Åland" +NR_COUNTRY_AL="Albanien" +NR_COUNTRY_DZ="Algeriet" +NR_COUNTRY_AS="Amerikanska Samoaöarna" +NR_COUNTRY_AD="Andorra" +NR_COUNTRY_AO="Angola" +NR_COUNTRY_AI="Anguilla" +NR_COUNTRY_AQ="Antarktis" +NR_COUNTRY_AG="Antigua och Barbuda" +NR_COUNTRY_AR="Argentina" +NR_COUNTRY_AM="Armenien" +NR_COUNTRY_AW="Aruba" +NR_COUNTRY_AU="Australien" +NR_COUNTRY_AT="Österrike" +NR_COUNTRY_AZ="Azerbaijan" +NR_COUNTRY_BS="Bahamas" +NR_COUNTRY_BH="Bahrain" +NR_COUNTRY_BD="Bangladesh" +NR_COUNTRY_BB="Barbados" +NR_COUNTRY_BY="Belarus" +NR_COUNTRY_BE="Belgien" +NR_COUNTRY_BZ="Belize" +NR_COUNTRY_BJ="Benin" +NR_COUNTRY_BM="Bermuda" +NR_COUNTRY_BQ_BO="Bonaire" +NR_COUNTRY_BQ_SA="Saba" +NR_COUNTRY_BQ_SE="Sint Eustatius" +NR_COUNTRY_BT="Bhutan" +NR_COUNTRY_BO="Bolivia" +NR_COUNTRY_BA="Bosnien och Hercegovina" +NR_COUNTRY_BW="Botswana" +NR_COUNTRY_BV="Bouvet Island" +NR_COUNTRY_BR="Brasilien" +NR_COUNTRY_IO="Brittiska territoriet i Indiska oceanen" +NR_COUNTRY_BN="Brunei Darussalam" +NR_COUNTRY_BG="Bulgarien" +NR_COUNTRY_BF="Burkina Faso" +NR_COUNTRY_BI="Burundi" +NR_COUNTRY_KH="Kambodja" +NR_COUNTRY_CM="Kamerun" +NR_COUNTRY_CA="Kanada" +NR_COUNTRY_CV="Cap Verde" +NR_COUNTRY_KY="Caymanöarna" +NR_COUNTRY_CF="Centralafrikanska republiken" +NR_COUNTRY_TD="Tchad" +NR_COUNTRY_CL="Chile" +NR_COUNTRY_CN="Kina" +NR_COUNTRY_CX="Julön" +NR_COUNTRY_CC="Cocos (Keeling) öarna" +NR_COUNTRY_CO="Colombia" +NR_COUNTRY_KM="Komorerna" +NR_COUNTRY_CG="Kongo" +NR_COUNTRY_CD="Kongo, Demokratiska republiken" +NR_COUNTRY_CK="Cooköarna" +NR_COUNTRY_CR="Costa Rica" +NR_COUNTRY_CI="Elfenbenskusten" +NR_COUNTRY_HR="Kroatien" +NR_COUNTRY_CU="Kuba" +NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Cypern" +NR_COUNTRY_CZ="Tjeckien" +NR_COUNTRY_DK="Danmark" +NR_COUNTRY_DJ="Djibouti" +NR_COUNTRY_DM="Dominica" +NR_COUNTRY_DO="Dominikanska republiken" +NR_COUNTRY_EC="Ecuador" +NR_COUNTRY_EG="Egypten" +NR_COUNTRY_SV="El Salvador" +NR_COUNTRY_GQ="Ekvatorialguinea" +NR_COUNTRY_ER="Eritrea" +NR_COUNTRY_EE="Estland" +NR_COUNTRY_ET="Etiopien" +NR_COUNTRY_FK="Falklandsöarna (Malvinas)" +NR_COUNTRY_FO="Färöarna" +NR_COUNTRY_FJ="Fiji" +NR_COUNTRY_FI="Finland" +NR_COUNTRY_FR="Frankrike" +NR_COUNTRY_GF="Franska Guyana" +NR_COUNTRY_PF="Franska Polynesien" +NR_COUNTRY_TF="Franska södra territorierna" +NR_COUNTRY_GA="Gabon" +NR_COUNTRY_GM="Gambia" +NR_COUNTRY_GE="Georgien" +NR_COUNTRY_DE="Tyskland" +NR_COUNTRY_GH="Ghana" +NR_COUNTRY_GI="Gibraltar" +NR_COUNTRY_GR="Grekland" +NR_COUNTRY_GL="Grönland" +NR_COUNTRY_GD="Grenada" +NR_COUNTRY_GP="Guadeloupe" +NR_COUNTRY_GU="Guam" +NR_COUNTRY_GT="Guatemala" +NR_COUNTRY_GG="Guernsey" +NR_COUNTRY_GN="Guinea" +NR_COUNTRY_GW="Guinea-Bissau" +NR_COUNTRY_GY="Guyana" +NR_COUNTRY_HT="Haiti" +NR_COUNTRY_HM="Heard Island och McDonald Islands" +NR_COUNTRY_VA="Holy See (Vatikanstaten)" +NR_COUNTRY_HN="Honduras" +NR_COUNTRY_HK="Hong Kong" +NR_COUNTRY_HU="Ungern" +NR_COUNTRY_IS="Island" +NR_COUNTRY_IN="Indien" +NR_COUNTRY_ID="Indonesien" +NR_COUNTRY_IR="Iran, Islamiska republiken" +NR_COUNTRY_IQ="Irak" +NR_COUNTRY_IE="Irland" +NR_COUNTRY_IM="Isle of Man" +NR_COUNTRY_IL="Israel" +NR_COUNTRY_IT="Italien" +NR_COUNTRY_JM="Jamaica" +NR_COUNTRY_JP="Japan" +NR_COUNTRY_JE="Jersey" +NR_COUNTRY_JO="Jordanien" +NR_COUNTRY_KZ="Kazakhstan" +NR_COUNTRY_KE="Kenya" +NR_COUNTRY_KI="Kiribati" +NR_COUNTRY_KP="Nordkorea" +NR_COUNTRY_KR="Sydkorea" +NR_COUNTRY_KW="Kuwait" +NR_COUNTRY_KG="Kirgizistan" +NR_COUNTRY_LA="Laos" +NR_COUNTRY_LV="Lettland" +NR_COUNTRY_LB="Libanon" +NR_COUNTRY_LS="Lesotho" +NR_COUNTRY_LR="Liberia" +NR_COUNTRY_LY="Libyen" +NR_COUNTRY_LI="Liechtenstein" +NR_COUNTRY_LT="Litauen" +NR_COUNTRY_LU="Luxemburg" +NR_COUNTRY_MO="Macao" +NR_COUNTRY_MK="Makedonien" +NR_COUNTRY_MG="Madagaskar" +NR_COUNTRY_MW="Malawi" +NR_COUNTRY_MY="Malaysia" +NR_COUNTRY_MV="Maldiverna" +NR_COUNTRY_ML="Mali" +NR_COUNTRY_MT="Malta" +NR_COUNTRY_MH="Marshallöarna" +NR_COUNTRY_MQ="Martinique" +NR_COUNTRY_MR="Mauretanien" +NR_COUNTRY_MU="Mauritius" +NR_COUNTRY_YT="Mayotte" +NR_COUNTRY_MX="Mexico" +NR_COUNTRY_FM="Mikronesien, federerade staterna" +NR_COUNTRY_MD="Moldavien" +NR_COUNTRY_MC="Monaco" +NR_COUNTRY_MN="Mongoliet" +NR_COUNTRY_ME="Montenegro" +NR_COUNTRY_MS="Montserrat" +NR_COUNTRY_MA="Marocko" +NR_COUNTRY_MZ="Moçambique" +NR_COUNTRY_MM="Myanmar" +NR_COUNTRY_NA="Namibia" +NR_COUNTRY_NR="Nauru" +NR_COUNTRY_NM="Nordmakedonien" +NR_COUNTRY_NP="Nepal" +NR_COUNTRY_NL="Nederländerna" +NR_COUNTRY_AN="Nederländska Antillerna" +NR_COUNTRY_NC="Nya Kaledonien" +NR_COUNTRY_NZ="Nya Zeeland" +NR_COUNTRY_NI="Nicaragua" +NR_COUNTRY_NE="Niger" +NR_COUNTRY_NG="Nigeria" +NR_COUNTRY_NU="Niue" +NR_COUNTRY_NF="Norfolk Island" +NR_COUNTRY_MP="Norra Marianeröarna" +NR_COUNTRY_NO="Norge" +NR_COUNTRY_OM="Oman" +NR_COUNTRY_PK="Pakistan" +NR_COUNTRY_PW="Palau" +NR_COUNTRY_PS="Palestinian Territory" +NR_COUNTRY_PA="Panama" +NR_COUNTRY_PG="Papua Nya Guinea" +NR_COUNTRY_PY="Paraguay" +NR_COUNTRY_PE="Peru" +NR_COUNTRY_PH="Filippinerna" +NR_COUNTRY_PN="Pitcairn" +NR_COUNTRY_PL="Polen" +NR_COUNTRY_PT="Portugal" +NR_COUNTRY_PR="Puerto Rico" +NR_COUNTRY_QA="Qatar" +NR_COUNTRY_RE="Reunion" +NR_COUNTRY_RO="Rumänien" +NR_COUNTRY_RU="Ryska Federationen" +NR_COUNTRY_RW="Rwanda" +NR_COUNTRY_SH="Saint Helena" +NR_COUNTRY_KN="Saint Kitts och Nevis" +NR_COUNTRY_LC="Saint Lucia" +NR_COUNTRY_PM="Saint Pierre och Miquelon" +NR_COUNTRY_VC="Saint Vincent och Grenadinerna" +NR_COUNTRY_WS="Samoa" +NR_COUNTRY_SM="San Marino" +NR_COUNTRY_ST="Sao Tome och Principe" +NR_COUNTRY_SA="Saudiarabien" +NR_COUNTRY_SN="Senegal" +NR_COUNTRY_RS="Serbien" +NR_COUNTRY_SC="Seychellerna" +NR_COUNTRY_SL="Sierra Leone" +NR_COUNTRY_SG="Singapore" +NR_COUNTRY_SK="Slovakien" +NR_COUNTRY_SI="Slovenia" +NR_COUNTRY_SB="Salomonöarna" +NR_COUNTRY_SO="Somalia" +NR_COUNTRY_ZA="Sydafrika" +NR_COUNTRY_GS="Södra Georgien och Södra Sandwichöarna" +NR_COUNTRY_ES="Spanien" +NR_COUNTRY_LK="Sri Lanka" +NR_COUNTRY_SD="Sudan" +NR_COUNTRY_SS="Södra Sudan" +NR_COUNTRY_SR="Surinam" +NR_COUNTRY_SJ="Svalbard och Jan Mayen" +NR_COUNTRY_SZ="Swaziland" +NR_COUNTRY_SE="Sverige" +NR_COUNTRY_CH="Schweiz" +NR_COUNTRY_SY="Syrien, Arabiska republiken" +NR_COUNTRY_TW="Taiwan" +NR_COUNTRY_TJ="Tadzjikistan" +NR_COUNTRY_TZ="Tanzania, Förenade republiken" +NR_COUNTRY_TH="Thailand" +NR_COUNTRY_TL="Östtimor" +NR_COUNTRY_TG="Togo" +NR_COUNTRY_TK="Tokelau" +NR_COUNTRY_TO="Tonga" +NR_COUNTRY_TT="Trinidad och Tobago" +NR_COUNTRY_TN="Tunisien" +NR_COUNTRY_TR="Turkiet" +NR_COUNTRY_TM="Turkmenistan" +NR_COUNTRY_TC="Turks- och Caicosöarna" +NR_COUNTRY_TV="Tuvalu" +NR_COUNTRY_UG="Uganda" +NR_COUNTRY_UA="Ukraina" +NR_COUNTRY_AE="Förenade arabemiraten" +NR_COUNTRY_GB="Storbritannien" +NR_COUNTRY_US="USA" +NR_COUNTRY_UM="Förenta staternas mindre öar i Oceanien och Västindien" +NR_COUNTRY_UY="Uruguay" +NR_COUNTRY_UZ="Uzbekistan" +NR_COUNTRY_VU="Vanuatu" +NR_COUNTRY_VE="Venezuela" +NR_COUNTRY_VN="Vietnam" +NR_COUNTRY_VG="Jungfruöarna, Brittiska" +NR_COUNTRY_VI="Jungfruöarna, USA" +NR_COUNTRY_WF="Wallis- och Futunaöarna" +NR_COUNTRY_EH="Västra Sahara" +NR_COUNTRY_YE="Yemen" +NR_COUNTRY_ZM="Zambia" +NR_COUNTRY_ZW="Zimbabwe" +NR_CONTINENT_AF="Afrika" +NR_CONTINENT_AS="Asien" +NR_CONTINENT_EU="Europa" +NR_CONTINENT_NA="Nordamerika" +NR_CONTINENT_SA="Sydamerika" +NR_CONTINENT_OC="Oceanien" +NR_CONTINENT_AN="Antarktis" +NR_FRONTEND="Frontend" +NR_BACKEND="Backend" +NR_EMBED="Bädda in" +NR_RATE="Betyg %s" +NR_REPORT_ISSUE="Rapportera ett problem" +NR_TAG_PAGEGENERATOR="Sidgenerator" +NR_TAG_PAGELANGURL="Sidans språk URL" +NR_TAG_PAGEKEYWORDS="Sidans nyckelord" +NR_TAG_SITEEMAIL="Webbplatsens e-post" +NR_TAG_DAY="Dag" +NR_TAG_MONTH="Månad" +NR_TAG_YEAR="År" +NR_TAG_USERREGISTERDATE="Registreringsdatum" +NR_TAG_PAGEBROWSERTITLE="Webbläsarens titel" +NR_TAG_EBID="Rutans ID" +NR_TAG_EBTITLE="Rutans titel" +NR_TAG_QUERYSTRINGOPTION="Frågesträng: Alternativ" +NR_TAG_QUERYSTRINGVIEW="Frågesträng: Vy" +NR_TAG_QUERYSTRINGLAYOUT="Frågesträng: Layout" +NR_TAG_QUERYSTRINGTMPL="Frågesträng: Mall" +NR_CANNOT_CREATE_FOLDER="Det går inte att skapa en mapp för att flytta filen. %s" +NR_CANNOT_MOVE_FILE="Det går inte att flytta filen: %s" +NR_UPLOAD_INVALID_FILE_TYPE="Filtypen stöds inte: %s (%s). Tillåtna filtyper är: %s" +NR_UPLOAD_NO_MIME_TYPE="Det gick inte att gissa filen mime-typ: %s. Se till att PHP filinfo är aktiverat." +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Det går inte att ladda upp filen: %s" +NR_START_OVER="Börja om" +NR_TRY_AGAIN="Försök igen" +NR_ERROR="Fel" +NR_CANCEL="Avbryt" +NR_PLEASE_WAIT="Vänta" +NR_HCAPTCHA="hCaptcha" +NR_TYPE="Typ" +NR_CHECKBOX="Kryssruta" +NR_INVISIBLE="Osynlig" +NR_HCAPTCHA_DESC="För att få en webbplatsnyckel och en hemlig nyckel för din domän, gå till https://dashboard.hcaptcha.com/sites." +NR_HCAPTCHA_SECRET_KEY_DESC="Används i kommunikationen mellan din server och hCAPTCHA-servern. Se till att hålla det hemligt." +NR_OUTDATED_EXTENSION="Din version av %s är mer än %d dagar gammal och troligen redan inaktuell. Kontrollera om en %snyare version%s finns tillgänglig och installera den." diff --git a/deployed/convertforms/plugins/system/nrframework/language/tr-TR/tr-TR.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/tr-TR/tr-TR.plg_system_nrframework.ini new file mode 100644 index 00000000..be7b576e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/tr-TR/tr-TR.plg_system_nrframework.ini @@ -0,0 +1,761 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="Sistem - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Novarain Framework - geliştirici Tassos.gr eklentileri" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +; NR_IGNORE="Ignore" +; NR_INCLUDE="Include" +; NR_EXCLUDE="Exclude" +NR_SELECTION="Seçim" +; NR_ASSIGN_MENU_NOITEM="Include no Itemid" +; NR_ASSIGN_MENU_NOITEM_DESC="Also assign when no menu Itemid is set in URL?" +; NR_ASSIGN_MENU_CHILD="Also on child items" +; NR_ASSIGN_MENU_CHILD_DESC="Also assign to child items of the selected items?" +NR_COPY_OF="%s kopyası" +; NR_ASSIGN_DATETIME_DESC="Target visitors based on your server's datetime" +NR_DATETIME="Tarihsaat" +NR_TIME="Zaman" +NR_DATE="Tarih" +NR_DATETIME_DESC="Otomatik olarak yayınla/yayınlama tarihi girin" +; NR_START_PUBLISHING="Start Datetime" +NR_START_PUBLISHING_DESC="Yayınlanmaya başlama tarihini girin" +; NR_FINISH_PUBLISHING="End Datetime" +NR_FINISH_PUBLISHING_DESC="Yayınlamayı bitirmek için tarihi girin" +NR_DATETIME_NOTE="Tarih ve saat atamaları, ziyaretçilerin sistem tarihlerini değil, sunucularınızın tarih/saatini kullanır." +; NR_ASSIGN_PHP="PHP" +; NR_PHPCODE="PHP Code" +; NR_ASSIGN_PHP_DESC="Enter a piece of PHP code to evaluate." +; NR_ASSIGN_PHP_DESC2="Target visitors evaluating custom PHP code. The code must return the value true or false.

        For instance:
        return ($user->name == 'Tassos Marinos');" +; NR_ASSIGN_TIMEONSITE="Time on Site" +NR_SECONDS="Saniye" +NR_ASSIGN_TIMEONSITE_DESC="Sitenizin tamamında geçirilen kullanıcının toplam zamanı (Ziyaret süresi) ile karşılaştırmak için saniye cinsinden bir süre girin. Örnek:
        Kullanıcı, sitenizin tamamında 3 dakika geçirdikten sonra bir kutu görüntülemek istiyorsanız, 180 girin." +NR_ASSIGN_URLS="URL" +; NR_ASSIGN_URLS_DESC2="Target visitors who are browsing specific URLs" +NR_ASSIGN_URLS_DESC="Eşleştirilecek URL'lerin (bir kısmını) girin.
        Her farklı eşleşmeler için yeni bir çizgi kullanın." +NR_ASSIGN_URLS_LIST="URL Eşleşmeler" +; NR_ASSIGN_URLS_REGEX="Use Regular Expression" +NR_ASSIGN_URLS_REGEX_DESC="Değeri normal ifadeler olarak kabul etmek için seçin." +NR_ASSIGN_LANGS="Dil" +; NR_ASSIGN_LANGS_DESC="Target visitors who are browsing your website in specific language" +NR_ASSIGN_LANGS_LIST_DESC="Atamak istediğiniz Dilleri seçin" +NR_ASSIGN_DEVICES="Aygıt" +; NR_ASSIGN_DEVICES_DESC2="Target visitors using specific device such as Mobile, Tablet or Desktop." +NR_ASSIGN_DEVICES_DESC="Atanacak aygıtları seçin." +; NR_ASSIGN_DEVICES_NOTE="Keep in mind that device detection is not always 100% accurate. Users can setup their browser to mimic other devices" +; NR_MENU="Menu" +; NR_MENU_ITEMS="Menu Item" +; NR_MENU_ITEMS_DESC="Target visitors who are browsing specific menu items" +; NR_USERGROUP="User Group" +; NR_ACCESSLEVEL="User Group" +NR_ACCESSLEVEL_DESC="Atanacak Kullanıcı Gruplarını seçin.

        Not: Bunu genele açık yapmak istiyorsanız Yoksay olarak ayarlayın ve Genel'i seçin." +NR_SHOW_COPYRIGHT="Telif hakkı göster" +NR_SHOW_COPYRIGHT_DESC="Seçilirse, ekstra telif hakkı bilgisi yönetici görünümlerinde görüntülenecektir. Tassos.gr uzantıları hiçbir zaman ön uçta telif hakkı bilgisi veya geri bağlantıları göstermez." +NR_WIDTH="Genişlik" +NR_WIDTH_DESC="Genişliği px, em veya % olarak Örnek: 400px" +NR_HEIGHT="Yükseklik" +NR_HEIGHT_DESC="Yüksekliği px, em veya % olarak Örnek: 400px" +NR_PADDING="Padding" +NR_PADDING_DESC="Padding px, em veya % cinsinden Örnek: 20px" +; NR_MARGIN="Margin" +; NR_MARGIN_DESC="The CSS margin propertiy is used to generate space around the box and set the size of the white space outside the border in pixels or in %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +; NR_COLOR_HOVER="Hover Color" +NR_COLOR="Renk" +NR_COLOR_DESC="Bir renk, HEX veya RGBA formatında tanımlayın." +NR_TEXT_COLOR="Metin Rengi" +; NR_BACKGROUND="Background" +NR_BACKGROUND_COLOR="Arkaplan Rengi" +; NR_BACKGROUND_COLOR_DESC="Define a background color in HEX or RGBA format. To disable enter 'none'. For absolute transparency enter 'transparent'." +; NR_URL_SHORTENING_FAILED="Shortening %s with %s failed. %s." +; NR_EXPORT="Export" +; NR_IMPORT="Import" +; NR_PLEASE_CHOOSE_A_VALID_FILE="Please choose a valid filename" +; NR_IMPORT_ITEMS="Import Items" +; NR_PUBLISH_ITEMS="Publish items" +; NR_AS_EXPORTED="As exported" +; NR_TITLE="Title" +; NR_ACYMAILING="AcyMailing" +; NR_ACYMAILING_LIST="AcyMailing List" +; NR_ACYMAILING_LIST_DESC="Select AcyMailing lists to assign to." +; NR_ASSIGN_ACYMAILING_DESC="Target visitors who have subscribed to specific AcyMailing lists" +; NR_AKEEBASUBS="Akeeba Subscriptions" +; NR_AKEEBASUBS_LEVELS="Levels" +; NR_AKEEBASUBS_LEVELS_DESC="Select Akeeba Subscription levels to assign to." +; NR_ASSIGN_AKEEBASUBS_DESC="Target visitors who have subscribed to specific Akeeba Subscriptions" +; NR_MATCH="Match" +; NR_MATCH_DESC="The used matching method to compare the value" +; NR_ASSIGN_MATCHING_METHOD="Matching Method" +; NR_ASSIGN_MATCHING_METHOD_DESC="Should all or any assignments be matched?

        All
        Will be published if All of below assignments are matched.

        Any
        Will be published if Any (one or more) of below assignments are matched.
        Assignment groups where 'Ignore' is selected will be ignored." +; NR_ANY="Any" +; NR_ASSIGN_REFERRER="Referrer URL" +; NR_ASSIGN_REFERRER_DESC2="Target visitors who land on your site from a specific traffic source" +; NR_ASSIGN_REFERRER_DESC="Enter one Referrer URL per line: Eg:

        google.com
        facebook.com/mypage" +; NR_ASSIGN_REFERRER_NOTE="Keep in mind that URL Referrer discovery is not always 100% accurate. Some servers may use proxies that strip this information out and it can be easily forged." +; NR_PROFEATURE_HEADER="%s is a PRO Feature" +; NR_PROFEATURE_DESC="We're sorry, %s is not available on your plan. Please upgrade to the PRO plan to unlock all these awesome features." +; NR_PROFEATURE_DISCOUNT="Bonus: %s free users get 20% off regular price, automatically applied at checkout." +; NR_ONLY_AVAILABLE_IN_PRO="Only available in PRO version" +; NR_UPGRADE_TO_PRO="Upgrade to Pro" +; NR_UPGRADE_TO_PRO_TO_UNLOCK="Upgrade to Pro version to unlock" +; NR_UPGRADE_TO_PRO_VERSION="Awesome! Only one step left. Click on the button below to complete the upgrade to the Pro version." +; NR_UNLOCK_PRO_FEATURE="Unlock Pro Feature" +; NR_USING_THE_FREE_VERSION="You are using the FREE version of Convert Forms. Purchase the PRO version for the full functionality." +; NR_LEFT_TO_RIGHT="Left to Right" +; NR_RIGHT_TO_LEFT="Right to Left" +; NR_BGIMAGE="Background Image" +; NR_BGIMAGE_DESC="Sets a background image" +; NR_BGIMAGE_FILE="Image" +; NR_BGIMAGE_FILE_DESC="Select or a upload a file for the background-image." +; NR_BGIMAGE_REPEAT="Repeat" +; NR_BGIMAGE_REPEAT_DESC="The background-repeat property sets if/how a background image will be repeated. By default, a background-image is repeated both vertically and horizontally.

        Repeat: The background image will be repeated both vertically and horizontally.

        Repeat-x: The background image will be repeated only horizontally

        Repeat-y: The background image will be repeated only vertically

        No-repeat: The background-image will not be repeated" +; NR_BGIMAGE_SIZE="Size" +; NR_BGIMAGE_SIZE_DESC="Specify the size of a background image.

        Auto:The background-image contains its width and height

        Cover: Scale the background image to be as large as possible so that the background area is completely covered by the background image. Some parts of the background image may not be in view within the background positioning area

        Contain: Scale the image to the largest size such that both its width and its height can fit inside the content area

        100% 100%: Stretch the background image to completely cover the content area." +; NR_BGIMAGE_POSITION="Position" +; NR_BGIMAGE_POSITION_DESC="The background-position property sets the starting position of a background image. By default, a background-image is placed at the top-left corner. The first value is the horizontal position and the second value is the vertical.

        You can use either one of the predefined values, or enter a custom value in percentage: x% y% or in pixel xPos yPos." +; NR_RTL="Enable RTL" +; NR_RTL_DESC="The right-to-left text direction is essential for right-to-left scripts such as Arabic, Hebrew, Syriac, and Thaana." +; NR_HORIZONTAL="Horizontal" +; NR_VERTICAL="Vertical" +; NR_FORM_ORIENTATION="Form Orientation" +; NR_FORM_ORIENTATION_DESC="Select the form orientation" +; NR_ASSIGN_CATEGORY="Categories" +; NR_ASSIGN_CATEGORY_DESC="Select the categories to assign to" +; NR_ASSIGN_CATEGORY_CHILD="Also on child items" +; NR_ASSIGN_CATEGORY_CHILD_DESC="Also assign to child items of the selected items?" +; NR_NEW="New" +; NR_LIST="List" +; NR_DOCUMENTATION="Documentation" +; NR_KNOWLEDGEBASE="Knowledgebase" +; NR_FAQ="FAQ" +; NR_INFORMATION="Information" +; NR_EXTENSION="Extension" +; NR_VERSION="Version" +; NR_CHANGELOG="Changelog" +; NR_DOWNLOAD="Download" +; NR_DOWNLOAD_KEY_MISSING="Download Key is missing" +; NR_DOWNLOAD_KEY="Download Key" +; NR_DOWNLOAD_KEY_DESC="To find your Download Key, log into your account on Tassos.gr and go to the Downloads section.

        Note: Setting the Download Key here, doesn't upgrade Free versions to Pro versions. To unlock Pro features, you'll need to install the Pro version over the Free version too." +; NR_DOWNLOAD_KEY_HOW="To be able to update %s via the Joomla updater, you will need enter your Download Key in the settings of the Novarain Framework Plugin" +; NR_DOWNLOAD_KEY_FIND="Find Download Key" +; NR_DOWNLOAD_KEY_UPDATE="Update Download Key" +; NR_OK="OK" +; NR_MISSING="Missing" +; NR_LICENSE="License" +; NR_AUTHOR="Author" +; NR_FOLLOWME="Follow me" +; NR_FOLLOW="Follow %s" +; NR_TRANSLATE_INTEREST="Would you be interested in helping out with translating %s into your Language?" +; NR_TRANSIFEX_REQUEST="Send me a request on Transifex" +; NR_HELP_WITH_TRANSLATIONS="Help with translations" +; NR_PUBLISHING_ASSIGNMENTS="Publishing Rules" +; NR_ADVANCED="Advanced" +; NR_USEGLOBAL="Use Global" +; NR_WEEKDAY="Day of Week" +; NR_MONTH="Month" +; NR_MONDAY="Monday" +; NR_TUESDAY="Tuesday" +; NR_WEDNESDAY="Wednesday" +; NR_THURSDAY="Thursday" +; NR_FRIDAY="Friday" +; NR_SATURDAY="Saturday" +; NR_WEEKEND="Weekend" +; NR_WEEKDAYS="Weekdays" +; NR_SUNDAY="Sunday" +; NR_JANUARY="January" +; NR_FEBRUARY="February" +; NR_MARCH="March" +; NR_APRIL="April" +; NR_MAY="May" +; NR_JUNE="June" +; NR_JULY="July" +; NR_AUGUST="August" +; NR_SEPTEMBER="September" +; NR_OCTOBER="October" +; NR_NOVEMBER="November" +; NR_DECEMBER="December" +; NR_NEVER="Never" +NR_SECONDS="Saniye" +; NR_MINUTES="Minutes" +; NR_HOURS="Hours" +; NR_DAYS="Days" +; NR_SESSION="Session" +; NR_EVER="Ever" +; NR_COOKIE="Cookie" +; NR_BOTH="Both" +; NR_NONE="None" +; NR_DESKTOPS="Desktop" +; NR_MOBILES="Mobile" +; NR_TABLETS="Tablet" +; NR_PER_SESSION="Per Session" +; NR_PER_DAY="Per Day" +; NR_PER_WEEK="Per Week" +; NR_PER_MONTH="Per Month" +; NR_FOREVER="Forever" +; NR_FEATURE_UNDER_DEV="This feature is under development" +; NR_LIKE_THIS_EXTENSION="Like this extension?" +; NR_LEAVE_A_REVIEW="Leave a review on JED" +; NR_SUPPORT="Support" +; NR_NEED_SUPPORT="Need support?" +; NR_DROP_EMAIL="Drop me an e-mail" +; NR_READ_DOCUMENTATION="Read the Documentation" +; NR_COPYRIGHT="%s - Tassos.gr All Rights Reserved" +; NR_DASHBOARD="Dashboard" +; NR_NAME="Name" +; NR_WRONG_COORDINATES="The coordinates you provided are not valid" +; NR_ENTER_COORDINATES="Latitude,Longitude" +; NR_NO_ITEMS_FOUND="No Items Found" +; NR_ITEM_IDS="No Item IDs" +; NR_TOGGLE="Toggle" +; NR_EXPAND="Expand" +; NR_COLLAPSE="Collapse" +; NR_SELECTED="Selected" +; NR_MAXIMIZE="Maximize" +; NR_MINIMIZE="Minimize" +NR_SELECTION="Seçim" +; NR_INSTALL="Install" +; NR_INSTALL_NOW="Install Now" +; NR_INSTALLED="Installed" +; NR_COMING_SOON="Coming soon" +; NR_ROADMAP="On the roadmap" +; NR_MEDIA_VERSIONING="Use Media Versioning" +; NR_MEDIA_VERSIONING_DESC="Select to add the extension version number to the end of media (js/css) urls, to make browsers force load the correct file." +; NR_LOAD_JQUERY="Load jQuery" +; NR_LOAD_JQUERY_DESC="Select to load the core jQuery script. You can disable this if you experience conflicts if your template or other extensions load their own version of jQuery." +; NR_SELECT_CURRENCY="Select a Currency" +; NR_CONVERTFORMS="Convert Forms" +; NR_CONVERTFORMS_LIST="Campaign" +; NR_ASSIGN_CONVERTFORMS_DESC="Target visitors who have subscribed to specific ConvertForms campaigns" +; NR_CONVERTFORMS_LIST_DESC="Select ConvertForms campaigns to assign to." +NR_LEFT="Sol" +NR_CENTER="Ortala" +NR_RIGHT="Sağ" +NR_BOTTOM="Alt" +NR_TOP="Üst" +NR_AUTO="Otomatik" +NR_CUSTOM="Özel" +NR_UPLOAD="Yükle" +NR_IMAGE="Resim" +; NR_INTRO_IMAGE="Intro Image" +; NR_FULL_IMAGE="Full Image" +NR_IMAGE_SELECT="Resim Seç" +NR_IMAGE_SIZE_COVER="Cover" +NR_IMAGE_SIZE_CONTAIN="Contain" +NR_REPEAT="Repeat" +NR_REPEAT_X="Repeat x" +NR_REPEAT_Y="Repeat y" +NR_REPEAT_NO="No repeat" +NR_FIELD_STATE_DESC="Öğe durumunu ayarla" +NR_CREATED_DATE="Oluşturma Tarihi" +NR_CREATED_DATE_DESC="Haberin oluşturulduğu tarih" +NR_MODIFIFED_DATE="Değiştirilme Tarihi" +NR_MODIFIFED_DATE_DESC="Haberin son değiştirilme tarihi." +; NR_CATEGORIES="Category" +NR_CATEGORIES_DESC="Atanacak kategorileri seçin." +NR_ALSO_ON_CHILD_ITEMS="Ayrıca çocuklar için" +NR_ALSO_ON_CHILD_ITEMS_DESC="Ayrıca seçili öğelerin alt öğelerine atamak mı istiyorsunuz?" +; NR_PAGE_TYPE="Page type" +NR_PAGE_TYPES="Sayfa türleri" +NR_PAGE_TYPES_DESC="Atamanın hangi sayfa türlerinde olması gerektiğini seçin." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +; NR_ARTICLE_VIEW_DESC="Enable to take into account the Article view" +; NR_CATEGORY_VIEW="Category View" +; NR_CATEGORY_VIEW_DESC="Enable to take into account the Category view" +NR_ARTICLES="Makaleler" +NR_ARTICLES_DESC="Atanacak makaleleri seçin." +NR_ARTICLE="Makale" +NR_ARTICLE_AUTHORS="Yazarlar" +NR_ARTICLE_AUTHORS_DESC="Atanacak yazarları seçin." +NR_ONLY="Sadece" +NR_OTHERS="Diğerleri" +; NR_SMARTTAGS="Smart Tags" +NR_SMARTTAGS_SHOW="Akıllı Etiketleri Göster" +; NR_SMARTTAGS_NOTFOUND="No Smart Tags found" +; NR_SMARTTAGS_SEARCH_PLACEHOLDER="Search for Smart Tags" +NR_CONTACT_US="Bize Ulaşın" +NR_FONT_COLOR="Yazı Rengi" +NR_FONT_SIZE="Yazı Boyutu" +NR_FONT_SIZE_DESC="Piksel cinsinden bir font boyutu seçin" +NR_TEXT="Metin" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Çıktıyı geçersiz kılmayı etkinleştir" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Sayfa düzeni (tmpl) geçersiz kılındığında uzantı oluşturma işlemini etkinleştirir. Örnekler: tmpl=bileşen veya tmpl=modal." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Biçim Geçersiz Kıl seçeneğini etkinleştirin" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Sayfa biçimi HTML haricinde olmadığında uzantı oluşturmayı etkinleştirir. Örnekler: format=raw veya format=json." +NR_GEOLOCATING="Coğrafi konumlandırma" +NR_GEOLOCATING_DESC="Coğrafi konumlandırma her zaman %100 doğru değildir. Konum bilgisi, ziyaretçinin IP adresine dayanır. Tüm IP adresleri sabit veya bilinmektedir." +; NR_CITY="City" +; NR_CITY_NAME="City Name" +; NR_CONDITION_CITY_DESC="Enter a city name in English. Enter multiple cities separated by comma." +; NR_CONTINENT="Continent" +; NR_REGION="Region" +; NR_CONDITION_REGION_DESC="The value consists of two parts, the two letter ISO 3166-1 country code and the region code. So the value should be in the following form: COUNTRY_CODE-REGION_CODE. For a full list of region codes click on the Find a Region Code link." +; NR_ASSIGN_COUNTRIES="Country" +; NR_ASSIGN_COUNTRIES_DESC2="Target visitors who are physically in a specific country" +NR_ASSIGN_COUNTRIES_DESC="Atamak istediğiniz ülkeleri seçin" +; NR_ASSIGN_CONTINENTS="Continent" +NR_ASSIGN_CONTINENTS_DESC="Atamak için kıtaları seçin" +; NR_ASSIGN_CONTINENTS_DESC2="Target visitors who are physically in a specific continent" +; NR_ICONTACT_ACCOUNTID_ERROR="The iContact AccountID could not be retrieved" +; NR_TAG_CLIENTDEVICE="Visitor Device Type" +; NR_TAG_CLIENTOS="Visitor Operating System" +; NR_TAG_CLIENTBROWSER="Visitor Browser" +; NR_TAG_CLIENTUSERAGENT="Visitor Agent String" +; NR_TAG_IP="Visitor IP Address" +; NR_TAG_URL="Page URL" +; NR_TAG_URLENCODED="Page URL Encoded" +; NR_TAG_URLPATH="Page Path" +; NR_TAG_REFERRER="Page Referrer" +; NR_TAG_SITENAME="Site Name" +; NR_TAG_SITEURL="Site URL" +; NR_TAG_PAGETITLE="Page Title" +; NR_TAG_PAGEDESC="Page Meta Description" +; NR_TAG_PAGELANG="Page Language Code" +; NR_TAG_USERID="User ID" +; NR_TAG_USERNAME="User Full Name" +; NR_TAG_USERLOGIN="User Login" +; NR_TAG_USEREMAIL="User Email" +; NR_TAG_USERFIRSTNAME="User First Name" +; NR_TAG_USERLASTNAME="User Last Name" +; NR_TAG_USERGROUPS="User Groups IDs" +; NR_TAG_DATE="Date" +; NR_TAG_TIME="Time" +; NR_TAG_RANDOMID="Random ID" +; NR_ICON="Icon" +; NR_SELECT_MODULE="Select a Module" +; NR_SELECT_CONTINENT="Select a Continent" +; NR_SELECT_COUNTRY="Select a Country" +; NR_PLUGIN="Plugin" +; NR_GMAP_KEY="Google Maps API Key" +; NR_GMAP_KEY_DESC="The Google Maps API Key is being used by Tassos.gr extensions. If you face any troubles with a Google Map not being loaded then you probably need to enter your own API Key." +; NR_GMAP_FIND_KEY="Get an API key" +; NR_ARE_YOU_SURE="Are you sure?" +; NR_CUSTOMURL="Custom URL" +; NR_SAMPLE="Sample" +; NR_DEBUG="Debug" +; NR_CUSTOMURL="Custom URL" +; NR_READMORE="Read More" +; NR_IPADDRESS="IP Address" +; NR_ASSIGN_BROWSERS="Browser" +; NR_ASSIGN_BROWSERS_DESC="Select the browsers to assign to" +; NR_ASSIGN_BROWSERS_DESC2="Target visitors who are browsing your site with specific browsers such as Chrome, Firefox or Internet Explorer" +; NR_CHROME="Chrome" +; NR_FIREFOX="Firefox" +; NR_EDGE="Edge" +; NR_IE="Internet Explorer" +; NR_SAFARI="Safari" +; NR_OPERA="Opera" +; NR_ASSIGN_OS="Operating System" +; NR_ASSIGN_OS_DESC="Select the operating systems to assign to" +; NR_ASSIGN_OS_DESC2="Target visitors who are using specific operating systems such as Windows, Linux or Mac" +; NR_LINUX="Linux" +; NR_MAC="MacOS" +; NR_ANDROID="Android" +; NR_IOS="iOS" +; NR_WINDOWS="Windows" +; NR_BLACKBERRY="Blackberry" +; NR_CHROMEOS="Chrome OS" +; NR_ASSIGN_PAGEVIEWS="Number of Pageviews" +; NR_ASSIGN_PAGEVIEWS_DESC="Target visitors who have viewed certain number of pages" +; NR_ASSIGN_PAGEVIEWS_VIEWS="Pageviews" +; NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Enter the number of page views" +; NR_ASSIGN_COOKIENAME_NAME="Cookie Name" +; NR_ASSIGN_COOKIENAME_NAME_DESC="Enter the name of the cookie to assign to" +; NR_ASSIGN_COOKIENAME_NAME_DESC2="Target visitors who have specific cookies stored in their browser" +; NR_FEWER_THAN="Fewer than" +; NR_GREATER_THAN="Greater than" +; NR_EXACTLY="Exactly" +; NR_EXISTS="Exists" +; NR_IS_EQUAL="Equals" +; NR_CONTAINS="Contains" +; NR_STARTS_WITH="Starts with" +; NR_ENDS_WITH="Ends with" +; NR_ASSIGN_COOKIENAME_CONTENT="Cookie Content" +; NR_ASSIGN_COOKIENAME_CONTENT_DESC="The cookie's content" +; NR_ASSIGN_IP_ADDRESSES_DESC2="Target visitors who are behind a specific IP address (range)" +; NR_ASSIGN_IP_ADDRESSES_DESC="Enter a list of comma and/or 'enter' separated ip addresses and ranges

        Example:
        127.0.0.1,
        192.10-120.2,
        168" +; NR_ASSIGN_USER_ID="User ID" +; NR_ASSIGN_USER_ID_DESC="Target specific Joomla Users by their IDs" +; NR_ASSIGN_USER_ID_SELECTION_DESC="Enter comma separated Joomla user IDs" +; NR_ASSIGN_COMPONENTS="Component" +; NR_ASSIGN_COMPONENTS_DESC="Select the components to assign to" +; NR_ASSIGN_COMPONENTS_DESC2="Target visitors who are browsing specific components" +; NR_ASSIGN_TIMERANGE="Time Range" +; NR_ASSIGN_TIMERANGE_DESC="Target visitors based on your server's time" +; NR_START_TIME="Start Time" +; NR_END_TIME="End Time" +; NR_START_PUBLISHING_TIMERANGE_DESC="Enter the time to start publishing" +; NR_FINISH_PUBLISHING_TIMERANGE_DESC="Enter the time to end publishing" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_DESC="To get a site and secret key for your domain, go to https://www.google.com/recaptcha." +; NR_RECAPTCHA_SITE_KEY="Site Key" +; NR_RECAPTCHA_SITE_KEY_DESC="Used in the JavaScript code that is served to your users." +; NR_RECAPTCHA_SECRET_KEY="Secret Key" +; NR_RECAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the reCAPTCHA server. Be sure to keep it a secret." +; NR_RECAPTCHA_SITE_KEY_ERROR="The reCaptcha Site Key is either missing or invalid" +; NR_PREVIOUS_MONTH="Previous Month" +; NR_NEXT_MONTH="Next Month" +; NR_ASSIGN_GROUP_PAGE_URL="Page / URL" +; NR_ASSIGN_GROUP_PAGE_URL_DESC="Target visitors who are browsing specific menu items or URLs" +; NR_ASSIGN_GROUP_DATETIME_DESC="Trigger a box based on your server's date and time" +; NR_ASSIGN_GROUP_USER_VISITOR="Joomla User / Visitor" +; NR_ASSIGN_GROUP_USER_VISITOR_DESC="Target registered users or visitors who have viewed a certain number of pages" +; NR_ASSIGN_GROUP_PLATFORM="Visitor Platform" +; NR_ASSIGN_GROUP_PLATFORM_DESC="Target visitors who are using Mobile, Google Chrome, or even Windows" +; NR_ASSIGN_GROUP_GEO_DESC="Target visitors who are physically in a specific region" +; NR_ASSIGN_GROUP_JCONTENT="Joomla! Content" +; NR_ASSIGN_GROUP_JCONTENT_DESC="Target visitors who are viewing specific Joomla articles or categories" +; NR_ASSIGN_GROUP_SYSTEM="System / Integrations" +; NR_ASSIGN_GROUP_SYSTEM_DESC="Target visitors who have interacted with specific 3rd party Joomla Extensions" +; NR_ASSIGN_GROUP_ADVANCED="Advanced visitor targeting" +; NR_ASSIGN_USERGROUP_DESC="Target specific Joomla user groups" +; NR_ASSIGN_ARTICLE_DESC="Target visitors who are viewing specific Joomla articles" +; NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Target visitors who are viewing specific Joomla categories" +; NR_EXTENSION_REQUIRED="%s component requires %s plugin to be enabled in order to function properly." +; NR_ASSIGN_K2="K2" +; NR_ASSIGN_K2_DESC="Target visitors who are browsing specific K2 Items, Categories or Tags" +; NR_ASSIGN_K2_ITEMS="Item" +; NR_ASSIGN_K2_ITEMS_DESC="Target visitors who are browsing specific K2 items." +; NR_ASSIGN_K2_ITEMS_LIST_DESC="Select the K2 Items to assign to" +; NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Match on specific keywords in the item's content. Seperate by a comma or a new line." +; NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Match on the item's meta keywords. Seperate by a comma or a new line." +; NR_ASSIGN_K2_PAGETYPES_DESC="Target visitors who are browsing specific K2 page types" +; NR_ASSIGN_K2_ITEM_OPTION="Item" +; NR_ASSIGN_K2_LATEST_OPTION="Latest items from users or categories" +; NR_ASSIGN_K2_TAG_OPTION="Tag Page" +; NR_ASSIGN_K2_CATEGORY_OPTION="Category Page" +; NR_ASSIGN_K2_ITEM_FORM_OPTION="Item Edit Form" +; NR_ASSIGN_K2_USER_PAGE_OPTION="User Page (blog)" +; NR_ASSIGN_K2_TAGS_DESC="Target visitors who are browsing K2 items with specific tags" +; NR_ASSIGN_K2_CATEGORIES_DESC="Target visitors who are browsing specific K2 categories" +; NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Categories" +; NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Items" +; NR_ASSIGN_PAGE_TYPES_DESC="Select the page types to assign to" +; NR_ASSIGN_TAGS_DESC="Select the tags to assign to" +; NR_CONTENT_KEYWORDS="Content keywords" +; NR_META_KEYWORDS="Meta keywords" +; NR_TAG="Tag" +; NR_NORMAL="Normal" +; NR_COMPACT="Compact" +; NR_LIGHT="Light" +; NR_DARK="Dark" +; NR_SIZE="Size" +; NR_THEME="Theme" +; NR_SINGLE="Single" +; NR_MULTIPLE="Multiple" +; NR_RANGE="Range" +; NR_RECAPTCHA="reCAPTCHA" +; NR_RECAPTCHA_PLEASE_VALIDATE="Please validate" +; NR_RECAPTCHA_INVALID_SECRET_KEY="Invalid secret key" +; NR_PAGE="Page" +; NR_YOU_ARE_USING_EXTENSION="You are using %s %s" +; NR_UPDATE="Update" +; NR_SHOW_UPDATE_NOTIFICATION="Show Update Notification" +; NR_SHOW_UPDATE_NOTIFICATION_DESC="If selected, an update notification will be shown in the main component view when there is a new version for this extension." +; NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s is available" +; NR_ERROR_EMAIL_IS_DISABLED="Mail sending is turned off. Emails could not be sent." +; NR_ASSIGN_ITEMS="Item" +; NR_COUNTRY_AF="Afghanistan" +; NR_COUNTRY_AX="Aland Islands" +; NR_COUNTRY_AL="Albania" +; NR_COUNTRY_DZ="Algeria" +; NR_COUNTRY_AS="American Samoa" +; NR_COUNTRY_AD="Andorra" +; NR_COUNTRY_AO="Angola" +; NR_COUNTRY_AI="Anguilla" +; NR_COUNTRY_AQ="Antarctica" +; NR_COUNTRY_AG="Antigua and Barbuda" +; NR_COUNTRY_AR="Argentina" +; NR_COUNTRY_AM="Armenia" +; NR_COUNTRY_AW="Aruba" +; NR_COUNTRY_AU="Australia" +; NR_COUNTRY_AT="Austria" +; NR_COUNTRY_AZ="Azerbaijan" +; NR_COUNTRY_BS="Bahamas" +; NR_COUNTRY_BH="Bahrain" +; NR_COUNTRY_BD="Bangladesh" +; NR_COUNTRY_BB="Barbados" +; NR_COUNTRY_BY="Belarus" +; NR_COUNTRY_BE="Belgium" +; NR_COUNTRY_BZ="Belize" +; NR_COUNTRY_BJ="Benin" +; NR_COUNTRY_BM="Bermuda" +; NR_COUNTRY_BQ_BO="Bonaire" +; NR_COUNTRY_BQ_SA="Saba" +; NR_COUNTRY_BQ_SE="Sint Eustatius" +; NR_COUNTRY_BT="Bhutan" +; NR_COUNTRY_BO="Bolivia" +; NR_COUNTRY_BA="Bosnia and Herzegovina" +; NR_COUNTRY_BW="Botswana" +; NR_COUNTRY_BV="Bouvet Island" +; NR_COUNTRY_BR="Brazil" +; NR_COUNTRY_IO="British Indian Ocean Territory" +; NR_COUNTRY_BN="Brunei Darussalam" +; NR_COUNTRY_BG="Bulgaria" +; NR_COUNTRY_BF="Burkina Faso" +; NR_COUNTRY_BI="Burundi" +; NR_COUNTRY_KH="Cambodia" +; NR_COUNTRY_CM="Cameroon" +; NR_COUNTRY_CA="Canada" +; NR_COUNTRY_CV="Cape Verde" +; NR_COUNTRY_KY="Cayman Islands" +; NR_COUNTRY_CF="Central African Republic" +; NR_COUNTRY_TD="Chad" +; NR_COUNTRY_CL="Chile" +; NR_COUNTRY_CN="China" +; NR_COUNTRY_CX="Christmas Island" +; NR_COUNTRY_CC="Cocos (Keeling) Islands" +; NR_COUNTRY_CO="Colombia" +; NR_COUNTRY_KM="Comoros" +; NR_COUNTRY_CG="Congo" +; NR_COUNTRY_CD="Congo, The Democratic Republic of the" +; NR_COUNTRY_CK="Cook Islands" +; NR_COUNTRY_CR="Costa Rica" +; NR_COUNTRY_CI="Cote d'Ivoire" +; NR_COUNTRY_HR="Croatia" +; NR_COUNTRY_CU="Cuba" +; NR_COUNTRY_CW="Curaçao" +; NR_COUNTRY_CY="Cyprus" +; NR_COUNTRY_CZ="Czech Republic" +; NR_COUNTRY_DK="Denmark" +; NR_COUNTRY_DJ="Djibouti" +; NR_COUNTRY_DM="Dominica" +; NR_COUNTRY_DO="Dominican Republic" +; NR_COUNTRY_EC="Ecuador" +; NR_COUNTRY_EG="Egypt" +; NR_COUNTRY_SV="El Salvador" +; NR_COUNTRY_GQ="Equatorial Guinea" +; NR_COUNTRY_ER="Eritrea" +; NR_COUNTRY_EE="Estonia" +; NR_COUNTRY_ET="Ethiopia" +; NR_COUNTRY_FK="Falkland Islands (Malvinas)" +; NR_COUNTRY_FO="Faroe Islands" +; NR_COUNTRY_FJ="Fiji" +; NR_COUNTRY_FI="Finland" +; NR_COUNTRY_FR="France" +; NR_COUNTRY_GF="French Guiana" +; NR_COUNTRY_PF="French Polynesia" +; NR_COUNTRY_TF="French Southern Territories" +; NR_COUNTRY_GA="Gabon" +; NR_COUNTRY_GM="Gambia" +; NR_COUNTRY_GE="Georgia" +; NR_COUNTRY_DE="Germany" +; NR_COUNTRY_GH="Ghana" +; NR_COUNTRY_GI="Gibraltar" +; NR_COUNTRY_GR="Greece" +; NR_COUNTRY_GL="Greenland" +; NR_COUNTRY_GD="Grenada" +; NR_COUNTRY_GP="Guadeloupe" +; NR_COUNTRY_GU="Guam" +; NR_COUNTRY_GT="Guatemala" +; NR_COUNTRY_GG="Guernsey" +; NR_COUNTRY_GN="Guinea" +; NR_COUNTRY_GW="Guinea-Bissau" +; NR_COUNTRY_GY="Guyana" +; NR_COUNTRY_HT="Haiti" +; NR_COUNTRY_HM="Heard Island and McDonald Islands" +; NR_COUNTRY_VA="Holy See (Vatican City State)" +; NR_COUNTRY_HN="Honduras" +; NR_COUNTRY_HK="Hong Kong" +; NR_COUNTRY_HU="Hungary" +; NR_COUNTRY_IS="Iceland" +; NR_COUNTRY_IN="India" +; NR_COUNTRY_ID="Indonesia" +; NR_COUNTRY_IR="Iran, Islamic Republic of" +; NR_COUNTRY_IQ="Iraq" +; NR_COUNTRY_IE="Ireland" +; NR_COUNTRY_IM="Isle of Man" +; NR_COUNTRY_IL="Israel" +; NR_COUNTRY_IT="Italy" +; NR_COUNTRY_JM="Jamaica" +; NR_COUNTRY_JP="Japan" +; NR_COUNTRY_JE="Jersey" +; NR_COUNTRY_JO="Jordan" +; NR_COUNTRY_KZ="Kazakhstan" +; NR_COUNTRY_KE="Kenya" +; NR_COUNTRY_KI="Kiribati" +; NR_COUNTRY_KP="Korea, Democratic People's Republic of" +; NR_COUNTRY_KR="Korea, Republic of" +; NR_COUNTRY_KW="Kuwait" +; NR_COUNTRY_KG="Kyrgyzstan" +; NR_COUNTRY_LA="Lao People's Democratic Republic" +; NR_COUNTRY_LV="Latvia" +; NR_COUNTRY_LB="Lebanon" +; NR_COUNTRY_LS="Lesotho" +; NR_COUNTRY_LR="Liberia" +; NR_COUNTRY_LY="Libyan Arab Jamahiriya" +; NR_COUNTRY_LI="Liechtenstein" +; NR_COUNTRY_LT="Lithuania" +; NR_COUNTRY_LU="Luxembourg" +; NR_COUNTRY_MO="Macao" +; NR_COUNTRY_MK="Macedonia" +; NR_COUNTRY_MG="Madagascar" +; NR_COUNTRY_MW="Malawi" +; NR_COUNTRY_MY="Malaysia" +; NR_COUNTRY_MV="Maldives" +; NR_COUNTRY_ML="Mali" +; NR_COUNTRY_MT="Malta" +; NR_COUNTRY_MH="Marshall Islands" +; NR_COUNTRY_MQ="Martinique" +; NR_COUNTRY_MR="Mauritania" +; NR_COUNTRY_MU="Mauritius" +; NR_COUNTRY_YT="Mayotte" +; NR_COUNTRY_MX="Mexico" +; NR_COUNTRY_FM="Micronesia, Federated States of" +; NR_COUNTRY_MD="Moldova, Republic of" +; NR_COUNTRY_MC="Monaco" +; NR_COUNTRY_MN="Mongolia" +; NR_COUNTRY_ME="Montenegro" +; NR_COUNTRY_MS="Montserrat" +; NR_COUNTRY_MA="Morocco" +; NR_COUNTRY_MZ="Mozambique" +; NR_COUNTRY_MM="Myanmar" +; NR_COUNTRY_NA="Namibia" +; NR_COUNTRY_NR="Nauru" +; NR_COUNTRY_NM="North Macedonia" +; NR_COUNTRY_NP="Nepal" +; NR_COUNTRY_NL="Netherlands" +; NR_COUNTRY_AN="Netherlands Antilles" +; NR_COUNTRY_NC="New Caledonia" +; NR_COUNTRY_NZ="New Zealand" +; NR_COUNTRY_NI="Nicaragua" +; NR_COUNTRY_NE="Niger" +; NR_COUNTRY_NG="Nigeria" +; NR_COUNTRY_NU="Niue" +; NR_COUNTRY_NF="Norfolk Island" +; NR_COUNTRY_MP="Northern Mariana Islands" +; NR_COUNTRY_NO="Norway" +; NR_COUNTRY_OM="Oman" +; NR_COUNTRY_PK="Pakistan" +; NR_COUNTRY_PW="Palau" +; NR_COUNTRY_PS="Palestinian Territory" +; NR_COUNTRY_PA="Panama" +; NR_COUNTRY_PG="Papua New Guinea" +; NR_COUNTRY_PY="Paraguay" +; NR_COUNTRY_PE="Peru" +; NR_COUNTRY_PH="Philippines" +; NR_COUNTRY_PN="Pitcairn" +; NR_COUNTRY_PL="Poland" +; NR_COUNTRY_PT="Portugal" +; NR_COUNTRY_PR="Puerto Rico" +; NR_COUNTRY_QA="Qatar" +; NR_COUNTRY_RE="Reunion" +; NR_COUNTRY_RO="Romania" +; NR_COUNTRY_RU="Russian Federation" +; NR_COUNTRY_RW="Rwanda" +; NR_COUNTRY_SH="Saint Helena" +; NR_COUNTRY_KN="Saint Kitts and Nevis" +; NR_COUNTRY_LC="Saint Lucia" +; NR_COUNTRY_PM="Saint Pierre and Miquelon" +; NR_COUNTRY_VC="Saint Vincent and the Grenadines" +; NR_COUNTRY_WS="Samoa" +; NR_COUNTRY_SM="San Marino" +; NR_COUNTRY_ST="Sao Tome and Principe" +; NR_COUNTRY_SA="Saudi Arabia" +; NR_COUNTRY_SN="Senegal" +; NR_COUNTRY_RS="Serbia" +; NR_COUNTRY_SC="Seychelles" +; NR_COUNTRY_SL="Sierra Leone" +; NR_COUNTRY_SG="Singapore" +; NR_COUNTRY_SK="Slovakia" +; NR_COUNTRY_SI="Slovenia" +; NR_COUNTRY_SB="Solomon Islands" +; NR_COUNTRY_SO="Somalia" +; NR_COUNTRY_ZA="South Africa" +; NR_COUNTRY_GS="South Georgia and the South Sandwich Islands" +; NR_COUNTRY_ES="Spain" +; NR_COUNTRY_LK="Sri Lanka" +; NR_COUNTRY_SD="Sudan" +; NR_COUNTRY_SS="South Sudan" +; NR_COUNTRY_SR="Suriname" +; NR_COUNTRY_SJ="Svalbard and Jan Mayen" +; NR_COUNTRY_SZ="Swaziland" +; NR_COUNTRY_SE="Sweden" +; NR_COUNTRY_CH="Switzerland" +; NR_COUNTRY_SY="Syrian Arab Republic" +; NR_COUNTRY_TW="Taiwan" +; NR_COUNTRY_TJ="Tajikistan" +; NR_COUNTRY_TZ="Tanzania, United Republic of" +; NR_COUNTRY_TH="Thailand" +; NR_COUNTRY_TL="Timor-Leste" +; NR_COUNTRY_TG="Togo" +; NR_COUNTRY_TK="Tokelau" +; NR_COUNTRY_TO="Tonga" +; NR_COUNTRY_TT="Trinidad and Tobago" +; NR_COUNTRY_TN="Tunisia" +; NR_COUNTRY_TR="Turkey" +; NR_COUNTRY_TM="Turkmenistan" +; NR_COUNTRY_TC="Turks and Caicos Islands" +; NR_COUNTRY_TV="Tuvalu" +; NR_COUNTRY_UG="Uganda" +; NR_COUNTRY_UA="Ukraine" +; NR_COUNTRY_AE="United Arab Emirates" +; NR_COUNTRY_GB="United Kingdom" +; NR_COUNTRY_US="United States" +; NR_COUNTRY_UM="United States Minor Outlying Islands" +; NR_COUNTRY_UY="Uruguay" +; NR_COUNTRY_UZ="Uzbekistan" +; NR_COUNTRY_VU="Vanuatu" +; NR_COUNTRY_VE="Venezuela" +; NR_COUNTRY_VN="Vietnam" +; NR_COUNTRY_VG="Virgin Islands, British" +; NR_COUNTRY_VI="Virgin Islands, U.S." +; NR_COUNTRY_WF="Wallis and Futuna" +; NR_COUNTRY_EH="Western Sahara" +; NR_COUNTRY_YE="Yemen" +; NR_COUNTRY_ZM="Zambia" +; NR_COUNTRY_ZW="Zimbabwe" +; NR_CONTINENT_AF="Africa" +; NR_CONTINENT_AS="Asia" +; NR_CONTINENT_EU="Europe" +; NR_CONTINENT_NA="North America" +; NR_CONTINENT_SA="South America" +; NR_CONTINENT_OC="Oceania" +; NR_CONTINENT_AN="Antarctica" +; NR_FRONTEND="Front-end" +; NR_BACKEND="Back-end" +; NR_EMBED="Embed" +; NR_RATE="Rate %s" +; NR_REPORT_ISSUE="Report an issue" +; NR_TAG_PAGEGENERATOR="Page Generator" +; NR_TAG_PAGELANGURL="Page Language URL" +; NR_TAG_PAGEKEYWORDS="Page Keywords" +; NR_TAG_SITEEMAIL="Site Email" +; NR_TAG_DAY="Day" +; NR_TAG_MONTH="Month" +; NR_TAG_YEAR="Year" +; NR_TAG_USERREGISTERDATE="Register Date" +; NR_TAG_PAGEBROWSERTITLE="Browser Title" +; NR_TAG_EBID="Box ID" +; NR_TAG_EBTITLE="Box Title" +; NR_TAG_QUERYSTRINGOPTION="Query String : Option" +; NR_TAG_QUERYSTRINGVIEW="Query String : View" +; NR_TAG_QUERYSTRINGLAYOUT="Query String : Layout" +; NR_TAG_QUERYSTRINGTMPL="Query String : Template" +; NR_CANNOT_CREATE_FOLDER="Can't create folder to move file. %s" +; NR_CANNOT_MOVE_FILE="Can't move file: %s" +; NR_UPLOAD_INVALID_FILE_TYPE="Unsupported file type: %s (%s). The allowed file types are: %s" +; NR_UPLOAD_NO_MIME_TYPE="Unable to guess file mime type: %s. Make sure the fileinfo PHP extension is enabled." +; NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Cannot upload file: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" +; NR_HCAPTCHA="hCaptcha" +; NR_TYPE="Type" +; NR_CHECKBOX="Checkbox" +; NR_INVISIBLE="Invisible" +; NR_HCAPTCHA_DESC="To get a site and secret key for your domain, go to https://dashboard.hcaptcha.com/sites." +; NR_HCAPTCHA_SECRET_KEY_DESC="Used in the communication between your server and the hCaptcha server. Be sure to keep it a secret." +; NR_OUTDATED_EXTENSION="Your version of %s is more than %d days old and most likely already out of date. Please check if a %snewer version%s is published and install it." diff --git a/deployed/convertforms/plugins/system/nrframework/language/uk-UA/uk-UA.plg_system_nrframework.ini b/deployed/convertforms/plugins/system/nrframework/language/uk-UA/uk-UA.plg_system_nrframework.ini new file mode 100644 index 00000000..1b239fdf --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/language/uk-UA/uk-UA.plg_system_nrframework.ini @@ -0,0 +1,735 @@ +; @package Novarain Framework System Plugin +; @author Tassos Marinos - http://www.tassos.gr +; @copyright Copyright (c) 2016 Tassos Marinos. All rights reserved. +; @license http://www.tassos.gr + +; NON TRANSLATABLE +PLG_SYSTEM_NRFRAMEWORK="System - Novarain Framework" +PLG_SYSTEM_NRFRAMEWORK_DESC="Фреймворк 'Novarain Framework' використовується розширеннями, що випускаються веб-сайтом Tassos.gr" +NOVARAIN_FRAMEWORK="Novarain Framework" + +; TRANSLATABLE +NR_IGNORE="Ігнорувати" +NR_INCLUDE="Включити" +NR_EXCLUDE="Виключити" +NR_SELECTION="Вибір" +NR_ASSIGN_MENU_NOITEM="Не включати ID номер" +NR_ASSIGN_MENU_NOITEM_DESC="Призначити також коли в URL посиланням відсутня ID номер меню?" +NR_ASSIGN_MENU_CHILD="Також для дочірніх елементів" +NR_ASSIGN_MENU_CHILD_DESC="Призначити також для дочірніх елементів вибраних елементів?" +NR_COPY_OF="Копія %s" +NR_ASSIGN_DATETIME_DESC="Визначити відвідувачів на основі часу вашого сервера" +NR_DATETIME="Дата" +NR_TIME="Час" +NR_DATE="Дата" +NR_DATETIME_DESC="Введіть дату автоматичної публікації / автоматичного зняття з публікації" +NR_START_PUBLISHING="Дата та час початку" +NR_START_PUBLISHING_DESC="Введіть дату початку публікації" +NR_FINISH_PUBLISHING="Час закінчення" +NR_FINISH_PUBLISHING_DESC="Введіть дату зняття з публікації" +NR_DATETIME_NOTE="Дата і час використовують дані вашого сервера, а не ваших користувачів." +NR_ASSIGN_PHP="ПХП" +NR_PHPCODE="Код ПХП" +NR_ASSIGN_PHP_DESC="Введіть фрагмент коду PHP для оцінки." +NR_ASSIGN_PHP_DESC2="Показати відвідувачів на базі користувацького PHP-коду. Код повинен повернути значення true або false.

        Наприклад:
        return ($user->name == 'Tassos Marinos');" +NR_ASSIGN_TIMEONSITE="Час на сайті" +NR_SECONDS="Секунди" +NR_ASSIGN_TIMEONSITE_DESC="Введіть час в секундах, щоб порівняти загальний час користувача (Час відвідування) витраченого на весь сайт.

        Приклад:
        Якщо ви хочете відобразити вікно після того, як користувач витратив 3 хвилини на вашому сайті, введіть 180. " +NR_ASSIGN_URLS="URL" +NR_ASSIGN_URLS_DESC2="Показати відвідувачів, які переглядають конкретні URL-адреси" +NR_ASSIGN_URLS_DESC="Введіть URL (або його частина) для порівняння.
        Використовуйте новий рядок для кожного окремого елемента." +NR_ASSIGN_URLS_LIST="URL збіги" +NR_ASSIGN_URLS_REGEX="Використовувати регулярне вираження" +NR_ASSIGN_URLS_REGEX_DESC="Виберіть значення, як регулярний вираз." +NR_ASSIGN_LANGS="Мова" +NR_ASSIGN_LANGS_DESC="Показати відвідувачів, які переглядають ваш веб-сайт певною мовою" +NR_ASSIGN_LANGS_LIST_DESC="Виберіть мови" +NR_ASSIGN_DEVICES="Пристрої" +NR_ASSIGN_DEVICES_DESC2="Показати відвідувачів, які переглядають ваш веб-сайт на конкретному пристрої" +NR_ASSIGN_DEVICES_DESC="Виберіть пристрої" +NR_ASSIGN_DEVICES_NOTE="Майте на увазі, що виявлення пристроїв не завжди на 100% точний. Користувачі можуть налаштувати їх браузер, щоб імітувати інші пристрої." +NR_MENU="Меню" +NR_MENU_ITEMS="Пункт меню" +NR_MENU_ITEMS_DESC="Показати відвідувачів, які переглядають конкретні пункти меню" +NR_USERGROUP="Группа користувачів" +NR_ACCESSLEVEL="Рівень доступу группи користувачів" +NR_ACCESSLEVEL_DESC="Призначте групи користувачів.

        Примітка: Якщо хочете зробити публічним встановіть параметр Ігнорувати і не встановлюйте Public." +NR_SHOW_COPYRIGHT="Показати копірайт" +NR_SHOW_COPYRIGHT_DESC="Якщо вкл, додаткова інформація авторських прав буде відображатися в уявленнях адміністратора. Розширення Tassos.gr ніколи не відображають авторські права або зворотні посилання на сайті." +NR_WIDTH="Ширина" +NR_WIDTH_DESC="Вкажіть ширину в px, em або %

        Приклад: 400px" +NR_HEIGHT="Висота" +NR_HEIGHT_DESC="Вкажіть висоту в px, em або %

        Приклад: 400px" +NR_PADDING="Відступ" +NR_PADDING_DESC="Вкажіть відступ в px, em або %

        Приклад: 20px" +NR_MARGIN="Відступ" +NR_MARGIN_DESC="Властивість поля CSS використовується для генерування простору навколо поля та встановлення розміру пробілу поза межами кордону в пікселях або в %.

        Example 1: 25px
        Example 2: 5%

        Specifying the margin for each side [top right bottom left]:

        Top side only: 25px 0 0 0
        Right side only: 0 25px 0 0
        Bottom side only: 0 0 25px 0
        Left side only: 0 0 0 25px" +NR_COLOR_HOVER="Колір при наведенні курсору" +NR_COLOR="Колір" +NR_COLOR_DESC="Введіть колір в форматах HEX або RGBA" +NR_TEXT_COLOR="Колір тексту" +NR_BACKGROUND="Фон" +NR_BACKGROUND_COLOR="Колір фону" +NR_BACKGROUND_COLOR_DESC="Вкажіть колір фону в форматах HEX або RGBA. Щоб відключити вкажіть"_QQ_" _QQ_ "_QQ_"Ні"_QQ_" _QQ_ "_QQ_". Для абсолютної прозорості введіть"_QQ_" _QQ_ "_QQ_"прозоро"_QQ_" _QQ_ "_QQ_"." +NR_URL_SHORTENING_FAILED="Не вдалося скоротити %s з %s.%s." +NR_EXPORT="Експорт" +NR_IMPORT="Імпорт" +NR_PLEASE_CHOOSE_A_VALID_FILE="Будь ласка, виберіть коректне ім'я файлу" +NR_IMPORT_ITEMS="Імпорт елементів" +NR_PUBLISH_ITEMS="Публікація елементів" +NR_AS_EXPORTED="Як експортовано" +NR_TITLE="Назва" +NR_ACYMAILING="AcyMailing" +NR_ACYMAILING_LIST="Лист AcyMailing" +NR_ACYMAILING_LIST_DESC="Вибрати списки AcyMailing, які слід призначити." +NR_ASSIGN_ACYMAILING_DESC="Показати відвідувачів, які підписалися на відповідні листи АcyMailing" +NR_AKEEBASUBS="Підписка Akeeba" +NR_AKEEBASUBS_LEVELS="Рівні" +NR_AKEEBASUBS_LEVELS_DESC="Вибрати рівні підписки які слід призначити" +NR_ASSIGN_AKEEBASUBS_DESC="Показати відвідувачів, які підписалися на відповідні рівні підписки Akeeba Subscriptions" +NR_MATCH="Порівняти" +NR_MATCH_DESC="Використовуваний метод зіставлення для порівняння значення" +NR_ASSIGN_MATCHING_METHOD="Метод збігу" +NR_ASSIGN_MATCHING_METHOD_DESC="Чи повинні всі призначення збігатися ??

        Все
        Буде опубліковано якщо всі призначення нижче збігаються.
        < br /> Будь-який
        буде опубліковано якщо будь- (одне або більше) з призначень нижче збігаються.
        Призначені групи 'Ignore' будуть проігноровані. " +NR_ANY="Будь" +NR_ASSIGN_REFERRER="URL-адреса пересилання" +NR_ASSIGN_REFERRER_DESC2="Націлити відвідувачів, які приземляються на ваш сайт із певного джерела трафіку" +NR_ASSIGN_REFERRER_DESC="Введіть одну URL-адресу переліку на рядок: Наприклад:

        google.com
        facebook.com/mypage" +NR_ASSIGN_REFERRER_NOTE="Майте на увазі, що виявлення URL-адреса не завжди є 100% точним. Деякі сервери можуть використовувати проксі-сервери, які знімають цю інформацію, і її можна легко підробляти."_QQ_"NR_PROFEATURE_HEADER="_QQ_"%s is a PRO Feature" +NR_PROFEATURE_HEADER="%sце PRO функція" +NR_PROFEATURE_DESC="Вибачте, це %s недоступно в вашій версії. Будь ласка змініть вашу підписку на ПРО щоби розблокувати ці дивовижні функції" +NR_PROFEATURE_DISCOUNT="Бонус: %s користувачы отримують 20% знижки автоматично при оплаті." +NR_ONLY_AVAILABLE_IN_PRO="Доступно тільки у версії PRO" +NR_UPGRADE_TO_PRO="Оновити до PRO" +NR_UPGRADE_TO_PRO_TO_UNLOCK="Оновитися до версії Pro" +NR_UPGRADE_TO_PRO_VERSION="Дивовижно! Залишився лише один крок Натисніть кнопку нижче, щоб завершити оновлення до версії Pro." +NR_UNLOCK_PRO_FEATURE="Розблокувати функції ПРО" +NR_USING_THE_FREE_VERSION="Ви використовуєте БЕЗКОШТОВУ версію Convert Forms. Придбайте PRO версію для повного функціоналу " +NR_LEFT_TO_RIGHT="Зліва направо" +NR_RIGHT_TO_LEFT="Справа наліво" +NR_BGIMAGE="Зображення фону" +NR_BGIMAGE_DESC="Встановити зображення фону" +NR_BGIMAGE_FILE="Зображення" +NR_BGIMAGE_FILE_DESC="Виберіть або завантажте файл, в якості фону." +NR_BGIMAGE_REPEAT="Повтор" +NR_BGIMAGE_REPEAT_DESC="Повтор фону встановлює, режим, в якому фотов зображення буде повторюватися. За замовчуванням, фонове зображення повторюється як по вертикалі, так і по горизонталі.

        Повтор: Фонове зображення повторюється як по вертикалі, так і по горизонталі .

        Повтор-x: Фонове зображення повторюється по горизонталі

        Повтор-y: Фонове зображення повторюється по вертикалі

        Ні-повтору: Повтор зображення відключений. " +NR_BGIMAGE_SIZE="Розмір" +NR_BGIMAGE_SIZE_DESC="Вкажіть розмір фонового зображення.

        Авто: Фонове зображення містить власні ширину і висоту

        Обкладинка: Масштабує фонове зображення на максимальний розмір, щоб покрити фонове простір

        Контейнер: масштабує зображення таким чином, що його ширина і висота його може поміститися усередині області вмісту

        100% 100%: Розтягує фонове зображення, щоб повністю покрити область контенту. " +NR_BGIMAGE_POSITION="Позиція" +NR_BGIMAGE_POSITION_DESC="Властивість background-position задає початкове положення зображення. За умолачнію розміщується зверху-ліворуч. Перше значення для горизонтального позиціонування, друге для вертикального

        Ви можете використовувати одне із зумовлених значень, або введіть значення у відсотках: x% y% або в пікселях xPos yPos. " +NR_RTL="Включити RTL" +NR_RTL_DESC="Напрямок тексту справа наліво має важливе значення для таких мов як арабська, іврит, сирійський і тд." +NR_HORIZONTAL="Горизонтально" +NR_VERTICAL="Вертикально" +NR_FORM_ORIENTATION="Орієнтація форми" +NR_FORM_ORIENTATION_DESC="Виберіть орієнтацію форми" +NR_ASSIGN_CATEGORY="Категорії" +NR_ASSIGN_CATEGORY_DESC="Виберіть категорії" +NR_ASSIGN_CATEGORY_CHILD="Також для дочірніх елементів" +NR_ASSIGN_CATEGORY_CHILD_DESC="Також призначити виділені елементи до дочірнім?" +NR_NEW="Новий" +NR_LIST="Список" +NR_DOCUMENTATION="Документація" +NR_KNOWLEDGEBASE="База знань" +NR_FAQ="FAQ" +NR_INFORMATION="Інформація" +NR_EXTENSION="Розширення" +NR_VERSION="Версія" +NR_CHANGELOG="Що нового" +; NR_DOWNLOAD="Download" +NR_DOWNLOAD_KEY_MISSING="Ключ для завантаження відсутній" +NR_DOWNLOAD_KEY="Ключ" +NR_DOWNLOAD_KEY_DESC="Щоб знайти ключ завантаження, увійдіть у свій обліковий запис на Tassos.gr і перейдіть до розділу Завантаження.

        Примітка: Встановивши тут ключ завантаження, не оновлюються безкоштовні версії до версій Pro. Щоб розблокувати функції Pro, вам також потрібно встановити версію Pro над безкоштовною версією." +NR_DOWNLOAD_KEY_HOW="Для того, щоб компонент оновлювався разом з Joomla updater, потрібно ввести Ключ в налаштуваннях Novarain Framework Plugin." +NR_DOWNLOAD_KEY_FIND="Знайти ключ" +NR_DOWNLOAD_KEY_UPDATE="Оновити ключ" +NR_OK="Ок" +NR_MISSING="Не знайдено" +NR_LICENSE="Ліцензія" +NR_AUTHOR="Автор" +NR_FOLLOWME="Підписатися" +NR_FOLLOW="Підписатися на %s" +NR_TRANSLATE_INTEREST="Чи зацікавлені в допомозі з перекладом %s на свою мову?" +NR_TRANSIFEX_REQUEST="Надішліть мені запит на Transifex" +NR_HELP_WITH_TRANSLATIONS="Допомога з перекладами" +NR_PUBLISHING_ASSIGNMENTS="Прив'язка публікації" +NR_ADVANCED="Розширені" +NR_USEGLOBAL="За замовчуванням" +NR_WEEKDAY="День тижня" +NR_MONTH="Місяць" +NR_MONDAY="Понеділок" +NR_TUESDAY="Вівторок" +NR_WEDNESDAY="Середа" +NR_THURSDAY="Четвер" +NR_FRIDAY="П'ятниця" +NR_SATURDAY="Субота" +NR_WEEKEND="Вихідні дні" +NR_WEEKDAYS="Будні" +NR_SUNDAY="Неділя" +NR_JANUARY="Січень" +NR_FEBRUARY="Лютий" +NR_MARCH="Березень" +NR_APRIL="Квітень" +NR_MAY="Травень" +NR_JUNE="Червень" +NR_JULY="Липень" +NR_AUGUST="Серпень" +NR_SEPTEMBER="Вересень" +NR_OCTOBER="Жовтень" +NR_NOVEMBER="Листопад" +NR_DECEMBER="Грудень" +NR_NEVER="Ніколи" +NR_SECONDS="Секунди" +NR_MINUTES="Хвилин" +NR_HOURS="Часів" +NR_DAYS="Днів" +NR_SESSION="Сесія" +NR_EVER="Коли-небудь" +NR_COOKIE="Кукі" +NR_BOTH="Обидва" +NR_NONE="Ні" +NR_DESKTOPS="Настільний компьютер" +NR_MOBILES="Мобільний пристрій" +NR_TABLETS="Таблет" +NR_PER_SESSION="Раз в сесію" +NR_PER_DAY="Кожен день" +NR_PER_WEEK="Раз на тиждень" +NR_PER_MONTH="Раз на місяць" +NR_FOREVER="Завжди" +NR_FEATURE_UNDER_DEV="Ця опція в стадії розробки" +NR_LIKE_THIS_EXTENSION="Подобається це розширення?" +NR_LEAVE_A_REVIEW="Залишити відгук на JED" +NR_SUPPORT="Підтримка" +NR_NEED_SUPPORT="Потрібна підтримка?" +NR_DROP_EMAIL="Напишіть мені по електронній пошті" +NR_READ_DOCUMENTATION="Читати документацію" +NR_COPYRIGHT="%s - Tassos.gr - Всі права захищені" +NR_DASHBOARD="Панель" +NR_NAME="Ім'я" +NR_WRONG_COORDINATES="Надані координати некоректні" +NR_ENTER_COORDINATES="Широта, Довгота" +NR_NO_ITEMS_FOUND="Елементи не знайдені" +NR_ITEM_IDS="Ні ID елементів" +NR_TOGGLE="Переключитися" +NR_EXPAND="Розгорнути" +NR_COLLAPSE="Згорнути" +NR_SELECTED="Вибрані" +NR_MAXIMIZE="Максимізувати" +NR_MINIMIZE="Мнімізіровать" +NR_SELECTION="Вибір" +NR_INSTALL="Установка" +NR_INSTALL_NOW="Встановити зараз" +NR_INSTALLED="Установлено" +NR_COMING_SOON="Скоро ..." +NR_ROADMAP="Заплановано" +NR_MEDIA_VERSIONING="Використовувати версії медіа" +NR_MEDIA_VERSIONING_DESC="Виберіть, щоб додати додатковий номер версії до кінця носія (JS / CSS) URL-адрес, щоб змусити браузери завантажувати правильний файл." +NR_LOAD_JQUERY="Завантаження jQuery" +NR_LOAD_JQUERY_DESC="Виберіть завантаження ядра JQuery скрипт. Ви можете відключити цю функцію, якщо у вас є конфлікти, або якщо ваш шаблон або інші розширення завантажують власну версію JQuery." +NR_SELECT_CURRENCY="Виберіть валюту" +NR_CONVERTFORMS="Форми" +NR_CONVERTFORMS_LIST="Кампанія" +NR_ASSIGN_CONVERTFORMS_DESC="Показати відвідувачів які підписалися на відповідну кампанію форм" +NR_CONVERTFORMS_LIST_DESC="Виберіть кампанії ConvertForms, які потрібно призначити." +NR_LEFT="Ліво" +NR_CENTER="Центр" +NR_RIGHT="Право" +NR_BOTTOM="Низ" +NR_TOP="Верх" +NR_AUTO="Авто" +NR_CUSTOM="Спеціальне" +NR_UPLOAD="Завантаження" +NR_IMAGE="Зображення" +NR_INTRO_IMAGE="Вступне зображення" +NR_FULL_IMAGE="Повне зображення" +NR_IMAGE_SELECT="Вибрати зображення" +NR_IMAGE_SIZE_COVER="Обкладинка" +NR_IMAGE_SIZE_CONTAIN="Містить" +NR_REPEAT="Повторювати" +NR_REPEAT_X="Повторювати по X" +NR_REPEAT_Y="Повторювати по Y" +NR_REPEAT_NO="Не повторювати" +NR_FIELD_STATE_DESC="Встановити стан елемента" +NR_CREATED_DATE="Дата створення" +NR_CREATED_DATE_DESC="Дата створення елемента" +NR_MODIFIFED_DATE="Дата зміни" +NR_MODIFIFED_DATE_DESC="Дата зміни елемента" +NR_CATEGORIES="Категорія" +NR_CATEGORIES_DESC="Виберіть категорії, яким слід призначити." +NR_ALSO_ON_CHILD_ITEMS="Також дочірні елементи" +NR_ALSO_ON_CHILD_ITEMS_DESC="Також призначити для дочірніх елементів вибрані елементи?" +NR_PAGE_TYPE="Тип сторінки" +NR_PAGE_TYPES="Типи сторінок" +NR_PAGE_TYPES_DESC="Виберіть, на яких типах сторінок призначення має бути активним." +; NR_CONTENT_VIEW_CATEGORY_BLOG="Category Blog" +; NR_CONTENT_VIEW_CATEGORY_LIST="Category List" +; NR_CONTENT_VIEW_CATEGORIES="List All Categories" +; NR_CONTENT_VIEW_ARCHIVED="Archived Articles" +; NR_CONTENT_VIEW_FEATURES="Featured Articles" +; NR_CONTENT_VIEW_CREATE_ARTICLE="Create Article" +; NR_CONTENT_VIEW_ARTICLE="Single Article" +NR_ARTICLE_VIEW_DESC="Увімкнути для врахування перегляду статті" +NR_CATEGORY_VIEW="Перегляд категорії" +NR_CATEGORY_VIEW_DESC="Увімкнути для врахування перегляду категорії" +NR_ARTICLES="Статті" +NR_ARTICLES_DESC="Виберіть статті для присвоєння." +NR_ARTICLE="Стаття" +NR_ARTICLE_AUTHORS="Автори" +NR_ARTICLE_AUTHORS_DESC="Виберіть авторів для присвоєння." +NR_ONLY="Тільки" +NR_OTHERS="Інші" +NR_SMARTTAGS="Розумні теги" +NR_SMARTTAGS_SHOW="Показати розумні теги" +NR_SMARTTAGS_NOTFOUND="Не знайдено смарт-тегів" +NR_SMARTTAGS_SEARCH_PLACEHOLDER="Пошук розумних тегів" +NR_CONTACT_US="Зв'яжіться з нами" +NR_FONT_COLOR="Колір шрифту" +NR_FONT_SIZE="Розмір шрифту" +NR_FONT_SIZE_DESC="Виберіть розмір шрифту в пікселях" +NR_TEXT="Текст" +NR_URL="URL" +NR_EXECUTE_ON_OUTPUT_OVERRIDE="Увімкнути переосмислення виводу" +NR_EXECUTE_ON_OUTPUT_OVERRIDE_DESC="Вмикає візуалізацію розширення, коли перекривається макет сторінки (tmpl). Приклади: tmpl = компонент або tmpl = модально." +NR_EXECUTE_ON_FORMAT_OVERRIDE="Увімкнути при перезапис формату" +NR_EXECUTE_ON_FORMAT_OVERRIDE_DESC="Вмикає візуалізацію розширення, коли формат сторінки не відрізняється від HTML. Приклади: format = raw або format = json." +NR_GEOLOCATING="Геолокація" +NR_GEOLOCATING_DESC="Геолокація не завжди на 100% точна. Геолокація заснована на IP-адресі відвідувача. Не всі IP-адреси є фіксованими або відомими." +NR_CITY="Місто" +NR_CITY_NAME="Назва міста" +NR_CONDITION_CITY_DESC="Введіть назву міста англійською мовою. Введіть кілька міст, розділених комою." +NR_CONTINENT="Континент" +NR_REGION="Регіон" +NR_CONDITION_REGION_DESC="Значення складається з двох частин, двох літер ISO 3166-1 код країни та коду регіону. Значення має бути у такій формі: COUNTRY_CODE-REGION_CODE. Для повного списку кодів регіонів натисніть на Знайти Посилання коду регіону. " +NR_ASSIGN_COUNTRIES="Країна" +NR_ASSIGN_COUNTRIES_DESC2="Показати відвідувачів, які фізично перебувають у певній країні" +NR_ASSIGN_COUNTRIES_DESC="Виберіть країни, які потрібно призначити" +NR_ASSIGN_CONTINENTS="Континент" +NR_ASSIGN_CONTINENTS_DESC="Виберіть континенти для призначення" +NR_ASSIGN_CONTINENTS_DESC2="Показати відвідувачів, які перебувають фізично на певному континенті" +NR_ICONTACT_ACCOUNTID_ERROR="Не вдалося отримати ідентифікатор акаунта iContact" +NR_TAG_CLIENTDEVICE="Тип пристрою відвідувачів" +NR_TAG_CLIENTOS="Операційна система відвідувачів" +NR_TAG_CLIENTBROWSER="Переглядач відвідувачів" +NR_TAG_CLIENTUSERAGENT="Рядок відвідувачого агента" +NR_TAG_IP="IP-адреса відвідувача" +NR_TAG_URL="URL-адреса сторінки" +NR_TAG_URLENCODED="Кодована URL-адреса сторінки" +NR_TAG_URLPATH="Шлях до сторінки" +NR_TAG_REFERRER="Посилання на сторінку" +NR_TAG_SITENAME="Назва сайту" +NR_TAG_SITEURL="URL-адреса сайту" +NR_TAG_PAGETITLE="Заголовок сторінки" +NR_TAG_PAGEDESC="Мета опису сторінки" +NR_TAG_PAGELANG="Код мови сторінки" +NR_TAG_USERID="Ідентифікатор користувача" +NR_TAG_USERNAME="Повне ім'я користувача" +NR_TAG_USERLOGIN="Вхід користувача" +NR_TAG_USEREMAIL="Електронна пошта користувача" +NR_TAG_USERFIRSTNAME="Ім'я користувача" +NR_TAG_USERLASTNAME="Прізвище користувача" +NR_TAG_USERGROUPS="Ідентифікатори груп користувачів" +NR_TAG_DATE="Дата" +NR_TAG_TIME="Час" +NR_TAG_RANDOMID="Випадковий ідентифікатор" +NR_ICON="Ікона" +NR_SELECT_MODULE="Вибір модуля" +NR_SELECT_CONTINENT="Вибрати континент" +NR_SELECT_COUNTRY="Вибрати країну" +NR_PLUGIN="Плагін" +NR_GMAP_KEY="Ключ API Карт Google" +NR_GMAP_KEY_DESC="Ключ API Карт Google використовується розширеннями Tassos.gr. Якщо у вас виникли проблеми із завантаженням карти Google, вам, можливо, потрібно ввести власний ключ API." +NR_GMAP_FIND_KEY="Отримати ключ API" +NR_ARE_YOU_SURE="Ви впевнені?" +NR_CUSTOMURL="Спеціальна URL-адреса" +NR_SAMPLE="Зразок" +NR_DEBUG="Налагодження" +NR_CUSTOMURL="Спеціальна URL-адреса" +NR_READMORE="Детальніше" +NR_IPADDRESS="IP-адреса" +NR_ASSIGN_BROWSERS="Веб-переглядач" +NR_ASSIGN_BROWSERS_DESC="Виберіть браузери, які потрібно призначити" +NR_ASSIGN_BROWSERS_DESC2="Націлити відвідувачів, які переглядають ваш сайт за допомогою конкретних браузерів, таких як Chrome, Firefox або Internet Explorer" +NR_CHROME="Chrome" +NR_FIREFOX="Firefox" +NR_EDGE="Край" +NR_IE="Internet Explorer" +NR_SAFARI="Сафарі" +NR_OPERA="Опера" +NR_ASSIGN_OS="Операційна система" +NR_ASSIGN_OS_DESC="Виберіть операційні системи для призначення" +NR_ASSIGN_OS_DESC2="Націлити відвідувачів, які використовують певні операційні системи, такі як Windows, Linux або Mac" +NR_LINUX="Linux" +NR_MAC="MacOS" +NR_ANDROID="Android" +NR_IOS="iOS" +NR_WINDOWS="Windows" +NR_BLACKBERRY="Blackberry" +NR_CHROMEOS="Chrome OS" +NR_ASSIGN_PAGEVIEWS="Кількість переглядів сторінки" +NR_ASSIGN_PAGEVIEWS_DESC="Націлити відвідувачів, які переглянули певну кількість сторінок" +NR_ASSIGN_PAGEVIEWS_VIEWS="Перегляд сторінки" +NR_ASSIGN_PAGEVIEWS_VIEWS_DESC="Введіть кількість переглядів сторінки" +NR_ASSIGN_COOKIENAME_NAME="Ім'я файлу cookie" +NR_ASSIGN_COOKIENAME_NAME_DESC="Введіть ім'я файлу cookie, яке потрібно призначити" +NR_ASSIGN_COOKIENAME_NAME_DESC2="Націлити відвідувачів, які зберігають певні файли cookie у своєму браузері" +NR_FEWER_THAN="Менше ніж" +NR_GREATER_THAN="Більше" +NR_EXACTLY="Точно" +NR_EXISTS="Існує" +NR_IS_EQUAL="Дорівнює" +NR_CONTAINS="Містить" +NR_STARTS_WITH="Починається з" +NR_ENDS_WITH="Закінчується на" +NR_ASSIGN_COOKIENAME_CONTENT="Вміст файлів cookie" +NR_ASSIGN_COOKIENAME_CONTENT_DESC="Вміст файлу cookie" +NR_ASSIGN_IP_ADDRESSES_DESC2="Націлити відвідувачів, які стоять за певною IP-адресою (діапазоном)" +NR_ASSIGN_IP_ADDRESSES_DESC="Введіть список знаків із комою та / або"_QQ_" введіть "_QQ_"розділені IP-адреси та діапазони

        Приклад:
        127.0.0.1,
        192.10-120.2,
        168 " +NR_ASSIGN_USER_ID="Ідентифікатор користувача" +NR_ASSIGN_USER_ID_DESC="Націлити конкретних користувачів Joomla за їх ідентифікаторами" +NR_ASSIGN_USER_ID_SELECTION_DESC="Введіть розділені комами ідентифікатори користувача Joomla" +NR_ASSIGN_COMPONENTS="Компонент" +NR_ASSIGN_COMPONENTS_DESC="Виберіть компоненти, які потрібно призначити" +NR_ASSIGN_COMPONENTS_DESC2="Націлити відвідувачів, які переглядають конкретні компоненти" +NR_ASSIGN_TIMERANGE="Діапазон часу" +NR_ASSIGN_TIMERANGE_DESC="Націлити відвідувачів залежно від часу вашого сервера" +NR_START_TIME="Час початку" +NR_END_TIME="Час закінчення" +NR_START_PUBLISHING_TIMERANGE_DESC="Введіть час для початку публікації" +NR_FINISH_PUBLISHING_TIMERANGE_DESC="Введіть час для завершення публікації" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_DESC="Щоб отримати веб-сайт та секретний ключ для вашого домену, перейдіть на сторінку https://www.google.com/recaptcha." +NR_RECAPTCHA_SITE_KEY="Ключ сайту" +NR_RECAPTCHA_SITE_KEY_DESC="Використовується в коді JavaScript, який подається вашим користувачам." +NR_RECAPTCHA_SECRET_KEY="Секретний ключ" +NR_RECAPTCHA_SECRET_KEY_DESC="Використовується для зв'язку між вашим сервером та сервером reCAPTCHA. Не забудьте зберегти це в таємниці." +NR_RECAPTCHA_SITE_KEY_ERROR="Ключ сайту reCaptcha відсутній або недійсний" +NR_PREVIOUS_MONTH="Попередній місяць" +NR_NEXT_MONTH="Наступний місяць" +NR_ASSIGN_GROUP_PAGE_URL="Сторінка / URL" +NR_ASSIGN_GROUP_PAGE_URL_DESC="Націлити відвідувачів, які переглядають конкретні пункти меню чи URL-адреси" +NR_ASSIGN_GROUP_DATETIME_DESC="Запустити вікно залежно від дати та часу вашого сервера" +NR_ASSIGN_GROUP_USER_VISITOR="Користувач / відвідувач Joomla" +NR_ASSIGN_GROUP_USER_VISITOR_DESC="Націлити зареєстрованих користувачів або відвідувачів, які переглянули певну кількість сторінок" +NR_ASSIGN_GROUP_PLATFORM="Платформа для відвідувачів" +NR_ASSIGN_GROUP_PLATFORM_DESC="Націлити відвідувачів, які використовують мобільний, Google Chrome або навіть Windows" +NR_ASSIGN_GROUP_GEO_DESC="Націлити відвідувачів, які фізично перебувають у певному регіоні" +NR_ASSIGN_GROUP_JCONTENT="Joomla! Вміст" +NR_ASSIGN_GROUP_JCONTENT_DESC="Націлити відвідувачів, які переглядають конкретні статті чи категорії Joomla" +NR_ASSIGN_GROUP_SYSTEM="Система / Інтеграції" +NR_ASSIGN_GROUP_SYSTEM_DESC="Націлити відвідувачів, які взаємодіяли з певними сторонніми розширеннями Joomla" +NR_ASSIGN_GROUP_ADVANCED="Розширене націлювання на відвідувачів" +NR_ASSIGN_USERGROUP_DESC="Цільова група користувачів Joomla" +NR_ASSIGN_ARTICLE_DESC="Націлити відвідувачів, які переглядають конкретні статті Joomla" +NR_ASSIGN_ARTICLE_CATEGORIES_DESC="Націлити відвідувачів, які переглядають конкретні категорії Joomla" +NR_EXTENSION_REQUIRED="Для забезпечення нормальної роботи компонента %s потрібно включити плагін %s." +NR_ASSIGN_K2="K2" +NR_ASSIGN_K2_DESC="Націлити відвідувачів, які переглядають певні елементи, категорії або теги K2" +NR_ASSIGN_K2_ITEMS="Елемент" +NR_ASSIGN_K2_ITEMS_DESC="Націлити відвідувачів, які переглядають конкретні елементи K2." +NR_ASSIGN_K2_ITEMS_LIST_DESC="Виберіть елементи K2 для призначення" +NR_ASSIGN_K2_ITEMS_CONTENT_KEYWORDS_DESC="Збіг за певними ключовими словами у вмісті елемента. Відокремте комою чи новим рядком." +NR_ASSIGN_K2_ITEMS_META_KEYWORDS_DESC="Збіг мета-ключових слів елемента. Відокремте комою або новим рядком." +NR_ASSIGN_K2_PAGETYPES_DESC="Націлити відвідувачів, які переглядають конкретні типи сторінок K2" +NR_ASSIGN_K2_ITEM_OPTION="Елемент" +NR_ASSIGN_K2_LATEST_OPTION="Останні елементи користувачів або категорій" +NR_ASSIGN_K2_TAG_OPTION="Сторінка тегів" +NR_ASSIGN_K2_CATEGORY_OPTION="Сторінка категорії" +NR_ASSIGN_K2_ITEM_FORM_OPTION="Форма редагування елемента" +NR_ASSIGN_K2_USER_PAGE_OPTION="Сторінка користувача (блог)" +NR_ASSIGN_K2_TAGS_DESC="Націлити відвідувачів, які переглядають елементи K2 із конкретними тегами" +NR_ASSIGN_K2_CATEGORIES_DESC="Націлити відвідувачів, які переглядають конкретні категорії K2" +NR_ASSIGN_K2_CATEGORIES_CATEGORIES_OPTION="Категорії" +NR_ASSIGN_K2_CATEGORIES_ITEMS_OPTION="Елементи" +NR_ASSIGN_PAGE_TYPES_DESC="Виберіть типи сторінок, які потрібно призначити" +NR_ASSIGN_TAGS_DESC="Виберіть теги, які потрібно призначити" +NR_CONTENT_KEYWORDS="Ключові слова вмісту" +NR_META_KEYWORDS="Мета ключових слів" +NR_TAG="Тег" +NR_NORMAL="Нормальний" +NR_COMPACT="Компактний" +NR_LIGHT="Світло" +NR_DARK="Темно" +NR_SIZE="Розмір" +NR_THEME="Тема" +NR_SINGLE="Одномісний" +NR_MULTIPLE="Кілька" +NR_RANGE="Діапазон" +NR_RECAPTCHA="reCAPTCHA" +NR_RECAPTCHA_PLEASE_VALIDATE="Будь ласка, підтвердіть" +NR_RECAPTCHA_INVALID_SECRET_KEY="Недійсний секретний ключ" +NR_PAGE="Сторінка" +NR_YOU_ARE_USING_EXTENSION="Ви використовуєте %s %s" +NR_UPDATE="Оновити" +NR_SHOW_UPDATE_NOTIFICATION="Показати повідомлення про оновлення" +NR_SHOW_UPDATE_NOTIFICATION_DESC="Якщо вибрано, сповіщення про оновлення відображатиметься у вікні головного компонента, коли є нова версія цього розширення." +NR_EXTENSION_NEW_VERSION_IS_AVAILABLE="%s доступний" +NR_ERROR_EMAIL_IS_DISABLED="Надсилання пошти вимкнено. Електронні листи не можна було надсилати." +NR_ASSIGN_ITEMS="Елемент" +NR_COUNTRY_AF="Афганістан" +NR_COUNTRY_AX="Аландські острови" +NR_COUNTRY_AL="Албанія" +NR_COUNTRY_DZ="Алжир" +NR_COUNTRY_AS="Американське Самоа" +NR_COUNTRY_AD="Андорра" +NR_COUNTRY_AO="Ангола" +NR_COUNTRY_AI="Ангілья" +NR_COUNTRY_AQ="Антарктида" +NR_COUNTRY_AG="Антигуа і Барбуда" +NR_COUNTRY_AR="Аргентина" +NR_COUNTRY_AM="Вірменія" +NR_COUNTRY_AW="Аруба" +NR_COUNTRY_AU="Австралія" +NR_COUNTRY_AT="Австрія" +NR_COUNTRY_AZ="Азербайджан" +NR_COUNTRY_BS="Багами" +NR_COUNTRY_BH="Бахрейн" +NR_COUNTRY_BD="Бангладеш" +NR_COUNTRY_BB="Барбадос" +NR_COUNTRY_BY="Білорусь" +NR_COUNTRY_BE="Бельгія" +NR_COUNTRY_BZ="Беліз" +NR_COUNTRY_BJ="Бенін" +NR_COUNTRY_BM="Бермуди" +NR_COUNTRY_BT="Бутан" +NR_COUNTRY_BO="Болівія" +NR_COUNTRY_BA="Боснія та Герцеговина" +NR_COUNTRY_BW="Ботсвана" +NR_COUNTRY_BV="Острів Буве" +NR_COUNTRY_BR="Бразилія" +NR_COUNTRY_IO="Британська територія Індійського океану" +NR_COUNTRY_BN="Бруней Даруссалам" +NR_COUNTRY_BG="Болгарія" +NR_COUNTRY_BF="Буркіна-Фасо" +NR_COUNTRY_BI="Бурунді" +NR_COUNTRY_KH="Камбоджа" +NR_COUNTRY_CM="Камерун" +NR_COUNTRY_CA="Канада" +NR_COUNTRY_CV="Кабо-Верде" +NR_COUNTRY_KY="Кайманові острови" +NR_COUNTRY_CF="Центральноафриканська республіка" +NR_COUNTRY_TD="Чад" +NR_COUNTRY_CL="Чилі" +NR_COUNTRY_CN="Китай" +NR_COUNTRY_CX="Острів Різдва" +NR_COUNTRY_CC="Кокосові (Кілінгські) острови" +NR_COUNTRY_CO="Колумбія" +NR_COUNTRY_KM="Коморські острови" +NR_COUNTRY_CG="Конго" +NR_COUNTRY_CD="Конго, Демократична Республіка" +NR_COUNTRY_CK="Острови Кука" +NR_COUNTRY_CR="Коста-Ріка" +NR_COUNTRY_CI="Кот-д'Івуар" +NR_COUNTRY_HR="Хорватія" +NR_COUNTRY_CU="Куба" +; NR_COUNTRY_CW="Curaçao" +NR_COUNTRY_CY="Кіпр" +NR_COUNTRY_CZ="Чехія" +NR_COUNTRY_DK="Данія" +NR_COUNTRY_DJ="Джибуті" +NR_COUNTRY_DM="Домініка" +NR_COUNTRY_DO="Домініканська Республіка" +NR_COUNTRY_EC="Еквадор" +NR_COUNTRY_EG="Єгипет" +NR_COUNTRY_SV="Сальвадор" +NR_COUNTRY_GQ="Екваторіальна Гвінея" +NR_COUNTRY_ER="Еритрея" +NR_COUNTRY_EE="Естонія" +NR_COUNTRY_ET="Ефіопія" +NR_COUNTRY_FK="Фолклендські острови (Мальвіни)" +NR_COUNTRY_FO="Фарерські острови" +NR_COUNTRY_FJ="Фіджі" +NR_COUNTRY_FI="Фінляндія" +NR_COUNTRY_FR="Франція" +NR_COUNTRY_GF="Французька Гвіана" +NR_COUNTRY_PF="Французька Полінезія" +NR_COUNTRY_TF="Південні французькі території" +NR_COUNTRY_GA="Габон" +NR_COUNTRY_GM="Гамбія" +NR_COUNTRY_GE="Грузія" +NR_COUNTRY_DE="Німеччина" +NR_COUNTRY_GH="Гана" +NR_COUNTRY_GI="Гібралтар" +NR_COUNTRY_GR="Греція" +NR_COUNTRY_GL="Гренландія" +NR_COUNTRY_GD="Гренада" +NR_COUNTRY_GP="Гваделупа" +NR_COUNTRY_GU="Гуам" +NR_COUNTRY_GT="Гватемала" +NR_COUNTRY_GG="Гернсі" +NR_COUNTRY_GN="Гвінея" +NR_COUNTRY_GW="Гвінея-Біссау" +NR_COUNTRY_GY="Гайана" +NR_COUNTRY_HT="Гаїті" +NR_COUNTRY_HM="Острови Херда та Макдональд" +NR_COUNTRY_VA="Святий Престол (місто Ватикан)" +NR_COUNTRY_HN="Гондурас" +NR_COUNTRY_HK="Гонконг" +NR_COUNTRY_HU="Угорщина" +NR_COUNTRY_IS="Ісландія" +NR_COUNTRY_IN="Індія" +NR_COUNTRY_ID="Індонезія" +NR_COUNTRY_IR="Іран, Ісламська Республіка" +NR_COUNTRY_IQ="Ірак" +NR_COUNTRY_IE="Ірландія" +NR_COUNTRY_IM="Острів Мен" +NR_COUNTRY_IL="Ізраїль" +NR_COUNTRY_IT="Італія" +NR_COUNTRY_JM="Ямайка" +NR_COUNTRY_JP="Японія" +NR_COUNTRY_JE="Джерсі" +NR_COUNTRY_JO="Йорданія" +NR_COUNTRY_KZ="Казахстан" +NR_COUNTRY_KE="Кенія" +NR_COUNTRY_KI="Кірібаті" +NR_COUNTRY_KP="Корея, Демократична Народна Республіка" +NR_COUNTRY_KR="Корея, Республіка" +NR_COUNTRY_KW="Кувейт" +NR_COUNTRY_KG="Киргизстан" +NR_COUNTRY_LA="Лаоська Народна Демократична Республіка" +NR_COUNTRY_LV="Латвія" +NR_COUNTRY_LB="Ліван" +NR_COUNTRY_LS="Лесото" +NR_COUNTRY_LR="Ліберія" +NR_COUNTRY_LY="Лівійська арабська Джамахірія" +NR_COUNTRY_LI="Ліхтенштейн" +NR_COUNTRY_LT="Литва" +NR_COUNTRY_LU="Люксембург" +NR_COUNTRY_MO="Макао" +NR_COUNTRY_MK="Македонія" +NR_COUNTRY_MG="Мадагаскар" +NR_COUNTRY_MW="Малаві" +NR_COUNTRY_MY="Малайзія" +NR_COUNTRY_MV="Мальдіви" +NR_COUNTRY_ML="Малі" +NR_COUNTRY_MT="Мальта" +NR_COUNTRY_MH="Маршаллові острови" +NR_COUNTRY_MQ="Мартиніка" +NR_COUNTRY_MR="Мавританія" +NR_COUNTRY_MU="Маврикій" +NR_COUNTRY_YT="Майотта" +NR_COUNTRY_MX="Мексика" +NR_COUNTRY_FM="Мікронезія, федеративні держави" +NR_COUNTRY_MD="Молдова, Республіка" +NR_COUNTRY_MC="Монако" +NR_COUNTRY_MN="Монголія" +NR_COUNTRY_ME="Чорногорія" +NR_COUNTRY_MS="Монтсеррат" +NR_COUNTRY_MA="Марокко" +NR_COUNTRY_MZ="Мозамбік" +NR_COUNTRY_MM="М'янма" +NR_COUNTRY_NA="Намібія" +NR_COUNTRY_NR="Науру" +NR_COUNTRY_NM="Північна Македонія" +NR_COUNTRY_NP="Непал" +NR_COUNTRY_NL="Нідерланди" +NR_COUNTRY_AN="Нідерландські Антильські острови" +NR_COUNTRY_NC="Нова Каледонія" +NR_COUNTRY_NZ="Нова Зеландія" +NR_COUNTRY_NI="Нікарагуа" +NR_COUNTRY_NE="Нігер" +NR_COUNTRY_NG="Нігерія" +NR_COUNTRY_NU="Ніуе" +NR_COUNTRY_NF="Острів Норфолк" +NR_COUNTRY_MP="Північні Маріанські острови" +NR_COUNTRY_NO="Норвегія" +NR_COUNTRY_OM="Оман" +NR_COUNTRY_PK="Пакистан" +NR_COUNTRY_PW="Палау" +NR_COUNTRY_PS="Палестинська територія" +NR_COUNTRY_PA="Панама" +NR_COUNTRY_PG="Папуа-Нова Гвінея" +NR_COUNTRY_PY="Парагвай" +NR_COUNTRY_PE="Перу" +NR_COUNTRY_PH="Філіппіни" +NR_COUNTRY_PN="Піткерн" +NR_COUNTRY_PL="Польща" +NR_COUNTRY_PT="Португалія" +NR_COUNTRY_PR="Пуерто-Рико" +NR_COUNTRY_QA="Катар" +NR_COUNTRY_RE="Поєднання" +NR_COUNTRY_RO="Румунія" +NR_COUNTRY_RU="Російська Федерація" +NR_COUNTRY_RW="Руанда" +NR_COUNTRY_SH="Свята Єлена" +NR_COUNTRY_KN="Сент-Кітс і Невіс" +NR_COUNTRY_LC="Сент-Люсія" +NR_COUNTRY_PM="Сен-П'єр і Мікелон" +NR_COUNTRY_VC="Сент-Вінсент і Гренадини" +NR_COUNTRY_WS="Самоа" +NR_COUNTRY_SM="Сан-Марино" +NR_COUNTRY_ST="Сан-Томе і Принсіпі" +NR_COUNTRY_SA="Саудівська Аравія" +NR_COUNTRY_SN="Сенегал" +NR_COUNTRY_RS="Сербія" +NR_COUNTRY_SC="Сейшельські острови" +NR_COUNTRY_SL="Сьєрра-Леоне" +NR_COUNTRY_SG="Сінгапур" +NR_COUNTRY_SK="Словаччина" +NR_COUNTRY_SI="Словенія" +NR_COUNTRY_SB="Соломонові острови" +NR_COUNTRY_SO="Сомалі" +NR_COUNTRY_ZA="Південна Африка" +NR_COUNTRY_GS="Південна Джорджія та Південні Сандвічеві острови" +NR_COUNTRY_ES="Іспанія" +NR_COUNTRY_LK="Шрі-Ланка" +NR_COUNTRY_SD="Судан" +NR_COUNTRY_SS="Південний Судан" +NR_COUNTRY_SR="Суринам" +NR_COUNTRY_SJ="Шпицберген та Ян Майен" +NR_COUNTRY_SZ="Свазіленд" +NR_COUNTRY_SE="Швеція" +NR_COUNTRY_CH="Швейцарія" +NR_COUNTRY_SY="Сирійська Арабська Республіка" +NR_COUNTRY_TW="Тайвань" +NR_COUNTRY_TJ="Таджикистан" +NR_COUNTRY_TZ="Танзанія, Об'єднана Республіка" +NR_COUNTRY_TH="Таїланд" +NR_COUNTRY_TL="Тимор-Лешті" +NR_COUNTRY_TG="Того" +NR_COUNTRY_TK="Токелау" +NR_COUNTRY_TO="Тонга" +NR_COUNTRY_TT="Тринідад і Тобаго" +NR_COUNTRY_TN="Туніс" +NR_COUNTRY_TR="Туреччина" +NR_COUNTRY_TM="Туркменістан" +NR_COUNTRY_TC="Острови Теркс і Кайкос" +NR_COUNTRY_TV="Тувалу" +NR_COUNTRY_UG="Уганда" +NR_COUNTRY_UA="Україна" +NR_COUNTRY_AE="Об'єднані Арабські Емірати" +NR_COUNTRY_GB="Великобританія" +NR_COUNTRY_US="Сполучені Штати" +NR_COUNTRY_UM="Малі віддалені острови США" +NR_COUNTRY_UY="Уругвай" +NR_COUNTRY_UZ="Узбекистан" +NR_COUNTRY_VU="Вануату" +NR_COUNTRY_VE="Венесуела" +NR_COUNTRY_VN="В'єтнам" +NR_COUNTRY_VG="Віргінські острови, Британські" +NR_COUNTRY_VI="Віргінські острови, США." +NR_COUNTRY_WF="Уолліс і Футуна" +NR_COUNTRY_EH="Західна Сахара" +NR_COUNTRY_YE="Ємен" +NR_COUNTRY_ZM="Замбія" +NR_COUNTRY_ZW="Зімбабве" +NR_CONTINENT_AF="Африка" +NR_CONTINENT_AS="Азія" +NR_CONTINENT_EU="Європа" +NR_CONTINENT_NA="Північна Америка" +NR_CONTINENT_SA="Південна Америка" +NR_CONTINENT_OC="Океанія" +NR_CONTINENT_AN="Антарктида" +NR_FRONTEND="Інтерфейс" +NR_BACKEND="Адміністрація" +NR_EMBED="Приставлено" +NR_RATE="Тариф %s" +NR_REPORT_ISSUE="Повідомте про проблему" +NR_CANNOT_CREATE_FOLDER="Не вдається створити папку для переміщення файлу.%s" +NR_CANNOT_MOVE_FILE="Не вдається перемістити файл: %s" +NR_UPLOAD_INVALID_FILE_TYPE="Непідтримуваний файл: %s. Дозволеними типами файлів є:%s" +NR_UPLOAD_ERROR_CANNOT_UPLOAD_FILE="Не вдається завантажити файл: %s" +; NR_START_OVER="Start over" +; NR_TRY_AGAIN="Try again" +; NR_ERROR="Error" +; NR_CANCEL="Cancel" +; NR_PLEASE_WAIT="Please wait" diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/conditionbuilder.php b/deployed/convertforms/plugins/system/nrframework/layouts/conditionbuilder.php new file mode 100644 index 00000000..3bb2632c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/conditionbuilder.php @@ -0,0 +1,47 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +JHtml::stylesheet('plg_system_nrframework/conditionbuilder.css', ['relative' => true, 'version' => 'auto']); +JHtml::script('plg_system_nrframework/helper.js', ['relative' => true, 'version' => 'auto']); +JHtml::script('plg_system_nrframework/conditionbuilder.js', ['relative' => true, 'version' => 'auto']); + +extract($displayData); + +use NRFramework\ConditionBuilder; + +?> + +
        +
        + $groupConditions) { + $maxIndex_ = max(array_keys($groupConditions)); + ?> +
        + $condition) + { + echo ConditionBuilder::add($id, $groupKey, $conditionKey, $condition, $conditions_list); + } + ?> +
        + +
        +
        + AND +
        +
        + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/conditionbuilder_row.php b/deployed/convertforms/plugins/system/nrframework/layouts/conditionbuilder_row.php new file mode 100644 index 00000000..a20360d6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/conditionbuilder_row.php @@ -0,0 +1,32 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +extract($displayData); + +?> + +
        +
        +
        + renderFieldset('base'); ?> +
        +
        + + +
        +
        +
        + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/imagesselector.php b/deployed/convertforms/plugins/system/nrframework/layouts/imagesselector.php new file mode 100644 index 00000000..b9c9d5a3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/imagesselector.php @@ -0,0 +1,38 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); +extract($displayData); + +if (empty($images)) +{ + return; +} + +$value = !empty($value) ? $value : $images[0]; +$heightAtt = !empty($height) ? ' style="height:' . $height . ';"' : ''; +?> +
        + +
        > + /> + +
        + +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/outdated_extension.php b/deployed/convertforms/plugins/system/nrframework/layouts/outdated_extension.php new file mode 100644 index 00000000..82c0697e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/outdated_extension.php @@ -0,0 +1,28 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +extract($displayData); + +if (defined('nrJ4')) +{ + // Include the Bootstrap component + \JFactory::getApplication() + ->getDocument() + ->getWebAssetManager() + ->useScript('bootstrap.alert'); +} +?> + \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/proonlymodal.php b/deployed/convertforms/plugins/system/nrframework/layouts/proonlymodal.php new file mode 100644 index 00000000..02ca00f8 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/proonlymodal.php @@ -0,0 +1,108 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +extract($displayData); + +if (defined('nrJ4')) +{ + JFactory::getDocument()->addScriptDeclaration(' + document.addEventListener("DOMContentLoaded", function() { + + var proOnlyEl = document.getElementById("proOnlyModal"); + + document.body.appendChild(proOnlyEl); + + var proOnlyModal = new bootstrap.Modal(proOnlyEl); + + document.addEventListener("click", function(e) { + var proFeature = e.target.dataset.proOnly; + + if (proFeature === undefined) { + return; + } + + event.preventDefault(); + + if (proFeature) { + proOnlyEl.querySelectorAll("em").forEach(function(el) { + el.innerHTML = proFeature; + }); + proOnlyEl.querySelector(".po-upgrade").style.display = "none"; + proOnlyEl.querySelector(".po-feature").style.display = "block"; + } else { + proOnlyEl.querySelector(".po-upgrade").style.display = "block"; + proOnlyEl.querySelector(".po-feature").style.display = "none"; + } + + proOnlyModal.show(); + }); + }); + '); +} else +{ + JFactory::getDocument()->addScriptDeclaration(' + jQuery(function($) { + var $proOnlyModal = $("#proOnlyModal"); + + // Move to body so it can be accessible by all buttons + $proOnlyModal.appendTo("body"); + + $(document).on("click", "*[data-pro-only]", function() { + event.preventDefault(); + + var $el = $(this) + feature_name = $el.data("pro-only"); + + if (feature_name) { + $proOnlyModal.find("em").html(feature_name); + $proOnlyModal.find(".po-upgrade").hide().end().find(".po-feature").show(); + } else { + $proOnlyModal.find(".po-feature").hide().end().find(".po-upgrade").show(); + } + + $proOnlyModal.modal("show"); + }); + }); + '); +} + +JHtml::stylesheet('plg_system_nrframework/proonlymodal.css', ['relative' => true, 'version' => 'auto']); + +?> + +
        + + + +
        +

        +

        +
        + + +
        +

        Pro

        +

        +
        + +

        + +

        +
        + + +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/smarttagsbox.php b/deployed/convertforms/plugins/system/nrframework/layouts/smarttagsbox.php new file mode 100644 index 00000000..9e73f646 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/smarttagsbox.php @@ -0,0 +1,28 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +?> + +
        +
        +
        +
        + +
        +
        +
        +
        +
        +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/updatechecker.php b/deployed/convertforms/plugins/system/nrframework/layouts/updatechecker.php new file mode 100644 index 00000000..60ad890c --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/updatechecker.php @@ -0,0 +1,45 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die('Restricted access'); + +extract($displayData); + +?> + +
        +
        +
        +
        + +
        +
        + + + + +
        +
        + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/layouts/well.php b/deployed/convertforms/plugins/system/nrframework/layouts/well.php new file mode 100644 index 00000000..d6ac665b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/layouts/well.php @@ -0,0 +1,37 @@ + + +') { ?> +
        > + + + \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/nrframework.php b/deployed/convertforms/plugins/system/nrframework/nrframework.php new file mode 100644 index 00000000..64556100 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/nrframework.php @@ -0,0 +1,214 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined( '_JEXEC' ) or die( 'Restricted access' ); + +jimport('joomla.filesystem.file'); + +use Joomla\String\StringHelper; +use NRFramework\HTML; + +// Initialize Novarain Library +require_once __DIR__ . '/autoload.php'; + +class plgSystemNRFramework extends JPlugin +{ + /** + * Auto load plugin language + * + * @var boolean + */ + protected $autoloadLanguage = true; + + /** + * The Joomla Application object + * + * @var object + */ + protected $app; + + /** + * Plugin constructor + * + * @param mixed &$subject + * @param array $config + */ + public function __construct(&$subject, $config = array()) + { + // Declare extension logger + JLog::addLogger( + array('text_file' => 'plg_system_nrframework.php'), + JLog::ALL, + array('nrframework') + ); + + // execute parent constructor + parent::__construct($subject, $config); + } + + /** + * Update UpdateSites after the user has entered a Download Key + * + * @param string $context The component context + * @param string $table + * @param boolean $isNew + * + * @return void + */ + public function onExtensionAfterSave($context, $table, $isNew) + { + // Run only on Novarain Framework edit form + if ( + $this->app->isClient('site') + || $context != 'com_plugins.plugin' + || $table->element != 'nrframework' + || !isset($table->params) + ) + { + return; + } + + // Set Download Key & fix Update Sites + $upds = new NRFramework\Updatesites(); + $upds->update(); + } + + /** + * Handling of PRO for extensions + * Throws a notice message if the Download Key is missing before downloading the package + * + * @param string &$url Update Site URL + * @param array &$headers + */ + public function onInstallerBeforePackageDownload(&$url, &$headers) + { + $uri = JUri::getInstance($url); + $host = $uri->getHost(); + + // This is not a Tassos.gr extension + if (strpos($host, 'tassos.gr') === false) + { + return true; + } + + // If it's a Free version. No need to check for the Download Key. + if (strpos($url, 'free') !== false) + { + return true; + } + + // This is a Pro version. Let's validate the Download Key. + $download_id = $this->params->get('key', ''); + + // Append it to the URL + if (!empty($download_id)) + { + $uri->setVar('dlid', $download_id); + $url = $uri->toString(); + return true; + } + + $this->app->enqueueMessage('To be able to update the Pro version of this extension via the Joomla updater, you will need enter your Download Key in the settings of the Novarain Framework System Plugin'); + return true; + } + + /** + * Listens to AJAX requests on ?option=com_ajax&format=raw&plugin=nrframework + * + * @return void + */ + public function onAjaxNRFramework() + { + JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN')); + + // Only in backend + if (!$this->app->isClient('administrator')) + { + return; + } + + // Check if we have a valid task + $task = $this->app->input->get('task', null); + + // Check if we have a valid method task + $taskMethod = 'ajaxTask' . $task; + + if (!method_exists($this, $taskMethod)) + { + die('Task not found'); + } + + $this->$taskMethod(); + } + + private function ajaxTaskInclude() + { + $input = $this->app->input; + + $file = $input->get('file'); + $path = JPATH_SITE . '/' . $input->get('path', '', 'RAW'); + $class = $input->get('class'); + + $file_to_include = $path . $file . '.php'; + + if (!JFile::exists($file_to_include)) + { + die('FILE_ERROR'); + } + + @include_once $file_to_include; + + if (!class_exists($class)) + { + die('CLASS_ERROR'); + } + + if (!method_exists($class, 'onAJAX')) + { + die('METHOD_ERROR'); + } + + (new $class())->onAJAX($input->getArray()); + } + + private function ajaxTaskConditionBuilder() + { + $input = $this->app->input; + + $subtask = $input->get('subtask', null); + + switch ($subtask) + { + case 'add': + $controlGroup = $input->get('controlgroup', null, 'RAW'); + $groupKey = $input->getInt('groupKey'); + $conditionKey = $input->getInt('conditionKey'); + $conditions_list = $input->get('conditionsList', null, 'RAW'); + + echo NRFramework\ConditionBuilder::add($controlGroup, $groupKey, $conditionKey, null, $conditions_list); + break; + case 'options': + $controlGroup = $input->get('controlgroup', null, 'RAW'); + $name = $input->get('name'); + + echo NRFramework\ConditionBuilder::renderOptions($name, $controlGroup); + break; + } + } + + /** + * Check if the extension has an update and display a notification + * + * @return string + */ + private function ajaxTaskUpdateNotification() + { + echo HTML::updateNotification($this->app->input->get('element')); + } +} \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/nrframework.xml b/deployed/convertforms/plugins/system/nrframework/nrframework.xml new file mode 100644 index 00000000..1458b078 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/nrframework.xml @@ -0,0 +1,52 @@ + + + plg_system_nrframework + PLG_SYSTEM_NRFRAMEWORK_DESC + 4.6.26 + August 2016 + Tassos Marinos + Copyright © 2021 Tassos Marinos All Rights Reserved + http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + info@tassos.gr + http://www.tassos.gr + script.install.php + + nrframework.php + script.install.helper.php + autoload.php + fields + helpers + xml + language + layouts + NRFramework + + + +
        + +
        +
        + +
        +
        +
        + + css + js + +
        diff --git a/deployed/convertforms/plugins/system/nrframework/script.install.helper.php b/deployed/convertforms/plugins/system/nrframework/script.install.helper.php new file mode 100644 index 00000000..ddfee438 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/script.install.helper.php @@ -0,0 +1,637 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2016 Tassos Marinos All Rights Reserved + * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL + */ + +defined('_JEXEC') or die; + +jimport('joomla.filesystem.file'); +jimport('joomla.filesystem.folder'); + +class PlgSystemNrframeworkInstallerScriptHelper +{ + public $name = ''; + public $alias = ''; + public $extname = ''; + public $extension_type = ''; + public $plugin_folder = 'system'; + public $module_position = 'status'; + public $client_id = 1; + public $install_type = 'install'; + public $show_message = true; + public $autopublish = true; + public $db = null; + public $app = null; + public $installedVersion; + + public function __construct(&$params) + { + $this->extname = $this->extname ?: $this->alias; + $this->db = JFactory::getDbo(); + $this->app = JFactory::getApplication(); + $this->installedVersion = $this->getVersion($this->getInstalledXMLFile()); + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function preflight($route, $adapter) + { + if (!in_array($route, array('install', 'update'))) + { + return; + } + + JFactory::getLanguage()->load('plg_system_novaraininstaller', JPATH_PLUGINS . '/system/novaraininstaller'); + + if ($this->show_message && $this->isInstalled()) + { + $this->install_type = 'update'; + } + + if ($this->onBeforeInstall() === false) + { + return false; + } + } + + /** + * Preflight event + * + * @param string + * @param JAdapterInstance + * + * @return boolean + */ + public function postflight($route, $adapter) + { + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, $this->getMainFolder()); + + if (!in_array($route, array('install', 'update'))) + { + return; + } + + if ($this->onAfterInstall() === false) + { + return false; + } + + if ($route == 'install' && $this->autopublish) + { + $this->publishExtension(); + } + + if ($this->show_message) + { + $this->addInstalledMessage(); + } + + JFactory::getCache()->clean('com_plugins'); + JFactory::getCache()->clean('_system'); + } + + public function isInstalled() + { + if (!is_file($this->getInstalledXMLFile())) + { + return false; + } + + $query = $this->db->getQuery(true) + ->select('extension_id') + ->from('#__extensions') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote($this->extension_type)) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->getElementName())); + $this->db->setQuery($query, 0, 1); + $result = $this->db->loadResult(); + + return empty($result) ? false : true; + } + + public function getMainFolder() + { + switch ($this->extension_type) + { + case 'plugin' : + return JPATH_SITE . '/plugins/' . $this->plugin_folder . '/' . $this->extname; + + case 'component' : + return JPATH_ADMINISTRATOR . '/components/com_' . $this->extname; + + case 'module' : + return JPATH_ADMINISTRATOR . '/modules/mod_' . $this->extname; + + case 'library' : + return JPATH_SITE . '/libraries/' . $this->extname; + } + } + + public function getInstalledXMLFile() + { + return $this->getXMLFile($this->getMainFolder()); + } + + public function getCurrentXMLFile() + { + return $this->getXMLFile(__DIR__); + } + + public function getXMLFile($folder) + { + switch ($this->extension_type) + { + case 'module' : + return $folder . '/mod_' . $this->extname . '.xml'; + default : + return $folder . '/' . $this->extname . '.xml'; + } + } + + public function foldersExist($folders = array()) + { + foreach ($folders as $folder) + { + if (is_dir($folder)) + { + return true; + } + } + + return false; + } + + public function publishExtension() + { + switch ($this->extension_type) + { + case 'plugin' : + $this->publishPlugin(); + + case 'module' : + $this->publishModule(); + } + } + + public function publishPlugin() + { + $query = $this->db->getQuery(true) + ->update('#__extensions') + ->set($this->db->quoteName('enabled') . ' = 1') + ->where($this->db->quoteName('type') . ' = ' . $this->db->quote('plugin')) + ->where($this->db->quoteName('element') . ' = ' . $this->db->quote($this->extname)) + ->where($this->db->quoteName('folder') . ' = ' . $this->db->quote($this->plugin_folder)); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function publishModule() + { + // Get module id + $query = $this->db->getQuery(true) + ->select('id') + ->from('#__modules') + ->where($this->db->quoteName('module') . ' = ' . $this->db->quote('mod_' . $this->extname)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id); + $this->db->setQuery($query, 0, 1); + $id = $this->db->loadResult(); + + if (!$id) + { + return; + } + + // check if module is already in the modules_menu table (meaning is is already saved) + $query->clear() + ->select('moduleid') + ->from('#__modules_menu') + ->where($this->db->quoteName('moduleid') . ' = ' . (int) $id); + $this->db->setQuery($query, 0, 1); + $exists = $this->db->loadResult(); + + if ($exists) + { + return; + } + + // Get highest ordering number in position + $query->clear() + ->select('ordering') + ->from('#__modules') + ->where($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('client_id') . ' = ' . (int) $this->client_id) + ->order('ordering DESC'); + $this->db->setQuery($query, 0, 1); + $ordering = $this->db->loadResult(); + $ordering++; + + // publish module and set ordering number + $query->clear() + ->update('#__modules') + ->set($this->db->quoteName('published') . ' = 1') + ->set($this->db->quoteName('ordering') . ' = ' . (int) $ordering) + ->set($this->db->quoteName('position') . ' = ' . $this->db->quote($this->module_position)) + ->where($this->db->quoteName('id') . ' = ' . (int) $id); + $this->db->setQuery($query); + $this->db->execute(); + + // add module to the modules_menu table + $query->clear() + ->insert('#__modules_menu') + ->columns(array($this->db->quoteName('moduleid'), $this->db->quoteName('menuid'))) + ->values((int) $id . ', 0'); + $this->db->setQuery($query); + $this->db->execute(); + } + + public function addInstalledMessage() + { + JFactory::getApplication()->enqueueMessage( + JText::sprintf( + JText::_($this->install_type == 'update' ? 'NRI_THE_EXTENSION_HAS_BEEN_UPDATED_SUCCESSFULLY' : 'NRI_THE_EXTENSION_HAS_BEEN_INSTALLED_SUCCESSFULLY'), + '' . JText::_($this->name) . '', + '' . $this->getVersion() . '', + $this->getFullType() + ) + ); + } + + public function getPrefix() + { + switch ($this->extension_type) + { + case 'plugin'; + return JText::_('plg_' . strtolower($this->plugin_folder)); + + case 'component': + return JText::_('com'); + + case 'module': + return JText::_('mod'); + + case 'library': + return JText::_('lib'); + + default: + return $this->extension_type; + } + } + + public function getElementName($type = null, $extname = null) + { + $type = is_null($type) ? $this->extension_type : $type; + $extname = is_null($extname) ? $this->extname : $extname; + + switch ($type) + { + case 'component' : + return 'com_' . $extname; + + case 'module' : + return 'mod_' . $extname; + + case 'plugin' : + default: + return $extname; + } + } + + public function getFullType() + { + return JText::_('NRI_' . strtoupper($this->getPrefix())); + } + + public function isPro() + { + $versionFile = __DIR__ . "/version.php"; + + // If version file does not exist we assume a PRO version + if (!JFile::exists($versionFile)) + { + return true; + } + + // Load version file + require_once $versionFile; + return (bool) $NR_PRO; + } + + public function getVersion($file = '') + { + $file = $file ?: $this->getCurrentXMLFile(); + + if (!is_file($file)) + { + return ''; + } + + $xml = JInstaller::parseXMLInstallFile($file); + + if (!$xml || !isset($xml['version'])) + { + return ''; + } + + return $xml['version']; + } + + /** + * Checks wether the extension can be installed or not + * + * @return boolean + */ + public function canInstall() + { + + // The extension is not installed yet. Accept Install. + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + // Path to extension's version file + $versionFile = $this->getMainFolder() . "/version.php"; + $NR_PRO = true; + + // If version file does not exist we assume we have a PRO version installed + if (file_exists($versionFile)) + { + require_once($versionFile); + } + + // The free version is installed. Accept install. + if (!(bool)$NR_PRO) + { + return true; + } + + // Current package is a PRO version. Accept install. + if ($this->isPro()) + { + return true; + } + + // User is trying to update from PRO version to FREE. Do not accept install. + JFactory::getLanguage()->load($this->getPrefix() . '_' . $this->extname, __DIR__); + + JFactory::getApplication()->enqueueMessage( + JText::_('NRI_ERROR_PRO_TO_FREE'), 'error' + ); + + JFactory::getApplication()->enqueueMessage( + html_entity_decode( + JText::sprintf( + 'NRI_ERROR_UNINSTALL_FIRST', + '', + '', + JText::_($this->name) + ) + ), 'error' + ); + + return false; + } + + /** + * Checks if current version is newer than the installed one + * Used for Novarain Framework + * + * @return boolean [description] + */ + public function isNewer() + { + if (!$installed_version = $this->getVersion($this->getInstalledXMLFile())) + { + return true; + } + + $package_version = $this->getVersion(); + + return version_compare($installed_version, $package_version, '<='); + } + + /** + * Helper method triggered before installation + * + * @return bool + */ + public function onBeforeInstall() + { + if (!$this->canInstall()) + { + return false; + } + } + + /** + * Helper method triggered after installation + */ + public function onAfterInstall() + { + + } + + /** + * Delete files + * + * @param array $folders + */ + public function deleteFiles($files = array()) + { + foreach ($files as $key => $file) + { + JFile::delete($file); + } + } + + /** + * Deletes folders + * + * @param array $folders + */ + public function deleteFolders($folders = array()) + { + foreach ($folders as $folder) + { + if (!is_dir($folder)) + { + continue; + } + + JFolder::delete($folder); + } + } + + public function dropIndex($table, $index) + { + $db = $this->db; + + // Check if index exists first + $query = 'SHOW INDEX FROM ' . $db->quoteName('#__' . $table) . ' WHERE KEY_NAME = ' . $db->quote($index); + $db->setQuery($query); + $db->execute(); + + if (!$db->loadResult()) + { + return; + } + + // Remove index + $query = 'ALTER TABLE ' . $db->quoteName('#__' . $table) . ' DROP INDEX ' . $db->quoteName($index); + $db->setQuery($query); + $db->execute(); + } + + public function dropUnwantedTables($tables) { + + if (!$tables) { + return; + } + + foreach ($tables as $table) { + $query = "DROP TABLE IF EXISTS #__".$this->db->escape($table); + $this->db->setQuery($query); + $this->db->execute(); + } + } + + public function dropUnwantedColumns($table, $columns) { + + if (!$columns || !$table) { + return; + } + + $db = $this->db; + + // Check if columns exists in database + function qt($n) { + return(JFactory::getDBO()->quote($n)); + } + + $query = 'SHOW COLUMNS FROM #__'.$table.' WHERE Field IN ('.implode(",", array_map("qt", $columns)).')'; + $db->setQuery($query); + $rows = $db->loadColumn(0); + + // Abort if we don't have any rows + if (!$rows) { + return; + } + + // Let's remove the columns + $q = ""; + foreach ($rows as $key => $column) { + $comma = (($key+1) < count($rows)) ? "," : ""; + $q .= "drop ".$this->db->escape($column).$comma; + } + + $query = "alter table #__".$table." $q"; + + $db->setQuery($query); + $db->execute(); + } + + public function fetch($table, $columns = "*", $where = null, $singlerow = false) { + if (!$table) { + return; + } + + $db = $this->db; + $query = $db->getQuery(true); + + $query + ->select($columns) + ->from("#__$table"); + + if (isset($where)) { + $query->where("$where"); + } + + $db->setQuery($query); + + return ($singlerow) ? $db->loadObject() : $db->loadObjectList(); + } + + /** + * Load the Novarain Framework + * + * @return boolean + */ + public function loadFramework() + { + if (is_file(JPATH_PLUGINS . '/system/nrframework/autoload.php')) + { + include_once JPATH_PLUGINS . '/system/nrframework/autoload.php'; + } + } + + /** + * Re-orders plugin after passed array of plugins + * + * @param string $plugin Plugin element name + * @param array $lowerPluginOrder Array of plugin element names + * + * @return boolean + */ + public function pluginOrderAfter($lowerPluginOrder) + { + + if (!is_array($lowerPluginOrder) || !count($lowerPluginOrder)) + { + return; + } + + $db = $this->db; + + // Get plugins max order + $query = $db->getQuery(true); + $query + ->select($db->quoteName('b.ordering')) + ->from($db->quoteName('#__extensions', 'b')) + ->where($db->quoteName('b.element') . ' IN ("'.implode("\",\"",$lowerPluginOrder).'")') + ->order('b.ordering desc'); + + $db->setQuery($query); + $maxOrder = $db->loadResult(); + + if (is_null($maxOrder)) + { + return; + } + + // Get plugin details + $query + ->clear() + ->select(array($db->quoteName('extension_id'), $db->quoteName('ordering'))) + ->from($db->quoteName('#__extensions')) + ->where($db->quoteName('element') . ' = ' . $db->quote($this->alias)); + + $db->setQuery($query); + $pluginInfo = $db->loadObject(); + + if (!isset($pluginInfo->ordering) || $pluginInfo->ordering > $maxOrder) + { + return; + } + + // Update the new plugin order + $object = new stdClass(); + $object->extension_id = $pluginInfo->extension_id; + $object->ordering = ($maxOrder + 1); + + try { + $db->updateObject('#__extensions', $object, 'extension_id'); + } catch (Exception $e) { + return $e->getMessage(); + } + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/script.install.php b/deployed/convertforms/plugins/system/nrframework/script.install.php new file mode 100644 index 00000000..a2aa41ab --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/script.install.php @@ -0,0 +1,26 @@ + + * @link http://www.tassos.gr + * @copyright Copyright © 2021 Tassos Marinos All Rights Reserved + * @license GNU GPLv3 or later +*/ + +defined('_JEXEC') or die; + +require_once __DIR__ . '/script.install.helper.php'; + +class PlgSystemNRFrameworkInstallerScript extends PlgSystemNRFrameworkInstallerScriptHelper +{ + public $name = 'NOVARAIN_FRAMEWORK'; + public $alias = 'nrframework'; + public $extension_type = 'plugin'; + + public function onBeforeInstall() + { + if (!$this->isNewer()) + { + return false; + } + } +} diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditionbuilder/base.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditionbuilder/base.xml new file mode 100644 index 00000000..46c578dd --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditionbuilder/base.xml @@ -0,0 +1,9 @@ + +
        +
        + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/acymailing.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/acymailing.xml new file mode 100644 index 00000000..fc75a115 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/acymailing.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/akeebasubs.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/akeebasubs.xml new file mode 100644 index 00000000..b95e7763 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/akeebasubs.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/article.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/article.xml new file mode 100644 index 00000000..696bf5e3 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/article.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/browser.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/browser.xml new file mode 100644 index 00000000..2f82aaf0 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/browser.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/category.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/category.xml new file mode 100644 index 00000000..2eccd239 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/category.xml @@ -0,0 +1,39 @@ + +
        +
        + + + + + + + + + + + + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/city.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/city.xml new file mode 100644 index 00000000..8a17e8a5 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/city.xml @@ -0,0 +1,14 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/component.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/component.xml new file mode 100644 index 00000000..ca2e02fa --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/component.xml @@ -0,0 +1,12 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/continent.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/continent.xml new file mode 100644 index 00000000..309f3ff6 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/continent.xml @@ -0,0 +1,14 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/convertforms.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/convertforms.xml new file mode 100644 index 00000000..d2cf1d52 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/convertforms.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/cookie.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/cookie.xml new file mode 100644 index 00000000..447ebccc --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/cookie.xml @@ -0,0 +1,35 @@ + +
        +
        + + + + + + + + + + + + +
        +
        + + + diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/country.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/country.xml new file mode 100644 index 00000000..e8f9c4dd --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/country.xml @@ -0,0 +1,13 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/date.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/date.xml new file mode 100644 index 00000000..b4cf9aec --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/date.xml @@ -0,0 +1,26 @@ + +
        +
        + + + + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/device.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/device.xml new file mode 100644 index 00000000..afae4c93 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/device.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/ip.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/ip.xml new file mode 100644 index 00000000..64d29244 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/ip.xml @@ -0,0 +1,14 @@ + +
        +
        + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2category.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2category.xml new file mode 100644 index 00000000..5f7a3933 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2category.xml @@ -0,0 +1,39 @@ + +
        +
        + + + + + + + + + + + + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2item.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2item.xml new file mode 100644 index 00000000..2a429abc --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2item.xml @@ -0,0 +1,27 @@ + +
        +
        + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2tag.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2tag.xml new file mode 100644 index 00000000..54ff1630 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/k2tag.xml @@ -0,0 +1,12 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/language.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/language.xml new file mode 100644 index 00000000..3b181254 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/language.xml @@ -0,0 +1,12 @@ + +
        +
        + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/menu.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/menu.xml new file mode 100644 index 00000000..b1428769 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/menu.xml @@ -0,0 +1,36 @@ + +
        +
        + + + + + + + + + + + + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/month.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/month.xml new file mode 100644 index 00000000..fbed085e --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/month.xml @@ -0,0 +1,22 @@ + +
        +
        + + + + + + + + + + + + + + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/os.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/os.xml new file mode 100644 index 00000000..36f4c546 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/os.xml @@ -0,0 +1,12 @@ + +
        +
        + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/pageviews.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/pageviews.xml new file mode 100644 index 00000000..c2e59f16 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/pageviews.xml @@ -0,0 +1,24 @@ + +
        +
        + + + + + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/php.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/php.xml new file mode 100644 index 00000000..d5f9f8fa --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/php.xml @@ -0,0 +1,14 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/referrer.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/referrer.xml new file mode 100644 index 00000000..afc9f753 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/referrer.xml @@ -0,0 +1,13 @@ + +
        +
        + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/region.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/region.xml new file mode 100644 index 00000000..b923203b --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/region.xml @@ -0,0 +1,14 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/time.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/time.xml new file mode 100644 index 00000000..e74d6b66 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/time.xml @@ -0,0 +1,16 @@ + +
        +
        + + + + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/url.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/url.xml new file mode 100644 index 00000000..34a3bba2 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/url.xml @@ -0,0 +1,24 @@ + +
        +
        + + + + + + + + +
        +
        diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/usergroup.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/usergroup.xml new file mode 100644 index 00000000..f1ea29c9 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/usergroup.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/userid.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/userid.xml new file mode 100644 index 00000000..2ef2014f --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/userid.xml @@ -0,0 +1,11 @@ + +
        +
        + + +
        +
        \ No newline at end of file diff --git a/deployed/convertforms/plugins/system/nrframework/xml/conditions/weekday.xml b/deployed/convertforms/plugins/system/nrframework/xml/conditions/weekday.xml new file mode 100644 index 00000000..578701b4 --- /dev/null +++ b/deployed/convertforms/plugins/system/nrframework/xml/conditions/weekday.xml @@ -0,0 +1,19 @@ + +
        +
        + + + + + + + + + + + + +
        +