Новости 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 Гость просматривают эту тему.
  • 27 Ответов
  • 18888 Просмотров
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
Проблема заключается в следующем:
Joomla 1.0.15 LE + VM 1.1.2

В настройках марта стоит скрытое создание учетной записи.
При оформлении заказа приходит почтовое уведомление:
Код
Здравствуйте, <название магазина>,
       
        Новый пользователь зарегистрировался на <TITLE сайта>
        Этот e-mail содержит следующую информацию о новом пользователе:
       
        Настоящее имя - Иванов Иван
        e-mail - Ivan@yandex.ru
        Имя пользователя - Ivan@yandex.ru
       
        Пожалуйста, не отвечайте на данное сообщение, так как оно генерируется автоматически и служит только для информации.
Проблема в том что Title моего сайта "километровый" и в этом письме не совсем кстати.
Я нашел что текст данного письма идет с файла russian.php и выглядит таким образом:

Код
	'ASEND_MSG' => 'Здравствуйте, %s,

Новый пользователь зарегистрировался на %s.
Этот e-mail содержит следующую информацию о новом пользователе:

Настоящее имя - %s
e-mail - %s
Имя пользователя - %s

Пожалуйста, не отвечайте на данное сообщение, так как оно генерируется автоматически и служит только для информации.',
Я не могу понять работу переменной %s
К примеру если я пропишу после этой фразы: Новый пользователь зарегистрировался на вместо %s свою фразу например "мой сайт"
То "мой сайт" дублируется на всех полях расположенных ниже с переменной %s.

Как тогда грамотно можно редактировать данные шаблоны?
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Пришлите Ваш файл
/administrator/components/com_virtuemart/classes/ps.shopper.php
Точнее HTML код выложите тут.
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
ps.shopper.php
Код
<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
*
* @version $Id: ps_shopper.php 1364 2008-04-09 16:44:28Z soeren_nb $
* @package VirtueMart
* @subpackage classes
* @copyright Copyright (C) 2004-2008 soeren - All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/

