generated from MokoConsulting/Template-Joomla
feat: round 3 helpers — 1 new files
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
namespace Moko\Plugin\System\MokoSuiteRealty\Helper;
|
||||
|
||||
defined('_JEXEC') or die;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use Joomla\Database\DatabaseInterface;
|
||||
|
||||
/**
|
||||
* Open house management — events, visitor sign-in, lead capture.
|
||||
*/
|
||||
class OpenHouseHelper
|
||||
{
|
||||
public static function schedule(int $listingId, string $date, string $startTime, string $endTime): object
|
||||
{
|
||||
$db = Factory::getContainer()->get(DatabaseInterface::class);
|
||||
|
||||
$event = (object) [
|
||||
'listing_id' => $listingId,
|
||||
'event_date' => $date,
|
||||
'start_time' => $startTime,
|
||||
'end_time' => $endTime,
|
||||
'status' => 'scheduled',
|
||||
'created_at' => Factory::getDate()->toSql(),
|
||||
];
|
||||
|
||||
$db->insertObject('#__mokosuiterealty_open_houses', $event, 'id');
|
||||
return (object) ['success' => true, 'open_house_id' => (int) $event->id];
|
||||
}
|
||||
|
||||
public static function signIn(int $openHouseId, string $name, string $email, ?string $phone = null): object
|
||||
{
|
||||
$db = Factory::getContainer()->get(DatabaseInterface::class);
|
||||
$filter = \Joomla\Filter\InputFilter::getInstance();
|
||||
|
||||
$visitor = (object) [
|
||||
'open_house_id' => $openHouseId,
|
||||
'name' => $filter->clean($name, 'STRING'),
|
||||
'email' => $filter->clean($email, 'EMAIL'),
|
||||
'phone' => $phone ? $filter->clean($phone, 'STRING') : null,
|
||||
'signed_in_at' => Factory::getDate()->toSql(),
|
||||
];
|
||||
|
||||
$db->insertObject('#__mokosuiterealty_open_house_visitors', $visitor, 'id');
|
||||
return (object) ['success' => true, 'visitor_id' => (int) $visitor->id];
|
||||
}
|
||||
|
||||
public static function getVisitors(int $openHouseId): array
|
||||
{
|
||||
$db = Factory::getContainer()->get(DatabaseInterface::class);
|
||||
|
||||
$db->setQuery($db->getQuery(true)
|
||||
->select('*')
|
||||
->from('#__mokosuiterealty_open_house_visitors')
|
||||
->where('open_house_id = ' . (int) $openHouseId)
|
||||
->order('signed_in_at ASC'));
|
||||
|
||||
return $db->loadObjectList() ?: [];
|
||||
}
|
||||
|
||||
public static function getUpcoming(int $days = 14): array
|
||||
{
|
||||
$db = Factory::getContainer()->get(DatabaseInterface::class);
|
||||
|
||||
$db->setQuery($db->getQuery(true)
|
||||
->select('oh.*, l.address, l.city, l.price, cd.name AS agent_name')
|
||||
->select('(SELECT COUNT(*) FROM #__mokosuiterealty_open_house_visitors v WHERE v.open_house_id = oh.id) AS visitor_count')
|
||||
->from($db->quoteName('#__mokosuiterealty_open_houses', 'oh'))
|
||||
->join('INNER', $db->quoteName('#__mokosuiterealty_listings', 'l') . ' ON l.id = oh.listing_id')
|
||||
->join('LEFT', $db->quoteName('#__contact_details', 'cd') . ' ON cd.id = l.agent_id')
|
||||
->where('oh.event_date BETWEEN ' . $db->quote(date('Y-m-d')) . ' AND ' . $db->quote(date('Y-m-d', strtotime("+{$days} days"))))
|
||||
->where($db->quoteName('oh.status') . ' = ' . $db->quote('scheduled'))
|
||||
->order('oh.event_date ASC, oh.start_time ASC'));
|
||||
|
||||
return $db->loadObjectList() ?: [];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user