Jake Vanderwerf
2 days ago 235ce5716edc2f7cbe80fdccf26eac7269587839
inc/managers/FavouritesManager.php
@@ -29,7 +29,7 @@
   }
      private function defineFavouriteTable():void
      {
         $table = CustomTable::for('favourites');
         $table = CustomTable::for('favourites', true);
         $table->setColumns([
            'id'     => 'bigint(20) unsigned NOT NULL AUTO_INCREMENT',
@@ -461,6 +461,115 @@
            'status' => $accept ? 'accepted' : 'rejected',
         ], $args);
      }
      public function getFavourites(array $args = []):array
      {
         return $this->favourites->getMany($args, false);
      }
      public function getLists(array $args = []):array
      {
         return $this->lists->getMany($args, false);
      }
         public function getAvailableLists(array $args = [], bool $include_shared = true):array
         {
            $lists = [];
            $owned = $this->lists->getMany($args, false);
            foreach ($owned['items'] as &$list) {
               $list['item_count'] = $this->listItems->count(['list_id' => $list['id']]);
            }
            $lists['owned'] = $owned;
            if ($include_shared) {
               $args['where']['status'] = 'accepted';
               $sharedLists = $this->listShares->getMany($args);
               $shared = [];
               foreach ($sharedLists as $share) {
                  $sharedList = $this->lists->get(['id' => $share->list_id]);
                  if ($sharedList) {
                     $sharedList['owner_name'] = jvbGetUsername($sharedList['user_id']);
                     $sharedList['item_count'] = $this->listItems->count(['list_id' => $sharedList['id']]);
                     $sharedList['permission_type'] = $sharedList->permission_type;
                     $shared[] = $sharedList;
                  }
               }
               $lists['shared'] = $shared;
            }
            return $lists;
         }
         public function userOwnsList(int $list_id, int $user_id):bool
         {
            return $this->lists->count(['id' => $list_id, 'user_id' => $user_id]) > 0;
         }
         public function getListDetails(int $list_id, int $user_id, int $page = 1):array
         {
            $list = JVB()->favourites()->getLists(['id' => $list_id, 'user_id' => $user_id]);
            if (!$list) {
               return [];
            }
            $items = $this->listItems->getMany([
               'where'  => ['list_id' => $list_id],
               'order_by'  => 'added_at',
               'order'     => 'DESC',
               'per_page'  => 25,
               'page'      => $page,
            ]);
            $formatted = [];
            foreach($items as $item) {
               //See if we can get the actual favourite record first
               if ($item->favourite_id) {
                  $fav = $this->favourites->get(['id' => $item->favourite_id]);
                  if ($fav) {
                     $formatted[] = $fav;
                     continue;
                  }
               }
               //Create a dummy favourite object otherwise
               $formatted[] = (object) [
                  'type'      => $item->item_type,
                  'target_id' => $item->item_id,
                  'created_at'=> $item->added_at
               ];
            }
            $sharedWith = [];
            $is_owner = $this->userOwnsList($list_id, $user_id);
            if ($is_owner) {
               $shares = $this->listShares->getMany([
                  'where' => ['list_id' => $list_id],
                  'order_by' => 'created_at',
                  'order'  => 'DESC'
               ]);
               foreach ($shares as $share_item) {
                  $user = [
                     'email'     => $share_item->email,
                     'status' => $share_item->status,
                     'date_added'=> $share_item->created_at,
                  ];
                  if ($share_item->status === 'accepted' && $share_item->user_id) {
                     $user['name'] = jvbGetUsername($share_item->user_id);
                     $user['permission_type'] = $share_item->permission_type;
                  }
                  $sharedWith[] = $user;
               }
            }
            return [
               'id'  => (int)$list['id'],
               'name'   => $list['name'],
               'description'  => $list['description']??'',
               'created_at'   => $list['created_at'],
               'is_owner'     => $is_owner,
               'items'        => $formatted,
               'shared_users' => $sharedWith
            ];
         }
   /***************************************************************
    * UTILITY METHODS
    **************************************************************/