/**
*
* The class is meant to manage shopper entries
*/
class ps_shopper {

/**
* Validates the input parameters onBeforeShopperAdd
*
* @param array $d
* @return boolean
*/
function validate_add(&$d) {
global $my, $mosConfig_absolute_path;

$provided_required = true;
$missing = "";

require_once( CLASSPATH . 'ps_userfield.php' );
$registrationFields = ps_userfield::getUserFields( 'registration', false, '', true );

$skipFields = array();
if( VM_REGISTRATION_TYPE == 'SILENT_REGISTRATION' || VM_REGISTRATION_TYPE == 'NO_REGISTRATION'
|| (VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION' && empty($d['register_account']))) {
$skipFields = array( 'username', 'password', 'password2');
}
        if ( $my->id > 0 || (VM_REGISTRATION_TYPE != 'NORMAL_REGISTRATION' && VM_REGISTRATION_TYPE != 'OPTIONAL_REGISTRATION')) {
            $skipFields = array( 'username', 'password', 'password2');
        }
if( $my->id ) {
$skipFields[] = 'email';
}
foreach( $registrationFields as $field ) {
if( $field->required == 0 ) continue;
if( in_array( $field->name, $skipFields )) {
continue;
}
switch( $field->type ) {
case 'age_verification':
// The Age Verification here is just a simple check if the selected date
// is a birthday older than the minimum age (default: 18)
$d[$field->name] = vmRequest::getInt('birthday_selector_year')
.'-'.vmRequest::getInt('birthday_selector_month')
.'-'.vmRequest::getInt('birthday_selector_day');
$params = new vmParameters( $field->params );
$min_age = $params->get('minimum_age', 18 );
$min_date = (date('Y') - $min_age).'-'.date('n').'-'.date('j');

if( $d[$field->name] > $min_date ) {
// User too young!
$provided_required = false;
$missing .= $field->name . ",";
}
break;
case 'captcha':
if( file_exists($mosConfig_absolute_path.'/administrator/components/com_securityimages/server.php')) {
include_once( $mosConfig_absolute_path.'/administrator/components/com_securityimages/server.php');
$packageName = 'securityVMRegistrationCheck';
$security_refid = vmGet($_POST, $packageName.'_refid');
$security_try = vmGet($_POST, $packageName.'_try');
$security_reload = vmGet($_POST, $packageName.'_reload');
$checkSecurity = checkSecurityImage($security_refid, $security_try );

if( !$checkSecurity ) {
$provided_required = false;
$missing .= $field->name . ",";
}
}
break;

case 'euvatid':
if( empty( $d[$field->name])) break; // Do nothing when the EU VAT ID field was left empty

// Check the VAT ID against the validation server of the European Union
$d['isValidVATID'] = vmValidateEUVat( $d[$field->name] );
$d['__euvatid_field'] = $field;

break; // We don't need to go further in the loop

default:
if ( empty( $d[$field->name])) {
$provided_required = false;
$missing .= $field->name . ",";
}
break;
}
}

if (!$provided_required) {
$_REQUEST['missing'] = $missing;
return false;
}
$d['isValidVATID'] = false;
foreach( $registrationFields as $field ) {

}

$d['user_email'] = vmGet( $d, 'email', $my->email );
$d['perms'] = 'shopper';

return true;
}

/**************************************************************************
** name: validate_update()
** created by:
** description:
** parameters:
** returns:
***************************************************************************/
function validate_update(&$d) {
global $my, $perm, $vmLogger, $mosConfig_absolute_path;

if ($my->id == 0){
$vmLogger->err( "Please Login first." );

return false;
}
$db = new ps_DB;

$provided_required = true;
$missing = "";

require_once( CLASSPATH . 'ps_userfield.php' );
$accountFields = ps_userfield::getUserFields( 'account', false, '', true );

if( VM_REGISTRATION_TYPE == 'SILENT_REGISTRATION' || VM_REGISTRATION_TYPE == 'NO_REGISTRATION' || (VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION' && empty($d['register_account'] ))) {
$skipFields = array( 'username', 'password', 'password2');
}
        if ( $my->id > 0 || (VM_REGISTRATION_TYPE != 'NORMAL_REGISTRATION' && VM_REGISTRATION_TYPE != 'OPTIONAL_REGISTRATION')) {
            $skipFields = array( 'username', 'password', 'password2');
        }
if( $my->id ) {
$skipFields[] = 'email';
}
foreach( $accountFields as $field )  {
if( $field->required == 0 ) continue;
if( in_array( $field->name, $skipFields )) {
continue;
}
switch( $field->type ) {
case 'age_verification':
// The Age Verification here is just a simple check if the selected date
// is a birthday older than the minimum age (default: 18)
$d[$field->name] = vmRequest::getInt('birthday_selector_year')
.'-'.vmRequest::getInt('birthday_selector_month')
.'-'.vmRequest::getInt('birthday_selector_day');
$params = new vmParameters( $field->params );
$min_age = $params->get('minimum_age', 18 );
$min_date = (date('Y') - $min_age).'-'.date('n').'-'.date('j');

if( $d[$field->name] > $min_date ) {
// User too young!
$provided_required = false;
$missing .= $field->name . ",";
}
break;
case 'captcha':
if( file_exists($mosConfig_absolute_path.'/administrator/components/com_securityimages/server.php')) {
include_once( $mosConfig_absolute_path.'/administrator/components/com_securityimages/server.php');
$packageName = 'securityVMRegistrationCheck';
$security_refid = vmGet($_POST, $packageName.'_refid');
$security_try = vmGet($_POST, $packageName.'_try');
$security_reload = vmGet($_POST, $packageName.'_reload');
$checkSecurity = checkSecurityImage($security_refid, $security_try );

if( !$checkSecurity ) {
$provided_required = false;
$missing .= $field->name . ",";
}
}
break;

case 'euvatid':
if( empty( $d[$field->name])) break; // Do nothing when the EU VAT ID field was left empty

// Check the VAT ID against the validation server of the European Union
$d['isValidVATID'] = vmValidateEUVat( $d[$field->name] );
$d['__euvatid_field'] = $field;

break; // We don't need to go further in the loop

default:
if ( empty( $d[$field->name])) {
$provided_required = false;
$missing .= $field->name . ",";
}
break;
}
}

if (!$provided_required) {
$_REQUEST['missing'] = $missing;
return false;
}

$d['user_email'] = vmGet( $d, 'email', $my->email );
$d['perms'] = 'shopper';

return true;

}

/**************************************************************************
** name: validate_delete()
** created by:
** description:
** parameters:
** returns:
***************************************************************************/
function validate_delete(&$d) {
global $my;

if ($my->id == 0){
$vmLogger->err( "Please Login first." );
return false;
}
if (!$d["user_id"]) {
$vmLogger->err( "Please select a user to delete." );
return False;
}
else {
return True;
}
}

/**
* Function to add a new Shopper into the Shop and Joomla
*
* @param array $d
* @return boolean
*/
function add( &$d ) {
global $my, $auth, $mainframe, $mosConfig_absolute_path, $sess,
$VM_LANG, $vmLogger, $database, $mosConfig_useractivation;

$ps_vendor_id = $_SESSION["ps_vendor_id"];
$hash_secret = "VirtueMartIsCool";
$db = new ps_DB;
$timestamp = time();

if (!$this->validate_add($d)) {
return False;
}

if( empty( $my->id ) ) {

$_POST['name'] = vmGet($d,'first_name','First Name' )." ".vmGet($d,'last_name','Last Name' );
if( VM_REGISTRATION_TYPE == 'SILENT_REGISTRATION' || VM_REGISTRATION_TYPE == 'NO_REGISTRATION' || (VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION' && empty($d['register_account'] ))) {
// Silent Registration, Optional Registration with no account wanted and No Registration
// means we need to create a hidden user
if( vmIsJoomla('1.5') ) {
$username_length = 100;
} else {
$username_length = 25;
}
$silent_username = substr( str_replace( '-', '_', vmGet($d,'email') ), 0, $username_length );
$db->query( 'SELECT username FROM `#__users` WHERE username=\''.$silent_username.'\'');
$i = 0;
while( $db->next_record()) {
$silent_username = substr_replace( $silent_username, $i, strlen($silent_username)-1 );
$db->query( 'SELECT username FROM `#__users` WHERE username=\''.$silent_username.'\'');
$i++;
}
$_POST['username'] = $d['username'] = $silent_username;
$_POST['password'] = $d['password'] = vmGenRandomPassword();
$_POST['password2'] = $_POST['password'];
}

if( VM_REGISTRATION_TYPE == 'NO_REGISTRATION' || (VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION' && empty($d['register_account'] ) ) ) {
// If no user shall be registered into the global user table, we just add the registration info into the vm_user_info table
$db->query( "SELECT MAX(user_id)+1 as uid FROM `pick_vm_user_info`" );
$db->next_record();
$uid = $db->f('uid');

  } else {
// Process the CMS registration

if( vmIsJoomla( '1.5' ) ) {
if( !$this->register_save() ) {
return false;
}
} else {
if( !$this->saveRegistration() ) {
return false;
}
}
$database->setQuery( "SELECT id FROM #__users WHERE username='".$d['username']."'" );
$uid = $database->loadResult();
  }


}
else {
$uid = $my->id;
$d['email'] = $_POST['email'] = $my->email;
$d['username'] = $_POST['username'] = $my->username;

}
if( !empty($auth['user_id'])) {
$db->query( 'SELECT user_id FROM #__{vm}_user_info WHERE user_id='.$auth['user_id'] );
$db->next_record();

if( $db->f('user_id')) {
return $this->update( $d );
}
}
// Get all fields which where shown to the user
$userFields = ps_userfield::getUserFields('registration', false, '', true );
$skipFields = ps_userfield::getSkipFields();

// Insert billto;

// The first 7 fields are FIX and not built dynamically
$fields = array( 'user_info_id' => md5(uniqid( $hash_secret)),
'user_id' => $uid,
'address_type' => 'BT',
'address_type_name' => '-default-',
'cdate' => $timestamp,
'mdate' => $timestamp,
'perms' => 'shopper'
);

foreach( $userFields as $userField ) {
if( !in_array($userField->name, $skipFields )) {

$fields[$userField->name] = ps_userfield::prepareFieldDataSave( $userField->type, $userField->name, vmGet($d, $userField->name, strtoupper($userField->name) ) );

// Catch a newsletter registration!
if( stristr( $userField->params, 'newsletter' )) {
if( !empty($d[$userField->name])) {
$subscribeTo = new mosParameters( $userField->params );
$vmLogger->debug( 'Adding the user to the Newsletter.');
}
}

}
}
$fields['user_email'] = $fields['email'];
unset($fields['email']);

$db->buildQuery('INSERT', '#__{vm}_user_info', $fields );

// Run the query now!
$db->query();

// Insert vendor relationship
$q = "INSERT INTO #__{vm}_auth_user_vendor (user_id,vendor_id)";
$q .= " VALUES ";
$q .= "('" . $uid . "','";
$q .= $ps_vendor_id . "') ";
$db->query($q);

$d['shopper_group_id'] = '';

// Get the ID of the shopper group for this customer
if( $d['isValidVATID'] ) {

if( trim($d['__euvatid_field']->params)!= '' ) {
$shopper_group = new mosParameters( $d['__euvatid_field']->params );
$d['shopper_group_id'] = $shopper_group->get('shopper_group_id');
}
}
if( empty($d['shopper_group_id'])) {
$q =  "SELECT shopper_group_id from #__{vm}_shopper_group WHERE ";
$q .= "`default`='1' ";

$db->query($q);
if (!$db->num_rows()) {  // take the first in the table

$q =  "SELECT shopper_group_id from #__{vm}_shopper_group";
$db->query($q);
}
$db->next_record();
$d['shopper_group_id'] = $db->f("shopper_group_id");
}

$customer_nr = uniqid( rand() );
// Insert Shopper -ShopperGroup - Relationship
$q  = "INSERT INTO #__{vm}_shopper_vendor_xref ";
$q .= "(user_id,vendor_id,shopper_group_id,customer_number) ";
$q .= "VALUES ('$uid', '$ps_vendor_id','".$d['shopper_group_id']."', '$customer_nr')";
$db->query($q);

// Process the Newsletter subscription
if( !empty( $subscribeTo ) && strtolower(get_class($subscribeTo))=='mosparameters') {
switch( $subscribeTo->get('newsletter', 'letterman')) {
// TODO:
// case 'yanc':
// case 'anjel':
case 'letterman':
default:
if( file_exists($mosConfig_absolute_path.'/components/com_letterman/letterman.php')) {
$db->query( "INSERT INTO `#__letterman_subscribers` (`user_id`, `subscriber_name`, `subscriber_email`, `confirmed`, `subscribe_date`)
VALUES('$uid','".$d['first_name']." ". $d['last_name']."','".$d['email']."', '1', NOW())");
}
}
}
if( VM_REGISTRATION_TYPE == 'NO_REGISTRATION' || (VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION' && empty($d['register_account'] ) ) ) {
$auth['user_id'] = $uid;
$auth['username'] = $d['email'];
$_SESSION['auth'] = $auth;
}
elseif( !$my->id && $mosConfig_useractivation == '0') {
// HANDLE LOGIN
if( vmIsJoomla('1.5') ) {
// Username and password must be passed in an array
$credentials = array('username'  => vmGet($d,'username'),
'password' => vmGet($d,'password')
);
$mainframe->login( $credentials );
}
elseif( class_exists('mambocore') || ( vmIsJoomla('1.0.13', '>=', false ) ) ) {
// Login for Mambo 4.6.x and Joomla >= 1.0.13
$mainframe->login($d['username'], $d['password'] );
}
else {
// Login for Joomla < 1.0.13 (and Mambo 4.5.2.3)
$mainframe->login($d['username'], md5( $d['password'] ));
}
// Redirect to the Checkout Page if the cart is not empty
if( !empty( $_SESSION['cart']['idx'])) {
$redirect_to_page = 'checkout.index';
} else {
$redirect_to_page = HOMEPAGE;
}
vmRedirect( $sess->url( 'index.php?page='.$redirect_to_page, false, false ), $VM_LANG->_('REG_COMPLETE') );
}

if( !empty($my->id) || !empty($auth['user_id']) ) {
vmRedirect( $sess->url( 'index.php?page=checkout.index', false, false ) );
}
else {
$GLOBALS['page'] = 'shop.cart';
$msg = strip_tags( $VM_LANG->_('REG_COMPLETE_ACTIVATE',false) );
$vmLogger->info( $msg );
}

return true;

}

/**
* The function from com_registration!
* Registers a user into Mambo/Joomla
*
* @return boolean True when the registration process was successful, False when not
*/
function saveRegistration() {
global $database, $acl, $vmLogger, $mosConfig_useractivation,
$mosConfig_allowUserRegistration, $mosConfig_live_site;

if ($mosConfig_allowUserRegistration=='0') {
mosNotAuth();
return false;
}

$row = new mosUser( $database );

if (!$row->bind( $_POST, 'usertype' )) {
$error = vmHtmlEntityDecode( $row->getError() );
$vmLogger->err( $error );
echo "<script type=\"text/javascript\"> alert('". $error. "');</script>\n";
return false;
}

mosMakeHtmlSafe($row);

$usergroup = 'Registered';
$row->id = 0;
$row->usertype = $usergroup;
$row->gid = $acl->get_group_id( $usergroup, 'ARO' );

if ($mosConfig_useractivation == '1') {
$row->activation = md5( vmGenRandomPassword() );
$row->block = '1';
}

if (!$row->check()) {
$error = vmHtmlEntityDecode( $row->getError() );
$vmLogger->err( $error );
echo "<script type=\"text/javascript\"> alert('". $error. "');</script>\n";
return false;
}

$pwd = $row->password;
$row->password = md5( $row->password );
$row->registerDate = date('Y-m-d H:i:s');

if (!$row->store()) {
$error = vmHtmlEntityDecode( $row->getError() );
$vmLogger->err( $error );
echo "<script type=\"text/javascript\"> alert('". $error. "');</script>\n";
return false;
}
$row->checkin();

$name = $row->name;
$email = $row->email;
$username = $row->username;
$component = vmIsJoomla(1.5)? 'com_user' : 'com_registration';

$activation_link = $mosConfig_live_site."/index.php?option=$component&task=activate&activation=".$row->activation;

// Send the registration email
$this->_sendMail( $name, $email, $username, $pwd, $activation_link );

return true;
}

/**
* Save user registration and notify users and admins if required
* for Joomla! 1.5
* @return boolean
*/
function register_save()
{
global $mainframe,$mosConfig_live_site;

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

// Get required system objects
$user = clone(JFactory::getUser());
$pathway =& $mainframe->getPathway();
$config =& JFactory::getConfig();
$authorize =& JFactory::getACL();
$document   =& JFactory::getDocument();

// If user registration is not allowed, show 403 not authorized.
$usersConfig = &JComponentHelper::getParams( 'com_users' );
if ($usersConfig->get('allowUserRegistration') == '0') {
JError::raiseError( 403, JText::_( 'Access Forbidden' ));
return false;
}

// Initialize new usertype setting
$newUsertype = $usersConfig->get( 'new_usertype' );
if (!$newUsertype) {
$newUsertype = 'Registered';
}

// Bind the post array to the user object
$_post_ =& vmRequest::get('post');
if (!$user->bind( $_post_, 'usertype' )) {
JError::raiseError( 500, $user->getError());
}

// Set some initial user values
$user->set('id', 0);
$user->set( 'usertype', $newUsertype );
$user->set('gid', $authorize->get_group_id( '', $newUsertype, 'ARO' ));

// TODO: Should this be JDate?
$user->set('registerDate', date('Y-m-d H:i:s'));

// If user activation is turned on, we need to set the activation information
$useractivation = $usersConfig->get( 'useractivation' );
if ($useractivation == '1')
{
jimport('joomla.user.helper');
$user->set('activation', md5( JUserHelper::genRandomPassword()) );
$user->set('block', '1');
}

// If there was an error with registration, set the message and display form
if ( !$user->save() )
{
JError::raiseWarning('', JText::_( $user->getError()));
return false;
}

// Send registration confirmation mail
$password = JRequest::getString('password', '', 'post', JREQUEST_ALLOWRAW);
$password = preg_replace('/[\x00-\x1F\x7F]/', '', $password); //Disallow control chars in the email

$name = $user->get('name');
$email = $user->get('email');
$username = $user->get('username');
$component = 'com_user';

$activation_link = $mosConfig_live_site."/index.php?option=$component&task=activate&activation=".$user->get('activation');
// Send the registration email
$this->_sendMail( $name, $email, $username, $password, $activation_link );

return true;
}


/**
* Function to update a Shopper Entry
* (uses who have perms='shopper')
*/
function update(&$d) {
global $my, $perm, $sess, $vmLogger, $page;

$auth = $_SESSION['auth'];
$db = new ps_DB;

if (@$d["user_id"] != $my->id && $auth["perms"] != "admin") {
$vmLogger->crit( "Tricky tricky, but we know about this one." );
return False;
}

require_once(CLASSPATH. 'ps_user.php' );
if( !empty($d['username'])) {
$_POST['username'] = $d['username'];
}
else {
$_POST['username'] = $my->username;
}
$_POST['name'] = $d['first_name']." ". $d['last_name'];
$_POST['id'] = $auth["user_id"];
$_POST['gid'] = $my->gid;
$d['error'] = "";

ps_user::saveUser( $d );
if( !empty( $d['error']) ) {

return false;
}

if (!$this->validate_update($d)) {
return false;
}
$user_id = $auth["user_id"];

/* Update Bill To */

// Get all fields which where shown to the user
$userFields = ps_userfield::getUserFields( 'account', false, '', true );
$skip_fields = ps_userfield::getSkipFields();

$fields = array(
'mdate' => time()
);

foreach( $userFields as $userField ) {
if( !in_array($userField->name, $skip_fields )) {

$fields[$userField->name] = ps_userfield::prepareFieldDataSave( $userField->type, $userField->name, vmGet( $d, $userField->name, strtoupper($userField->name) ));

}
}

$fields['user_email'] = $fields['email'];
unset($fields['email']);

$db->buildQuery('UPDATE', '#__{vm}_user_info', $fields, " WHERE user_id=".$user_id." AND address_type='BT'" );

// Run the query!
$db->query();

// UPDATE #__{vm}_shopper group relationship
$q = "SELECT shopper_group_id FROM #__{vm}_shopper_vendor_xref ";
$q .= "WHERE user_id = '".$user_id."'";
$db->query($q);

if (!$db->num_rows()) {
//add

$shopper_db = new ps_DB;
// get the default shopper group
$q =  "SELECT shopper_group_id from #__{vm}_shopper_group WHERE ";
$q .= "`default`='1'";
$shopper_db->query($q);
if (!$shopper_db->num_rows()) {  // when there is no "default", take the first in the table
$q =  "SELECT shopper_group_id from #__{vm}_shopper_group";
$shopper_db->query($q);
}

$shopper_db->next_record();
$my_shopper_group_id = $shopper_db->f("shopper_group_id");
if (empty($d['customer_number'])) {
$d['customer_number'] = "";
}

$q  = "INSERT INTO #__{vm}_shopper_vendor_xref ";
$q .= "(user_id,vendor_id,shopper_group_id) ";
$q .= "VALUES ('";
$q .= $_SESSION['auth']['user_id'] . "','";
$q .= $_SESSION['ps_vendor_id'] . "','";
$q .= $my_shopper_group_id. "')";
$db->query($q);
}
$q = "SELECT user_id FROM #__{vm}_auth_user_vendor ";
$q .= "WHERE user_id = '".$_SESSION['auth']['user_id']."'";
$db->query($q);
if (!$db->num_rows()) {
// Insert vendor relationship
$q = "INSERT INTO #__{vm}_auth_user_vendor (user_id,vendor_id)";
$q .= " VALUES ";
$q .= "('" . $_SESSION['auth']['user_id'] . "','";
$q .= $_SESSION['ps_vendor_id'] . "') ";
$db->query($q);
}

return True;
}

/**
* Function to delete a Shopper
*/
function delete(&$d) {
global $my;

$db = new ps_DB;

if (!$this->validate_delete($d)) {
return False;
}

// Delete user_info entries
// and Shipping addresses
$q = "DELETE FROM #__{vm}_user_info where user_id='" . $d["user_id"] . "'";
$db->query($q);

// Delete shopper_vendor_xref entries
$q = "DELETE FROM #__{vm}_shopper_vendor_xref where user_id='" . $d["user_id"] . "'";
$db->query($q);

$q = "DELETE FROM #__{vm}_auth_user_vendor where user_id='" . $d["user_id"] . "'";
$db->query($q);
return True;
}

/**
* Sends new/updated user notification emails
*
* @param string $name - The name of the newly created/updated user
* @param string $email - The email address of the newly created/updated user
* @param string $username - The username of the newly created/updated user
* @param string $password - The plain text password of the newly created/updated user
*/
function _sendMail($name, $email, $username, $pwd, $activation_link='') {
global $database, $acl, $VM_LANG;
global $mosConfig_sitename, $mosConfig_live_site, $mosConfig_useractivation;
global $mosConfig_mailfrom, $mosConfig_fromname;

$subject = sprintf ($VM_LANG->_('SEND_SUB',false), $name, $mosConfig_sitename);
$subject = vmHtmlEntityDecode($subject, ENT_QUOTES);
if ($mosConfig_useractivation=="1"){
$message = sprintf ($VM_LANG->_('USEND_MSG_ACTIVATE',false), $name, $mosConfig_sitename, $activation_link, $mosConfig_live_site, $username, $pwd);
} else {
$message = sprintf ($VM_LANG->_('PHPSHOP_USER_SEND_REGISTRATION_DETAILS',false), $name, $mosConfig_sitename, $mosConfig_live_site, $username, $pwd);
}

$message = vmHtmlEntityDecode($message, ENT_QUOTES);
// Send email to user
if ($mosConfig_mailfrom != "" && $mosConfig_fromname != "") {
$adminName2 = $mosConfig_fromname;
$adminEmail2 = $mosConfig_mailfrom;
} else {
$query = "SELECT name, email"
. "\n FROM #__users"
. "\n WHERE LOWER( usertype ) = 'superadministrator'"
. "\n OR LOWER( usertype ) = 'super administrator'"
;
$database->setQuery( $query );
$rows = $database->loadObjectList();
$row2 = $rows[0];
$adminName2 = $row2->name;
$adminEmail2 = $row2->email;
}
if( VM_REGISTRATION_TYPE != 'NO_REGISTRATION' || (VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION' && !empty($d['register_account']))) {
vmMail($adminEmail2, $adminName2, $email, $subject, $message);
}

// Send notification to all administrators
$subject2 = sprintf ($VM_LANG->_('SEND_SUB',false), $name, $mosConfig_sitename);
$message2 = sprintf ($VM_LANG->_('ASEND_MSG',false), $adminName2, $mosConfig_sitename, $name, $email, $username);
$subject2 = vmHtmlEntityDecode($subject2, ENT_QUOTES);
$message2 = vmHtmlEntityDecode($message2, ENT_QUOTES);

// get superadministrators id
$admins = $acl->get_group_objects( 25, 'ARO' );
if( empty( $admins['users'] )) {
return;
}
foreach ( $admins['users'] AS $id ) {
$query = "SELECT email, sendEmail"
. "\n FROM #__users"
."\n WHERE id = $id"
;
$database->setQuery( $query );
$rows = $database->loadObjectList();

$row = $rows[0];

if ($row->sendEmail) {
vmMail($adminEmail2, $adminName2, $row->email, $subject2, $message2);
}
}

}
}
$ps_shopper = new ps_shopper;
?>
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Найдите в этом файле такой блок:

function _sendMail($name, $email, $username, $pwd, $activation_link='') {
      global $database, $acl, $VM_LANG;
      global $mosConfig_sitename, $mosConfig_live_site, $mosConfig_useractivation;
      global $mosConfig_mailfrom, $mosConfig_fromname;

В третьей его строчке удалите:$mosConfig_sitename
Т.е. третья строчка должна выглядеть :global $mosConfig_live_site, $mosConfig_useractivation;
После этого поменяйте в языковом файле соответствующую переменную на название Вашего сайта (как бы вы хотели видеть Ваш TITLE в письме)
Теперь попробуйте !
« Последнее редактирование: 25.03.2010, 23:19:07 от weathercock »
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Прежде чем будете делать обязательно сохраните первоначальный вид файла,чтобы в случае чего вставить обратно..
Дело в том что писал я Вам по памяти и спец.из меня никакой ^-^Спецы и гуру чего-то молчат :(
Но я исправлял данную проблему и на 90% тем образом,который указал выше
Обязательно отпишитесь по результату !
« Последнее редактирование: 25.03.2010, 23:09:03 от weathercock »
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
Я так уже делал.
Убирал эту переменную, и в языковом файле там где мне надо прописать короткий title прописал то что мне нужно.
В итоге получилось так:
Код
Здравствуйте, Интернет магазин меховых головных уборов,

Новый пользователь зарегистрировался в Интернет магазине. <- тут все хорошо

Это сообщение содержит следующую информацию о новом пользователе:

Настоящее имя - <- тут пусто
e-mail - Иван Формочким <- вместо мыла - настоящее имя
Имя пользователя - shop@shop.ru

Пожалуйста, не отвечайте на данное сообщение, так как оно генерируется автоматически и служит только для информации.
Данные сдвигаются на одну строку вниз...

РАЗОБРАЛСЯ!

Что бы данные не сдвигались вниз, не нужно удалять переменную %s.
Просто удаляем $mosConfig_sitename из файла ps.shopper.php
В языковом файле делаем примерно так: Новый пользователь зарегистрировался на <title вашего сайта>. %s
« Последнее редактирование: 26.03.2010, 21:48:08 от GTpro »
*

weathercock

  • Осваиваюсь на форуме
  • 37
  • 1 / 0
Я вроде бы так и написал Вам,разве нет?

Присоединяюсь к теме - как в уведомление о регистрации нового пользователя добавить информацию, которую пользователь вводил при регистрацию через VirtueMart? Т.е там поля city, zip, adres_1  и пр? Текст сообщения находится в переменной $_ASEND_MSG в языковом файле, текст вот такой:
-----   var $_ASEND_MSG = 'Здравствуйте, администратор сайта  "%s",    Новый пользователь зарегистрировался на cайте "%s".
   Этот e-mail содержит следующую информацию о новом пользователе:Настоящее имя: - %s e-mail: - %s
   Имя пользователя: - %s  А также данные анкеты:
   Наименование организации: - %s
   Телефон: - %s
   Наименование и артикул интересующих изделий:- %s.';
-----
Обрабатываеся в ps_shopper.php, вот этот файл (см. ниже): как видно, само сообщение выводится с помощью переменной $message2 (у меня закоментировано стандартное и добавлены свои поля). Данные логин-пароль записываются в таблицу Joomla - users, а остальная информация - в таблицу виртуемарта vm_users_info. id из первой таблицы соответствует user_id из второй. и в таблицы все прекрасно записывается - а в уведомлении доп. информация не отображается. 

----
<?php
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );
/**
*
* @version $Id: ps_shopper.php 998 2007-10-13 11:30:22Z soeren_nb $
* @package VirtueMart
* @subpackage classes
* @copyright Copyright (C) 2004-2007 Soeren Eberhardt. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/

/**
*
* The class is meant to manage shopper entries
*/
class ps_shopper {
  var $classname = "ps_shopper";
 
   /**************************************************************************
   ** name: validate_add()
   ** created by:
   ** description:
   ** parameters:
   ** returns:
     ***************************************************************************/
   function validate_add(&$d) {
      global $my, $perm;
      
      $db = new ps_DB;
      
      $provided_required = true;
      $missing = "";
      
      if( empty( $my->id ) ) {
         if( VM_SILENT_REGISTRATION != '1') {
            if (empty($d['username'])) { $provided_required = false; $missing .= "username,"; }
            if (empty($d['password'])) { $provided_required = false; $missing .= "password,"; }
            if (empty($d['password2'])) { $provided_required = false; $missing .= "password2,"; }
         }
         if (empty($d['email'])) { $provided_required = false; $missing .= "email,"; }
      }
      
      if (empty($d['first_name'])) { $provided_required = false; $missing .= "first_name,"; }
      //if (empty($d['last_name']))  { $provided_required = false; $missing .= "last_name,"; }
      //if (empty($d['company']))  { $provided_required = false; $missing .= "company,"; }
      if (empty($d['address_1']))  { $provided_required = false; $missing .= "address_1,"; }
      if (empty($d['city']))  { $provided_required = false; $missing .= "city,"; }
   //   if (empty($d['zip'])) { $provided_required = false; $missing .= "zip,"; }
   //   if (CAN_SELECT_STATES == '1') {
   //      if (empty($d['state'])) { $provided_required = false; $missing .= "state,"; }
   //   }
   //   if (empty($d['country'])) { $provided_required = false; $missing .= "country,"; }
      //if (empty($d['phone_1'])) { $provided_required = false; $missing .= "phone_1"; }
      
      if (MUST_AGREE_TO_TOS == '1'&& !$perm->is_registered_customer( $my->id )) {
         if( empty( $d['agreed'] )) {
            $provided_required = false;
            $missing .= "agreed,";
         }
      }
      
      if (!$provided_required) {
         $_REQUEST['missing'] = $missing;
         return false;
         /*
         $url="username=".$d['username'];
         $url.="&email=".$d['email'];
         $url.="&first_name=".$d['first_name'];
         $url.="&last_name=".$d['last_name'];
         $url.="&middle_name=".$d['middle_name'];
         $url.="&title=".$d['title'];
         $url.="&company=".$d['company'];
         $url.="&address_1=".$d['address_1'];
         $url.="&address_2=".$d['address_2'];
         $url.="&city=".$d['city'];
         $url.="&zip=".$d['zip'];
         $url.="&state=".$d['state'];
         $url.="&country=".$d['country'];
         $url.="&phone_1=".$d['phone_1'];
         $url.="&fax=".$d['fax'];
         $url.="&bank_account_nr=".@$d['bank_account_nr'];
         $url.="&bank_sort_code=".@$d['bank_sort_code'];
         $url.="&bank_name=".@$d['bank_name'];
         $url.="&bank_iban=".@$d['bank_iban'];
         $url.="&bank_account_holder=".@$d['bank_account_holder'];
         $url.="&bank_account_type=".@$d['bank_account_type'];
         
         mosRedirect( "index.php?option=com_virtuemart&page=".$_SESSION['last_page']."&missing=$missing&$url", _CONTACT_FORM_NC );
         */
      }
      
      $d['user_email'] = mosGetParam( $d, 'email', $my->email );
      $d['perms'] = 'shopper';
   
      return $provided_required;
     }

   /**************************************************************************
   ** name: validate_update()
   ** created by:
   ** description:
   ** parameters:
   ** returns:
   ***************************************************************************/
   function validate_update(&$d) {
      global $my, $perm, $vmLogger;
      
      if ($my->id == 0){
        $vmLogger->err( "Please Login first." );
       
        return false;
      }
      return $this->validate_add( $d );
      
   }
   
   /**************************************************************************
   ** name: validate_delete()
   ** created by:
   ** description:
   ** parameters:
   ** returns:
   ***************************************************************************/
   function validate_delete(&$d) {
      global $my;      
      
      if ($my->id == 0){
          $vmLogger->err( "Please Login first." );
         return false;
      }
      if (!$d["user_id"]) {
         $vmLogger->err( "Please select a user to delete." );
         return False;
      }
      else {
         return True;
      }
   }

 
   /**
   * Function to add a new Shopper into the Shop and Joomla
   */
   function add( &$d ) {
      global $my, $ps_user, $mainframe, $mosConfig_absolute_path, $sess,
      $VM_LANG, $database, $option, $mosConfig_useractivation, $vmInputFilter;
      
      $ps_vendor_id = $_SESSION["ps_vendor_id"];
      $hash_secret = "VirtueMartIsCool";
      $db = new ps_DB;
      $timestamp = time();
      
      if (!$this->validate_add($d)) {
        return False;
      }
      // Use InputFilter class to prevent SQL injection or HTML tags
      $d =$vmInputFilter->process( $d );
   
      if ($VM_LANG->_PHPSHOP_SHOPPER_FORM_EXTRA_FIELD_4 and $d["extra_field_4"] == "") {
        $d["extra_field_4"] = "N";
      }
      if ($VM_LANG->_PHPSHOP_SHOPPER_FORM_EXTRA_FIELD_5 and $d["extra_field_5"] == "") {
        $d["extra_field_5"] = "N";
      }
      if( empty( $my->id ) ) {

         $_POST['name'] = $d['first_name']." ".$d['last_name'];
         if( VM_SILENT_REGISTRATION == '1' ) {
            $silent_username = substr( str_replace( '-', '_', $d['email'] ), 0, 25 );
            $db->query( 'SELECT username FROM `#__users` WHERE username=\''.$silent_username.'\'');
            $i = 0;
            while( $db->next_record()) {
               $silent_username = substr_replace( $silent_username, $i, strlen($silent_username)-1 );
               $db->query( 'SELECT username FROM `#__users` WHERE username=\''.$silent_username.'\'');
               $i++;
            }
            $_POST['username'] = $d['username'] = $silent_username;
            $_POST['password'] = $d['password'] = mosMakePassword();
            $_POST['password2'] = $_POST['password'];
         }
         // Process Mambo/Joomla registration stuff
         if( !$this->saveRegistration() ) {
            return false;
         }
         
         $database->setQuery( "SELECT id FROM #__users WHERE username='".$d['username']."'" );
         $database->loadObject( $userid );
         $uid = $userid->id;
      }
      else {
         $uid = $my->id;
         $d['email'] = $_POST['email'] = $my->email;
         
      }
      $db->query( 'SELECT user_id FROM #__{vm}_user_info WHERE user_id='.$my->id );
      $db->next_record();
      
      if( $db->f('user_id')) {
         return $this->update( $d );
      }
      
      // Insert billto
      $q = "INSERT INTO #__{vm}_user_info VALUES (";
      $q .= "'" . md5(uniqid( $hash_secret)). "',";
      $q .= "'" . $uid . "',";
      $q .= "'BT',";
      $q .= "'-default-',";
      //$q .= "'" .htmlentities($d["company"],ENT_QUOTES,"windows-1251"). "',";
      $q .= "'" .$d["company"] . "',";
      $q .= "'" .$d["title"] . "',";
      $q .= "'" .$d["last_name"] . "',";
      $q .= "'" .$d["first_name"] . "',";
      $q .= "'" .$d["middle_name"] . "',";
      $q .= "'" .$d["phone_1"] . "',";
      $q .= "'" .@$d["phone_2"] . "',";
      $q .= "'" .$d["fax"] . "',";
      $q .= "'" .$d["address_1"] . "',";
      $q .= "'" .$d["address_2"] . "',";
      $q .= "'" .$d["city"] . "',";
      $q .= "'" .@$d["state"] . "',";
      $q .= "'" .$d["country"] . "',";
      $q .= "'" .$d["zip"] . "',";
      $q .= "'" .$d["email"] . "',";
      $q .= "'" .@$d["extra_field_1"] . "',";
      $q .= "'" .@$d["extra_field_2"] . "',";
      $q .= "'" .@$d["extra_field_3"] . "',";
      $q .= "'" .@$d["extra_field_4"] . "',";
      $q .= "'" .@$d["extra_field_5"] . "',";
      $q .= "'" .$timestamp . "',";
      $q .= "'" .$timestamp . "',";
      $q .= "'shopper', ";
      $q .= "'" . @$d["bank_account_nr"] . "', ";
      $q .= "'" . @$d["bank_name"] . "', ";
      $q .= "'" . @$d["bank_sort_code"] . "', ";
      $q .= "'" . @$d["bank_iban"] . "', ";
      $q .= "'" . @$d["bank_account_holder"] . "', ";
      $q .= "'" . @$d["bank_account_type"] . "') ";
      
      $db->query($q);
      
      
      // Insert vendor relationship
      $q = "INSERT INTO #__{vm}_auth_user_vendor (user_id,vendor_id)";
      $q .= " VALUES ";
      $q .= "('" . $uid . "','";
      $q .= $ps_vendor_id . "') ";
      $db->query($q);
      
      // Insert Shopper -ShopperGroup - Relationship   
      $q =  "SELECT shopper_group_id from #__{vm}_shopper_group WHERE ";
      $q .= "`default`='1' ";
   
      $db->query($q);
      if (!$db->num_rows()) {  // take the first in the table
   
         $q =  "SELECT shopper_group_id from #__{vm}_shopper_group";
         $db->query($q);
      }
      $db->next_record();
      $d['shopper_group_id'] = $db->f("shopper_group_id");

      $customer_nr = uniqid( rand() );
      
      $q  = "INSERT INTO #__{vm}_shopper_vendor_xref ";
      $q .= "(user_id,vendor_id,shopper_group_id,customer_number) ";
      $q .= "VALUES ('$uid', '$ps_vendor_id','".$d['shopper_group_id']."', '$customer_nr')";
      $db->query($q);
      
      if( !$my->id && $mosConfig_useractivation == '0') {
         if( defined('_JEXEC') || class_exists('mambocore') || ( $GLOBALS['_VERSION']->RELEASE == '1.0' && (int)$GLOBALS['_VERSION']->DEV_LEVEL >= 13) ) {
            $mainframe->login($d['username'], $d['password'] );
         } else {
            $mainframe->login($d['username'], md5( $d['password'] ));
         }
         if( !empty( $_SESSION['cart']['idx'])) {
            $redirect_to_page = 'checkout.index';
         } else {
            $redirect_to_page = HOMEPAGE;
         }
         $url = str_replace( '&amp;', '&', $sess->url( 'index.php?page='.$redirect_to_page ));
         mosRedirect( $url, $VM_LANG->_REG_COMPLETE );
      }
      elseif( $my->id ) {
         $url = str_replace( '&amp;', '&', $sess->url( 'index.php?page=checkout.index' ));
         mosRedirect( $url );
      }
      else {
         $GLOBALS['page'] = 'shop.cart';
         $msg = strip_tags( $VM_LANG->_REG_COMPLETE_ACTIVATE );
         $GLOBALS['vmLogger']->info( $msg );
         $GLOBALS['vmLogger']->debug( 'The Account Activation Feature can be turned off in the Global Configuration' );
      }
      
      return True;
   
   }

   /**
    * The function from com_registration!
    * Registers a user into Mambo/Joomla
    *
    * @return boolean True when the registration process was successful, False when not
    */
   function saveRegistration() {
      global $database, $acl, $VM_LANG, $vmLogger;
      global $mosConfig_sitename, $mosConfig_live_site, $mosConfig_useractivation, $mosConfig_allowUserRegistration;
      global $mosConfig_mailfrom, $mosConfig_fromname, $mosConfig_mailfrom, $mosConfig_fromname;
   
      if ($mosConfig_allowUserRegistration=='0') {
         mosNotAuth();
         return false;
      }
   
      $row = new mosUser( $database );
   
      if (!$row->bind( $_POST, 'usertype' )) {
         $error = vmHtmlEntityDecode( $row->getError() );
         $vmLogger->err( $error );
         echo "<script type=\"text/javascript\"> alert('". $error. "');</script>\n";
         return false;
      }
   
      mosMakeHtmlSafe($row);
      
      $usergroup = 'Registered';
      $row->id = 0;
      $row->usertype = $usergroup;
      $row->gid = $acl->get_group_id( $usergroup, 'ARO' );
   
      if ($mosConfig_useractivation == '1') {
         $row->activation = md5( mosMakePassword() );
         $row->block = '1';
      }
   
      if (!$row->check()) {
         $error = vmHtmlEntityDecode( $row->getError() );
         $vmLogger->err( $error );
         echo "<script type=\"text/javascript\"> alert('". $error. "');</script>\n";
         return false;
      }
   
      $pwd             = $row->password;
      $row->password       = md5( $row->password );
      $row->registerDate    = date('Y-m-d H:i:s');
   
      if (!$row->store()) {
         $error = vmHtmlEntityDecode( $row->getError() );
         $vmLogger->err( $error );
         echo "<script type=\"text/javascript\"> alert('". $error. "');</script>\n";
         return false;
      }
      $row->checkin();
   $testid    = $row->id;
      $name       = $row->name;
      $email       = $row->email;
      $username    = $row->username;
      
      
      
      
         //$testid=62;
   
//echo $testid;
echo "<br>";
//echo $email;
echo "<br>";

 $database->setQuery ("SELECT company  FROM mim_vm_user_info WHERE user_id ='$testid'" );
 $company = $database->loadResult();
       echo "<br>";
          echo $company;
             echo "</b>";
//      echo $database->stderr();


 $database->setQuery ("SELECT phone_1  FROM #__vm_user_info WHERE user_id ='163'" );
 $phone_1 = $database->loadResult();
       echo "<br>";
          echo $phone_1;
             echo "</b>";
//      echo $database->stderr();
 $database->setQuery ("SELECT address_1   FROM #__vm_user_info WHERE user_id ='$row->id' " );
 $address_1 = $database->loadResult();
      echo "<br>";
   echo $address_1;
   //   echo $database->stderr();
 $database->setQuery ("SELECT  city   FROM #__vm_user_info WHERE user_id ='$row->id' " );
 $city = $database->loadResult();
      echo "<br>";
   echo $city;
   //   echo $database->stderr();
 $database->setQuery ("SELECT  zip   FROM #__vm_user_info WHERE user_id ='$row->id' " );
 $zip = $database->loadResult();
     echo "<br>";
   echo $zip;      
      
         
      
      
   
      $subject    = sprintf ($VM_LANG->_SEND_SUB, $name, $mosConfig_sitename);
      $subject    = vmHtmlEntityDecode($subject, ENT_QUOTES);
      if ($mosConfig_useractivation=="1"){
         $message = sprintf ($VM_LANG->_USEND_MSG_ACTIVATE, $name, $mosConfig_sitename, $mosConfig_live_site."/index.php?option=com_registration&task=activate&activation=".$row->activation, $mosConfig_live_site, $username, $pwd);
      } else {
         $message = sprintf ($VM_LANG->_PHPSHOP_USER_SEND_REGISTRATION_DETAILS, $name, $mosConfig_sitename, $mosConfig_live_site, $username, $pwd);
      }
   
      $message = vmHtmlEntityDecode($message, ENT_QUOTES);
      // Send email to user
      if ($mosConfig_mailfrom != "" && $mosConfig_fromname != "") {
         $adminName2 = $mosConfig_fromname;
         $adminEmail2 = $mosConfig_mailfrom;
      } else {
         $query = "SELECT name, email"
         . "\n FROM #__users"
         . "\n WHERE LOWER( usertype ) = 'superadministrator'"
         . "\n OR LOWER( usertype ) = 'super administrator'"
         ;
         $database->setQuery( $query );
         $rows = $database->loadObjectList();
         $row2          = $rows[0];
         $adminName2    = $row2->name;
         $adminEmail2    = $row2->email;
      }
   
      mosMail($adminEmail2, $adminName2, $email, $subject, $message);
   
      // Send notification to all administrators
   //$subject2 = sprintf ( $VM_LANG->_SEND_SUB, $name, $mosConfig_sitename);
   //$message2 = sprintf ( $VM_LANG->_ASEND_MSG, $adminName2, $mosConfig_sitename, $row->name, $email, $username);
      

   $subject2 = sprintf ( $VM_LANG->_SEND_SUB, $name, $mosConfig_sitename);
   //$message2 = sprintf ( $VM_LANG->_ASEND_MSG, $adminName2, $mosConfig_sitename, $row->name, $email, $username);
   


     
   $message2 = sprintf ( $VM_LANG->_ASEND_MSG, $adminName2, $mosConfig_sitename, $row->name, $email, $username, $company,   $phone_1,  $address_1,  $city, $zip );



      $subject2 = vmHtmlEntityDecode($subject2, ENT_QUOTES);
      $message2 = vmHtmlEntityDecode($message2, ENT_QUOTES);
   
      // get superadministrators id
      $admins = $acl->get_group_objects( 25, 'ARO' );
   
      foreach ( $admins['users'] AS $id ) {
         $query = "SELECT email, sendEmail"
         . "\n FROM #__users"
         ."\n WHERE id = $id"
         ;
         $database->setQuery( $query );
         $rows = $database->loadObjectList();
   
         $row = $rows[0];
   
         if ($row->sendEmail) {
            mosMail($adminEmail2, $adminName2, $row->email, $subject2, $message2);
         }
      }
   /*
      if ( $mosConfig_useractivation == 1 ){
         echo $VM_LANG->_REG_COMPLETE_ACTIVATE;
      } else {
         echo $VM_LANG->_REG_COMPLETE;
      }
      */
      return true;
   }

 
   /**
   * Function to update a Shopper Entry
   * (uses who have perms='shopper')
   */
   function update(&$d) {
      global $my, $perm, $sess, $vmLogger;
      
      $auth = $_SESSION['auth'];
         
      $db = new ps_DB;
      
      $d = $GLOBALS['vmInputFilter']->safeSQL( $d );
   
      if (@$d["user_id"] != $my->id && $auth["perms"] != "admin") {
        $vmLogger->crit( "Tricky tricky, but we know about this one." );
        return False;
      }
      
      require_once(CLASSPATH. 'ps_user.php' );
      if( !empty($d['username'])) {
         $_POST['username'] = $d['username'];
      }
      else {
         $_POST['username'] = $my->username;
      }
      $_POST['name'] = $d['first_name']." ". $d['last_name'];
      $_POST['id'] = $auth["user_id"];
      $_POST['gid'] = $my->gid;
      $d['error'] = "";
      
      ps_user::saveUser( $d );
      if( !empty( $d['error']) ) {
         
         return false;
      }
      
      if (!$this->validate_update($d)) {
         $_SESSION['last_page'] = "checkout.index";
         return false;
      }
      $user_id = $auth["user_id"];
      
      /* Update Bill To */
      $q  = "UPDATE #__{vm}_user_info SET ";
      if (!empty($d['company'])) {
         $q .= "company='" . htmlentities($d["company"],ENT_QUOTES,"windows-1251"). "', ";
      } else {
         $q .= "company='', ";
      }
      $q .= "title='" . $d["title"] . "', ";
      $q .= "last_name='" . $d["last_name"] . "', ";
      $q .= "first_name='" . $d["first_name"] . "', ";
      if (!empty($d['middle_name'])) {
         $q .= "middle_name='" . $d["middle_name"] . "', ";
      }
      else {
         $q .= "middle_name='', ";
      }
      $q .= "phone_1='" . $d["phone_1"] . "', ";
      if (!empty($d['phone_2'])) {
         $q .= "phone_2='" . $d["phone_2"] . "',";
      } else {
         $q .= "phone_2='',";
      }
      if (!empty($d['fax'])) {
         $q .= "fax='" . $d["fax"] . "', ";
      } else {
         $q .= "fax='', ";
      }
      $q .=    "address_1='" . $d["address_1"] . "', ";
      $q .= "address_2='" . @$d["address_2"] . "', ";
      $q .= "city='" . $d["city"] . "', ";
      if (!empty($d['state'])){
         $q .= "state='" . $d["state"] . "', ";
      } else {
         $q .= "state='', ";
      }
      $q .= "country='" . $d["country"] . "', ";
      $q .= "zip='" . $d["zip"] . "', ";
      $q .= "extra_field_1='" . @$d["extra_field_1"] . "', ";
      $q .= "extra_field_2='" . @$d["extra_field_2"] . "', ";
      $q .= "extra_field_3='" . @$d["extra_field_3"] . "', ";
      $q .= "extra_field_4='" . @$d["extra_field_4"] . "', ";
      $q .= "extra_field_5='" . @$d["extra_field_5"] . "' ";
      if (!empty($d['bank_iban'])) {
         $q .= ",bank_iban='" . $d["bank_iban"] . "' ";
      } else {
         $q .= ",bank_iban='' ";
      }
      if (!empty($d['bank_account_nr'])){
         $q .= ",bank_account_nr='" . $d["bank_account_nr"] . "' ";
      } else {
         $q .= ",bank_account_nr='' ";
      }
      if (!empty($d['bank_sort_code'])) {
         $q .= ",bank_sort_code='" . $d["bank_sort_code"] . "' ";
      } else {
         $q .= ",bank_sort_code='' ";
      }
      if (!empty($d['bank_name'])) {
         $q .= ",bank_name='" . $d["bank_name"] . "'";
      } else {
         $q .= ",bank_name=''";
      }
      if (!empty($d['bank_account_holder'])) {
         $q .= ", bank_account_holder='" . $d["bank_account_holder"] . "' ";
      } else {
         $q .= ", bank_account_holder='' ";
      }
      if (mShop_validateEmail(@$d['email'])) {
         $q .= ",user_email = '".@$d['email']."' ";
      }
      $q .= "WHERE user_id=" . intval( $user_id ). " AND address_type='BT'";
    
      $db->query($q);
    
      // UPDATE #__{vm}_shopper group relationship
      $q = "SELECT shopper_group_id FROM #__{vm}_shopper_vendor_xref ";
      $q .= "WHERE user_id = '".$user_id."'";
      $db->query($q);
      
      if (!$db->num_rows()) {
         //add
         
         $shopper_db = new ps_DB;
         // get the default shopper group
         $q =  "SELECT shopper_group_id from #__{vm}_shopper_group WHERE ";
         $q .= "`default`='1'";
         $shopper_db->query($q);
         if (!$shopper_db->num_rows()) {  // when there is no "default", take the first in the table
            $q =  "SELECT shopper_group_id from #__{vm}_shopper_group";
            $shopper_db->query($q);
         }
         
         $shopper_db->next_record();
         $my_shopper_group_id = $shopper_db->f("shopper_group_id");
         if (empty($d['customer_number']))
            $d['customer_number'] = "";
         
         $q  = "INSERT INTO #__{vm}_shopper_vendor_xref ";
         $q .= "(user_id,vendor_id,shopper_group_id) ";
         $q .= "VALUES ('";
         $q .= $_SESSION['auth']['user_id'] . "','";
         $q .= $_SESSION['ps_vendor_id'] . "','";
         $q .= $my_shopper_group_id. "')";
         $db->query($q);
      }
      $q = "SELECT user_id FROM #__{vm}_auth_user_vendor ";
      $q .= "WHERE user_id = '".$_SESSION['auth']['user_id']."'";
      $db->query($q);
      if (!$db->num_rows()) {
         // Insert vendor relationship
         $q = "INSERT INTO #__{vm}_auth_user_vendor (user_id,vendor_id)";
         $q .= " VALUES ";
         $q .= "('" . $_SESSION['auth']['user_id'] . "','";
         $q .= $_SESSION['ps_vendor_id'] . "') ";
         $db->query($q);
      }
      
      return True;
   }
 
   /**
   * Function to delete a Shopper
   */
   function delete(&$d) {
      global $my;
    
      $db = new ps_DB;
      
      if (!$this->validate_delete($d)) {
         return False;
      }
   
      // Delete user_info entries
      // and Shipping addresses
      $q = "DELETE FROM #__{vm}_user_info where user_id='" . $d["user_id"] . "'";
      $db->query($q);
      
      // Delete shopper_vendor_xref entries
      $q = "DELETE FROM #__{vm}_shopper_vendor_xref where user_id='" . $d["user_id"] . "'";
      $db->query($q);
      
      $q = "DELETE FROM #__{vm}_auth_user_vendor where user_id='" . $d["user_id"] . "'";
      $db->query($q);
      return True;
   }
}
$ps_shopper = new ps_shopper;
?>



----

*

Гринвич

  • Захожу иногда
  • 213
  • 0 / 0
Да, такая проблемка есть, как мог перелопатил файлы
\administrator\components\com_virtuemart\languages\common\russian.php
\administrator\components\com_virtuemart\classes\ps.shopper.php
Каких только вариантов у меня не было, даже страшно пересказывать.
Оставил на самом безболезненном, когда пользователи (их настоящие имена)
у меня под одним и тем же именем First Name Last Name
Это хорошо что сайт пока на локалке :)))
-----
Заметил что значения сдвигаются при добавлении (удалении) слов в файле russian.php.
Больше ничего не получаеться. Помогите решить эту проблемку пожалуйста.
« Последнее редактирование: 04.05.2011, 04:37:58 от Гринвич »
*

crot26rus

  • Новичок
  • 8
  • 2 / 0
В \administrator\components\com_virtuemart\classes\ps.shopper.php
$message2 = sprintf ($VM_LANG->_('ASEND_MSG',false), $var1, $var2, $var3, $var4, $var5);

В \administrator\components\com_virtuemart\languages\common\russian.php
'ASEND_MSG' => 'Здравствуйте, %s,
   
   Новый пользователь зарегистрировался на %s.
   %s
   e-mail - %s
   Имя пользователя - %s',

%s заменяется соответственно на значения переменных $var1, $var2, ....
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
crot26rus, А можно привести конкретный пример с конкретными переменныйми, а то чето не выходит.
В $message2 прописываю нужные переменные, в языковом файле соответственно прописываю вместо %s эти же переменные, но письмо приходит с такими же переменными))
Код
Здравствуйте, $adminName2,
       
        Новый пользователь зарегистрировался на $mosConfig_sitename.
        Этот e-mail содержит следующую информацию о новом пользователе:
       
        Настоящее имя - $name
        e-mail - $email
        Имя пользователя - $username
        Адрес - $adress_1
        Телефон - $phone

То есть мне нужно то по большому счету в уведомлении добавить только пару полей "Адрес" и "Телефон".. но чет не выходит

VM 1.1.9
ps_shopper.php:
Код
// Send notification to all administrators
$subject2 = sprintf ($VM_LANG->_('SEND_SUB',false), $name, $mosConfig_sitename);
$message2 = sprintf ($VM_LANG->_('ASEND_MSG',false), $adminName2, $mosConfig_sitename, $name, $email, $username, $adress_1, $phone);

russian.php:
Код
'SEND_SUB' => 'Учётная запись $name, на сайте $mosConfig_sitename',
'ASEND_MSG' => 'Здравствуйте, $adminName2,

Новый пользователь зарегистрировался на $mosConfig_sitename.
Этот e-mail содержит следующую информацию о новом пользователе:

Настоящее имя - $name
e-mail - $email
Имя пользователя - $username
Адрес - $adress_1
Телефон - $phone
« Последнее редактирование: 16.02.2012, 18:10:52 от niggatub »
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Так. Прочитал про sprintf. То, что изначально делал было (и есть судя по всему) правильно:
ps_shopper.php:
Код
// Send notification to all administrators
$subject2 = sprintf ($VM_LANG->_('SEND_SUB',false), $name, $mosConfig_sitename);
$message2 = sprintf ($VM_LANG->_('ASEND_MSG',false), $adminName2, $mosConfig_sitename, $name, $email, $username, $adress_1, $phone_1);

russian.php:
Код
'SEND_SUB' => 'Учётная запись %s, на сайте %s',
'ASEND_MSG' => 'Здравствуйте, %s,

Новый пользователь зарегистрировался на %s.
Этот e-mail содержит следующую информацию о новом пользователе:

Настоящее имя - %s
e-mail - %s
Имя пользователя - %s
Адрес - %s
Телефон - %s

Но, по непонятным причинам, две последних переменных не выводится...
Сдается мне, что, как написал miminfo выше, проблема действительно в том, что данные о пользователе пишутся в разные таблицы... Как побороть? Есть тут гуру PHP?:)
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Блин, 2 года теме.. Ну неужели так мало народу задается этим вопросом..?
*

crot26rus

  • Новичок
  • 8
  • 2 / 0
Цитата: niggatub
Но, по непонятным причинам, две последних переменных не выводится...
А откуда ты взял переменные $adress_1, $phone_1?

Напиши:
Код
var_dump($_REQUEST)
и посмотри нет ли там нужных данных. Если нет, то сделай запрос в базу тебе же известен $username
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
А откуда ты взял переменные $adress_1, $phone_1?
это переменные в виртуемарте
Напиши:
Код
var_dump($_REQUEST)
и посмотри нет ли там нужных данных. Если нет, то сделай запрос в базу тебе же известен $username

где написать?
*

crot26rus

  • Новичок
  • 8
  • 2 / 0
Вот кусок моего кода:
Код
// Send notification to all administrators
$subject2 = sprintf ($VM_LANG->_('SEND_SUB',false), '', $mosConfig_sitename);
    //дополнительные поля
    $fio_1 = JRequest::getVar('last_name', 'не заполнено');
    $fio_2 = JRequest::getVar('first_name', 'не заполнено');
    $fio_3 = JRequest::getVar('middle_name', 'не заполнено');
    $login = JRequest::getVar('username', 'не заполнено');
    $phone = JRequest::getVar('phone_1', 'не заполнено');
    $vm_user_type = JRequest::getVar('vm_user_type', array(''));
    $type    = 'не заполнено';
    $company = '';
    $address = '';
    if($vm_user_type[0] == '1')
    {
      $type = 'Частное лицо';
    }
    else if($vm_user_type[0] == '2')
    {   
      $type = 'Юридическое лицо';
      $company = 'Название компании - '.JRequest::getVar('company', 'не заполнено');
      $address = 'Адрес компании - '.JRequest::getVar('vm_firm_address', 'не заполнено');
    }
    else if($vm_user_type[0] == '3')
    {
      $type = 'Индивидуальный предприниматель';
      $address = 'Адрес компании - '.JRequest::getVar('vm_firm_address', 'не заполнено');
    }   
     
  $message2 = sprintf ($VM_LANG->_('ASEND_MSG',false), $adminName2, $mosConfig_sitename, '', $email, $username, $fio_1, $fio_2, $fio_3, $phone, $type, $company, $address);
  $subject2 = vmHtmlEntityDecode($subject2, ENT_QUOTES);
  $message2 = vmHtmlEntityDecode($message2, ENT_QUOTES);
Смотри, пробуй.
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
crot26rus, Да украсится твой путь лепестками лотоса! Язь! Язь здооровенный!)) Спасибо - то что надо:)
Единственное вопрос - откуда берет "vm_firm_address" - это я так понимаю добавлено поле в виртуемарте в "Поля заполняемые пользователем"?
« Последнее редактирование: 17.02.2012, 18:50:06 от niggatub »
*

