| | |
| | | <?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; |
| | |
| | | } |
| | | |
| | | /*** |
| | | * @deprecated |
| | | * WORKFLOW: |
| | | * 1) Users with 'manage_shop' permissions can invite folks to this shop |
| | | * 2) If user is already a registered member: |
| | |
| | | ]); |
| | | } |
| | | |
| | | $queue = JVB()->queue(); |
| | | $queue = Queue::getInstance(); |
| | | unset($data['user']); |
| | | $operationID = $data['id']; |
| | | unset($data['id']); |
| | | |
| | | $data = json_encode($data); |
| | | |
| | | $queue->queueOperation( |
| | | 'shop_update', |
| | |
| | | ]; |
| | | } |
| | | |
| | | $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) { |
| | |
| | | |
| | | 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 = []; |
| | | // |
| | |
| | | // } 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)); |
| | | // } |
| | | // } |
| | |
| | | $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)) { |
| | |
| | | } |
| | | } |
| | | } |
| | | $queue = JVB()->queue(); |
| | | $queue = Queue::getInstance(); |
| | | $queue->queueOperation( |
| | | 'shop_image', |
| | | $user_id, |
| | |
| | | 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']) { |
| | |
| | | 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'])); |
| | |
| | | $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 |
| | | // ] |
| | | // ); |
| | | // } |
| | | } |
| | | |
| | | /** |
| | |
| | | $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); |
| | |
| | | esc_url($invitation_url) |
| | | ); |
| | | |
| | | return JVB()->email()->sendEmail($email, $subject, $message); |
| | | return Emails::getInstance()->sendEmail($email, $subject, $message); |
| | | } |
| | | |
| | | /** |
| | |
| | | |
| | | // 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, |
| | |
| | | |
| | | // 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, |
| | |
| | | } |
| | | |
| | | // 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; |
| | | } |
| | |
| | | ); |
| | | |
| | | // 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; |
| | | } |
| | |
| | | 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 |
| | | ]); |
| | |
| | | |
| | | // 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; |
| | | } |
| | |
| | | |
| | | |
| | | $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, |
| | |
| | | $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)) { |
| | |
| | | $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; |
| | | } |
| | | } |