/** * @package Joomla.Plugin * @subpackage System.sef * * @copyright (C) 2007 Open Source Matters, Inc. * @license GNU General Public License version 2 or later; see LICENSE.txt * @phpcs:disable PSR1.Classes.ClassDeclaration.MissingNamespace */ use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Router\Route; use Joomla\CMS\Uri\Uri; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Joomla! SEF Plugin. * * @since 1.5 */ class PlgSystemSef extends CMSPlugin { /** * @var \Joomla\CMS\Application\CMSApplication * * @since 3.5 */ protected $app; /** * Add the canonical uri to the head. * * @return void * * @since 3.5 */ public function onAfterDispatch() { $doc = $this->app->getDocument(); if (!$this->app->isClient('site') || $doc->getType() !== 'html') { return; } $sefDomain = $this->params->get('domain', false); // Don't add a canonical html tag if no alternative domain has added in SEF plugin domain field. if (empty($sefDomain)) { return; } // Check if a canonical html tag already exists (for instance, added by a component). $canonical = ''; foreach ($doc->_links as $linkUrl => $link) { if (isset($link['relation']) && $link['relation'] === 'canonical') { $canonical = $linkUrl; break; } } // If a canonical html tag already exists get the canonical and change it to use the SEF plugin domain field. if (!empty($canonical)) { // Remove current canonical link. unset($doc->_links[$canonical]); // Set the current canonical link but use the SEF system plugin domain field. $canonical = $sefDomain . Uri::getInstance($canonical)->toString(['path', 'query', 'fragment']); } else { // If a canonical html doesn't exists already add a canonical html tag using the SEF plugin domain field. $canonical = $sefDomain . Uri::getInstance()->toString(['path', 'query', 'fragment']); } // Add the canonical link. $doc->addHeadLink(htmlspecialchars($canonical), 'canonical'); } /** * Convert the site URL to fit to the HTTP request. * * @return void */ public function onAfterRender() { if (!$this->app->isClient('site')) { return; } // Replace src links. $base = Uri::base(true) . '/'; $buffer = $this->app->getBody(); // For feeds we need to search for the URL with domain. $prefix = $this->app->getDocument()->getType() === 'feed' ? Uri::root() : ''; // Replace index.php URI by SEF URI. if (strpos($buffer, 'href="' . $prefix . 'index.php?') !== false) { preg_match_all('#href="' . $prefix . 'index.php\?([^"]+)"#m', $buffer, $matches); foreach ($matches[1] as $urlQueryString) { $buffer = str_replace( 'href="' . $prefix . 'index.php?' . $urlQueryString . '"', 'href="' . trim($prefix, '/') . Route::_('index.php?' . $urlQueryString) . '"', $buffer ); } $this->checkBuffer($buffer); } // Check for all unknown protocols (a protocol must contain at least one alphanumeric character followed by a ":"). $protocols = '[a-zA-Z0-9\-]+:'; $attributes = ['href=', 'src=', 'poster=']; foreach ($attributes as $attribute) { if (strpos($buffer, $attribute) !== false) { $regex = '#\s' . $attribute . '"(?!/|' . $protocols . '|\#|\')([^"]*)"#m'; $buffer = preg_replace($regex, ' ' . $attribute . '"' . $base . '$1"', $buffer); $this->checkBuffer($buffer); } } if (strpos($buffer, 'srcset=') !== false) { $regex = '#\s+srcset="([^"]+)"#m'; $buffer = preg_replace_callback( $regex, function ($match) use ($base, $protocols) { preg_match_all('#(?:[^\s]+)\s*(?:[\d\.]+[wx])?(?:\,\s*)?#i', $match[1], $matches); foreach ($matches[0] as &$src) { $src = preg_replace('#^(?!/|' . $protocols . '|\#|\')(.+)#', $base . '$1', $src); } return ' srcset="' . implode($matches[0]) . '"'; }, $buffer ); $this->checkBuffer($buffer); } // Replace all unknown protocols in javascript window open events. if (strpos($buffer, 'window.open(') !== false) { $regex = '#onclick="window.open\(\'(?!/|' . $protocols . '|\#)([^/]+[^\']*?\')#m'; $buffer = preg_replace($regex, 'onclick="window.open(\'' . $base . '$1', $buffer); $this->checkBuffer($buffer); } // Replace all unknown protocols in onmouseover and onmouseout attributes. $attributes = ['onmouseover=', 'onmouseout=']; foreach ($attributes as $attribute) { if (strpos($buffer, $attribute) !== false) { $regex = '#' . $attribute . '"this.src=([\']+)(?!/|' . $protocols . '|\#|\')([^"]+)"#m'; $buffer = preg_replace($regex, $attribute . '"this.src=$1' . $base . '$2"', $buffer); $this->checkBuffer($buffer); } } // Replace all unknown protocols in CSS background image. if (strpos($buffer, 'style=') !== false) { $regex_url = '\s*url\s*\(([\'\"]|\&\#0?3[49];)?(?!/|\&\#0?3[49];|' . $protocols . '|\#)([^\)\'\"]+)([\'\"]|\&\#0?3[49];)?\)'; $regex = '#style=\s*([\'\"])(.*):' . $regex_url . '#m'; $buffer = preg_replace($regex, 'style=$1$2: url($3' . $base . '$4$5)', $buffer); $this->checkBuffer($buffer); } // Replace all unknown protocols in OBJECT param tag. if (strpos($buffer, ' -- fix it only inside the tag. $regex = '#(]\s*value\s*=\s*"(?!/|' . $protocols . '|\#|\')([^"]*)"#m'; $buffer = preg_replace($regex, '$1name="$2" value="' . $base . '$3"', $buffer); $this->checkBuffer($buffer); // OBJECT -- fix it only inside the tag. $regex = '#(]*)value\s*=\s*"(?!/|' . $protocols . '|\#|\')([^"]*)"\s*name\s*=\s*"(movie|src|url)"#m'; $buffer = preg_replace($regex, 'checkBuffer($buffer); } // Replace all unknown protocols in OBJECT tag. if (strpos($buffer, 'checkBuffer($buffer); } // Use the replaced HTML body. $this->app->setBody($buffer); } /** * Check the buffer. * * @param string $buffer Buffer to be checked. * * @return void */ private function checkBuffer($buffer) { if ($buffer === null) { switch (preg_last_error()) { case PREG_BACKTRACK_LIMIT_ERROR: $message = 'PHP regular expression limit reached (pcre.backtrack_limit)'; break; case PREG_RECURSION_LIMIT_ERROR: $message = 'PHP regular expression limit reached (pcre.recursion_limit)'; break; case PREG_BAD_UTF8_ERROR: $message = 'Bad UTF8 passed to PCRE function'; break; default: $message = 'Unknown PCRE error calling PCRE function'; } throw new RuntimeException($message); } } } Соглашение

СОГЛАШЕНИЕ ОБ ОБРАБОТКЕ ПЕРСОНАЛЬНЫХ ДАННЫХ


Соглашение об обработке персональных данных (далее по тексту — Соглашение) является публичной офертой.


Термины, применяемые в настоящем Соглашении:


  • Сайт — это совокупность текстов, графических элементов, дизайна, изображений, программного кода, фото- и видеоматериалов и иных результатов интеллектуальной деятельности Администрации Сайта, содержащихся в сети Интернет под доменным именем carberry-promo.ru.
  • Администрация Сайта — это общества и лица, обладающие правами администрирования Сайта.
  • Пользователь — это любое лицо, осуществившее вход на Сайт, заполнившее поля онлайн-форм на Сайте и принявшее условия настоящего Соглашения.
  • Персональные данные — данные, указанные Пользователем в онлайн-формах Сайта.
  • Обработка персональных данных — перечень действий с персональными данными Пользователя, заполнившего поля онлайн-форм.


Предмет соглашения:


Присоединяясь к настоящему Соглашению и оставляя свои данные на Сайте carberry-promo.ru (далее – Сайт), путем заполнения полей онлайн-заявки (регистрации) Пользователь:


  • подтверждает, что все указанные им данные принадлежат лично ему,
  • подтверждает и признает, что им внимательно в полном объеме прочитано Соглашение и условия обработки его персональных данных, указываемых им в полях он-лайн заявки (регистрации), текст соглашения и условия обработки персональных данных ему понятны;
  • дает согласие на обработку Сайтом предоставляемых в составе информации персональных данных в целях заключения между ним и Сайтом настоящего Соглашения, а также его последующего исполнения;
  • выражает согласие с условиями обработки персональных данных без оговорок и ограничений.


Пользователь дает свое согласие на обработку его персональных данных, а именно совершение действий, предусмотренных п. 3 ч. 1 ст. 3 Федерального закона от 27.07.2006 N 152-ФЗ "О персональных данных", и подтверждает, что, давая такое согласие, он действует свободно, своей волей и в своем интересе.


Согласие Пользователя на обработку персональных данных является конкретным, информированным и сознательным. Настоящее согласие Пользователя признается исполненным в простой письменной форме, на обработку следующих персональных данных: фамилии, имени, отчества; года рождения; места пребывания (город, область); номерах телефонов; адресах электронной почты (E-mail); названии компании, в которой Пользователь работает.


Администрация Сайта вправе обрабатывать персональные данные посредством внесения их в электронные базы данных, включения в списки (реестры) и внутренние отчетные формы. Обработка персональных данных может быть как автоматизированная, так и без использования средств автоматизации.


Пользователь, предоставляет carberry-promo.ru право осуществлять следующие действия (операции) с персональными данными: сбор и накопление; хранение в течение установленных нормативными документами сроков хранения отчетности, но не менее трех лет, с момента даты прекращения пользования услуг Пользователем; уточнение (обновление, изменение); использование; уничтожение; обезличивание; передача по требованию суда, в т.ч., третьим лицам, с соблюдением мер, обеспечивающих защиту персональных данных от несанкционированного доступа.


Указанное согласие действует бессрочно с момента предоставления данных и может быть отозвано Вами путем подачи заявления администрации сайта с указанием данных, определенных ст. 14 Закона «О персональных данных».


Отзыв согласия на обработку персональных данных может быть осуществлен путем направления Пользователем соответствующего распоряжения в простой письменной форме на адрес электронной почты (E-mail) info@carberry-promo.ru.


Сайт не несет ответственности за использование (как правомерное, так и неправомерное) третьими лицами Информации, размещенной Пользователем на Сайте, включая её воспроизведение и распространение, осуществленные всеми возможными способами.


Сайт имеет право вносить изменения в настоящее Соглашение. При внесении изменений в актуальной редакции указывается дата последнего обновления. Новая редакция Соглашения вступает в силу с момента ее размещения, если иное не предусмотрено новой редакцией Соглашения.


Действующая редакция всегда находится на странице по адресу: carberry-promo.ru/user_agreement.doc.


К настоящему Соглашению и отношениям между пользователем и Сайтом, возникающим в связи с применением Соглашения, подлежит применению право Российской Федерации.