crot26rus

  • Новичок
  • 8
  • 2 / 0
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Все, спасибо большое:) У меня все работает как требовалось.
*

Natyuma

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
To crot26rus. Огромное спасибо за решение. Все работает как надо.
*

Bassss

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Извиняюсь за нубовский вопрос. Как мне добавить в уведомление регион, адрес и телефон? Куда и что прописать?
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Извиняюсь за нубовский вопрос. Как мне добавить в уведомление регион, адрес и телефон? Куда и что прописать?
Вы почитайте внимательно все, что выше написано :)
*

Bassss

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Вы почитайте внимательно все, что выше написано :)
Читал, пробовал редактировать, но ничего не получилось. Только после этого и обратился
*

crot26rus

  • Новичок
  • 8
  • 2 / 0
Показывай по шагам как делал, что получилось, а что не получилось. Будем смотреть, разбираться, помогать.
*

xabbep

  • Осваиваюсь на форуме
  • 44
  • 0 / 1
Столкнулся со следующей проблемой. Не могу найти где можно изменить сам текст письма, приходящего покупателю на почту после оформления заказа. Голову себе сломал, перелопатил кучу сайтов, а найти не могу. А мне банально нужно два-три слова убрать с этого письма.
Привожу пример файла confirmation_email.tpl.php:
Код
<?php
// $Id: confirmation_email.tpl.php 1393 2008-05-02 11:42:19Z soeren_nb $
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

