Новости Joomla

Joomla 6: Автоматические обновления ядра в Joomla

Joomla 6: Автоматические обновления ядра в Joomla

👩‍💻 Joomla 6: Автоматические обновления ядра в Joomla. В октябрьском номере официального журнала Joomla - Joomla Community Magazine вышла статья David Jardin, где рассказывается о внедрении функционала автоматического обновления ядра Joomla.❓Почему сейчас? Joomla же жила как-то 20 лет без автоматических обновлений?Это оказалась самая востребованная за последнее время от пользователей Joomla функция. Но, основная причина внедрения - проблемы безопасности. Всякий раз, когда в новой версии Joomla устраняется уязвимость, злоумышленники начинают анализировать код, чтобы выяснить, какая именно уязвимость была исправлена. И как только они это выясняют - начинается разработка автоматизированных скриптов для взлома как можно большего количества сайтов. Затем доступы к автоматически взломанным сайтам продаются в профильных чатах и ресурсах "пачками" по несколько сотен тысяч или миллионов сайтов. Ваш сайт могли взломать несколько лет назад, но воспользоваться уязвимостью могут не сразу, а тогда, когда у злоумышленников возникнет необходимость. И только после этого вы может быть узнаете об этом.Анализ патча, понимание проблемы и разработка скрипта требуют времени. И если владелец сайта не обновит его до истечения этого срока, сайт может быть взломан. А хакеры действуют быстро! Для критических, легко эксплуатируемых уязвимостей речь идёт о временном окне в 10–12 часов — и этого времени явно недостаточно, чтобы все успели обновить свои сайты.Здесь выходят на первый план автоматизированные обновления: проект Joomla теперь может активно устанавливать обновления (и, следовательно, исправления безопасности) на сайты, чтобы гарантировать, что сайты действительно обновляются вовремя.🕘 От первых идей до реализации прошло 5 лет. И здесь можно вспомнить, как в Joomla 5.1 внедрили TUF - The Update Framework, позволяющий устанавливать защищённое соединение между сайтом и сервером обновлений и исключает возможность supply chain attack (атаки на цепочку поставок).Об особенностях реализации и требованиях к сайту читаем подробнее в статье на JCM.@joomlafeed#joomla #secutiry #jcm

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™. Интервью с волонтёрами 🎈Ну что, друзья, вот и настал этот долгожданный момент. Мы выпустили первое издание собственного журнала под эгидой NorrNext, который включает в себя интервью с видными деятелями сообщества из разных стран и континентов.Общий нарратив: показать, что нас объединяет (Joomla) и узнать больше о людях, которые вносят свой вклад в развитие платформы в своих сообществах. 20 лет — это много. Давайте же узнаем о коллегах 🎁 Первый цикл включает такие страны, как Австрия, Испания, Латвия, Россия, Румыния, Тайланд, Черногория, Чехия.⚙️ С кем интервью: ✔️ Владимир Елисеев 🇷🇺✔️ Дмитрий Рекун 🇱🇻✔️ Дмитрий Цымбал 🇷🇺✔️ Евгений Сивоконь 🇷🇺 ✔️ Сергей Толкачёв 🇷🇺✔️ Dénes Székely 🇷🇴✔️ Jan Pavelka 🇨🇿✔️ Miljan Vujosevic 🇲🇪✔️ Sergio Iglesias 🇪🇸✔️ Sigrid Gramlinger 🇦🇹✔️ Pisan Chueatchatchai 🇹🇭‼️ Новые интервью будут добавляться до конца декабря 2025. Заходите по ссылке время от времени💡👉 Читать далее

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 3698 Просмотров
*

vav0001

  • Новичок
  • 3
  • 0 / 0
Столкнулся с проблемой того что не оправляются письма через yandex Возникает ошибка PHPMAILER_FROM_FAILED
Вот мой изменненый код по инструкции
 
Код: php
<?php
/**
 * @version $Id: controller.php 14974 2010-02-21 14:32:22Z ian $
 * @package Joomla
 * @subpackage Contact
 * @copyright Copyright (C) 2005 - 2010 Open Source Matters. All rights reserved.
 * @license GNU/GPL, see LICENSE.php
 * Joomla! is free software. This version may have been modified pursuant to the
 * GNU General Public License, and as distributed it includes or is derivative
 * of works licensed under the GNU General Public License or other free or open
 * source software licenses. See COPYRIGHT.php for copyright notices and
 * details.
 */

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die( 'Restricted access' );

jimport( 'joomla.application.component.controller' );

/**
 * Contact Component Controller
 *
 * @static
 * @package Joomla
 * @subpackage Contact
 * @since 1.5
 */
