Новости Joomla

Astroid обновился до версии 3.3.7!

Astroid обновился до версии 3.3.7!

Astroid — это мощный фреймворк для дизайнеров и разработчиков, позволяющий создавать адаптивные, быстрые и надежные веб-сайты и шаблоны на базе Joomla.

Главное в новой версии:

-   Исправлена загрузка файлов макетов

В предыдущем крупном релизе Astroid 3.3.6 были сделаны важные улучшения:

Основные моменты:

  • Улучшенный UI/UX в ключевых областях конфигурации
  • Повышенная стабильность и согласованность в Layout Builder и Form Builder
  • Исправления ошибок на основе отзывов сообщества
  • Улучшенная обработка визуальных эффектов, границ и шрифтов

Улучшения:

  • Обновленный UX Layout Builder
  • Улучшенный эффект предзагрузчика
  • Улучшенный стиль границ
  • Улучшенный UI/UX вкладки «Layout» в Template Options

Исправления ошибок:

  • Решены проблемы с некорректными динамическими значениями
  • Исправлен Color Transform при прокрутке
  • Устранены проблемы с работой Form Builder в Article Layout и Module Layout Builder
  • Исправлена проблема с созданием ненужных временных файлов при обработке шрифтов

Скачать: https://github.com/templaza/astroid-framework/releases/tag/v3.3.7

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

nik_neman

  • Захожу иногда
  • 52
  • 2 / 0
День добрый.
Возможно ли добавлять несколько  объявлений сразу?
Чтобы нажать типа 'Добавить ещё', заполняешь поля и отправляются несколько объявлений.
Может кто сталкивался?
Заранее спасибо.
*

nik_neman

  • Захожу иногда
  • 52
  • 2 / 0
Данный вопрос по-прежнему актуален.
Пытаюсь сам разобраться - но не получается.
Может кто 'копался в механизме' добавления объявления и может дать хороший совет?
Заранее спасибо.
Adsmanager 2.5.
*

nik_neman

  • Захожу иногда
  • 52
  • 2 / 0