?>
<html>
<head>
<title><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_PO_LBL')?></title>
<style type="text/css">
<!--
.Stil1 {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
}
.Stil2 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>
</head>
<body>

 
<table border=0 cellspacing=0 cellpadding=2 width=100%>
  <!-- begin customer information -->
  <tr bgcolor="#CCCCCC" class="sectiontableheader">
    <td colspan="2" class="Stil2"><b><?php echo $VM_LANG->_('PHPSHOP_ACC_ORDER_INFO')?></b></td>
  </tr>
  <tr class="Stil1">
    <td><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_PO_NUMBER')?>:</td><td><?php echo $order_id ?></td>
  </tr>
  
  <tr class="Stil1">
    <td><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_PO_DATE')?>:</td><td><?php echo $order_date ?></td>
  </tr>
  <tr class="Stil1">
    <td><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_PO_STATUS')?>:</td><td><?php echo $order_status ?></td>
  </tr>
  <!-- end customer information -->
  <!-- begin 2 column bill-ship to -->
  <tr class="sectiontableheader">
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr bgcolor="#CCCCCC" class="sectiontableheader">
    <td colspan="2"><b class="Stil2"><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_CUST_INFO_LBL')?></b></td>
  </tr>
  <tr valign=top>
    <td width=50%> <!-- begin billto -->  
      <table width=100% cellspacing=0  border=0>
      <?php
      foreach( $registrationfields as $field ) {
if( $field->name == 'email') $field->name = 'user_email';
if( $field->name == 'delimiter_sendregistration') continue;
if( $field->type == 'captcha') continue;
       if( $field->type == 'delimiter') { ?>
       <tr class="Stil1">
         <td ><b class="Stil1"><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?></b></td>
       </tr>
       <?php
} else { ?>
       <tr class="Stil1">
         <td><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?>:</td>
         <td><?php
         switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
                    $dbc = $country->get_country_by_code($dbbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbbt->f($field->name);
          break;
         }
          ?></td>
       </tr>
      <?php
} ?>
<?php
}
?>
      </table>
      <!-- end billto -->
    </td>
    <td width=50%>
    <!-- begin shipto -->  
      <table width=100% border=0 cellpadding=2 cellspacing=0 class="Stil1">
        <tr>
          <td colspan="2"><b><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_SHIP_TO_LBL')?></b></td>
        </tr>
     <?php
      foreach( $shippingfields as $field ) {
       if( $field->name == 'email') $field->name = 'user_email';
       if( $field->type == 'delimiter') { ?>
       <tr class="Stil1">
         <td colspan="2"><b class="Stil1"><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?></b></td>
       </tr>
       <?php
} else { ?>
       <tr class="Stil1">
         <td><?php echo $VM_LANG->_($field->title)? $VM_LANG->_($field->title) : $field->title ?>:</td>
         <td><?php
         switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbst->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbst->f($field->name);
          break;
         }
          ?></td>
       </tr>
      <?php
} ?>
<?php
}
?>
      </table>
      <!-- end shipto -->
      <!-- end customer information --> </td>
  </tr>
  <tr>
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr>
    <td colspan="2">
      <table width="100%" border="0" cellspacing="0" cellpadding="1">
        
      </table>
    </td>
  </tr>
  <tr>
    <td colspan="2">&nbsp;</td>
  </tr>
  <!-- begin order items information -->
  <tr bgcolor="#CCCCCC" class="Stil2">
    <td colspan="2"><b><?php echo $VM_LANG->_('PHPSHOP_ORDER_ITEM')?></b></td>
  </tr>
  <tr>
    <td colspan="2">
      <table width=100% cellspacing=0 cellpadding=2 border=0>
        <tr align=left class="Stil1">