class ContactController extends JController
{
/**
* Display the view
*/
function display()
{
$document =& JFactory::getDocument();

$viewName = JRequest::getVar('view', 'category', 'default', 'cmd');
$viewType = $document->getType();

// interceptors to support legacy urls
switch ($this->getTask())
{
//index.php?option=com_contact&task=category&id=0&Itemid=4
case 'category':
$viewName = 'category';
$layout = 'default';
break;
case 'view':
$viewName = 'contact';
$layout = 'default';
break;
}

// Set the default view name from the Request
$view = &$this->getView($viewName, $viewType);

// Push a model into the view
$model = &$this->getModel( $viewName );
if (!JError::isError( $model )) {
$view->setModel( $model, true );
}

// Workaround for the item view
if ($viewName == 'contact')
{
$modelCat = &$this->getModel( 'category' );
$view->setModel( $modelCat );
}

// Display the view
$view->assign('error', $this->getError());

// View caching logic -- simple... are we logged in?
$user = &JFactory::getUser();
$viewnow = JRequest::getVar('view');
$viewcache = JRequest::getVar('viewcache','1','POST','INT');

if ($user->get('id') || ($viewnow == 'category' && $viewcache == 0)) {
$view->display();
} else {

// Workaround for token caching
if ($viewName == 'contact')
{
ob_start();
}

$option = JRequest::getCmd('option');
$cache =& JFactory::getCache($option, 'view');
$cache->get($view, 'display');

// Workaround for token caching
if ($viewName == 'contact')
{
$contents = ob_get_contents();
ob_end_clean();

$token = JUtility::getToken();
$search = '#<input type="hidden" name="[0-9a-f]{32}" value="1" />#';
$replacement = '<input type="hidden" name="'.$token.'" value="1" />';

echo preg_replace($search, $replacement, $contents);
}
}
}

/**
* Method to send an email to a contact
*
* @static
* @since 1.0
*/
function submit()
{
global $mainframe;

// Check for request forgeries
JRequest::checkToken() or jexit( 'Invalid Token' );

// Initialize some variables
$db = & JFactory::getDBO();
$SiteName = $mainframe->getCfg('sitename');

$default = JText::sprintf( 'MAILENQUIRY', $SiteName );
$contactId = JRequest::getInt( 'id', 0, 'post' );
$name = JRequest::getVar( 'name', '', 'post' );
$email = JRequest::getVar( 'email', '', 'post' );
$subject = JRequest::getVar( 'subject', $default, 'post' );
$body = JRequest::getVar( 'text', '', 'post' );
$emailCopy = JRequest::getInt( 'email_copy', 0, 'post' );

// load the contact details
$model = &$this->getModel('contact');

// query options
$qOptions['id'] = $contactId;
$contact = $model->getContact( $qOptions );

if($contact->email_to == '' && $contact->user_id != 0)
{
$contact_user = JUser::getInstance($contact->user_id);
$contact->email_to = $contact_user->get('email');
}

/*
* If there is no valid email address or message body then we throw an
* error and return false.
*/
jimport('joomla.mail.helper');
if (!$email || !$body || (JMailHelper::isEmailAddress($email) == false))
{
$this->setError(JText::_('CONTACT_FORM_NC'));
$this->display();
return false;
}

// Contact plugins
JPluginHelper::importPlugin( 'contact' );
$dispatcher =& JDispatcher::getInstance();

// Input validation
if  (!$this->_validateInputs( $contact, $email, $subject, $body ) ) {
JError::raiseWarning( 0, $this->getError() );
return false;
}

// Custom handlers
$post = JRequest::get( 'post' );
$results = $dispatcher->trigger( 'onValidateContact', array( &$contact, &$post ) );

foreach ($results as $result)
{
if (JError::isError( $result )) {
return false;
}
}

// Passed Validation: Process the contact plugins to integrate with other applications
$results = $dispatcher->trigger( 'onSubmitContact', array( &$contact, &$post ) );

$pparams = &$mainframe->getParams('com_contact');
if (!$pparams->get( 'custom_reply' ))
{
$MailFrom = $mainframe->getCfg('mailfrom');
$FromName = $mainframe->getCfg('fromname');

// Prepare email body
$prefix = JText::sprintf('ENQUIRY_TEXT', JURI::base());
$body = $prefix."\n".$name.' <'.$email.'>'."\r\n\r\n".stripslashes($body);

$mail = JFactory::getMailer();

$mail->addRecipient( $contact->email_to );
$mail->setSender( array( $email, $name ) );
$mail->setSubject( $FromName.': '.$subject );
$mail->setBody( $body );

$sent = $mail->Send();

/*
* If we are supposed to copy the admin, do so.
*/
// parameter check
$params = new JParameter( $contact->params );
$emailcopyCheck = $params->get( 'show_email_copy', 0 );

// check whether email copy function activated
if ( $emailCopy && $emailcopyCheck )
{
$copyText = JText::sprintf('Copy of:', $contact->name, $SiteName);
$copyText .= "\r\n\r\n".$body;
$copySubject = JText::_('Copy of:')." ".$subject;

$mail = JFactory::getMailer();

$mail->addRecipient( $email );
$mail->setSender( array( $MailFrom, $FromName ) );
$mail->setSubject( $copySubject );
$mail->setBody( $copyText );

$sent = $mail->Send();
}
}

$msg = JText::_( 'Thank you for your e-mail');
$link = JRoute::_('index.php?option=com_contact&view=contact&id='.$contact->slug.'&catid='.$contact->catslug, false);
$this->setRedirect($link, $msg);
}

/**
* Method to output a vCard
*
* @static
* @since 1.0
*/
function vcard()
{
global $mainframe;

// Initialize some variables
$db = & JFactory::getDBO();

$SiteName = $mainframe->getCfg('sitename');
$contactId = JRequest::getVar('contact_id', 0, '', 'int');
// Get a Contact table object and load the selected contact details
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_contact'.DS.'tables');
$contact =& JTable::getInstance('contact', 'Table');
$contact->load($contactId);
$user =& JFactory::getUser();

// Get the contact detail parameters
$params = new JParameter($contact->params);

// Show the Vcard if contact parameter indicates (prevents direct access)
if (($params->get('allow_vcard', 0)) && ($user->get('aid', 0) >= $contact->access))
{
// Parse the contact name field and build the nam information for the vcard.
$firstname = null;
$middlename = null;
$surname = null;

// How many parts do we have?
$parts = explode(' ', $contact->name);
$count = count($parts);

switch ($count) {
case 1 :
// only a first name
$firstname = $parts[0];
break;

case 2 :
// first and last name
$firstname = $parts[0];
$surname = $parts[1];
break;

default :
// we have full name info
$firstname = $parts[0];
$surname = $parts[$count -1];
for ($i = 1; $i < $count -1; $i ++) {
$middlename .= $parts[$i].' ';
}
break;
}
// quick cleanup for the middlename value
$middlename = trim($middlename);

// Create a new vcard object and populate the fields
require_once(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_contact'.DS.'helpers'.DS.'vcard.php');
$v = new JvCard();

$v->setPhoneNumber($contact->telephone, 'PREF;WORK;VOICE');
$v->setPhoneNumber($contact->fax, 'WORK;FAX');
$v->setName($surname, $firstname, $middlename, '');
$v->setAddress('', '', $contact->address, $contact->suburb, $contact->state, $contact->postcode, $contact->country, 'WORK;POSTAL');
$v->setEmail($contact->email_to);
$v->setNote($contact->misc);
$v->setURL( JURI::base(), 'WORK');
$v->setTitle($contact->con_position);
$v->setOrg(html_entity_decode($SiteName, ENT_COMPAT, 'UTF-8'));

$filename = str_replace(' ', '_', $contact->name);
$v->setFilename($filename);

$output = $v->getVCard(html_entity_decode($SiteName, ENT_COMPAT, 'UTF-8'));
$filename = $v->getFileName();

// Send vCard file headers
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Length: '.strlen($output));
header('Connection: close');
header('Content-Type: text/x-vCard; name='.$filename);
header('Cache-Control: store, cache');
header('Pragma: cache');

print $output;
} else {
JError::raiseWarning('SOME_ERROR_CODE', 'ContactController::vCard: '.JText::_('ALERTNOTAUTH'));
return false;
}
}

/**
* Validates some inputs based on component configuration
*
* @param Object $contact JTable Object
* @param String $email Email address
* @param String $subject Email subject
* @param String $body Email body
* @return Boolean
* @access protected
* @since 1.5
*/
function _validateInputs( $contact, $email, $subject, $body )
{
global $mainframe;

$session =& JFactory::getSession();

// Get params and component configurations
$params = new JParameter($contact->params);
$pparams = &$mainframe->getParams('com_contact');

// check for session cookie
$sessionCheck = $pparams->get( 'validate_session', 1 );
$sessionName = $session->getName();
if  ( $sessionCheck ) {
if ( !isset($_COOKIE[$sessionName]) ) {
$this->setError( JText::_('ALERTNOTAUTH') );
return false;
}
}

// Determine banned e-mails
$configEmail = $pparams->get( 'banned_email', '' );
$paramsEmail = $params->get( 'banned_mail', '' );
$bannedEmail = $configEmail . ($paramsEmail ? ';'.$paramsEmail : '');

// Prevent form submission if one of the banned text is discovered in the email field
if(false === $this->_checkText($email, $bannedEmail )) {
$this->setError( JText::sprintf('MESGHASBANNEDTEXT', JText::_('Email')) );
return false;
}

// Determine banned subjects
$configSubject = $pparams->get( 'banned_subject', '' );
$paramsSubject = $params->get( 'banned_subject', '' );
$bannedSubject = $configSubject . ( $paramsSubject ? ';'.$paramsSubject : '');

// Prevent form submission if one of the banned text is discovered in the subject field
if(false === $this->_checkText($subject, $bannedSubject)) {
$this->setError( JText::sprintf('MESGHASBANNEDTEXT',JText::_('Subject')) );
return false;
}

// Determine banned Text
$configText = $pparams->get( 'banned_text', '' );
$paramsText = $params->get( 'banned_text', '' );
$bannedText = $configText . ( $paramsText ? ';'.$paramsText : '' );

// Prevent form submission if one of the banned text is discovered in the text field
if(false === $this->_checkText( $body, $bannedText )) {
$this->setError( JText::sprintf('MESGHASBANNEDTEXT', JText::_('Message')) );
return false;
}

// test to ensure that only one email address is entered
$check = explode( '@', $email );
if ( strpos( $email, ';' ) || strpos( $email, ',' ) || strpos( $email, ' ' ) || count( $check ) > 2 ) {
$this->setError( JText::_( 'You cannot enter more than one email address', true ) );
return false;
}

return true;
}

/**
* Checks $text for values contained in the array $array, and sets error message if true...
*
* @param String $text Text to search against
* @param String $list semicolon (;) seperated list of banned values
* @return Boolean
* @access protected
* @since 1.5.4
*/
function _checkText($text, $list) {
if(empty($list) || empty($text)) return true;
$array = explode(';', $list);
foreach ($array as $value) {
$value = trim($value);
if(empty($value)) continue;
if ( JString::stristr($text, $value)!== false ) {
return false;
}
}
return true;
}



}
Странно что до включения email  в chronoforms  (был Disabled, стал Enabled) сообщения нормально отправлялись из админки (уведомления на почту о пришедшем сообщении в админке) и без изменения кода
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
ну, если под инструкцией имеется ввиду моя тема, с похожим заголовком то там речь шла о встроенном компоненте Контакты...
Возможно ещё нужно что-то изменить в используемом Вами компоненте...
Я с мобильного, в основном...
*

vav0001

