Предлагаю разработанное мной решение по удалению всех устаревших объявлений и их "хвостов" в виде фотографий, приаттаченных (добавленных) к соответствующим объявлениям.
Методика: Поиск и отбор истекших объявлений в базе по дате срока истечения актуальности, поиск соответствующих привязанных к ним фотографиям и "живое" удаление как из базы, так и с хоста.
Доработка заключается в правке файлов (бэкэнда) админской части компонента Adsmanager.
Вот собственно код:
1. Открываем
\administrator\components\com_adsmanager2. Файл
admin.adsmanager.phpИщем строку:
case "tools":Переписываем все что ниже таким образом:
case "tools":
{
switch($task) {
case "installjoomfish":
installJoomfish($option);
break;
case "installsef":
installSEF($option);
break;
case "displayMarketplace":
displayConvertMarketplace($option);
break;
case "importMarketplace":
importMarketplace($option);
break;
case "delexpads":
deleteExpAds($option);
break;
default:
displayTools($option);
break;
}
}
Таким образом мы добавили новый action для компонента
delexpads.
3. Далее дописываем в конец файла новую функцию для обработки сего экшна.
function deleteExpAds ($option ) {
global $database, $mosConfig_live_site, $mosConfig_absolute_path;
$database->setQuery( "SELECT * FROM #__adsmanager_config");
$database->loadObject($conf);
$nbImages = $conf->nb_images;
$sqlGetExpired = "SELECT a.id as id FROM #__adsmanager_ads as a WHERE a.date_recall < CURRENT_DATE ";
$database->setQuery($sqlGetExpired);
$expiredAds = $database->loadObjectList();
$countExp = sizeof($expiredAds);
if ($countExp > 0) {
$delSQL = array();
foreach($expiredAds as $row) {
$delSQL[] = $row->id;
for($i = 1 ;$i < $nbImages + 1; $i++) {
$ext_name = chr(ord('a')+$i-1);
$pic = $mosConfig_absolute_path."/images/com_adsmanager/foto/".$row->id.$ext_name.".jpg";
$pic2 = $mosConfig_absolute_path."/images/com_adsmanager/foto/".$row->id.$ext_name."_t.jpg";
print $pic.'<br>';
if ( file_exists( $pic)) {
@unlink($pic);
}
if ( file_exists( $pic2)) {
@unlink($pic2);
}
}
}
$sqlGoToDel = "DELETE FROM #__adsmanager_ads WHERE id IN (".implode(',',$delSQL).")";
$database->setQuery($sqlGoToDel);
$database->query();
mosRedirect( "index2.php?option=$option&act=tools", ADSMANAGER_TOOLS_EXDELETEEXPADS_DELETED);
} else {
mosRedirect( "index2.php?option=$option&act=tools", ADSMANAGER_TOOLS_EXDELETEEXPADS_NONE);
}
}
4. Открываем
admin.adsmanager.html.phpИщем строку:
function displayTools($option){
?>
<?php HTML_adsmanager::header($option,ADSMANAGER_TOOLS_MAIN_PAGE); ?>
<div style="text-align:left">
<url>
...
</url>
Переписываем <ul>..</ul> на:
<ul>
<li><b><a href="index2.php?option=<?php echo $option; ?>&act=tools&task=delexpads"><?php echo ADSMANAGER_TOOLS_EXDELETEEXPADS;?></a></b></li>
<li><a href="index2.php?option=<?php echo $option; ?>&act=tools&task=displayMarketplace"><?php echo ADSMANAGER_CONVERT_MARKETPLACE;?></a></li>
<li><a href="index2.php?option=<?php echo $option; ?>&act=tools&task=installjoomfish"><?php echo ADSMANAGER_INSTALL_JOOMFISH;?></a></li>
<li><a href="index2.php?option=<?php echo $option; ?>&act=tools&task=installsef"><?php echo ADSMANAGER_INSTALL_SEF;?></a></li>
</ul>
5. Открываем наши файлы локализации:
\components\com_adsmanager\lang\lang_russian.phpДописываем в конец файла:
DEFINE('ADSMANAGER_TOOLS_EXDELETEEXPADS', 'Удалить УСТАРЕВШИЕ и ПРОСРОЧЕННЫЕ объявления');
DEFINE('ADSMANAGER_TOOLS_EXDELETEEXPADS_DELETED', 'УСТАРЕВШИЕ объявления были УДАЛЕНЫ!');
DEFINE('ADSMANAGER_TOOLS_EXDELETEEXPADS_NONE', 'УСТАРЕВШИХ объявления не найдено.');
Ну вот и готово. Теперь можно пользоваться доработкой.
P.S.: Далее можно автоматизировать данную функцию для запуска по
cron-у. Отзывы и пожелания приветствуются.