Решил выложить ход своих мыслей.. может быть кто-нибудь подскажет грамотное решение, а то с ООП пока плоховато.
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' /> $fieldtitle \n";
else
echo "<input class='inputbox' type='checkbox' $mosReq mosLabel='$strtitle' id='".$name."[]' checked='checked' name='".$name."[]' value='$fieldvalue' /> $fieldtitle \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=''> </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=''> </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' /> $fieldtitle \n";
else
echo "<input type='radio' $mosReq name='$name' id='$name' mosLabel='$strtitle' value='$fieldvalue' /> $fieldtitle \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(""","<",">","\\\\"), adsmanager_html::am_getLangDefinition($field->description));
$tipTitle = str_replace(array('"','<','>',"\\"), array(""","<",">","\\\\"), adsmanager_html::am_getLangDefinition($field->title));
$fieldTip = str_replace(array("'","'"), "\\'", $fieldTip);
$tipTitle = str_replace(array("'","'"), "\\'", $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, и в БД записывались бы данные всех форм, а не последней.
Заранее спасибо.