Новости Joomla

Joomla REST API без прав суперадминистратора. RBAC в Joomla

Joomla REST API без прав суперадминистратора. RBAC в Joomla

👩‍💻 Joomla REST API без прав суперадминистратора. RBAC в Joomla.На канале известного французского разработчика и специалиста по Joomla REST API Alexandre ELISÉ вышло новое видео.RBAC (Role-Based Access Control) - это управление доступом на основе ролей, метод управления доступом к ресурсам, основанный на назначении ролей пользователям. Вместо назначения прав каждому пользователю точечно права доступа группируются по ролям, а пользователи получают доступ к ресурсам уже в зависимости от своей роли. В контексте Joomla и REST API он может даже мешать работе: без авторизованного пользователя вы не можете даже показать контент. В видео показано как решить данную проблему. Создаётся "технический пользователь", которому разрешается просматривать контент, но не разрешено создавать, редактировать, удалять и т.д. И все запросы к REST API идут с использованием его токена. [fr-FR] Services Web API Joomla SANS être Super Admin RBAC natif avec Joomla@joomlafeed #joomla #разработка #rest

InterLinked - плагин автоматической внутренней перелинковки для Joomla

InterLinked - плагин автоматической внутренней перелинковки для Joomla

👩‍💻 InterLinked - плагин автоматической внутренней перелинковки для Joomla.Несвязанные статьи - это молчаливый убийца привлекательности вашего сайта на Joomla, который заставляет читателей сворачивать работу и подрывает эффективность вашего SEO. Content - InterLinked - это бесплатный, проверенный в боях плагин, который кладет конец этой бессмыслице, автоматически генерируя ссылки на основе ключевых слов между статьями на вашем сайте Joomla 5. Он создает сеть связей, используя ключевые слова статей (metakey) и ассоциации категорий, с настраиваемыми всплывающими подсказками, целевыми объектами ссылок и классами CSS, сохраняя при этом существующие ссылки и повышая производительность за счет кэширования. Кроме того, ссылки со временем меняются по мере того, как в новых статьях используются ключевые слова, что делает ваш контент свежим и актуальным.Возможности.- автоматическая перелинковка на основе значения meta-keywords материалов- встроенная поддержка материалов Joomla- пользовательские ассоциации категорий для создания ссылок (например "Блог" к "Учбеникам")- показ всплывающих подсказок к автоматическим ссылкам (опционально)- настраиваемый атрибут target для ссылок.- указание CSS класса для стилизации ссылок- кэширование совпадений ключевых слов и их ассоциаций- учёт существующих тегов <a> во избежание дублирующих ссылок- автоматическое добавление новых ссылок при появлении новых ассоциаций- веб-доступность: ARIA для ссылок с target="_blank".Плагин бесплатный. Заявлена поддержка Joomla 4 и Joomla 5.Joomla Extensions DirectoryСтраница расширенияСкачать@joomlafeed#joomla #расширения #seo

joomLab Gallery - плагин галереи изображений для Joomla

👩‍💻 joomLab Gallery - плагин галереи изображений для Joomla.Плагин joomLab Gallery позволит Вам добавлять в любой материал неограниченное количество галерей, а главное удобно управлять файлами и эффектами в каждой галерее.Плагин использует популярны скрипты Swiper.js и FancyBox. Первый для крутой организации и эффектов галерей, а второй для красивого и функционального показа оригинальных изображений на Вашем сайте.На данный момент плагин имеет 10 макетов вывода - это 10 различных эффектов галерей и Вы можете совмещать все 10 в 1 материале.Плагин позволяет гибко настраивать индивидуально каждую галерею в материале. Вы можете выбрать макет, эффекты и даже можете управлять функциями всплывающего окна изображения.Недостатки.Такой вид реализации не предусматривает выбор изображения на сервере. Т.е. Вы не можете выбрать уже добавленное фото, только загружать заново. Плагин не предоставляет возможности доступа к медиа-менеджеру.Плагин бесплатный. Разработчик - участник нашего сообщества Александр Новиков (@pro-portal).Страница расширения@joomlafeed#joomla #расширения

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

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
Просмотров: 5250
Последний ответ 12.04.2020, 07:25:59
от Pavel
Хочу уточнить, есть в AdsManager возможность загрузки объявлений с парсера?

Автор DomBeri

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

Автор trel

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

Автор Sabotage

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

Автор klekovkinandrey

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