| | |
| | | <?php |
| | | namespace JVBase\rest\routes; |
| | | |
| | | use JVBase\Instance; |
| | | use JVBase\managers\Cache; |
| | | use JVBase\managers\InvitationsManager; |
| | | use JVBase\managers\queue\Queue; |
| | | use JVBase\managers\Roles; |
| | | use JVBase\rest\Rest; |
| | | use JVBase\managers\CustomTable; |
| | | use JVBase\rest\Route; |
| | |
| | | */ |
| | | class Invitations extends Rest |
| | | { |
| | | use Instance; |
| | | protected array $inviteConfig; |
| | | protected CustomTable $table; |
| | | |
| | | protected Cache $termCache; |
| | | public function __construct() |
| | | { |
| | | $this->cacheName = 'invitations'; |
| | | parent::__construct(); |
| | | $this->cache = Cache::for('invitations_posts','post'); |
| | | $this->termCache = Cache::for('invitation_terms', 'term'); |
| | | |
| | | // Get invitation configuration |
| | | $this->inviteConfig = JVB()->invitations()->getInviteConfig(); |
| | | $this->inviteConfig = InvitationsManager::getInstance()->getInviteConfig(); |
| | | $this->table = CustomTable::for('invitations'); |
| | | |
| | | // Cache connections |
| | | $this->cache |
| | | ->connect('user') |
| | | ->connect('taxonomy'); |
| | | } |
| | | |
| | | public function registerRoutes(): void |
| | |
| | | } |
| | | |
| | | $args = [ |
| | | 'user' => $userID, |
| | | 'id' => $userID, |
| | | 'to_term' => $termID, |
| | | 'taxonomy' => $taxonomy ? jvbNoBase($taxonomy) : null, |
| | | 'status' => $request->get_param('status'), |
| | |
| | | ]; |
| | | |
| | | // Check cache |
| | | $key = $this->cache->generateKey($args); |
| | | if ($cached = $this->cache->get($key)) { |
| | | |
| | | if ($cached = $this->cache->get($args)) { |
| | | return $this->success($cached); |
| | | } |
| | | |
| | |
| | | : $this->getUserInvitations($args); |
| | | |
| | | // Cache result |
| | | $this->cache->set($key, $result); |
| | | $this->cache->set($args, $result); |
| | | |
| | | return $this->success($result); |
| | | } |
| | |
| | | /** |
| | | * Get invitations for a specific term |
| | | */ |
| | | protected function getTermInvitations(array $args): array |
| | | public function getTermInvitations(array $args): array |
| | | { |
| | | // Check permission |
| | | if (!JVB()->roles()->isManager($args['user'], $args['to_term'])) { |
| | | if (!Roles::getInstance()()->isManager($args['user'], $args['to_term'])) { |
| | | return $this->forbidden('You cannot view invitations for this ' . $args['taxonomy'])->get_data(); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | // Queue using fluent interface |
| | | $op = JVB()->queue()->add( |
| | | $op = Queue::getInstance()->add( |
| | | 'invitation_create', |
| | | $userID, |
| | | ['invitations' => $validated], |
| | |
| | | */ |
| | | protected function validateInvitations(int $userID, array $invites): array |
| | | { |
| | | return JVB()->invitations()->validateInvitations($userID, $invites); |
| | | return InvitationsManager::getInstance()->validateInvitations($userID, $invites); |
| | | } |
| | | |
| | | |
| | |
| | | return $this->error('Invitation ID required'); |
| | | } |
| | | |
| | | $op = JVB()->queue()->add( |
| | | $op = Queue::getInstance()->add( |
| | | 'invitation_revoke', |
| | | $userID, |
| | | ['invitation_id' => $invitationID], |
| | |
| | | return $this->error('Invitation ID required'); |
| | | } |
| | | |
| | | $op = JVB()->queue()->add( |
| | | $op = Queue::getInstance()->add( |
| | | 'invitation_resend', |
| | | $userID, |
| | | ['invitation_id' => $invitationID], |
| | |
| | | ]; |
| | | |
| | | // Add term information if present |
| | | foreach (JVB()->roles()->getInvitableTaxonomies() as $taxonomy) { |
| | | foreach (Roles::getInstance()()->getInvitableTaxonomies() as $taxonomy) { |
| | | $column = 'to_' . $taxonomy; |
| | | if (isset($invitation->$column) && $invitation->$column) { |
| | | $termID = (int) $invitation->$column; |