I took over a XenForo site a while ago and since a Xenforo upgrade a cron entry has been throwing errors. A fair amount of googling has not got me anywhere and I always feel like I am missing something in terms of Xenforo developer documentation, I never seem to find anything along the lines of "here's how to write a cron task script".
Anyway I modified the failing script to remove the line that I thought was causing the error and now the the script is still failing and Xenforo is raising a warning that a file has unexpected content, presumably because I modified it at the command line rather than via the Admin panel. I couldn't find a way of modifying the cron callback vai the admin panel, is there an "official" way to do it?
The script, below is failing with
Any thoughts, help, pointers to tutorials, etc much appreciated
Anyway I modified the failing script to remove the line that I thought was causing the error and now the the script is still failing and Xenforo is raising a warning that a file has unexpected content, presumably because I modified it at the command line rather than via the Admin panel. I couldn't find a way of modifying the cron callback vai the admin panel, is there an "official" way to do it?
The script, below is failing with
Code:
[E_NOTICE] Trying to get property 'title' of non-object
src/addons/MB/Classifieds/XF/Cron/ArchiveThreads.php:56
Any thoughts, help, pointers to tutorials, etc much appreciated
PHP:
namespace MB\Classifieds\XF\Cron;
use XF\Util\File;
class ArchiveThreads
{
public static function process()
{
$daysBeforeArchive = \XF::options()->mbcl_daysBeforeArchive;
$timeNow = date('l d-m-Y H:i:s');
$timeCode = \XF::$time;
$lastPostDate = ($timeCode - ($daysBeforeArchive * 86400));
self::log("===== Begin archiving classifieds threads =====");
// get all forums and see if they have the archive enabled ticked
// if so, add the forum id to an array
$forumFinder = \XF::finder('XF:Forum');
$classifiedsForums = $forumFinder
->where('mbcl_enabled', 1)
->where('mbcl_archive_forum', '>', 0)
->where('mbcl_complete_prefix', '>', 0)
->fetch();
// process the forums one by one
foreach ($classifiedsForums as $forum)
{
$threadFinder = \XF::finder('XF:Thread');
$threads = $threadFinder
->where('node_id', $forum->node_id)
->where('last_post_date', '<', $lastPostDate)
->where('sticky', 0)
->where('prefix_id', '=', $forum->mbcl_complete_prefix)
->limit(100)
->fetch();
$completedPrefix = \XF::finder('XF:ThreadPrefix')->where('prefix_id', $forum->mbcl_complete_prefix)->fetchOne();
// if there are threads that match the criteria, lets archive them
if (!empty($threads))
{
$numThreads = count($threads);
$destForumId = $forum->mbcl_archive_forum;
$destForum = \XF::finder('XF:Forum')->where('node_id', $destForumId)->fetchOne();
self::log("- Moving "
. $numThreads
. " threads from --- "
. $forum->title
. " to --- "
. $destForum->title
. " ---");
foreach ($threads as $thread)
{
self::log("-- Archiving thread "
. $thread->thread_id
. ", "
. $thread->title);
// Move thread into relevant archive forum
$mover = \XF::app()->service('XF:Thread\Mover', $thread);
$mover->move($destForum);
}
}
}
self::log("===== End archiving classifieds threads =====");
}
private static function log($logEntry)
{
$file = File::canonicalizePath(\XF::app()->config('internalDataPath') . "/" . "cron_MB_Classifieds_Archive_Threads.log");
if ($fp = @fopen($file, ('aw')))
{
fwrite($fp, date('Y-m-d H:i:s') . " " .$logEntry . "\n");
fclose($fp);
return true;
}
}
}