Jake Vanderwerf
2026-08-28 a9654f00c8fbc9934289d761843ddd071025013f
inc/rest/routes/ShopRoutes.php
@@ -1,11 +1,15 @@
<?php
namespace JVBase\rest\routes;
use JVBase\JVB;
use JVBase\managers\Emails;
use JVBase\managers\Errors;
use JVBase\managers\ImageGenerator;
use JVBase\managers\NotificationManager;
use JVBase\managers\queue\Queue;
use JVBase\managers\UploadManager;
use JVBase\registrar\Registrar;
use JVBase\rest\RestRouteManager;
use JVBase\meta\MetaManager;
use JVBase\meta\Meta;
use WP_REST_Request;
use WP_REST_Response;
use WP_Error;
@@ -16,6 +20,7 @@
}
/***
 * @deprecated
 * WORKFLOW:
 *      1) Users with 'manage_shop' permissions can invite folks to this shop
 *      2) If user is already a registered member:
@@ -102,12 +107,11 @@
            ]);
        }
        $queue = JVB()->queue();
        $queue = Queue::getInstance();
        unset($data['user']);
        $operationID = $data['id'];
        unset($data['id']);
        $data = json_encode($data);
        $queue->queueOperation(
            'shop_update',
@@ -148,8 +152,8 @@
            ];
        }
        $meta = new MetaManager($shop, BASE.'shop');
      $allowed = jvbGetFields('shop', 'term');
        $meta = Meta::forTerm($shop);
      $allowed = Registrar::getFieldsFor('shop');
      $setData = array_filter(
         $data,
         function ($key) use ($allowed) {
@@ -161,18 +165,18 @@
      foreach ($setData as $name => $value) {
         if ($name === 'shop') {
            JVB()->routes('shop')->requestShopAdmission($operation->user_id, $value);
            $this->requestShopAdmission($operation->user_id, $value);
            $setData['requested_shop'] = $value;
            unset($setData['shop']);
         }
         if (array_intersect(array_keys($data), ['image_portrait', 'shop', 'city', 'type', 'top_style','display_name'])) {
                if (array_key_exists('image_portrait', $data) || $meta->getValue('image_portrait') !== '') {
                if (array_key_exists('image_portrait', $data) || $meta->get('image_portrait') !== '') {
                    $this->checkGenerateThumbnail($user_id, $this->buildThumbnailData($user_id));
                }
            }
      }
      $results = $meta->setAll($setData);
      $meta->setAll($setData);
//        $results = [];
//
@@ -184,13 +188,13 @@
//            } else {
//                if ($name === 'shop') {
//                    JVB()->routes('shop')->requestShopAdmission($operation->user_id, $value);
//                    $results[] = $meta->updateValue('requested_shop', $value);
//                    $results[] = $meta->set('requested_shop', $value);
//                }
//
//            }
//
//            if (array_intersect(array_keys($data), ['image_portrait', 'shop', 'city', 'type', 'top_style','display_name'])) {
//                if (array_key_exists('image_portrait', $data) || $meta->getValue('image_portrait') !== '') {
//                if (array_key_exists('image_portrait', $data) || $meta->get('image_portrait') !== '') {
//                    $this->checkGenerateThumbnail($user_id, $this->buildThumbnailData($user_id));
//                }
//            }
@@ -226,8 +230,8 @@
            $data['name'] = $shop->name;
        }
        if (!array_key_exists('city', $data)) {
            $meta = new MetaManager($data['shop'], 'term');
            $city = $meta->getValue('city');
            $meta = Meta::forTerm($data['shop']);
            $city = $meta->get('city');
            if ($city !== '') {
                $city = get_term($city, BASE.'city');
                if ($city && !is_wp_error($city)) {
@@ -237,7 +241,7 @@
                }
            }
        }
        $queue = JVB()->queue();
        $queue = Queue::getInstance();
        $queue->queueOperation(
            'shop_image',
            $user_id,
@@ -259,7 +263,7 @@
            return $result;
        }
        $data['imageType'] = 'shop';
        $fileGenerator = new UploadManager('shop', $operation->user_id);
        $fileGenerator = UploadManager::getInstance(); //('shop', $operation->user_id);
        $generator = new ImageGenerator($data, $fileGenerator);
        $result = $generator->generate();
        if ($result['success']) {
@@ -531,7 +535,7 @@
            return;
        }
        // Get shop managers
        $shopMeta = new MetaManager($shopID, 'term');
        $shopMeta = Meta::forTerm($shopID, 'term');
      $owners = $shopMeta->getAll(['managers', 'owner']);
        $owners = array_unique(array_merge($owners['managers'], $owners['owner']));
@@ -541,19 +545,20 @@
        $shop_name = get_term($shopID, BASE . 'shop')->name;
        // Notify each manager
        foreach ($owners as $owner) {
            JVB()->notification()->addNotification(
                $owner,
                'artist_request',
                [
                    'artist_id' => $artistID,
                    'artist_name' => $artist_name,
                    'user_id' => $userID,
                    'shop_id' => $shopID,
                    'shop_name' => $shop_name
                ]
            );
        }
      //TODO
//        foreach ($owners as $owner) {
//            NotificationManager::getInstance()->addNotification(
//                $owner,
//                'artist_request',
//                [
//                    'artist_id' => $artistID,
//                    'artist_name' => $artist_name,
//                    'user_id' => $userID,
//                    'shop_id' => $shopID,
//                    'shop_name' => $shop_name
//                ]
//            );
//        }
    }
    /**
@@ -677,16 +682,17 @@
        $invitation_id = $wpdb->insert_id;
        // If user exists, send notification through the system
        if ($existing_user_id) {
            JVB()->notification()->addNotification(
                $existing_user_id,
                'artist_invitation',
                $manager_id,
                sprintf('You have been invited to join %s', get_term($shop_id, BASE . 'shop')->name),
                $invitation_id,
                'invitation'
            );
        }
      //TODO
//        if ($existing_user_id) {
//            NotificationManager::getInstance()->addNotification(
//                $existing_user_id,
//                'artist_invitation',
//                $manager_id,
//                sprintf('You have been invited to join %s', get_term($shop_id, BASE . 'shop')->name),
//                $invitation_id,
//                'invitation'
//            );
//        }
        // Send email invitation
        $this->sendInvitationEmail($artist_email, $artist_name, $manager_id, $shop_id, $token);
@@ -735,7 +741,7 @@
            esc_url($invitation_url)
        );
        return JVB()->email()->sendEmail($email, $subject, $message);
        return Emails::getInstance()->sendEmail($email, $subject, $message);
    }
    /**
@@ -798,16 +804,17 @@
        // If invitation was for an existing user, notify them
        $user_id = email_exists($invitation->email);
        if ($user_id) {
            JVB()->notification()->addNotification(
                $user_id,
                'invitation_revoked',
                $manager_id,
                sprintf('Your invitation to %s has been revoked', get_term($shop_id, BASE . 'shop')->name),
                $shop_id,
                BASE . 'shop'
            );
        }
      //TODO
//        if ($user_id) {
//            NotificationManager::getInstance()->addNotification(
//                $user_id,
//                'invitation_revoked',
//                $manager_id,
//                sprintf('Your invitation to %s has been revoked', get_term($shop_id, BASE . 'shop')->name),
//                $shop_id,
//                BASE . 'shop'
//            );
//        }
        return new WP_REST_Response([
            'success' => true,
@@ -867,15 +874,16 @@
        // Notify the artist
        $notification_type = $status === 'accepted' ? 'shop_accepted' : 'shop_rejected';
        JVB()->notification()->addNotification(
            $request->user_id,
            $notification_type,
            [
                'shop_id' => $request->shop_id,
                'shop_name' => get_term($request->shop_id, BASE . 'shop')->name,
                'notes' => $notes
            ]
        );
      //TODO
//        NotificationManager::getInstance()->addNotification(
//            $request->user_id,
//            $notification_type,
//            [
//                'shop_id' => $request->shop_id,
//                'shop_name' => get_term($request->shop_id, BASE . 'shop')->name,
//                'notes' => $notes
//            ]
//        );
        return new WP_REST_Response([
            'success' => true,
@@ -985,34 +993,34 @@
            }
            // Notify inviters
            $inviters = json_decode($invitation['inviters'], true);
            if (!empty($inviters)) {
                foreach ($inviters as $inviter_id) {
                    JVB()->notification()->addNotification(
                        $inviter_id,
                        'invitation_accepted',
                        [
                            'artist_id' => $user_id,
                            'artist_name' => jvbGetUsername($user_id),
                            'shop_id' => $invitation['to_shop']
                        ]
                    );
                }
            }
         //TODO
//            $inviters = json_decode($invitation['inviters'], true);
//            if (!empty($inviters)) {
//                foreach ($inviters as $inviter_id) {
//                    NotificationManager::getInstance()->addNotification(
//                        $inviter_id,
//                        'invitation_accepted',
//                        [
//                            'artist_id' => $user_id,
//                            'artist_name' => jvbGetUsername($user_id),
//                            'shop_id' => $invitation['to_shop']
//                        ]
//                    );
//                }
//            }
            $wpdb->query('COMMIT');
            return true;
        } catch (Exception $e) {
            $wpdb->query('ROLLBACK');
            JVB()->error()->log(
            Errors::getInstance()->log(
                'shop',
                "Error accepting artist invitation: " . $e->getMessage(),
                [
                    'user_id' => $user_id,
                    'invitation' => $invitation
                ],
                'error'
            );
                ]
         );
            return false;
        }
@@ -1055,32 +1063,32 @@
            );
            // Notify inviters
            $inviters = json_decode($invitation['inviters'], true);
            if (!empty($inviters)) {
                foreach ($inviters as $inviter_id) {
                    JVB()->notification()->addNotification(
                        $inviter_id,
                        'invitation_declined',
                        [
                            'artist_id' => $user_id,
                            'artist_name' => jvbGetUsername($user_id),
                            'shop_id' => $invitation['to_shop']
                        ]
                    );
                }
            }
         //TODO
//            $inviters = json_decode($invitation['inviters'], true);
//            if (!empty($inviters)) {
//                foreach ($inviters as $inviter_id) {
//                    NotificationManager::getInstance()->addNotification(
//                        $inviter_id,
//                        'invitation_declined',
//                        [
//                            'artist_id' => $user_id,
//                            'artist_name' => jvbGetUsername($user_id),
//                            'shop_id' => $invitation['to_shop']
//                        ]
//                    );
//                }
//            }
            return true;
        } catch (Exception $e) {
            JVB()->error()->log(
            Errors::getInstance()->log(
                'shop',
                "Error declining artist invitation: " . $e->getMessage(),
                [
                    'user_id' => $user_id,
                    'invitation' => $invitation
                ],
                'error'
            );
                ]
         );
            return false;
        }
@@ -1154,7 +1162,7 @@
            return true;
        } catch (Exception $e) {
            $wpdb->query('ROLLBACK');
            JVB()->error()->logError("Error adding artist to shop: " . $e->getMessage(), [
            Errors::getInstance()->logError("Error adding artist to shop: " . $e->getMessage(), [
                'user_id' => $user_id,
                'shop_id' => $shop_id
            ]);
@@ -1218,35 +1226,34 @@
            // Create a notification for the shop owner/manager
            $shop_name = get_term($shop_id, BASE . 'shop')->name;
            $shop_meta = new MetaManager($shop_id, 'term');
            $shop_meta = Meta::forTerm($shop_id);
         $owners = $shop_meta->getAll(['owner', 'managers']);
         $owners = array_unique(array_merge(explode(',', $owners['owner']),explode(',', $owners['managers'])));
            foreach ($owners as $owner_id) {
                if (!empty($owner_id)) {
                    JVB()->notification()->addNotification(
                        $owner_id,
                        'artist_left',
                        $user_id,
                        sprintf('%s has left %s', jvbGetUsername($user_id), $shop_name),
                        $shop_id,
                        BASE . 'shop'
                    );
                }
            }
// TODO
//            foreach ($owners as $owner_id) {
//                if (!empty($owner_id)) {
//                    NotificationManager::getInstance()->addNotification(
//                        $owner_id,
//                        'artist_left',
//                        $user_id,
//                        sprintf('%s has left %s', jvbGetUsername($user_id), $shop_name),
//                        $shop_id,
//                        BASE . 'shop'
//                    );
//                }
//            }
            return true;
        } catch (Exception $e) {
            $wpdb->query('ROLLBACK');
            JVB()->error()->log(
            Errors::getInstance()->log(
                'shop',
                "Error removing artist from shop: " . $e->getMessage(),
                [
                    'user_id' => $user_id,
                    'shop_id' => $shop_id
                ],
                'error'
            );
                ]
         );
            return false;
        }
@@ -1345,10 +1352,10 @@
        $userLink = get_user_meta($user, BASE . 'link', true);
        $userMeta = new MetaManager($user, 'user');
        $artistMeta = new MetaManager($userLink, 'post');
        $userMeta = Meta::forUser($user);
        $artistMeta = Meta::forPost($userLink);
        $shopMeta = new MetaManager($shop, 'term');
        $shopMeta = Meta::forTerm($shop);
        error_log('Setting '.$type.' permissions:'.print_r([
            'userLink'  => $userLink,
@@ -1365,7 +1372,7 @@
        $user->add_cap('manage_shop', $grant);
        $user->add_cap('manage_shop_'.$shop, $grant);
        $shops = $userMeta->getValue($uMeta);
        $shops = $userMeta->get($uMeta);
        $shops = ($shops === '') ? [] : explode(',', $shops);
        if ($grant) {
            if (!in_array($shop, $shops)) {
@@ -1381,18 +1388,17 @@
        $shops = implode(',', $shops);
        $userMeta->updateValue($uMeta, $shops);
        $userMeta->set($uMeta, $shops);
        $artistMeta->updateValue($aMeta, $shops);
        $artistMeta->set($aMeta, $shops);
        $owners = $shopMeta->getValue($sMeta);
        $owners = $shopMeta->get($sMeta);
        $owners = ($owners === '') ? [] : explode(',', $shops);
        if (!in_array($user->ID, $owners)) {
            $owners[] = $user->ID;
        }
        $owners = implode(',', $owners);
        $shopMeta->updateValue($sMeta, $owners);
        $shopMeta->set($sMeta, $owners);
        return true;
    }
}