<th><?php echo $VM_LANG->_('PHPSHOP_CART_QUANTITY')?></th>
       <th><?php echo $VM_LANG->_('PHPSHOP_CART_NAME')?></th>
<th><?php echo $VM_LANG->_('PHPSHOP_CART_PRICE')?></th>
<th><?php echo $VM_LANG->_('PHPSHOP_CART_SUBTOTAL')?></th>
        </tr>
<?php
// CREATE THE LIST WITH ALL ORDER ITEMS
$order_items = "";
$sub_total = 0.00;
while($dboi->next_record()) {
$my_qty = $dboi->f("product_quantity");
if ($auth["show_price_including_tax"] == 1) {
$price = $dboi->f("product_final_price");
$my_price = $CURRENCY_DISPLAY->getFullValue($dboi->f("product_final_price"), '', $db->f('order_currency'));
} else {
$price = $dboi->f("product_item_price");
$my_price = $CURRENCY_DISPLAY->getFullValue($dboi->f("product_item_price"), '', $db->f('order_currency'));
}
$my_subtotal = $my_qty * $price;
$sub_total += $my_subtotal;
?>
<tr class="Stil1">
<td><?php echo $my_qty ?></td>
<td><?php $dboi->p("product_name")?> <?php echo ($dboi->f("product_attribute")? ' ('.$dboi->f("product_attribute").')' : ''); ?></td>
<td><?php echo $my_price ?></td>
<td><?php echo $CURRENCY_DISPLAY->getFullValue($my_subtotal, '', $db->f('order_currency'))?></td>
</tr>
<?php
}
?>
        <tr class="Stil1">
          <td colspan=4 align=right>&nbsp;&nbsp;</td>
          <td>&nbsp;</td>
        </tr>

        <?php
        // DISCOUNT HANDLING