Решил выложить ход своих мыслей.. может быть кто-нибудь подскажет грамотное решение, а то с ООП пока плоховато.
Joomla 1.5.22 + AdsManager 2.5 (работа с поздними версиями обусловлено тем, что ранее не мною на этих версиях был сделан проект + добавлена монетизация).
'Копаться' как я понял нужно в 3 главных файлах - AdsManager.html.php, AdsManager.class.php, AdsManager.php.
В adsmanager.html.php форма с полями(статус, цена, название товара. Но не выбор категории и способ размещения) необходимые для заполнения вызываются с помощью следующей строки.
Код
adsmanager_html::displayFields($row,$default,$fields,$field_values,$catid,$plugins,$conf->opt2);
У меня это 2863 строка, но так как adsmanager.html.php уже изменял под свои нужды, у Вас может быть другой номер строки.
С помощью данной строки
Код
adsmanager_html::displayFields($row,$default,$fields,$field_values,$catid,$plugins,$conf->opt2);
как я понимаю выводиться метод displayFields класса adsmanager_html.
Нашёл я код метода
Код
	function displayFields($row,$default,$fields,$field_values,$catid,$plugins,$bbcodeen)
{
global $mosConfig_live_site,$my;
//
if (isset($fields))
{   
foreach($fields as $field)
{
  if (($catid == 0)||(strpos($field->catsid, ",$catid,")!== false)||(strpos($field->catsid, ",-1,")!== false)){
    if($field->type=='city_region_contry'){
    adsmanager_html::show_ml($type,$row,$field->required,$field->name,$field);
    }else{

$strtitle = adsmanager_html::am_getLangDefinition( $field->title);
if (isset($strtitle)) {
echo "<tr id='tr_".$field->name."'><td>".$strtitle."</td>\n";
$strtitle = htmlspecialchars($strtitle ,ENT_QUOTES);
}
$name = $field->name;
$value = "@\$row->".$field->name;
eval("\$value = \"\".$value;");
$value = adsmanager_html::am_getLangDefinition($value);
if (($value == "")&&($field->profile == 1))
{
$value ="\$default->".$field->name;
eval("\$value = @\"$value\";");
$value = adsmanager_html::am_getLangDefinition($value);
}
$disabled="";
$read_only="";

                                // begin поля для заполнения
                                echo "<td>";
                               
switch($field->type)
{
case 'checkbox':
if ($field->required == 1)
$mosReq = "mosReq='1'";
else
$mosReq = "";

if ($value == 1)
echo "<input class='inputbox' type='checkbox' $mosReq mosLabel='$strtitle' checked='checked' id='$name' name='$name' value='1' />\n";
else
echo "<input class='inputbox' type='checkbox' $mosReq mosLabel='$strtitle' name='$name' id='$name' value='1' />\n";
break;
case 'multicheckbox':
case 'multicheckboximage':
$k = 0;
echo "<table>";
for ($i=0 ; $i < $field->rows;$i++)
{
echo "<tr>";
for ($j=0 ; $j < $field->cols;$j++)
{
echo "<td>";
$fieldvalue = @$field_values[$field->fieldid][$k]->fieldvalue;
$fieldtitle = @$field_values[$field->fieldid][$k]->fieldtitle;
if ($field->type == 'multicheckbox') {
if (isset($fieldtitle))
$fieldtitle=adsmanager_html::am_getLangDefinition($fieldtitle);
}
else
{
$fieldtitle = "<img src='$mosConfig_live_site/images/com_adsmanager/fields/$fieldtitle' alt='$fieldtitle' />";
}
if (isset($field_values[$field->fieldid][$k]->fieldtitle))
{
if (($field->required == 1)&&($k==0))
$mosReq = "mosReq='1'";
else
$mosReq = "";

if ((strpos($value, ",".$fieldvalue.",") === false) &&
(strpos($value, $fieldtitle."|*|") === false) &&
(strpos($value, "|*|".$fieldtitle) === false) &&
($value !=  $fieldtitle))
echo "<input class='inputbox' type='checkbox' $mosReq  mosLabel='$strtitle' id='".$name."[]' name='".$name."[]' value='$fieldvalue' />&nbsp;$fieldtitle&nbsp;\n";
else
echo "<input class='inputbox' type='checkbox' $mosReq  mosLabel='$strtitle' id='".$name."[]' checked='checked' name='".$name."[]' value='$fieldvalue' />&nbsp;$fieldtitle&nbsp;\n";

}
echo "</td>";
$k++;
}
echo "</tr>";
}
echo "</table>";
break;


case 'date':
//mosCommonHTML::loadCalendar();
if ($field->required == 1)
$class= "class='adsmanager_required' mosReq='1' mosLabel='$strtitle'";
else
$class= "class='adsmanager'";

$return = "<input $class type='text' name='$field->name' id='$field->name' size='25' maxlength='19' value='$value' readonly=true/>";
//s5
$return .= '<script type="text/javascript" src="'.$mosConfig_live_site.'/components/com_adsmanager/datePicker/jquery.datePicker.js"></script>
                        <link rel="stylesheet" type="text/css" media="screen" href="'.$mosConfig_live_site.'/components/com_adsmanager/datePicker/datePicker.css">';
$return .= "<input name='reset' type='button' class='button' onclick=\"return displayDatePicker('$field->name', false, 'ymd', '-');\" value='...' />";
//e5
echo $return;
break;

case 'editor':
ob_start();
editorArea( 'editor',  $value, $field->name,null,null, $field->cols, $field->rows);
$return = ob_get_contents();
ob_end_clean();
echo $return;
break;

case 'select':
if ($field->editable == 0)
$disabled = "disabled=true";
else
$disabled = "";

if ($field->required == 1)
echo "<select id='$name' name='$name' mosReq='1' mosLabel='$strtitle' class='adsmanager_required' $disabled>\n";
else
echo "<select id='$name' name='$name' mosLabel='$strtitle' class='adsmanager' $disabled>\n";

if ($value=="")
echo "<option value=''>&nbsp;</option>\n";
if (isset($field_values[$field->fieldid])) {
foreach($field_values[$field->fieldid] as $v)
{
$ftitle = adsmanager_html::am_getLangDefinition($v->fieldtitle);
if (($value == $v->fieldvalue)||($value == $ftitle))
echo "<option value='$v->fieldvalue' selected='selected' >$ftitle</option>\n";
else
echo "<option value='$v->fieldvalue' >$ftitle</option>\n";
}
}

echo "</select>\n";
break;

case 'multiselect':
if ($field->editable == 0)
$disabled = "disabled=true";
else
$disabled = "";
if ($field->required == 1)
echo "<select id=\"".$name."[]\" name=\"".$name."[]\" mosReq='1' mosLabel='$strtitle' multiple='multiple' size='$field->size' class='adsmanager_required' $disabled>\n";
else
echo "<select id='".$name."[]' name=\"".$name."[]\" mosLabel='$strtitle' multiple='multiple' size='$field->size' class='adsmanager' $disabled>\n";

if ($value=="")
// echo "<option value=''>&nbsp;</option>\n";
if (isset($field_values[$field->fieldid])) {
foreach($field_values[$field->fieldid] as $v)
{
$ftitle = adsmanager_html::am_getLangDefinition($v->fieldtitle);
if ($field->required == 1)
$mosReq = "mosReq='1'";

if ((strpos($value, ",".$v->fieldvalue.",") === false) &&
(strpos($value, $ftitle."|*|") === false) &&
(strpos($value, "|*|".$ftitle) === false) &&
($value !=  $ftitle))
echo "<option value='".str_replace("'","\'",$v->fieldvalue)."' >$ftitle</option>\n";
else
echo "<option value='".str_replace("'","\'",$v->fieldvalue)."' selected='selected' >$ftitle</option>\n";
}
}

echo "</select>\n";
break;

case 'textarea':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";
                       
/*  скрытие bb-code
if($bbcodeen==1){
echo '<script  type="text/javascript">function bbc(one,two,conteiner){var el=document.getElementById(conteiner);el.focus();if (el.selectionStart==null){var rng=document.selection.createRange();rng.text=one+rng.text+two;}else{el.value=el.value.substring(0,el.selectionStart)+one+el.value.substring(el.selectionStart,el.selectionEnd)+two+el.value.substring(el.selectionEnd);}}</script>';
    echo str_replace('{name}',"'$name'",ADSMANAGER_BBCODEREDAKTOR).'<br/>';
} */

if ($field->required == 1){
echo "<textarea class='adsmanager_required' mosReq='1' mosLabel='$strtitle' id='$name' name='$name' cols='".$field->cols."' rows='".$field->rows."' wrap='virtual' onkeypress='CaracMax(this);' onchange='CaracMax(this);' onkeyup='CaracMax(this);' maxlength='$field->maxlength' $read_only>$value</textarea>\n";
}else{
echo "<textarea class='adsmanager' id='$name' mosLabel='$strtitle' name='$name' cols='".$field->cols."' rows='".$field->rows."' wrap='virtual' onkeypress='CaracMax(this);' onchange='CaracMax(this);' onkeyup='CaracMax(this);' maxlength='$field->maxlength' $read_only>$value</textarea>\n";
    }
break;

case 'url':
if (($mode == "write")&&($field->editable == 0))
$recontent_only = "readonly=true";
else
$recontent_only = "";

$return = "http://";
if (($mode == "write")&&($field->required == 1))
$return .= "<input class='adsmanager_required' mosReq='1' id='$field->name' type='text' mosLabel='$strtitle' name='$field->name' size='$field->size' maxlength='$field->maxlength' $recontent_only value='".htmlspecialchars($value,ENT_QUOTES)."' />\n";
else
$return .= "<input class='adsmanager' id='$field->name' type='text' name='$field->name' mosLabel='$strtitle' size='$field->size' maxlength='$field->maxlength' $recontent_only value='".htmlspecialchars($value,ENT_QUOTES)."' />\n";
echo $return;
break;

case 'number':
if ($field->editable == 0){
$read_only = "readonly=true";
}else{
$read_only = "";
}

if ($field->required == 1){
echo "<input class='adsmanager_required' mosReq='1' id='$name' type='text' test='number' mosLabel='$strtitle' name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value='$value' />\n";
}else{
echo "<input class='adsmanager' id='$name' type='text' name='$name' test='number' mosLabel='$strtitle' size='$field->size' maxlength='$field->maxlength' $read_only value='$value' />\n";
}
break;
case 'price':
if ($field->editable == 0){
$read_only = "readonly=true";
}else{
$read_only = "";
}
    //p3
if ($field->required == 1){
echo "<input class='adsmanager_required' mosReq='1' id='$name' type='text' test='number' mosLabel='$strtitle' name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value='$value' />\n";
}else{
echo "<input class='adsmanager' id='$name' type='text' name='$name' test='number' mosLabel='$strtitle' size='$field->size' maxlength='$field->maxlength' $read_only value='$value' />\n";
}
if(ADSMANAGER_VAL_CURR_ENABLE==1){
if ($field->required == 1){
    echo "<select class='adsmanager_required' id='pr_$name' name='pr_$name' mosReq='1' mosLabel='$strtitle' class='adsmanager_required' >";
}else{
    echo "<select class='adsmanager' id='pr_$name' name='pr_$name' >";
}
$valuta = explode('|',ADSMANAGER_VAL_CURR);
$taitl = 'pr_'.$name;
for($j=0;$valuta[$j]!=null;$j++){
    if($j==$row->$taitl && $row->$taitl!=null){
    echo "<option value='$j' selected>$valuta[$j]</option>";
}else{
        echo "<option value='$j' >$valuta[$j]</option>";
}
}
echo '</select>';
}
break;
case 'emailaddress':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";

//s7
if($name=='email' && $value==""){
    $value=$my->email; 
}
//e7

if ($field->required == 1)
echo "<input class='adsmanager_required' mosReq='1' id='$name' type='text' test='emailaddress' mosLabel='$strtitle' name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value='$value' />\n";
else
echo "<input class='adsmanager' id='$name' type='text' test='emailaddress' name='$name' mosLabel='$strtitle' size='$field->size' maxlength='$field->maxlength' $read_only value='$value' />\n";
break;

case 'text':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";
//s7
if($name=='name' && $value==""){
    $value=$my->name; 
}
//e7
if ($field->required == 1){
echo "<input class='adsmanager_required' mosReq='1' id='$name' type='text' mosLabel='$strtitle' name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value='".htmlspecialchars($value,ENT_QUOTES)."' />\n";
}else{
echo "<input class='adsmanager' id='$name' type='text' name='$name' mosLabel='$strtitle' size='$field->size' maxlength='$field->maxlength' $read_only value='".htmlspecialchars($value,ENT_QUOTES)."' />\n";
}
break;

case 'radio':
case 'radioimage':
$k = 0;
echo "<table>";
for ($i=0 ; $i < $field->rows;$i++)
{
echo "<tr>";
for ($j=0 ; $j < $field->cols;$j++)
{
echo "<td>";
$fieldvalue = @$field_values[$field->fieldid][$k]->fieldvalue;
$fieldtitle = @$field_values[$field->fieldid][$k]->fieldtitle;
if ($field->type == 'radio') {
if (isset($fieldtitle))
$fieldtitle=adsmanager_html::am_getLangDefinition($fieldtitle);
}
else
{
$fieldtitle="<img src='$mosConfig_live_site/images/com_adsmanager/fields/$fieldtitle' alt='$fieldtitle' />";
}
if (isset($field_values[$field->fieldid][$k]->fieldtitle))
{
if (($field->required == 1)&&($k==0))
$mosReq = "mosReq='1'";
else
$mosReq = "";

if (($value == $fieldvalue)||($value == $fieldtitle))
echo "<input type='radio' $mosReq name='$name' id='$name' mosLabel='$strtitle' value='$fieldvalue' checked='checked' />&nbsp;$fieldtitle&nbsp;\n";
else
echo "<input type='radio' $mosReq name='$name' id='$name' mosLabel='$strtitle' value='$fieldvalue' />&nbsp;$fieldtitle&nbsp;\n";
}
$k++;
echo "</td>";
}
echo "</tr>";
}
echo "</table>";
break;
case 'file':
echo "<input id='$name' type='file' name='$name' mosLabel='$strtitle'/>";
if (isset($value)&&($value != ""))
{
echo "<br/><a href='$mosConfig_live_site/images/com_adsmanager/files/$value' target='_blank'>".ADSMANAGER_DOWNLOAD_FILE."</a>";
}
break;

default:
if(isset($plugins[$field->type]))
{
echo $plugins[$field->type]->getFormDisplay($row->id,$field );
}
}
if ((@$field->description)&&($field->description !="")) {
$fieldTip = str_replace(array('"','<','>',"\\"), array("&quot;","&lt;","&gt;","\\\\"), adsmanager_html::am_getLangDefinition($field->description));
$tipTitle = str_replace(array('"','<','>',"\\"), array("&quot;","&lt;","&gt;","\\\\"), adsmanager_html::am_getLangDefinition($field->title));
$fieldTip = str_replace(array("'","&#039;"), "\\'", $fieldTip);
$tipTitle = str_replace(array("'","&#039;"), "\\'", $tipTitle);
?>
<img src="<?=$mosConfig_live_site;?>/includes/js/ThemeOffice/tooltip.png" alt="tooltip" style="border:0" onmouseover="return overlib('<?php echo $fieldTip ?>', CAPTION, '<?php echo $tipTitle ?>:');" onmouseout="return nd();"  />
<?php
}
echo "";
if (function_exists("checkPaidField"))
{
checkPaidField($field);
}
                               
                                // end поля для заполнения
                               
echo "</td></tr>";

    }
  }
}
?>
<script type="text/javascript">
function updateFields() {
var form = document.adminForm;
var singlecat = 0;
var length = 0;

if ( typeof(document.adminForm.category )!= "undefined" ) {
singlecat = 1;
length = 1;
}
else
{
length = form.selected_cats.length;
}

<?php
foreach($fields as $field)
{
if (strpos($field->catsid, ",-1,") === false)
{
$name = $field->name;
if (($field->type == "multicheckbox")||($field->type == "multiselect"))
$name .= "[]";
?>
var input = document.getElementById('<?php echo $name;?>');
var trzone = document.getElementById('tr_<?php echo $field->name;?>');
if (((singlecat == 0)&&(length == 0))||
    ((singlecat == 1)&&(document.adminForm.category.value == 0)))
{
input.style.visibility = 'hidden';
trzone.style.visibility = 'hidden';
trzone.style.display = 'none';
}
else
{
for (var i=0; i < length; i++) {


var field_<?php echo $field->name;?> = '<?php echo $field->catsid;?>';
var temp;
if (singlecat == 0)
temp = form.selected_cats.options[i].value;
else
temp = document.adminForm.category.value;

var test = field_<?php echo $field->name;?>.indexOf( ","+temp+",", 0 );
if (test != -1)
{
input.style.visibility = 'visible';
trzone.style.visibility = 'visible';
trzone.style.display = '';
break;
}
else
{
input.style.visibility = 'hidden';
trzone.style.visibility = 'hidden';
trzone.style.display = 'none';
}
}
}
<?php
}
}
?>
}
updateFields();
</script>
<?php
}
}

