feat: round 3 helpers — 1 new files
Universal: Auto Version Bump / Version Bump (push) Successful in 9s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Failing after 12s

This commit is contained in:
Jonathan Miller
2026-06-21 17:43:34 -05:00
parent 929fe5d267
commit f6d85a3edf
@@ -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() ?: [];
}
}