if ( PAYMENT_DISCOUNT_BEFORE == '1') {
if ($order_discount > 0 || $order_discount < 0) {
?>
<?php
}
if ($coupon_discount > 0 || $coupon_discount < 0) {
?>

<?php
}
}
?>


        <?php
if ( PAYMENT_DISCOUNT_BEFORE != '1') {
if ($order_discount > 0 || $order_discount < 0) {
?>

<?php
}
if ($coupon_discount > 0 || $coupon_discount < 0) {
?>

<?php
}
}
?>
        <tr class="Stil1">
          <td colspan=3 align=right><b><?php echo $VM_LANG->_('PHPSHOP_CART_TOTAL').": " ?></b></td>
          <td><?php echo $order_total ?></td>
        </tr>
      </table>
    </td>
  </tr>
  <!-- end order items information -->
  <!-- begin customer note -->
  <tr class="sectiontableheader">
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr bgcolor="#CCCCCC" class="sectiontableheader">
    <td colspan="2"><b class="Stil2"><?php echo $VM_LANG->_('PHPSHOP_ORDER_PRINT_CUSTOMER_NOTE')?>:</b></td>
  </tr>
  <tr>
    <td colspan="2">
        <?php echo $customer_note ?>
    </td>

  </tr>
  <tr class="sectiontableheader">
    <td colspan="2">&nbsp;</td>
  </tr>
  <tr bgcolor="#CCCCCC" class="sectiontableheader">
    <td><b class="Stil2"><?php echo $payment_info_lbl ?></b></td>
    <td><b class="Stil2"><?php echo $shipping_info_lbl ?></b></td>
  </tr>
  <tr>
    <td><?php echo $payment_info_details ?></td>
    <td><?php echo $shipping_info_details ?></td>
  </tr>