У меня это 1759-2191 строчки в adsmanager.html.php
В данном методе, как бы это правильно сказать, формируются поля для заполнения при подаче объявки.
Решил я проследить как записываються данные в БД.
Начал искать sql запрос в котором был бы оператор INSERT и таблица 'adsmanager_ads'.
В AdsManager.html.php нечего не нашёл.
В файле AdsManager.class.php меня заинтересовал следующий код
Код
class adsManagerAd extends mosDBTable {
var $id= null;
var $userid= null;
var $date_created = null;
var $date_recall = null;
var $expiration_date = null;
var $recall_mail_sent = null;
var $published = null;

var $flag_commercial = null;
var $flag_top = null;
var $style = null;
var $country = null;
var $region = null;
var $city = null;
        var $delcode = null;
var $keywords = null;
var $description = null;
var $tags = null;

        var $reset_style = null;

        function adsManagerAd(&$db){
$this->mosDBTable('#__adsmanager_ads', 'id', $db);
}
}
Загуглил что такое mosDBTable - оказалось что mosDBTable используется для преобразования PHP-объектов в строки таблиц базы данных, по заранее определенным правилам.
Для сохранения используется метод store с классом adsManagerAd.
'Порыскал' в файле AdsManager.php и путём проб выяснил что добавление данных происходит в функции save_ad
Вот код
Код
function save_ad($option,$plugins){
global $database,$mosConfig_absolute_path,$mosConfig_mailfrom,$my,$mosConfig_live_site;

$itemid = intval( mosGetParam( $_GET, 'Itemid', 0 ));

include $mosConfig_absolute_path.'/components/com_adsmanager/black-ip.php';
if(preg_match("/".$_SERVER['REMOTE_ADDR']."/i",$listip,$m)){
    mosRedirect(sefRelToAbs("index.php?option=$option&page=blocked&opt=ip&Itemid=$itemid"));
}
include $mosConfig_absolute_path.'/components/com_adsmanager/spam.php';
if(acjc()==1){
    $vse = preg_replace('/[^a-zA-ZА-Яа-я\s]/u', ' ', implode(',',$_POST));
}else{
    $vse = preg_replace('/[^a-zA-ZА-Яа-я\s]/', ' ', implode(',',$_POST));
}
for($i=0;$listworld[$i]!=null;$i++){
    if(preg_match('/'.$listworld[$i].'/i',$vse,$m)){
        mosRedirect(sefRelToAbs("index.php?option=$option&page=blocked&opt=world&Itemid=$itemid"));
    }
}

// get configuration
$database->setQuery( "SELECT * FROM #__adsmanager_config");
$database->loadObject($conf);
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

if($conf->js_antispam==1){
    if($_POST['_jsas']!='nos'){
    mosRedirect(sefRelToAbs("index.php?option=$option&page=show_front&Itemid=$itemid"),YOU_SPAMMER);
}
}
//Kaptcha
if($my->id==0 && $conf->captcha==1) {
    if(adscheckJoomlaVersion()==0){
    session_start();
    $captcha= mosGetParam($_POST,'captcha');
    if(!isset($_SESSION['captcha_keystring'])||$_SESSION['captcha_keystring']!==$captcha){
    $mosmsg = ADSMANAGER_REG_CODE2;
header('Content-type: text/html; '._ISO);
    echo "<script>alert('$mosmsg');
window.history.go(-1);
</script>\n";
    unset($_SESSION['captcha_keystring']);
    exit();
    }
    session_unset();
    session_write_close();
    }else{
    $captcha = mosGetParam($_POST,'captcha');
    $sess = JFactory::getSession();
    if($sess->get('captcha_keystring')!=$captcha){
    $mosmsg = ADSMANAGER_REG_CODE2;
    header('Content-type: text/html; '._ISO);
    echo "<script>alert('$mosmsg');
window.history.go(-1);
</script>\n";
    $sess->clear('captcha_keystring');
        exit();
    }
    $sess->clear('captcha_keystring');
    }
}
//Kaptcha end


$row = new adsManagerAd($database);
$id = intval(mosGetParam( $_POST, 'id', 0 ));

if (($id == 0)&&($my->id != "0")&&($conf->nb_ads_by_user != -1))
{
$database->setQuery( "SELECT count(*) FROM #__adsmanager_ads as a WHERE a.userid =".$my->id);
$nb = $database->loadResult();
if ($nb >= $conf->nb_ads_by_user)
{
$redirect_text = sprintf(ADSMANAGER_MAX_NUM_ADS_REACHED,$conf->nb_ads_by_user);
mosRedirect(sefRelToAbs("index.php?option=$option&Itemid=$itemid"),$redirect_text);
}
}

// bind it to the table
if (!$row -> bind($_POST)) {
echo "<script> alert('"
.end($row -> getErrors())
."'); window.history.go(-1); </script>\n";
exit();
}                                             

if (($conf->submission_type == 0)&&($my->id == 0))
{
$username = mosGetParam( $_POST, 'username', "" );
$password = mosGetParam( $_POST, 'password', ""  );
$email = mosGetParam( $_POST, 'email', ""  );
$errorMsg = checkAccount($username,$password,$email,$userid,$conf);
if (isset($errorMsg))
{
$catid = intval(mosGetParam( $_POST, 'category', 0 ));
$url = sefRelToAbs("index.php?option=$option&page=write_ad&catid=$catid&Itemid=$itemid");
echo "<form name='form' action='$url' method='post'>";
foreach($_POST as $key=>$val)
{
echo "<input type='hidden' name='$key' value='".htmlentities(stripslashes($val),ENT_QUOTES)."'>";
}
echo "<input type='hidden' name='errorMsg' value='$errorMsg'>";
echo '</form>';
echo '<script language="JavaScript">';
echo 'document.form.submit()';
echo '</script>';
return;
}

$row->userid = $userid;
}
else
{
  //$row->userid = $my->id;
  //s6
  if(mosGetParam($_REQUEST,'isUpdateMode')!=1){
$row->userid = $my->id;  // происходит добавление полей, которые указали в форме добавления (в ЛК сообщение не показывается)
  }
  //e6
}

//get fields
$database->setQuery( "SELECT * FROM #__adsmanager_fields WHERE published = 1");
$fields = $database->loadObjectList();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

$isUpdateMode  = intval(mosGetParam( $_POST, 'isUpdateMode', 0));
if ($isUpdateMode == 0){
if ($conf->auto_publish == 1){
$row->published = 1;
$redirect_text = ADSMANAGER_INSERT_SUCCESSFULL_PUBLISH;
}
else{
$row->published = 0;
$redirect_text = ADSMANAGER_INSERT_SUCCESSFULL_CONFIRM;
}
$row->date_created = date("Y-m-d H:i:s");//Format Y-m-d
/*Delete ad code*/
$delcode = md5(time().rand(0,999));
$row->delcode = $delcode;
/*Delete ad code*/
$sms=check_sms(mosGetParam($_POST,'sms_kod'));
}else{
$redirect_text .= ADSMANAGER_UPDATE_SUCCESSFULL;
    if(check_sms_publ($row->id)){
    $sms=true;
}else{
        $sms=check_sms(mosGetParam($_POST,'sms_kod'));
}
}

    /*Data*/
if(intval(mosGetParam( $_POST, 'srok'))!=null){
$delta = intval(mosGetParam( $_POST, 'srok')); 
}else{
$delta = $conf->ad_duration;
}
$row->expiration_date = date("Y-m-d",mktime()+($delta*24*3600)); // дата создания объявления
/*Data*/

/*SMS*/
if($conf->sms_only==1){
    if($sms!=true){
        $row->published = 0;
}else{
    $row->flag_commercial = 1;
if($conf->sms_top==1){$row->flag_top = 0;} //change this
if($conf->sms_style==1){$row->style = null;} //change this
}
}else{
    if($sms!=true){
        $row->flag_commercial = 0;
        $row->flag_top = 0;
        $row->style = null;
    }else{
    $row->flag_commercial = 1;
if($conf->sms_top==1){$row->flag_top = 0;} //change this
if($conf->sms_style==1){$row->style = null;} //change this
}
}
/*SMS*/

if($conf->days_reset_style>0){
    if($sms==true){
          $row->reset_style = date("Y-m-d",mktime()+($conf->days_reset_style*24*3600));
    }
}

//Add IP adress
$row->ip_address = $_SERVER['REMOTE_ADDR'];

//SEO v2
$texts = am_clean(htmlspecialchars(stripslashes(strip_tags(bb_code(mosGetParam($_POST,'ad_text'),1)))));
$row->description = ads_utf8_substr($texts,0,200);
/*KEY GENERATOR*/
if(acjc()==1){
    $texts = preg_replace('/ {1,}/', ' ', preg_replace('/[^a-zA-ZА-Яа-я\s]/u', ' ', $texts));
}else{
    $texts = preg_replace('/ {1,}/', ' ', preg_replace('/[^a-zA-ZА-Яа-я\s]/', ' ', $texts));
}

    $kword = ads_utf8_strtolower($texts);
$kwords = array_count_values(explode(' ',$kword));

foreach ($kwords as $key => $value){
    if(ads_utf8_strlen(am_clean($key))>3){
$i++;
    if($i<12){
                $keywrd.= am_clean($key).' ';
}
        }
}
$row->tags = mosGetParam($_POST,'tags','');
if($row->tags!=null){$tagtokey=','.$row->tags;};
if(acjc()==1){
$row->keywords = preg_replace('/ {1,}/',',',$keywrd.' '.preg_replace('/[^a-zA-ZА-Яа-я\s]/u', ' ', ads_utf8_strtolower(mosGetParam($_POST,'ad_city').' '.mosGetParam($_POST,'ad_headline')))).$tagtokey;
}else{
$row->keywords = preg_replace('/ {1,}/',',',$keywrd.' '.preg_replace('/[^a-zA-ZА-Яа-я\s]/', ' ', ads_utf8_strtolower(mosGetParam($_POST,'ad_city').' '.mosGetParam($_POST,'ad_headline')))).$tagtokey;
}
$text = "*$row->keywords";
$text = str_replace('*','',str_replace("*,",'',$text));
$row->keywords = str_replace(array(" ,","  ,",", ",",  "),',',str_replace(array("\r\n", "\n", "\r",".","?","'",'"',"$",'&','%'),' ',$text));
    //seo end
// store it in the db
if (!$row -> store()) {
echo "<script> alert('"
.end($row -> getErrors())
."'); window.history.go(-1); </script>\n";
exit();
}


// Add Ad/Category relation
$query = "SELECT catid FROM #__adsmanager_adcat WHERE adid = '$row->id' ";
$database->setQuery($query);
$prevcats = $database->loadResultArray();

$query = "DELETE FROM #__adsmanager_adcat WHERE adid = '$row->id' ";
$database->setQuery($query);
$database->query();

if (function_exists("getMaxCats"))
$maxcats = getMaxCats($conf->nbcats);
else
$maxcats = $conf->nbcats;

if ($maxcats > 1)
{
$selected_cats = mosGetParam( $_POST, "selected_cats", array() );
if (count($selected_cats) > $maxcats)
{
$selected_cats = array_slice ($selected_cats, 0, $maxcats);
}

$query = "INSERT IGNORE INTO #__adsmanager_adcat (`adid`,`catid`) VALUES ";
foreach($selected_cats as $key => $cat)
{
if ($key != 0)
$query .= ",";
$query .= "('$row->id','$cat')";
}
$database->setQuery($query);
$database->query();
}
else
{
$category = mosGetParam( $_POST, "category", 0 );
$query = "INSERT IGNORE INTO #__adsmanager_adcat (`adid`,`catid`) VALUES ('$row->id','$category')";
$database->setQuery($query);
$database->query();
}

if (function_exists("savePaidAd"))
{
if ($maxcats == 1)
{
$selected_cats = array();
$selected_cats[] = $category;
}
$status = savePaidAd($row->id,$row->userid,$isUpdateMode,$errormsg,$conf,$prevcats,$selected_cats);
if ($status == -1)
{
return;
}
else if ($status == -2)
{
$redirect_text = $errormsg;
}
}

$query = "UPDATE #__adsmanager_ads "; // добавляет дату и категорию

$first=0;
if(isset($fields))
{
foreach($fields as $field)
{
if ($field->type == "multiselect")
{
$value = mosGetParam( $_POST, $field->name, array() );
//$valueA = explode("|*|",$value);
$value = ",".implode(',', $value).",";
}
else if (($field->type == "multicheckbox")||($field->type == "multicheckboximage"))
{
$value = mosGetParam( $_POST, $field->name, array() );
$value = ",".implode(',', $value).",";
}
else if ($field->type == "file")
{
if (isset( $_FILES[$field->name]) and !$_FILES[$field->name]['error'] ) {
if ($_FILES[$field->name]['size'] <= $field->size)
{
$database->setQuery( "SELECT ".$field->name." FROM #__adsmanager_ads WHERE id = ".$row->id);
$old_filename = $database->loadResult();
@unlink($mosConfig_absolute_path."/images/com_adsmanager/files/".$old_filename);

$filename = $_FILES[$field->name]['name'];
while(file_exists($mosConfig_absolute_path."/images/com_adsmanager/files/".$filename)){
$filename = "copy_".$filename;
}
@move_uploaded_file($_FILES[$field->name]['tmp_name'],
$mosConfig_absolute_path."/images/com_adsmanager/files/".$filename);
if ($first == 0)
$query .= "SET";
else
$query .= ",";
$first = 1;
$query .= " $field->name = '".$filename."' ";
}
else
{
$redirect_text = ADSMANAGER_FILE_TOO_BIG;
}
}
continue;
}
else if ($field->type == "editor")
{
$value = mosGetParam( $_POST, $field->name, "",_MOS_ALLOWHTML );
}
else if ($field->type == "city_region_contry" && $field->name!="city_region_contry")
{
if ($first == 0)
    $query .= "SET";
    else
    $query .= ",";
    $first = 1;
    $query .= " city$field->name = '".mosGetParam( $_POST, 'city'.$field->name)."',region$field->name = '".mosGetParam( $_POST, 'region'.$field->name)."',country$field->name = '".mosGetParam( $_POST, 'country'.$field->name)."' ";
}
//p3
else if ($field->type == "price" && ADSMANAGER_VAL_CURR_ENABLE==1)
{
    if ($first == 0)
    $query .= "SET";
    else
    $query .= ",";
    $first = 1;
    $query .= " pr_$field->name = '".mosGetParam( $_POST, 'pr_'.$field->name)."' ";
$value = mosGetParam( $_POST, $field->name, "" );
}
//Plugins
else if (isset($plugins[$field->type]))
{
$plugins[$field->type]->onFormSave($row->id,$field->fieldid,$isUpdateMode);
continue;
}
else
{
$value = mosGetParam( $_POST, $field->name, "" );
}

if (!get_magic_quotes_gpc()) {
$value = addslashes( $value );
}

            //s6
            if($field->name=='userid' && $isUpdateMode==1){
            }else{
    if ($first == 0)
    $query .= "SET";
    else
    $query .= ",";
    $first = 1;
    $query .= " $field->name = '".$value."' ";
            }
//e6
}
}
$query .= "WHERE id = ".$row->id;


if ($first != 0)
{
if (function_exists("savePaidFields"))
{
if (savePaidFields($isUpdateMode,$row,$errormsg)!= 0) // Error
{
$redirect_text = $errormsg;
}
else
{
$database->setQuery( $query);
$database->query();
if ($database -> getErrorNum()) {
               echo $database -> stderr();
               return false;
        }
}
}
else
{
$database->setQuery( $query);
$database->query();
if ($database -> getErrorNum()) {
               echo $database -> stderr();
               return false;
        }
}
}

$nbImages = $conf->nb_images;
if($conf->xml_up_url=='standart'){
  for($i = 1 ;$i < $nbImages + 1; $i++)
  {
$ext_name = chr(ord('a')+$i-1);
$cb_image = mosGetParam( $_POST, "cb_image$i", "" );
// image1 delete
if ( $cb_image == "delete") {
$pict = $mosConfig_absolute_path."/images/$option/foto/".$row->id.$ext_name."_t.jpg";
if ( file_exists( $pict)) {
unlink( $pict);
}
$pic = $mosConfig_absolute_path."/images/$option/foto/".$row->id.$ext_name.".jpg";
if ( file_exists( $pic)) {
unlink( $pic);
}
}

if (isset( $_FILES["ad_picture$i"])) {
if ( $_FILES["ad_picture$i"]['size'] > $conf->max_image_size) {
mosRedirect(sefRelToAbs("index.php?option=$option&act=ads&catid=".$row->category."&Itemid=".$itemid), ADSMANAGER_IMAGETOOBIG);
return;
}
}

// image1 upload
if (isset( $_FILES["ad_picture$i"]) and !$_FILES["ad_picture$i"]['error'] ) {
createImageAndThumb($_FILES["ad_picture$i"]['tmp_name'],$row->id.$ext_name.".jpg",$row->id.$ext_name."_t.jpg",
$conf->max_width,
$conf->max_height,
$conf->max_width_t,
$conf->max_height_t,
$conf->tag,
$mosConfig_absolute_path."/images/$option/foto/",
$_FILES["ad_picture$i"]['name']);
}
  }
}else{
  $stamp = mosGetParam( $_POST, 'stamp');
  for($i = 1;$i < $nbImages + 1;$i++){
$pict = $mosConfig_absolute_path."/images/$option/foto/".$stamp."_".$i."_t.jpg";
$pic = $mosConfig_absolute_path."/images/$option/foto/".$stamp."_".$i.".jpg";
if(!file_exists($pic) && file_exists($pict)){
unlink($pict);
}
if(file_exists($pic) && !file_exists($pict)){
unlink($pic);
}
if (file_exists($pict) && file_exists($pic)){
for($b = 1;$b < $nbImages + 1;$b++){
    $ext_name = chr(ord('a')+$b-1);
$newpict = $mosConfig_absolute_path."/images/$option/foto/".$row->id.$ext_name."_t.jpg";
$newpic = $mosConfig_absolute_path."/images/$option/foto/".$row->id.$ext_name.".jpg";
if(!file_exists($newpic) && file_exists($newpict)){
    unlink($newpict);
}
if(file_exists($newpic) && !file_exists($newpict)){
    unlink($newpic);
}
if(!file_exists($newpic) && !file_exists($newpict)){
rename($pict,$newpict);
        rename($pic,$newpic);
break;
}
}
}
  }
}
//Subscribe on new into comments for user ads
if($conf->jcom=='1'){
    $query = "INSERT INTO `#__jcomments_subscriptions`(`object_id`,`object_group`,`name`, `email`, `userid`, `hash`, `published`) VALUES ('".$row->id."','com_adsmanager','".mosGetParam( $_POST, 'name')."','".mosGetParam( $_POST, 'email')."','".$my->id."','".md5(time())."','1')";
    $database->setQuery($query);
    $database->query();
    if ($database -> getErrorNum()) {
    echo $database -> stderr();
    }
}

    //send email
$title = mosGetParam( $_POST, "ad_headline");
$textmail = bb_code(mosGetParam( $_POST, "ad_text", "" ),1);
$textmail = str_replace(array("\r\n", "\n", "\r"), "<br />", $textmail);
$delcode = sefRelToAbs("index.php?option=$option&page=delete_my_ad&code=$delcode&Itemid=$itemid");
$body = str_replace('%delcode%', $delcode, ADS_MOS_MAIL_SHABLON);//Add delete link[$body = sprintf($body,$textmail,$delcode,$mosConfig_live_site)]
$body = str_replace('%text%', $textmail, $body);//Add text ad
$body = str_replace('%title%', $title, $body);//Add title ad
$body = str_replace('%adid%', $row->id, $body);//Add adid ad
if (get_magic_quotes_gpc() == true){
$body = stripslashes( $body );
$title = stripslashes( $title );
}
//Send email admin
if ((($conf->send_email_on_new == 1)&&($isUpdateMode == 0))||(($conf->send_email_on_update == 1)&&($isUpdateMode == 1))){
    sendAdEmail($isUpdateMode,$title,$body,$mosConfig_mailfrom);//4th par. email to send
    }
//Send email user
if($isUpdateMode == 0){
    if (mosGetParam( $_POST, "email")!=''){
    mosMail('support@'.$_SERVER['HTTP_HOST'],$_SERVER['HTTP_HOST'],mosGetParam( $_POST, "email"),ADSMANAGER_EMAIL_NEW_U.$title,$body,1);
}
}

//Check images in ads
$pic = $mosConfig_absolute_path."/images/com_adsmanager/foto/".$row->id."a_t.jpg";
if(file_exists($pic)){
    $database->setQuery( "UPDATE #__adsmanager_ads SET `imgs`='1' WHERE id = '$row->id'");
    $database->query();
}else{
    $database->setQuery( "UPDATE #__adsmanager_ads SET `imgs`='0' WHERE id = '$row->id'");
    $database->query();
}
//Check images in ads

/*sms*/
if($conf->sms_only==1 && $sms!=true){
    mosRedirect(sefRelToAbs("index.php?option=$option&page=show_sms_ad&adid=$row->id&Itemid=$itemid"));
}
/*sms*/

/*Add text ads into content*/
if($conf->letters==1){
if($rolf->ras1!="" && $rolf->ras2!="" && $rolf->ras1!="-1" && $rolf->ras2!="-1"){
$database->setQuery("SELECT * FROM #__adsmanager_ads WHERE id = '$row->id'");
$list = $database->loadObjectList();
foreach($list as $rowa) {}

$database->setQuery("SELECT * FROM #__adsmanager_categories LEFT JOIN #__adsmanager_adcat ON id = catid WHERE adid = '$row->id'");
$list = $database->loadObjectList();
foreach($list as $rolf) {}

$pic = $mosConfig_absolute_path."/images/com_adsmanager/foto/".$rowa->id."a_t.jpg";
if ( file_exists( $pic) && $rowa->imgs==1) {
    $img = "<a href=\"".$mosConfig_live_site."/images/com_adsmanager/foto/".$rowa->id."a.jpg"."\"><img src=\"".$mosConfig_live_site."/images/com_adsmanager/foto/".$rowa->id."a_t.jpg"."\" align=\"right\"/></a>";
}
$pic2 = $mosConfig_absolute_path."/images/com_adsmanager/foto/".$rowa->id."b_t.jpg";
if ( file_exists( $pic2) && $rowa->imgs==1) {
    $img.= "<a href=\"".$mosConfig_live_site."/images/com_adsmanager/foto/".$rowa->id."b.jpg"."\"><img src=\"".$mosConfig_live_site."/images/com_adsmanager/foto/".$rowa->id."b_t.jpg"."\" align=\"right\"/></a>";
}
/*TEXT объявления, будет сохранён как статья*/
$text = '<p class="adsmanager_text">'.$img.bb_code($rowa->ad_text,$conf->opt2).'</p><p><a href="'.sefRelToAbs('index.php?option=com_adsmanager&page=show_ad&adid='.$rowa->id).'">link to ads</a></p>';
    /*Справка
$rolf->ras1 - раздел
$rolf->ras2 - категория
*/
            $database->setQuery("INSERT INTO #__content (title,sectionid,catid,created,created_by,state,introtext,created_by_alias) VALUES('".addslashes($rowa->ad_headline)."','$rolf->ras1','$rolf->ras2','$rowa->date_created ".date('G:i:s')."','$rowa->userid','1','".addslashes($text)."','$rowa->id')");
    $database->query();
if ($database -> getErrorNum()) {
echo $database -> stderr();
    }
//Show post on front page
if(mosGetParam( $_POST, "content_front")==1){
$newid = $database->insertid();
                $database->setQuery("INSERT INTO #__content_frontpage (content_id) VALUES('$newid')");
        $database->query();
if ($database -> getErrorNum()) {
    echo $database -> stderr();
        }
}
}
}
/*Add text ads into content*/

if ($conf->submission_type == 2)
mosRedirect(sefRelToAbs("index.php?option=$option&page=show_all&Itemid=$itemid"),$redirect_text);
else if ($conf->comprofiler == 2)
mosRedirect(sefRelToAbs("index.php?option=com_comprofiler&task=userProfile&tab=AdsManagerTab&Itemid=$itemid"),$redirect_text);
else
mosRedirect(sefRelToAbs("index.php?option=$option&page=show_user&Itemid=$itemid"),$redirect_text);
}
с помощью этого куска кода в БД летит значения заполняемых полей при добавлении объявы
Код
  if(mosGetParam($_REQUEST,'isUpdateMode')!=1){
$row->userid = $my->id;  // происходит добавление полей, которые указали в форме добавления (в ЛК сообщение не показывается)
  }

