feature/RVRNEXT-11-events #54
							
								
								
									
										107
									
								
								src/PersistentData/Model/Event.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								src/PersistentData/Model/Event.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,107 @@ | |||||||
|  | <?php namespace RVR\PersistentData\Model; | ||||||
|  | 
 | ||||||
|  | use DateTime; | ||||||
|  | use SokoWeb\PersistentData\Model\ModelWithSlug; | ||||||
|  | 
 | ||||||
|  | class Event extends ModelWithSlug | ||||||
|  | { | ||||||
|  |     protected static string $table = 'events'; | ||||||
|  | 
 | ||||||
|  |     protected static array $fields = ['community_id', 'start', 'end', 'title', 'description']; | ||||||
|  | 
 | ||||||
|  |     protected static array $relations = ['community' => Community::class]; | ||||||
|  | 
 | ||||||
|  |     protected static string $slugSource = 'title'; | ||||||
|  | 
 | ||||||
|  |     private ?Community $community = null; | ||||||
|  | 
 | ||||||
|  |     private int $communityId; | ||||||
|  | 
 | ||||||
|  |     private DateTime $start; | ||||||
|  | 
 | ||||||
|  |     private DateTime $end; | ||||||
|  | 
 | ||||||
|  |     private string $title = ''; | ||||||
|  | 
 | ||||||
|  |     private string $description = ''; | ||||||
|  | 
 | ||||||
|  |     public function setCommunity(Community $community): void | ||||||
|  |     { | ||||||
|  |         $this->community = $community; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setCommunityId(int $communityId): void | ||||||
|  |     { | ||||||
|  |         $this->communityId = $communityId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setStartDate(DateTime $start): void | ||||||
|  |     { | ||||||
|  |         $this->start = $start; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setStart(string $start): void | ||||||
|  |     { | ||||||
|  |         $this->start = new DateTime($start); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setEndDate(DateTime $end): void | ||||||
|  |     { | ||||||
|  |         $this->end = $end; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setEnd(string $end): void | ||||||
|  |     { | ||||||
|  |         $this->end = new DateTime($end); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setTitle(string $title): void | ||||||
|  |     { | ||||||
|  |         $this->title = $title; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function setDescription(string $description): void | ||||||
|  |     { | ||||||
|  |         $this->description = $description; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getCommunity(): ?Community | ||||||
|  |     { | ||||||
|  |         return $this->community; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getCommunityId(): int | ||||||
|  |     { | ||||||
|  |         return $this->communityId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getStartDate(): DateTime | ||||||
|  |     { | ||||||
|  |         return $this->start; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getStart(): string | ||||||
|  |     { | ||||||
|  |         return $this->start->format('Y-m-d H:i:s'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getEndDate(): DateTime | ||||||
|  |     { | ||||||
|  |         return $this->end; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getEnd(): string | ||||||
|  |     { | ||||||
|  |         return $this->end->format('Y-m-d H:i:s'); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getTitle(): string | ||||||
|  |     { | ||||||
|  |         return $this->title; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getDescription(): string | ||||||
|  |     { | ||||||
|  |         return $this->description; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										89
									
								
								src/Repository/EventRepository.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								src/Repository/EventRepository.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | |||||||
|  | <?php namespace RVR\Repository; | ||||||
|  | 
 | ||||||
|  | use Container; | ||||||
|  | use DateTime; | ||||||
|  | use Generator; | ||||||
|  | use RVR\PersistentData\Model\Community; | ||||||
|  | use RVR\PersistentData\Model\Event; | ||||||
|  | use RVR\PersistentData\Model\User; | ||||||
|  | use SokoWeb\Database\Query\Select; | ||||||
|  | 
 | ||||||
|  | class EventRepository | ||||||
|  | { | ||||||
|  |     public function getById(int $id): ?Event | ||||||
|  |     { | ||||||
|  |         return Container::$persistentDataManager->selectFromDbById($id, Event::class); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getBySlug(string $slug): ?Event | ||||||
|  |     { | ||||||
|  |         return \Container::$persistentDataManager->selectFromDbBySlug($slug, Event::class); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getAllByCommunity(Community $community, bool $useRelations = false, array $withRelations = []): Generator | ||||||
|  |     { | ||||||
|  |         $select = $this->selectAllByCommunity($community); | ||||||
|  | 
 | ||||||
|  |         yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function countAllByCommunity(Community $community): int | ||||||
|  |     { | ||||||
|  |         return $this->selectAllByCommunity($community)->count(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getUpcomingByCommunity(Community $community, DateTime $from, int $limit, bool $useRelations = false, array $withRelations = []): Generator | ||||||
|  |     { | ||||||
|  |         $select = $this->selectAllByCommunity($community); | ||||||
|  |         $select->where('end', '>', $from->format('Y-m-d H:i:s')); | ||||||
|  |         $select->orderBy('start', 'ASC'); | ||||||
|  |         $select->limit($limit, 0); | ||||||
|  | 
 | ||||||
|  |         yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getUpcomingByUser(User $user, DateTime $from, int $limit, bool $useRelations = false, array $withRelations = []): Generator | ||||||
|  |     { | ||||||
|  |         $select = $this->selectAllByUser($user); | ||||||
|  |         $select->where('end', '>', $from->format('Y-m-d H:i:s')); | ||||||
|  |         $select->orderBy('start', 'ASC'); | ||||||
|  |         $select->limit($limit, 0); | ||||||
|  | 
 | ||||||
|  |         yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function getPagedByCommunity(Community $community, int $start, int $limit, bool $useRelations = false, array $withRelations = []): Generator | ||||||
|  |     { | ||||||
|  |         $select = $this->selectAllByCommunity($community); | ||||||
|  |         $select->orderBy('start', 'DESC'); | ||||||
|  |         $select->limit($limit, $start); | ||||||
|  | 
 | ||||||
|  |         yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public function searchByTitle(Community $community, string $title): Generator | ||||||
|  |     { | ||||||
|  |         $select = $this->selectAllByCommunity($community); | ||||||
|  |         $select->where('title', 'LIKE', '%' . $title . '%'); | ||||||
|  |         $select->orderBy('start', 'DESC'); | ||||||
|  |         $select->limit(10); | ||||||
|  | 
 | ||||||
|  |         yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private function selectAllByCommunity(Community $community) | ||||||
|  |     { | ||||||
|  |         $select = new Select(Container::$dbConnection, Event::getTable()); | ||||||
|  |         $select->where('community_id', '=', $community->getId()); | ||||||
|  |         return $select; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private function selectAllByUser(User $user) | ||||||
|  |     { | ||||||
|  |         $select = new Select(Container::$dbConnection, Event::getTable()); | ||||||
|  |         $select->innerJoin('communities', ['communities', 'id'], '=', ['events', 'community_id']); | ||||||
|  |         $select->innerJoin('community_members', ['communities', 'id'], '=', ['community_members', 'community_id']); | ||||||
|  |         $select->where(['community_members', 'user_id'], '=', $user->getId()); | ||||||
|  |         return $select; | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user