</table>
<br>
<p class="Stil2"></p>
<p class="Stil2">
<?php
// EMAIL FOOTER MESSAGE
if( $is_email_to_shopper ) {
$footer_html = "<br /><br />".$VM_LANG->_('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER2')."<br />";

if( VM_REGISTRATION_TYPE != 'NO_REGISTRATION' ) {
$footer_html .= "<br /><a title=\"".$VM_LANG->_('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER5')."\" href=\"$order_link\">"
. $VM_LANG->_('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER5')."</a>";
}
$footer_html .= "<br /><br />".$VM_LANG->_('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER3')."<br />";
$footer_html .= $VM_LANG->_('CMN_EMAIL').": <a href=\"mailto:" . $from_email."\">".$from_email."</a>";
// New in version 1.0.5
if( @VM_ONCHECKOUT_SHOW_LEGALINFO == '1' && !empty( $legal_info_title )) {
$footer_html .= "<br /><br />____________________________________________<br />";
$footer_html .= '<h5>'.$legal_info_title.'</h5>';
$footer_html .= $legal_info_html.'<br />';
}
} else {
$footer_html = '<br /><br /><a title="'.$VM_LANG->_('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER5').'" href="'.$order_link.'">'
. $VM_LANG->_('PHPSHOP_CHECKOUT_EMAIL_SHOPPER_HEADER5').'</a>';
}
echo $footer_html;
?>
</p>
</body>
</html>