  • Новичок
  • 3
  • 0 / 0
Так у меня теперь даже через стандартный компонент не отправляется. Возникает та же ошибка. Навряд ли  компонент смог изменить код движка джумлы. Где может быть причина?
« Последнее редактирование: 06.12.2010, 18:49:46 от vav0001 »
*

Mihanja80

  • Завсегдатай
  • 1918
  • 168 / 4
  • Всю жизнь учусь...
Посмотрите эту тему:
joomlaforum.ru/index.php/topic,117998.0.html
Я с мобильного, в основном...
*

vav0001

  • Новичок
  • 3
  • 0 / 0
Спасибо за отклики. Проблема неотправки сообщений через стандартный модуль была в том, что не нужно изменять email администратора после установки (этот баг вроде только на IIS серверах). Только вот ChronoForms так и не зароботал. Теперь поставил jforms он работает корректно
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает компонент контакты (отправка почты) 1.5.14

Автор AlexStra

Ответов: 21
Просмотров: 19072
Последний ответ 06.03.2020, 15:39:36
от voland
Не работает обратная связь!

Автор Евгения987

Ответов: 1
Просмотров: 4135
Последний ответ 30.03.2018, 15:12:51
от rkron
не работает обратная связь на Joomla 1.5

Автор Oxxxytip

Ответов: 0
Просмотров: 1790
Последний ответ 28.09.2017, 03:01:40
от Oxxxytip
Правка кода витрины VM на Joomla 1.5

Автор Zegeberg

Ответов: 4
Просмотров: 1375
Последний ответ 14.11.2016, 19:14:41
от flyingspook
JCH_Optimize Plugin - оптимизирует загрузку страницы. Работает.

Автор Beer

Ответов: 16
Просмотров: 9437
Последний ответ 03.10.2016, 22:33:02
от SeBun