Добавление даты и категории происходит в других кусках кода функции save_ad

Вот в общем что я 'нарыл'.
Ради интереса в AdsManager.html.php два раза вывел метод displayFields.
Появилось две формы.. заполнил и отправил - добавилось значение только второй формы.

Может кто подскажет(программным кодом или ссылкой) как сделать допустим кнопку 'Добавить ещё', при нажатии на которую повторно вызывался бы метод displayFields, и в БД записывались бы данные всех форм, а не последней.

Заранее спасибо.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Заглушки с http://placehold.it вместо картинок в списке объявлений

Автор efimov777

Ответов: 6
Просмотров: 5557
Последний ответ 12.04.2020, 07:25:59
от Pavel
Хочу уточнить, есть в AdsManager возможность загрузки объявлений с парсера?

Автор DomBeri

Ответов: 3
Просмотров: 9524
Последний ответ 28.03.2019, 17:20:10
от DomBeri
Удалить карту объявлений Google

Автор trel

Ответов: 7
Просмотров: 3853
Последний ответ 25.03.2019, 09:02:25
от Technic
Вывод объявлений в случайном порядке

Автор Sabotage

Ответов: 3
Просмотров: 1674
Последний ответ 28.09.2018, 14:21:05
от Sabotage
Поля в списке объявлений

Автор klekovkinandrey

Ответов: 0
Просмотров: 1407
Последний ответ 17.01.2018, 10:18:34
от klekovkinandrey