Помогите разобраться, кто сталкивался. Смотрел Firebug-ом приходящее письмо на почту, определил, что <div id=":14x"> вроде бы выводит сам русский текст письма, прогнал поиском Dreamweave по сайту с этим div-ом, но ничего не нашёл...

Свой вопрос снимаю, так как сам разобрался  ^-^ Если у кого-то возникнет такая-же проблема - ищите файл с названием ps_checkout.php, находится он - ВАШ_САЙТ\administrator\components\com_virtuemart\classes
« Последнее редактирование: 17.04.2012, 19:44:27 от xabbep »
*

crot26rus

  • Новичок
  • 8
  • 2 / 0
Написал бы где что менял и как это помогло решить твою проблему.
« Последнее редактирование: 17.04.2012, 20:11:49 от crot26rus »
*

Mishani

  • Захожу иногда
  • 74
  • 1 / 0
Пробую все что написано выше и не получается, я так понимаю это для VM 1.1.2, а есть ли решение для VM 1.1.9?
А нужно то всего добавить телефон зарегистрированного посетителя в письмо приходящее администратору.
Думал будет просто добавить телефон в письмо, а оказалось нет :(
*

niggatub

  • Захожу иногда
  • 205
  • 2 / 3
Пробую все что написано выше и не получается, я так понимаю это для VM 1.1.2, а есть ли решение для VM 1.1.9?
Это решение и для 1.1.9
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Уведомление на 2 почтовых ящика при заказе товара.

Автор M.Imperator

Ответов: 35
Просмотров: 25917
Последний ответ 10.07.2019, 17:43:33
от hmr
При заказе не отправляются письма на электронную почту

Автор vsokol

Ответов: 5
Просмотров: 4149
Последний ответ 29.05.2016, 07:17:31
от vsokol
[Решено] Изображение и ссылка на товар в теле письма о заказе

Автор zmancer

Ответов: 18
Просмотров: 11429
Последний ответ 11.03.2016, 22:28:28
от Pustota
настраиваю «покупку без регистрации» - требует регистрацию!

Автор Наташа

Ответов: 8
Просмотров: 6433
Последний ответ 14.10.2015, 14:27:43
от fsv
Новая строка в textarea при регистрации пользователя

Автор refoxter

Ответов: 0
Просмотров: 3616
Последний ответ 03.03.2015, 11:06:49
от refoxter