Сначало хотелось бы поблагодарить автора за его работу.
Специально зарегистрировался на форуме для того, что бы поучаствовать в именно этой дискуссии.
Прошу строго не судить, я с php и Joomla! начал знакомство пару месяцев назад.
Уважаемый автор разработки, не могли бы вы все таки немного разделить
обработчик onAjaxRadicalform() хотя бы на фронт и административную часть.
Разбираться новичкам как там все работает трудновато.
Вникать в код начал поскольку самому надо написать плагин для Joomla,
по чтению и записи данных в дополнительные таблицы сайта.
Неплохо было бы для административной части функционала плагина хотя бы проверять
авторизацию. Я не разобрался до конца с привелегиями, но хотябы так
в onAjaxRadicalform().
$user = JFactory::getUser();
If (!$user->id && $this->app->isClient('administrator'))
return 'access denited';
А то к примеру вот такой командой можно очистить логи
удалено модераторомбез всякой авторизации.
Для получения последнего номера в логе как мне кажется может не стоит читать весь лог,
fgetcsv($handle, 200000, $delimiter), и обходить потом его в цикле.
Могу предложить решение звезд с неба не хватающее,
public function getLastLogNumber($delimiter = ';') {
$MAX_LEN = 20000;
$latestNumber = 1;
$log_path = str_replace('\\', '/', Factory::getConfig()->get('log_path')). '/plg_system_radicalform.php';
if (!file_exists($log_path) || !is_readable($log_path))
return $latestNumber;
if(($fsize = filesize($log_path))<$MAX_LEN){
$MAX_LEN = $fsize;
}
if ($handle = fopen($log_path, "r")) {
$seek = fseek($handle, -$MAX_LEN, SEEK_END); // установим указатель чтения на максимальную длину строки от конца файла
$log = fread($handle, $MAX_LEN); // прочитаем данные от указателя до конца файла
fclose($handle);
//$lastpos = strripos($log, PHP_EOL ) + 1;
//PHP_EOL - одни проблемы в винде!
$lastpos = strripos($log, "\n") + 1;
$last_string = substr($log, $lastpos); // найдем позицию последнего вхождения символа "конца_строки" и выберем подстроку начиная со следующего символа
$item = str_getcsv($last_string,"\t");
$json = json_decode($item[2], true);
if (isset($json["rfLatestNumber"])) {
$latestNumber = $json["rfLatestNumber"];
}
return $latestNumber;
}
}
Надеюсь пост окажется полезен.