Файловый менеджер - Редактировать - /home/tuudkjt/globeasy/wp-includes/ID3/Rest.tar
Назад
Middleware/WPDrillMiddleware.php 0000777 00000000255 15251226203 0012654 0 ustar 00 <?php namespace Rvx\Rest\Middleware; class WPDrillMiddleware { /** * @return bool */ public function handle() : bool { return \true; } } Middleware/AuthMiddleware.php 0000777 00000002766 15251226203 0012251 0 ustar 00 <?php namespace Rvx\Rest\Middleware; use Exception; use WP_REST_Request; use Rvx\Utilities\Auth\WpUser; use Rvx\Utilities\Auth\Client; use Rvx\Firebase\JWT\JWT; use Rvx\Firebase\JWT\Key; class AuthMiddleware { /** * Determine if the current request is authorized. * * Authorization is granted if: * User is logged in AND has sufficient capabilities. * Or if user has a valid JWT Bearer token * * @param WP_REST_Request $request * @return bool */ public function handle(WP_REST_Request $request) : bool { // Validate by WP User if (WpUser::isLoggedIn() && WpUser::can()) { return \true; } // Validate by Bearer Token $clientUid = Client::getUid(); $secret = Client::getSecret(); if (empty($clientUid) || empty($secret)) { return \false; } $headers = $request->get_headers(); $authHeader = isset($headers['authorization'][0]) ? \trim($headers['authorization'][0]) : ''; if (!$authHeader || !\preg_match('/Bearer\\s+(.*)$/i', $authHeader, $matches)) { return \false; } $token = $matches[1]; try { $decoded = JWT::decode($token, new Key($secret, 'HS256')); // Check UID binding if (empty($decoded->uid) || $decoded->uid !== $clientUid) { return \false; } return \true; } catch (Exception $e) { return \false; } } } Middleware/AdminMiddleware.php 0000777 00000000466 15251226203 0012373 0 ustar 00 <?php namespace Rvx\Rest\Middleware; use Rvx\Utilities\Auth\Client; class AdminMiddleware { /** * @return bool */ public function handle($request) : bool { if (Client::getUid() === $request->get_param('uid')) { return \true; } return \false; } } Middleware/AuthSaasMiddleware.php 0000777 00000002145 15251226203 0013050 0 ustar 00 <?php namespace Rvx\Rest\Middleware; use Exception; use WP_REST_Request; use Rvx\Utilities\Auth\Client; use Rvx\Firebase\JWT\JWT; use Rvx\Firebase\JWT\Key; class AuthSaasMiddleware { /** * Handle incoming SaaS-authenticated requests */ public function handle(WP_REST_Request $request) : bool { $clientUid = Client::getUid(); $secret = Client::getSecret(); if (empty($clientUid) || empty($secret)) { return \false; } $headers = $request->get_headers(); $authHeader = isset($headers['authorization'][0]) ? \trim($headers['authorization'][0]) : ''; if (!$authHeader || !\preg_match('/Bearer\\s+(.*)$/i', $authHeader, $matches)) { return \false; } $token = $matches[1]; try { $decoded = JWT::decode($token, new Key($secret, 'HS256')); // Check UID binding if (empty($decoded->uid) || $decoded->uid !== $clientUid) { return \false; } return \true; } catch (Exception $e) { return \false; } } } Middleware/DevMiddleware.php 0000777 00000000520 15251226203 0012050 0 ustar 00 <?php namespace Rvx\Rest\Middleware; class DevMiddleware { /** * @return bool */ public function handle($request) : bool { $token = $request->get_params()['token']; if ($token === '3745678yfughsert7834yfuhjsfe7834r6uirf78t45') { return \true; } return \false; } } Controllers/ReviewController.php 0000777 00000044432 15251226203 0013104 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Exception; use Throwable; use Rvx\Services\ReviewService; use Rvx\Utilities\Helper; use Rvx\Services\CacheServices; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class ReviewController implements InvokableContract { protected ReviewService $reviewService; protected CacheServices $cacheServices; public function __construct() { $this->reviewService = new ReviewService(); $this->cacheServices = new CacheServices(); } /** * @return void */ public function __invoke() { } /** * @return Response */ public function index($request) { $aggregation = \get_transient('rvx_admin_aggregation'); if (empty($request->get_params()) && $aggregation) { $response = ['aggregations' => $aggregation['aggregations'], 'count' => $aggregation['count'], 'reviews' => $aggregation['reviews'], 'meta' => $aggregation['meta']]; return Helper::rest($response)->success("Success"); } else { $resp = $this->reviewService->getReviews($request->get_params()); if ($resp->getStatusCode() === Response::HTTP_OK) { $this->aggregationDataStore($resp->getApiData()); } return Helper::getApiResponse($resp); } } public function aggregationDataStore($data) { \delete_transient('rvx_admin_aggregation'); \set_transient('rvx_admin_aggregation', $data, 3600); } public function adminAllReviewSaasCall($data) { $resp = $this->reviewService->reviewList($data); $isVisible = $data['isVisible'] ?? ''; if ($resp->getStatusCode() === Response::HTTP_OK) { $this->storeVisibilityReview($resp->getApiData(), $isVisible); } return $this->enrichReviewList($resp); } private function enrichReviewList($resp) { if ($resp->getStatusCode() === Response::HTTP_OK) { $data = $resp->getApiData(); if (isset($data['reviews']) && \is_array($data['reviews'])) { foreach ($data['reviews'] as &$review) { if (isset($review['wp_post_id'])) { $review['post_type'] = get_post_type($review['wp_post_id']); } } return Helper::rest($data)->success($resp()->message, $resp->getStatusCode()); } } return Helper::getApiResponse($resp); } public function reviewList($request) { try { $differentReview = $this->cacheServices->makeSaaSCallDecision(); $this->visibilityPaginationSaasCall($request, $differentReview); $isVisible = $request->get_params()['isVisible'] ?? ''; $transientKeys = ['published' => 'rvx_review_approve_data', 'pending' => 'rvx_review_pending_data', 'spam' => 'rvx_review_spam_data', 'trash' => 'rvx_review_trash_data']; if (\array_key_exists($isVisible, $transientKeys)) { $approve = \get_transient($transientKeys[$isVisible]); $params = $request->get_params(); $filterParams = ['page', 'rating', 'date', 'reviewer', 'search', 'product', 'category', 'oldest_first', 'newest_first']; if (\array_intersect_key(\array_flip($filterParams), $params)) { $resp = $this->reviewService->reviewList($params); return $this->enrichReviewList($resp); } elseif ($approve) { $response = ['count' => $approve['count'], 'reviews' => $approve['reviews'], 'meta' => $approve['meta']]; return Helper::rest($response)->success("Success"); } else { $this->adminAllReviewSaasCall($params); } } if (empty($request->get_params())) { $data = \get_transient('rvx_reviews_data_list'); if ($data) { $response = ['count' => $data['count'], 'reviews' => $data['reviews'], 'meta' => $data['meta']]; return Helper::rest($response)->success("Success"); } else { $resp = $this->reviewService->reviewList($request->get_params()); if ($resp->getStatusCode() === Response::HTTP_OK && empty($request->get_params())) { $this->reviewListStoreInDB($resp->getApiData()); } return $this->enrichReviewList($resp); } } else { $resp = $this->reviewService->reviewList($request->get_params()); return $this->enrichReviewList($resp); } } catch (Exception $e) { \error_log("Error fetching review list: " . $e->getMessage()); } } public function visibilityPaginationSaasCall($request, $differentReview) { if ($differentReview === \true) { $this->adminAllReviewSaasCall($request->get_params()); } } public function reviewListStoreInDB($reviewData) { \delete_transient('rvx_reviews_data_list'); \set_transient('rvx_reviews_data_list', $reviewData, 3600); } public function storeVisibilityReview($data, $visibility) { if ($visibility === 'published') { \delete_transient('rvx_review_approve_data'); \set_transient('rvx_review_approve_data', $data, 3600); } if ($visibility === 'pending') { \delete_transient('rvx_review_pending_data'); \set_transient('rvx_review_pending_data', $data, 3600); } if ($visibility === 'spam') { \delete_transient('rvx_review_spam_data'); \set_transient('rvx_review_spam_data', $data, 3600); } if ($visibility === 'trash') { \delete_transient('rvx_review_trash_data'); \set_transient('rvx_review_trash_data', $data, 3600); } } /** * @param $request * @return Response */ public function show($request) { $resp = $this->reviewService->getReview($request); return Helper::getApiResponse($resp); } /** * @param $request * @return Response */ public function store($request) { try { // Temporarily disable comment notification emails remove_action('comment_post', 'wp_notify_postauthor'); add_filter('comments_notify', '__return_false'); $resp = $this->reviewService->createReview($request); // Re-enable the comment notification emails add_action('comment_post', 'wp_notify_postauthor'); remove_filter('comments_notify', '__return_false'); // Clear caches $this->cacheServices->removeCache(); $postId = $request->get_param('wp_post_id'); if ($postId) { $this->cacheServices->removeProductCache($postId); } return Helper::getApiResponse($resp); } catch (Exception $e) { // Re-enable the comment notification emails in case of error add_action('comment_post', 'wp_notify_postauthor'); remove_filter('comments_notify', '__return_false'); return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Not Create', $e->getCode()); } } /** * @param $request * @return Response */ public function update($request) { try { $resp = $this->reviewService->updateReview($request); if ($resp->getStatusCode() >= 200 && $resp->getStatusCode() < 300) { // 1. Clear site-wide generic caches $this->cacheServices->removeCache(); // 2. Clear product-specific caches (Insight & Latest Reviews) $postId = $request->get_param('wp_post_id'); if ($postId) { \delete_transient("rvx_{$postId}_latest_reviews_insight"); \delete_transient("rvx_{$postId}_latest_reviews"); } } return Helper::getApiResponse($resp); } catch (Exception $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Update Failed', $e->getCode()); } } /** * @param $request * @return Response */ public function delete($request) { try { $resp = $this->reviewService->deleteReview($request); $this->cacheServices->removeCache(); return $resp; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Change', $e->getCode()); } } /** * @param $request * @return Response */ public function restoreReview($request) { try { $response = $this->reviewService->restoreReview($request); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Change', $e->getCode()); } } /** * @param $request * @return Response */ public function verify($request) { try { $resp = $this->reviewService->isVerify($request); $this->cacheServices->removeCache(); return $resp; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Not Change', $e->getCode()); } } /** * @param $request * @return Response */ public function visibility($request) { try { $response = $this->reviewService->isvisibility($request); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Not Change', $e->getCode()); } } /** * @param $request * @return Response */ public function updateReqEmail($request) { try { $resp = $this->reviewService->updateReqEmail($request); $this->cacheServices->removeCache(); return $resp; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function replies($request) { try { $resp = $this->reviewService->reviewReplies($request); return $resp; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Reply Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function repliesUpdate($request) { try { $resp = $this->reviewService->reviewRepliesUpdate($request); return Helper::rvxApi($resp)->success('Review Reply Updated'); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Reply Updated Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function replyDelete($request) { try { $resp = $this->reviewService->reviewRepliesDelete($request); return Helper::getApiResponse($resp); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function aiReview($request) { try { // Temporarily disable comment notification emails remove_action('comment_post', 'wp_notify_postauthor'); add_filter('comments_notify', '__return_false'); $resp = $this->reviewService->aiReview($request); // Re-enable the comment notification emails add_action('comment_post', 'wp_notify_postauthor'); remove_filter('comments_notify', '__return_false'); return Helper::getApiResponse($resp); } catch (Throwable $e) { // Re-enable the comment notification emails in case of error add_action('comment_post', 'wp_notify_postauthor'); remove_filter('comments_notify', '__return_false'); return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function aiReviewCount() { try { $resp = $this->reviewService->aiReviewCount(); return Helper::getApiResponse($resp); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Ai Review Count', $e->getCode()); } } public function aggregationMeta($request) { try { $response = $this->reviewService->aggregationMeta($request); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function reviewBulkUpdate($request) { try { $response = $this->reviewService->reviewBulkUpdate($request->get_params()); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function reviewBulkTrash($request) { try { $response = $this->reviewService->reviewBulkTrash($request->get_params()); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function reviewEmptyTrash($request) { try { $response = $this->reviewService->reviewEmptyTrash($request->get_params()); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Empty Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function restoreTrashItem($request) { //Bulk trash try { $response = $this->reviewService->restoreTrashItem($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * * @return Response */ public function reviewAggregation() { try { $resp = $this->reviewService->reviewAggregation(); // dd($resp->getApiData()); return Helper::getApiResponse($resp); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Aggregation Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function reviewMoveToTrash($request) { try { $response = $this->reviewService->reviewMoveToTrash($request->get_params()); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Move to trash Fails', $e->getCode()); } } /** * @param $request * @return Response */ public function highlight($request) { try { $response = $this->reviewService->highlight($request->get_params()); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails(__('Review Highlight', 'reviewx'), $e->getCode()); } } public function bulkTenReviews($request) { try { $response = $this->reviewService->bulkTenReviews($request->get_params()); $this->cacheServices->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails(__('Latest ten reviews fails', 'reviewx'), $e->getCode()); } } public function bulkActionProductMeta($request) { try { foreach ($request->get_params() as $item) { if (!Helper::arrayGet($item, 'product_wp_id')) { return "No product found"; } $reviewAndMeta = ['reviews' => Helper::arrayGet($item, 'reviews'), 'meta' => Helper::arrayGet($item, 'meta')]; $latest_ten_review = \json_encode($reviewAndMeta, \true); \set_transient("rvx_{$item['product_wp_id']}_latest_reviews", $latest_ten_review, 604800); // Expires in 7 days return Helper::rest()->success("Success"); } } catch (Exception $e) { \error_log($e->getMessage()); return Helper::rest($e->getMessage())->fails("Fail"); } } /** * * @return Response */ public function reviewListMultiCriteria() { $resp = $this->reviewService->reviewListMultiCriteria(); return Helper::getApiResponse($resp); } /** * @param $request * @return Response */ public function getSingleProductAllReviews($request) { try { $resp = $this->reviewService->getSingleProductAllReviews($request); return Helper::getApiResponse($resp); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('failed', $e->getCode()); } } } Controllers/CategoryController.php 0000777 00000002446 15251226203 0013417 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Services\CategoryService; use Rvx\Utilities\Helper; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class CategoryController implements InvokableContract { protected $categoryService; /** * @param CategoryService $categoryService */ public function __construct(CategoryService $categoryService) { $this->categoryService = $categoryService; } /** * @return void */ public function __invoke() { } /** * @return Response */ public function selectable() { $resp = $this->categoryService->selectable(); return Helper::getApiResponse($resp); } /** * @return Response */ public function getCategory() { $resp = $this->categoryService->getCategory(); return Helper::getApiResponse($resp); } /** * @return Response */ public function getCategoryAll() { $resp = $this->categoryService->getCategoryAll(); return Helper::getApiResponse($resp); } /** * @return Response */ public function storeCategory($request) { $resp = $this->categoryService->storeCategory($request->get_params()); return Helper::getApiResponse($resp); } } Controllers/PingController.php 0000777 00000002137 15251226203 0012534 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Exception; use WP_REST_Response; use Rvx\Services\PingService; use Rvx\Utilities\Helper; class PingController { protected PingService $pingService; public function __construct() { $this->pingService = new PingService(); } /** * Ping from sass and (cached for 2 hours) return site info. * * @return WP_REST_Response */ public function ping() : WP_REST_Response { // Cache time-to-live: 2 hours $cache_duration = 3600 * 2; try { // Try to get cache $data = \get_transient('rvx_ping_cache'); if (\false === $data) { // Cache miss: fetch fresh data, store and return $data = $this->pingService->ping(); \set_transient('rvx_ping_cache', $data, $cache_duration); } return Helper::rvxApi($data)->success(__('Plugin Active', 'reviewx'), 200); } catch (Exception $e) { return Helper::rvxApi()->fails(__('Plugin deactivated or uninstalled', 'reviewx'), 404); } } } Controllers/DashboardController.php 0000777 00000003024 15251226203 0013522 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Services\DashboardServices; use Rvx\Utilities\Helper; use Throwable; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class DashboardController implements InvokableContract { protected $dashboardServices; /** * */ public function __construct(DashboardServices $dashboardServices) { $this->dashboardServices = $dashboardServices; } /** * @return void */ public function __invoke() { } /** * @return Response */ public function insight() { $resp = $this->dashboardServices->insight(); return Helper::getApiResponse($resp); } /** * @return Response */ public function requestEmail() { $resp = $this->dashboardServices->requestEmail(); return Helper::getApiResponse($resp); } /** * @return \WPDrill\Response */ public function requestUserData() { try { $response = $this->dashboardServices->requestUserData(); return Helper::rvxApi($response)->success('Site data Retrieved Successfully'); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Site data Retrieval Failed', $e->getCode()); } } /** * @param $request * @return Response */ public function chart($request) { $resp = $this->dashboardServices->chart($request->get_params()); return Helper::getApiResponse($resp); } } Controllers/DataSyncController.php 0000777 00000010163 15251226203 0013343 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use WP_REST_Request; use Rvx\CPT\CptHelper; use Rvx\Models\Site; use Rvx\Services\DataSyncService; use Rvx\Services\SettingService; use Rvx\Utilities\Helper; use Throwable; class DataSyncController { protected SettingService $settingService; protected DataSyncService $dataSyncService; public function __construct() { $this->dataSyncService = new DataSyncService(); $this->settingService = new SettingService(); } public function dataSync() { $resp = $this->dataSyncService->dataSync('default'); if ($resp) { return Helper::rvxApi()->success('Data Sync Success'); } else { return Helper::rvxApi()->fails('Data Sync Failed'); } } public function dataSynComplete() { // Update all DB settings from API to WP DB $this->updateSettingsOnSync(); return Site::where("is_saas_sync", 0)->update(['is_saas_sync' => 1]); } public function syncStatus() { \header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); \header("Pragma: no-cache"); \header("Pragma: no-cache"); $response = $this->dataSyncService->syncStatus(); if (!empty($response->getApiData()['sync_stats']) && $response->getApiData()['sync_stats'] === 1) { // Update all DB settings from API to WP DB $this->updateSettingsOnSync(); Site::where("is_saas_sync", 0)->update(['is_saas_sync' => 1]); } return Helper::saasResponse($response); } public function updateSettingsOnSync() { // Save '_rvx_cpt_settings' data after sync is completed from Sass API to WP DB $response = (new \Rvx\Rest\Controllers\CptController())->cptGetOnSync(); if ($response[0] === \true) { // Get the enabled post types array $used_post_types = (new CptHelper())->usedCPTOnSync('used'); // Loop through each post type and call getApiReviewSettings foreach ($used_post_types as $post_type) { $review_response = (new \Rvx\Rest\Controllers\SettingController())->getApiReviewSettingsOnSync($post_type); // Update Review settings $review_settings = $review_response['data']['review_settings']; $this->settingService->updateReviewSettingsOnSync($review_settings, \strtolower($post_type)); } } // Get widget settings $widget_response = (new \Rvx\Rest\Controllers\SettingController())->getApiWidgetSettingsOnSync(); $widget_settings = $widget_response['data']['widget_settings']; // Update widget settings $this->settingService->updateWidgetSettings($widget_settings); } public function dataManualSync($request) { try { $response = $this->dataSyncService->dataManualSync($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('General settings saved failed', $e->getCode()); } } public function syncedData(WP_REST_Request $request) { $post_type = $request->get_param('post_type') ?? 'product'; // Sanitize just in case: $post_type = sanitize_key($post_type); if ($post_type === 'product') { $file_name = "shop-bulk-data.jsonl"; } else { $file_name = "{$post_type}-cpt-bulk-data.jsonl"; } $file_path = WP_CONTENT_DIR . '/uploads/reviewx/' . $file_name; if (!\file_exists($file_path)) { return Helper::rvxApi()->fails('File not found for post_type: ' . $post_type, 404); } \header('Content-Description: File Transfer'); \header('Content-Type: application/jsonl'); \header('Content-Disposition: attachment; filename="' . \basename($file_path) . '"'); \header('Expires: 0'); \header('Cache-Control: must-revalidate'); \header('Pragma: public'); \header('Content-Length: ' . \filesize($file_path)); \readfile($file_path); exit; } } Controllers/LogController.php 0000777 00000011642 15251226203 0012361 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Exception; use Rvx\Services\CategorySyncService; use Rvx\Services\DataSyncService; use Rvx\Services\OrderItemSyncService; use Rvx\Services\ProductSyncService; use Rvx\Services\ReviewSyncService; use Rvx\Services\UserSyncService; use Rvx\Utilities\Helper; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\Services\CacheServices; class LogController implements InvokableContract { protected CacheServices $cacheServices; public function __construct() { $this->cacheServices = new CacheServices(); } /** * @return void */ public function __invoke() { } public function rvxRecentLog($request) { $data = $request->get_params(); $this->directoryCreate($data); $this->logDownload($data); $this->deleteLog($data); } public function directoryCreate($data) { if ($data['action'] === 'dir') { $log_folder = RVX_DIR_PATH . 'log/'; if (!\file_exists($log_folder) && !\mkdir($log_folder, 0755, \true) && !\is_dir($log_folder)) { throw new \RuntimeException(\sprintf('Directory "%s" was not created', $log_folder)); } } } public function logDownload($data) { if ($data['action'] === 'log') { $logPath = RVX_DIR_PATH . 'log/'; $files = \glob($logPath . '*'); if (empty($files)) { echo 'No log files found'; } $recentFile = null; foreach ($files as $file) { if (\is_null($recentFile) || \filemtime($file) > \filemtime($recentFile)) { $recentFile = $file; } } if (!\file_exists($recentFile)) { echo 'File not found'; } \header('Content-Type: text/plain'); \header('Content-Disposition: attachment; filename="' . \basename($recentFile) . '"'); \header('Content-Length: ' . \filesize($recentFile)); \ob_clean(); \flush(); \readfile($recentFile); exit; } } public function deleteLog($data) { if ($data['action'] === 'remove') { $log_folder = RVX_DIR_PATH . 'log/'; if (!\is_dir($log_folder)) { echo 'Log folder does not exist'; } $files = \glob($log_folder . '/*'); foreach ($files as $file) { if (\is_file($file)) { \unlink($file); } } if (\rmdir($log_folder)) { echo 'Log folder and files deleted successfully'; } else { echo 'Failed to delete the log folder'; } } } public function appendJsonSync($request) { $action = $request->get_param('action'); $from = $request->get_param('from'); if ($action === 'create_jsonl') { $this->createJsonl(); } if ($action === 'download') { $this->downloadJsonl(); } if ($action === 'manual_sync') { $dataResponse = (new DataSyncService())->dataSync($from); $this->cacheServices->removeCache(); if (!$dataResponse) { return Helper::rvxApi(['error' => "Data Sync Failed"])->fails('Data Sync Failed', $dataResponse->getStatusCode()); } } return Helper::rvxApi()->success('Data Synced Successfully'); } public function createJsonl() { try { $file_path = RVX_DIR_PATH . 'sync.jsonl'; $file = \fopen($file_path, 'w'); $syncedCaterories = new CategorySyncService(); $syncedCaterories->syncCategory($file); (new UserSyncService())->syncUser($file); $processProduct = new ProductSyncService($syncedCaterories); $processProduct->processProductForSync($file); (new ReviewSyncService($processProduct))->processReviewForSync($file); if (\class_exists('WooCommerce')) { $order = new OrderItemSyncService(); $order->syncOrder($file); $order->syncOrderItem($file); } echo 'jsonl create done'; } catch (Exception $e) { return $e->getMessage(); } } public function downloadJsonl() { $syncJsonlDownload = RVX_DIR_PATH . 'sync.jsonl'; if (\file_exists($syncJsonlDownload)) { \header('Content-Type: text/plain'); \header('Content-Disposition: attachment; filename="' . \basename($syncJsonlDownload) . '"'); \header('Content-Length: ' . \filesize($syncJsonlDownload)); \header('Content-Length: ' . \filesize($syncJsonlDownload)); \ob_clean(); \flush(); \readfile($syncJsonlDownload); \unlink($syncJsonlDownload); exit; } } } Controllers/UserController.php 0000777 00000001065 15251226203 0012554 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Services\UserServices; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class UserController implements InvokableContract { protected UserServices $userServices; /** * */ public function __construct() { $this->userServices = new UserServices(); } /** * @return void */ public function __invoke() { } /** * @return Response */ public function getUser() { return $this->userServices->getUser(); } } Controllers/WPDrillController.php 0000777 00000001517 15251226203 0013155 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\DB\QueryBuilder\QueryBuilderHandler; use Rvx\WPDrill\Response; class WPDrillController implements InvokableContract { protected QueryBuilderHandler $db; /** * @param QueryBuilderHandler $db */ public function __construct(QueryBuilderHandler $db) { $this->db = $db; } /** * @return Response */ public function __invoke() { // $user = User::where('id', 1)->first(); // //$user = $this->db->table('users')->where('id', 1)->first(); // return rvx_rest($site) // ->setHeader('Content-Type', 'application/json') // ->details('User fetched successfully') // ->success("User found"); } } Controllers/AuthController.php 0000777 00000027521 15251226203 0012544 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Exception; use Rvx\Api\AuthApi; use Rvx\CPT\CptHelper; use Rvx\Handlers\MigrationRollback\MigrationPrompt; use Rvx\Handlers\MigrationRollback\ReviewXChecker; use Rvx\Models\Site; use Rvx\Services\Api\LoginService; use Rvx\Services\DataSyncService; use Rvx\Services\SettingService; use Rvx\Utilities\Auth\Client; use Rvx\Utilities\Helper; use Throwable; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; use Rvx\Services\CacheServices; class AuthController implements InvokableContract { protected LoginService $loginService; protected DataSyncService $dataSyncService; protected CacheServices $cacheServices; public function __construct() { $this->loginService = new LoginService(); $this->dataSyncService = new DataSyncService(); $this->cacheServices = new CacheServices(); } public function __invoke() { } /** * @param $request * @return Response */ public function login($request) { $data = $request->get_params(); $data['multicriteria'] = $this->multicriteriaOptions(); $payload = \array_merge($data, Helper::getWpClientInfo()); //return Helper::rvxApi(['error' => 'Invalid request', 'data' => $payload])->fails('Invalid request', Response::HTTP_BAD_REQUEST); try { $response = (new AuthApi())->login($payload); if ($response->getStatusCode() !== Response::HTTP_OK) { return Helper::saasResponse($response); } $apiData = $response->getApiData(); $validation = $this->validateSite($apiData); if ($validation !== \true) { return $validation; // return error response } $site_info = $this->prepareData($apiData); $site = Site::where('uid', $site_info['uid'])->first(); if (!$site) { $site = Site::insert($site_info); } else { Site::where("id", $site->id)->update($site_info); } Client::set(Site::where('uid', $site_info['uid'])->first()); $dataResponse = $this->dataSyncService->dataSync('login', 'product'); if (!$dataResponse) { return Helper::rvxApi(['error' => 'Data sync fails'])->fails('Data sync fails', $dataResponse->getStatusCode()); } // Sleep for 1 seconds \sleep(1); // Upload CPT data to Saas $enabled_post_types = (new CptHelper())->usedCPTOnSync('used'); unset($enabled_post_types['product']); // Exclude 'product' post type // Loop through each post type and hook into the actions/filters dynamically foreach ($enabled_post_types as $post_type) { $this->dataSyncService->dataSync('default', $post_type); } $this->cacheServices->removeCache(); $this->loginService->resetPostMeta(); // Set the localStorage isAlreadySyncSuccess \set_transient('rvx_reset_sync_flag', \true); return Helper::saasResponse($response); } catch (Exception $e) { $errorCode = $e->getCode() === 0 ? Response::HTTP_INTERNAL_SERVER_ERROR : $e->getCode(); $message = $e->getCode() === 0 ? 'Internal Server Error' : $e->getMessage(); return Helper::rvxApi(['error' => $message])->fails($message, $errorCode); } } public function license_key($request) { $data = $request->get_params(); $data['multicriteria'] = $this->multicriteriaOptions(); $payload = \array_merge($data, Helper::getWpClientInfo()); try { $response = (new AuthApi())->licenseLogin($payload); if ($response->getStatusCode() !== Response::HTTP_OK) { return Helper::saasResponse($response); } $apiData = $response->getApiData(); $validation = $this->validateSite($apiData); if ($validation !== \true) { return $validation; // return error response } $site_info = $this->prepareData($apiData); $site = Site::where('uid', $site_info['uid'])->first(); if (!$site) { $site = Site::insert($site_info); } else { Site::where("id", $site->id)->update($site_info); } Client::set(Site::where('uid', $site_info['uid'])->first()); $dataResponse = $this->dataSyncService->dataSync('login', 'product'); if (!$dataResponse) { return Helper::rvxApi(['error' => 'Data sync fails'])->fails('Data sync fails', $dataResponse->getStatusCode()); } // Sleep for 1 seconds \sleep(1); // Upload CPT data to Saas $enabled_post_types = (new CptHelper())->usedCPTOnSync('used'); unset($enabled_post_types['product']); // Exclude 'product' post type // Loop through each post type and hook into the actions/filters dynamically foreach ($enabled_post_types as $post_type) { $this->dataSyncService->dataSync('default', $post_type); } $this->cacheServices->removeCache(); $this->loginService->resetPostMeta(); // Set the localStorage isAlreadySyncSuccess \set_transient('rvx_reset_sync_flag', \true); return Helper::saasResponse($response); } catch (Exception $e) { $errorCode = $e->getCode() === 0 ? Response::HTTP_INTERNAL_SERVER_ERROR : $e->getCode(); $message = $e->getCode() === 0 ? 'Internal Server Error' : $e->getMessage(); return Helper::rvxApi(['error' => $message])->fails($message, $errorCode); } } protected function prepareData(array $site) : array { return ['site_id' => $site['id'], 'uid' => $site['uid'], 'name' => $site['name'], 'domain' => $site['domain'], 'url' => $site['url'], 'locale' => $site['locale'], 'email' => $site['email'], 'secret' => $site['key'], 'is_saas_sync' => 0, 'created_at' => \wp_date('Y-m-d H:i:s'), 'updated_at' => \wp_date('Y-m-d H:i:s')]; } public function multicriteriaOptions() { $data = []; $isOldReviewXExists = ReviewXChecker::isReviewXExists(); $isReviewXSaaSExists = ReviewXChecker::isReviewXSaasExists(); if ($isOldReviewXExists && !$isReviewXSaaSExists) { $options = \get_option('_rx_option_review_criteria'); $keys = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]; $criterias = []; $i = 0; foreach ($options as $key => $name) { if (isset($keys[$i])) { $criterias[] = ["key" => $keys[$i], "name" => $name]; } $i++; } $multicrtriaEnableorDisable = \get_option('_rx_option_allow_multi_criteria'); $data = ["enable" => $multicrtriaEnableorDisable == 1 ? \true : \false, "criterias" => $criterias]; } elseif ($isReviewXSaaSExists) { $data = (array) (new SettingService())->getReviewSettings('product') ?? []; $data = $data['reviews']['multicriteria']; } return $data; } public function forgetPassword($request) { try { $response = $this->loginService->forgetPassword($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Forget password fail', $e->getCode()); } } public function resetPassword($request) { try { $response = $this->loginService->resetPassword($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Reset password fail', $e->getCode()); } } /** * @param $request * @return Response */ public function register($request) { $data = $request->get_params(); $payload = \array_merge($data, Helper::getWpClientInfo()); try { $response = (new AuthApi())->register($payload); if ($response->getStatusCode() !== Response::HTTP_OK) { return Helper::saasResponse($response); } $apiData = $response->getApiData(); $validation = $this->validateSite($apiData); if ($validation !== \true) { return $validation; // return error response } $site_info = $this->prepareRegisterData($apiData['site']); $site = Site::where('uid', $site_info['uid'])->first(); if (!$site) { $site = Site::insert($site_info); } else { Site::where("id", $site->id)->update($site_info); } Client::set(Site::where('uid', $site_info['uid'])->first()); $dataResponse = $this->dataSyncService->dataSync('register', 'product'); if (!$dataResponse) { return Helper::rvxApi(['error' => "Registration Fail"])->fails('Registration Fail', $dataResponse->getStatusCode()); } $this->cacheServices->removeCache(); $this->loginService->resetPostMeta(); $this->removeUserSettingsFormLocal(); // Set the localStorage isAlreadySyncSuccess \set_transient('rvx_reset_sync_flag', \true); return Helper::saasResponse($response); } catch (Exception $e) { $errorCode = $e->getCode() === 0 ? Response::HTTP_INTERNAL_SERVER_ERROR : $e->getCode(); $message = $e->getCode() === 0 ? 'Internal Server Error' : $e->getMessage(); return Helper::rvxApi(['error' => $message])->fails($message, $errorCode); } } public function migrationPrompt() { $migrationData = new MigrationPrompt(); $result = \false; if (ReviewXChecker::isReviewXExists() && !ReviewXChecker::isReviewXSaasExists()) { $result = $migrationData->rvx_retrieve_old_plugin_options_data(); } elseif (ReviewXChecker::isReviewXSaasExists()) { $result = $migrationData->rvx_retrieve_saas_plugin_options_data(); } if ($result !== \false) { $successMessage = "Old Data found"; return Helper::rvxApi($result)->success($successMessage, 200); } else { $failsMessage = "No Data found"; return Helper::rvxApi(null)->success($failsMessage, 200); } } public function removeUserSettingsFormLocal() { global $wpdb; $option_name = '__user_setting_access'; $exists = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM {$wpdb->options} WHERE option_name = %s", $option_name)); if ($exists > 0) { $result = $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->options} WHERE option_name = %s", $option_name)); if ($result !== \false) { return ["Success" => "Options Table Delete"]; } } } /** * Validate API response for required site data. * * @param array $apiData * @return bool */ private function validateSite(array $apiData) : bool { if (!\is_array($apiData) && !isset($apiData['id']) && !isset($apiData['uid'])) { return \false; } return \true; } protected function prepareRegisterData(array $site) : array { return ['site_id' => $site['id'], 'uid' => $site['uid'], 'name' => $site['name'], 'domain' => $site['domain'], 'url' => $site['url'], 'locale' => $site['locale'], 'email' => $site['email'], 'secret' => $site['key'], 'is_saas_sync' => 0, 'created_at' => \wp_date('Y-m-d H:i:s'), 'updated_at' => \wp_date('Y-m-d H:i:s')]; } } Controllers/FileController.php 0000777 00000000650 15251226203 0012514 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Utilities\Helper; use Rvx\WPDrill\Contracts\InvokableContract; class FileController implements InvokableContract { public function __invoke() { } public function upload($request) { $file = $request->get_file('file'); $response = $this->categoryService->processCategoryForSync($file); return Helper::saasResponse($response); } } Controllers/ImportExportController.php 0000777 00000007303 15251226203 0014313 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Throwable; use Rvx\WPDrill\Response; use Rvx\Utilities\Helper; use Rvx\Services\CacheServices; use Rvx\Services\ImportExportServices; use Rvx\WPDrill\Contracts\InvokableContract; class ImportExportController implements InvokableContract { protected ImportExportServices $importExportServices; protected CacheServices $cacheServices; /** * */ public function __construct(ImportExportServices $importExportServices, CacheServices $cacheServices) { $this->importExportServices = $importExportServices; $this->cacheServices = $cacheServices; } public function __invoke() { // This method is required by the InvokableContract but not used in this controller. } /** * @param $request * @return Response */ public function importSupportedAppStore($request) { try { $response = $this->importExportServices->importSupportedAppStore($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Change', $e->getCode()); } } /** * @param $request * @return Response * @throws Throwable */ public function importStore($request) { try { $response = $this->importExportServices->importStore($request); $this->cacheServices->removeCache(); return Helper::rest($response['data'] ?? [])->success($response['message'] ?? 'Review Import started'); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Import Failed', $e->getCode()); } } /** * @param $request * @return Response */ public function exportCsv($request) { try { $response = $this->importExportServices->exportCsv($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Change', $e->getCode()); } } /** * @return Response */ public function exportHistory() { $resp = $this->importExportServices->exportHistory(); return Helper::getApiResponse($resp); } /** * @return Response */ public function importHistory() { $resp = $this->importExportServices->importHistory(); return Helper::getApiResponse($resp); } public function importRollback($request) { try { $response = $this->importExportServices->importRollback($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Change', $e->getCode()); } } public function importRestore($request) { try { $response = $this->importExportServices->importRestore($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Visibility Change', $e->getCode()); } } public function rollbackReviews($request) { try { $response = $this->importExportServices->rollbackImportByIds($request->get_params()); return Helper::rest($response)->success($response['message'] ?? 'Review Rollback Success'); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Rollback Failed', $e->getCode()); } } } Controllers/DiscountController.php 0000777 00000011424 15251226203 0013426 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Services\DiscountService; use Rvx\Utilities\Auth\Client; use Rvx\Utilities\Helper; use Throwable; use Rvx\WPDrill\Response; class DiscountController { protected $couponService; /** * @param DiscountService $couponService */ public function __construct(DiscountService $couponService) { $this->couponService = $couponService; } /** * @param $request * @return Response */ public function wpDiscountCreate($request) : Response { try { $coupon = $this->couponService->wpDiscountCreate($request->get_params()); if (!$coupon) { return Helper::rvxApi()->success('Failed to create discount'); } $couponData = $coupon->get_data(); $couponId = Helper::arrayGet($couponData, 'id'); $payload = ['wp_id' => $couponId, 'wp_unique_id' => Client::getUid() . '-' . $couponId, 'code_type' => $request->get_param('code_type'), 'status' => 1, 'site_id' => Client::getSiteId(), 'request_type' => $request->get_param('request_type'), 'type' => $request->get_param('discount_type') === 'percent' ? 'percentage' : 'fixed_amount', 'value' => Helper::arrayGet($couponData, 'amount'), 'usage_limit_per_user' => $request->get_param('usage_limit_per_user') ?? 0, 'usage_limit_per_coupon' => $request->get_param('usage_limit') ?? 0, 'minimum_amount' => (int) Helper::arrayGet($couponData, 'minimum_amount'), 'maximum_amount' => (int) Helper::arrayGet($couponData, 'maximum_amount'), 'exclude_sale_items_from_discount' => $request->get_param('exclude_sale_items_from_discount'), 'free_shipping' => $request->get_param('free_shipping'), 'can_be_used_with_other_coupon' => $request->get_param('individual_use'), 'single_code' => Helper::arrayGet($couponData, 'code'), 'start_date' => $request->get_param('start_date') ?? \date('Y-m-d'), 'start_time' => $request->get_param('start_time'), 'expires_in' => $request->get_param('expires_in'), 'end_date' => $request->get_param('expiry_date'), 'end_time' => $request->get_param('end_time')]; $resp = $this->couponService->saveDiscount($payload); if ($resp->getStatusCode() !== Response::HTTP_OK) { // Delete the created coupon if API request failed $this->couponService->deleteDiscount($couponId); return Helper::rvxApi()->fails('Failed to save discount to API'); } return Helper::getApiResponse($resp); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Create Fails', $e->getCode()); } } /** * @return Response */ public function getDiscount() { $resp = $this->couponService->getDiscount(); return Helper::getApiResponse($resp); } /** * @return Response */ public function discountSetting() { $resp = $this->couponService->discountSetting(); return Helper::getApiResponse($resp); } public function discountSettingsSave($request) { try { $response = $this->couponService->discountSettingsSave($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Create Fails', $e->getCode()); } } public function saveDiscount($request) { try { $response = $this->couponService->saveDiscount($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Create Fails', $e->getCode()); } } public function discountTemplateGet() { try { $response = $this->couponService->discountTemplateGet(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Template Get Fails', $e->getCode()); } } public function discountTemplatePost($request) { try { $response = $this->couponService->discountTemplatePost($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Coupon Template Fails', $e->getCode()); } } public function discountMessage($request) { try { $response = $this->couponService->discountMessage($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Discount Message', $e->getCode()); } } } Controllers/SettingController.php 0000777 00000020000 15251226203 0013241 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Services\SettingService; use Rvx\Utilities\Auth\Client; use Rvx\Utilities\Helper; use Throwable; use Rvx\WPDrill\Response; class SettingController { protected SettingService $settingService; public function __construct() { $this->settingService = new SettingService(); } public function getApiReviewSettingsOnSync($cpt_type = 'product') : array { $data = ["cpt_type" => $cpt_type]; $response = $this->settingService->getApiReviewSettings($data); return \json_decode($response, \true); } public function getApiReviewSettings($request) : Response { $cpt_type = \strtolower($request->get_param('cpt_type')) ? \strtolower($request->get_param('cpt_type')) : \false; $data = ["cpt_type" => $cpt_type]; $response = $this->settingService->getApiReviewSettings($data); return Helper::getApiResponse($response); } public function wooCommerceVerificationRating() { $response = $this->settingService->wooCommerceVerificationRating(); return $response; } public function wooVerificationRatingRequired() { $response = $this->settingService->wooVerificationRatingRequired(); return $response; } public function userSettingsAccess($request) { $data = $request->get_params()['user_access']; \update_option('__user_setting_access', \json_encode($data)); } public function saveApiReviewSettings($request) { try { $response = $this->settingService->saveApiReviewSettings($request->get_params()); if ($response->getStatusCode() === Response::HTTP_OK) { // Update Review Settings $review_settings = $response->getApiData()['review_settings']; if (!empty($review_settings['reviews']['show_verified_badge']) && $review_settings['reviews']['show_verified_badge'] === \true) { \update_option('woocommerce_review_rating_verification_label', 'yes'); } if (!empty($review_settings['reviews']['show_verified_badge']) && $review_settings['reviews']['show_verified_badge'] === \false) { \update_option('woocommerce_review_rating_verification_label', 'no'); } if (!empty($review_settings['reviews']['review_submission_policy']['options']['verified_customer']) && $review_settings['reviews']['review_submission_policy']['options']['verified_customer'] === \true) { \update_option('woocommerce_review_rating_verification_required', 'yes'); } if (!empty($review_settings['reviews']['review_submission_policy']['options']['verified_customer']) && $review_settings['reviews']['review_submission_policy']['options']['verified_customer'] === \false) { \update_option('woocommerce_review_rating_verification_required', 'no'); } $this->settingService->updateReviewSettings($review_settings, $request['post_type']); } return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review settings saved failed', $e->getCode()); } } public function wooCommerceVerificationRatingUpdate($request) { try { $response = $this->settingService->wooCommerceVerificationRatingUpdate($request->get_params()); return $response; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review settings saved failed', $e->getCode()); } } public function wooVerificationRating($request) { try { $response = $this->settingService->wooVerificationRating($request->get_params()); return $response; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review settings saved failed', $e->getCode()); } } public function getApiWidgetSettingsOnSync() : array { $response = $this->settingService->getApiWidgetSettings(); return \json_decode($response, \true); } public function getApiWidgetSettings() : Response { $response = $this->settingService->getApiWidgetSettings(); return Helper::getApiResponse($response); } public function userCurrentPlan() { $response = $this->settingService->userCurrentPlan(); return Helper::getApiResponse($response); } public function saveApiWidgetSettings($request) { try { $response = $this->settingService->saveWidgetSettings($request->get_params()); if ($response->getStatusCode() === Response::HTTP_OK) { // Update Widget Settings $widget_settings = $response->getApiData()['widget_settings']; $this->settingService->updateWidgetSettings($widget_settings); } return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Widget settings saved failed', $e->getCode()); } } public function getApiGeneralSettings() { $response = $this->settingService->getApiGeneralSettings(); return Helper::getApiResponse($response); } public function saveApiGeneralSettings($request) { try { $response = $this->settingService->saveApiGeneralSettings($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('General settings saved failed', $e->getCode()); } } public function getSettingsData() { $data = ["review_settings" => ["reviews" => ["review_submission_policy" => ["options" => ["anyone" => \true, "verified_customer" => \false]], "show_verified_badge" => \false, "review_eligibility" => ["pending_payment" => \false, "processing" => \false, "on_hold" => \false, "completed_payment" => \true, "cancelled" => \false, "refunded" => \false, "failed" => \false, "draft" => \false], "auto_approve_reviews" => \true, "show_reviewer_name" => \true, "show_reviewer_country" => \true, "enable_likes_dislikes" => ["enabled" => \true, "options" => ["allow_likes" => \true, "allow_dislikes" => \false]], "allow_review_sharing" => \true, "allow_review_titles" => \true, "photo_reviews_allowed" => \true, "video_reviews_allowed" => \true, "allow_recommendations" => \true, "anonymous_reviews_allowed" => \true, "show_consent_checkbox" => \true, "allow_multiple_reviews" => \true, "multi_criteria_reviews" => ["enabled" => \true, "criteria" => ["Quality", "Price", "Size"]]]]]; $json_data = \json_encode($data); \update_option('your_option_name', $json_data); } public function dataSyncStatus() { return ['sync' => Client::getSync() ? \true : \false]; } public function allSettingsSave($request) { try { $response = $this->settingService->allSettingsSave($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('General settings saved failed', $e->getCode()); } } public function removeCredentials($request) { try { $response = $this->settingService->removeCredentials($request->get_headers()); return $response; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Sites Table Data deletion failed', $e->getCode()); } } public function updateSiteData($request) { try { $response = $this->settingService->updateSiteData($request->get_headers()); return $response; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Sites Table Data update failed', $e->getCode()); } } } Controllers/AccessController.php 0000777 00000001150 15251226203 0013032 0 ustar 00 <?php namespace Rvx\Rest\Controllers; class AccessController { public function adminAccess($request) { // do something //dd('Access Controller'); $command = $request->get_params()['command']; //dd($command); if ($command === 'site_block') { $this->siteBlock(); } elseif ($command === 'site_hit') { $this->siteHit(); } } private function siteBlock() { // do something dd('Site Block Method'); } private function siteHit() { // do something dd('Site Hit Method'); } } Controllers/CptController.php 0000777 00000030575 15251226203 0012374 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\CPT\CptHelper; use Rvx\Services\CptService; use Rvx\Services\DataSyncService; use Rvx\Services\SettingService; use Rvx\Utilities\Helper; use Rvx\Services\CacheServices; use Throwable; use Rvx\WPDrill\Response; class CptController { protected CptService $cptService; protected DataSyncService $dataSyncService; protected CacheServices $cacheServices; protected CptHelper $cptHelper; public function __construct() { $this->cptService = new CptService(); $this->dataSyncService = new DataSyncService(); $this->cacheServices = new CacheServices(); $this->cptHelper = new CptHelper(); } /** * @return array */ public function cptGetOnSync() { $response = $this->cptService->cptGet(); $status = $this->cptSettings($response); return [$status, \json_decode($response, \true)]; } /** * @return Response */ public function cptGet() { $response = $this->cptService->cptGet(); $this->cptSettings($response); return Helper::getApiResponse($response); } /** * @return Response */ public function cptStore($request) { try { $response = $this->cptService->cptStore($request->get_params()); $resData = Helper::saasResponse($response); if ($response->getStatusCode() === 200) { // Update (_rvx_cpt_settings) CPT Settings $response = $this->cptService->cptGet(); $this->cptSettings($response); // Update (_rvx_ettings_{post_type}) CPT Settings $post_type = $resData->data['data']['post_type'] ? \strtolower($resData->data['data']['post_type']) : ''; if (!empty($post_type)) { $review_response = (new \Rvx\Rest\Controllers\SettingController())->getApiReviewSettingsOnSync($post_type); // Update Review settings $review_settings = $review_response['data']['review_settings']; (new SettingService())->updateReviewSettingsOnSync($review_settings, \strtolower($post_type)); } // Upload CPT data to Saas $this->dataSyncService->dataSync('default', $post_type); $this->cacheServices->removeCache(); } return Helper::rvxApi($resData)->success('Create Success', 200); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Create Fails', $e->getCode()); } } /** * @return Response */ public function cptUpdate($request) { try { $response = $this->cptService->cptUpdate($request->get_params()); $resData = Helper::saasResponse($response); if ($response->getStatusCode() === 200) { // Update (_rvx_cpt_settings) CPT Settings $response = $this->cptService->cptGet(); $this->cptSettings($response); } return Helper::rvxApi($resData)->success('Update Success', 200); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Update Fails', $e->getCode()); } } /** * @return Response */ public function cptDelete($request) { try { $response = $this->cptService->cptDelete($request->get_params()); $resData = Helper::saasResponse($response); if ($response->getStatusCode() === 200) { // Update (_rvx_cpt_settings) CPT Settings $response = $this->cptService->cptGet(); $this->cptSettings($response); } return Helper::rvxApi($resData)->success('Delete Success', 200); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Delete Fails', $e->getCode()); } } public function customPostTypes($request) { try { // Available post types $cptList = \array_map(function ($cpt) { return ['name' => \strtolower($cpt['name']), 'slug' => \strtolower($cpt['slug'])]; }, $this->cptHelper->getPublicCptList()); // Post type settings from WPDB $cptSettings = $this->cptHelper->cptSettings(); $enabled = []; $disabled = []; $used = []; $unused = []; // Extract post types from settings $reviewPostTypes = []; if (!empty($cptSettings['reviews'])) { foreach ($cptSettings['reviews'] as $review) { $postType = \strtolower($review['post_type']); $reviewPostTypes[$postType] = ['name' => $review['post_type'] ? \strtolower($review['post_type']) : $postType, 'slug' => $postType, 'status' => $review['status']]; } } // Categorize post types foreach ($cptList as $cpt) { $slug = \strtolower($cpt['slug']); $name = \strtolower($cpt['name']); if (isset($reviewPostTypes[$slug])) { $used[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug]; if ($reviewPostTypes[$slug]['status'] === 'Enabled') { $enabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug]; } else { $disabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug]; } } else { $unused[] = ['name' => $name, 'slug' => $slug]; } } // Ensure 'product' post type is included in all except 'unused' $productPostType = ['name' => 'product', 'slug' => 'product']; if (!\in_array('product', \array_column($enabled, 'slug'))) { $enabled[] = $productPostType; } if (!\in_array('product', \array_column($cptList, 'slug'))) { $cptList[] = $productPostType; } if (!\in_array('product', \array_column($used, 'slug'))) { $used[] = $productPostType; } // Get API param $apiParam = 'all'; if (\is_string($request)) { // $apiParam is a string $apiParam = $request; } elseif (\is_object($request)) { // $apiParam is an array $apiParam = \strtolower($request->get_param('cpt')); } $responseData = []; switch ($apiParam) { case 'enabled': $responseData = $enabled; break; case 'disabled': $responseData = $disabled; break; case 'used': $responseData = $used; break; case 'unused': $responseData = $unused; break; case 'all': $responseData = $cptList; break; default: $responseData = $cptList; } if (\is_string($request)) { return $responseData; } elseif (\is_object($request)) { return Helper::rvxApi($responseData)->success(); } } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Custom Post Types List Fails', $e->getCode()); } } public function customPostTypesOnSync($param) { try { // Available post types $cptList = \array_map(function ($cpt) { return ['name' => \strtolower($cpt['name']), 'slug' => \strtolower($cpt['slug'])]; }, $this->cptHelper->getPublicCptList()); // Post type settings from WPDB $cptSettings = $this->cptHelper->cptSettingsOnSync(); $enabled = []; $disabled = []; $used = []; $unused = []; // Extract post types from settings $reviewPostTypes = []; if (!empty($cptSettings['reviews'])) { foreach ($cptSettings['reviews'] as $review) { $postType = \strtolower($review['post_type']); $reviewPostTypes[$postType] = ['name' => $review['post_type'] ? \strtolower($review['post_type']) : $postType, 'slug' => $postType, 'status' => $review['status']]; } } // Categorize post types foreach ($cptList as $cpt) { $slug = \strtolower($cpt['slug']); $name = \strtolower($cpt['name']); if (isset($reviewPostTypes[$slug])) { $used[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug]; if ($reviewPostTypes[$slug]['status'] === 'Enabled') { $enabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug]; } else { $disabled[] = ['name' => $reviewPostTypes[$slug]['name'], 'slug' => $slug]; } } else { $unused[] = ['name' => $name, 'slug' => $slug]; } } // Ensure 'product' post type is included in all except 'unused' $productPostType = ['name' => 'product', 'slug' => 'product']; if (!\in_array('product', \array_column($enabled, 'slug'))) { $enabled[] = $productPostType; } if (!\in_array('product', \array_column($cptList, 'slug'))) { $cptList[] = $productPostType; } if (!\in_array('product', \array_column($used, 'slug'))) { $used[] = $productPostType; } // Get param if (empty($param)) { // $param is a string $apiParam = 'all'; } elseif (\is_string($param)) { // $apiParam is an array $apiParam = \strtolower($param); } $responseData = []; switch ($apiParam) { case 'enabled': $responseData = $enabled; break; case 'disabled': $responseData = $disabled; break; case 'used': $responseData = $used; break; case 'unused': $responseData = $unused; break; case 'all': $responseData = $cptList; break; default: $responseData = $cptList; } return $responseData; } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Custom Post Types List Fails', $e->getCode()); } } /** * @return Response */ public function cptStatusChange($request) { try { $response = $this->cptService->cptStatusChange($request->get_params()); $resData = Helper::saasResponse($response); if ($response->getStatusCode() === 200) { // Update (_rvx_cpt_settings) CPT Settings $response = $this->cptService->cptGet(); $this->cptSettings($response); // Update (_rvx_ettings_{post_type}) CPT Settings $post_type = $resData->data['data']['post_type'] ? \strtolower($resData->data['data']['post_type']) : ''; // Upload CPT data to Saas if ($resData->data['data']['status'] === 'Enabled') { $this->dataSyncService->dataSync('default', $post_type); $this->cacheServices->removeCache(); } } return Helper::rvxApi($resData)->success('Status Change Success', 200); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Status Change Fails', $e->getCode()); } } public function cptSettings($response) { $status = \false; $dataArray = \json_decode($response, \true); if ($dataArray !== null) { $status = \update_option('_rvx_cpt_settings', $dataArray['data']); } return $status; } } Controllers/StoreFrontReviewController.php 0000777 00000041056 15251226203 0015131 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Exception; use Rvx\Services\Api\LoginService; use Rvx\Services\ReviewService; use Rvx\Services\CacheServices; use Rvx\Services\SettingService; use Rvx\Utilities\Auth\Client; use Rvx\Utilities\Helper; use Throwable; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class StoreFrontReviewController implements InvokableContract { protected ReviewService $reviewService; protected SettingService $settingService; protected LoginService $loginService; protected CacheServices $cacheService; public function __construct() { $this->reviewService = new ReviewService(); $this->settingService = new SettingService(); $this->loginService = new LoginService(); $this->cacheService = new CacheServices(); } /** * @return void */ public function __invoke() { } public function settingMeta($request) : Response { try { $this->reviewService->settingMeta($request); return Helper::rest()->success("Success"); } catch (Exception $e) { return Helper::rest()->fails("Fails"); } } public function dataGetFromSaas($request) { $response = $this->reviewService->getWidgetReviewsForProduct($request); if ($response->getStatusCode() !== Response::HTTP_OK) { return \false; } return $response->getApiData(); } public function getWidgetReviewsForProduct($request) { $diffReviewCount = $this->reviewCountDifferent($request["product_id"]); if ($diffReviewCount === \true) { \delete_transient("rvx_{$request["product_id"]}_latest_reviews"); return $this->dataGetFormSaas($request); } $productId = $request["product_id"]; $postMata = \get_transient("rvx_{$productId}_latest_reviews"); if ($postMata) { if (\count($postMata["reviews"]) != $this->insightReviewCount($request["product_id"])) { \delete_transient("rvx_{$request["product_id"]}_latest_reviews"); return $this->dataGetFormSaas($request); } if ($request->get_param("cursor") || $request->get_param("rating") || $request->get_param("sortBy") || $request->get_param("attachment")) { $response = $this->reviewService->getWidgetReviewsForProduct($request); return Helper::saasResponse($response); } else { if ($this->is_valid_data($postMata)) { //valid $response = ["reviews" => $postMata["reviews"], "meta" => $postMata["meta"]]; if ($response) { return Helper::rest($response)->success("Success"); } else { return Helper::rest()->fails("Fails"); } } else { //invalid $this->loginService->resetProductWisePostMeta($request["product_id"]); return $this->dataGetFormSaas($request); } } } else { return $this->dataGetFormSaas($request); } } public function getAllReviewsDataFromSaas($request, $site_id) { $response = $this->reviewService->getWidgetAllReviewsForSite($request, $site_id); if ($response->getStatusCode() !== Response::HTTP_OK) { return \false; } return $response->getApiData(); } public function getWidgetAllReviewsListForSite($request) { $site_id = Client::getUid(); $post_type = $request['post_type'] ?? 'all'; $postMata = \get_transient("rvx_{$site_id}_{$post_type}_reviews"); if ($post_type === 'all') { $post_type = null; } if (!$postMata) { return $this->getAllReviewsFromSaas($request, $site_id, $post_type); } if ($request->get_param("cursor") || $request->get_param("rating") || $request->get_param("sort_by") || $request->get_param("attachment")) { $response = $this->reviewService->getWidgetAllReviewsForSite($request, $site_id); return Helper::saasResponse($response); } if ($this->is_valid_data($postMata)) { $response = ["reviews" => $postMata["reviews"], "meta" => $postMata["meta"]]; if ($response) { return Helper::rest($response)->success("Success"); } return Helper::rest()->fails("Fails"); } // invalid cached data → reset and fetch fresh $this->resetSiteWiseTransientMeta($site_id, $post_type); return $this->getAllReviewsFromSaas($request, $site_id, $post_type); } public function resetSiteWiseTransientMeta($site_id, $post_type) { global $wpdb; $post_type = $post_type != null ? $post_type : 'all'; $review_key = "rvx_{$site_id}_{$post_type}_reviews"; // Prepare and execute the deletion query $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s", $review_key)); } public function getWidgetReviewsListShortcode($request) { $productId = $request['product_id']; // mismatch in review count → reset + fetch if ($this->reviewCountDifferent($productId)) { \delete_transient("rvx_{$productId}_latest_reviews"); return $this->dataGetFormSaas($request); } $postMeta = \get_transient("rvx_{$productId}_latest_reviews"); // no cache → fetch if (!$postMeta) { return $this->dataGetFormSaas($request); } // cache count mismatch → reset + fetch if (\count($postMeta['reviews']) !== $this->insightReviewCount($productId)) { \delete_transient("rvx_{$productId}_latest_reviews"); return $this->dataGetFormSaas($request); } // request has filters → always fetch fresh if ($request->get_param('cursor') || $request->get_param('rating') || $request->get_param('sortBy') || $request->get_param('attachment')) { $response = $this->reviewService->getWidgetReviewsListShortcode($request); return Helper::saasResponse($response); } // cached data valid → return if ($this->is_valid_data($postMeta)) { return Helper::rest(['reviews' => $postMeta['reviews'], 'meta' => $postMeta['meta']])->success('Success'); } // invalid cached data → reset + fetch $this->loginService->resetProductWisePostMeta($productId); return $this->dataGetFormSaas($request); } public function getAllReviewsFromSaas($request, $site_id, $post_type) { $latestReviews = $this->getAllReviewsDataFromSaas($request, $site_id); if (!$latestReviews) { return Helper::rvxApi(["error" => "Fails"])->fails("failed"); } $reviews = Helper::arrayGet($latestReviews, "reviews"); if (\count($reviews) > 0) { $this->reviewService->setAllReviewsMetaTransient($site_id, $post_type, $latestReviews); } return ["data" => $latestReviews]; } public function dataGetFormSaas($request) { $latestReview = $this->dataGetFromSaas($request); if (!$latestReview) { return Helper::rvxApi(["error" => "Fails"])->fails("failed"); } $reviews = Helper::arrayGet($latestReview, "reviews"); if (\count($reviews) > 0) { $this->reviewService->postMetaReviewInsert($request->get_param("product_id"), $latestReview); } return ["data" => $latestReview]; } public function is_valid_data($postMata) { if (\is_array($postMata)) { return \true; } return \false; } public function insightDataGetInSaas($request) { $response = $this->reviewService->getWidgetInsight($request); if ($response->getStatusCode() !== Response::HTTP_OK) { return \false; } return $response->getApiData(); } public function getWidgetInsight($request) { try { $diffReviewCount = $this->reviewCountDifferent($request["product_id"]); if ($diffReviewCount === \true) { return ["data" => $this->insightDataelsePart($request)]; } $data = \get_transient("rvx_{$request["product_id"]}_latest_reviews_insight"); if ($data) { $aggregation = \json_decode($data, \true); if (\is_array($aggregation)) { $aggregation['product']['title'] = \htmlspecialchars_decode($aggregation['product']['title'], \ENT_QUOTES); } if (!\is_array($aggregation)) { $modData = $this->productTitleAndDescriptionBackSlashRemove($data); $aggregation = \json_decode($modData, \true); } if ($aggregation) { return Helper::rest($aggregation)->success("Success"); } else { return Helper::rest()->fails("Fails"); } } else { // Fetch the latest aggregation data return ["data" => $this->insightDataelsePart($request)]; } } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("failed", $e->getCode()); } } public function insightDataelsePart($request) { $latestAggregation = $this->insightDataGetInSaas($request); // Check if the data retrieval fails if (!$latestAggregation) { return Helper::rvxApi(["error" => "Fails"])->fails("failed"); } // Extract 'criteria_stats' from the latest aggregation data (always an array) $criteriaStat = Helper::arrayGet($latestAggregation, "criteria_stats"); // No need to decode since it's always an array, just assign back $latestAggregation["criteria_stats"] = $criteriaStat; \delete_transient("rvx_{$request->get_param("product_id")}_latest_reviews_insight"); // Store the data in post meta as a JSON string $latestAggregationJson = \json_encode($latestAggregation, \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES); \set_transient("rvx_{$request->get_param("product_id")}_latest_reviews_insight", $latestAggregationJson, 604800); // Expires in 7 days return $latestAggregation; } public function productTitleAndDescriptionBackSlashRemove($data) { return \preg_replace('/("title":")([^"\\\\]+)\\\\\'/', '$1$2\'', $data); } public function reviewCountDifferent($id) : bool { $wpReview = $this->getOnlyApproveReviewCount($id); $saasReview = $this->insightReviewCount($id); if ($wpReview > $saasReview) { return \true; } if ($wpReview < $saasReview) { return \true; } return \false; } public function getOnlyApproveReviewCount($id) : int { global $wpdb; $query = $wpdb->prepare("SELECT COUNT(*) \n FROM {$wpdb->comments} \n WHERE comment_post_ID = %d \n AND comment_approved = '1' \n AND comment_parent = 0\n AND comment_type IN ('comment', 'review')", $id); return (int) $wpdb->get_var($query); } public function insightReviewCount($id) : int { $data = \get_transient("rvx_{$id}_latest_reviews_insight"); if ($data) { $reviewAggregation = \json_decode($data, \true); return $reviewAggregation['aggregation']['total_reviews'] ?? 0; } return 0; } /** * @param $request * @return Response */ public function saveWidgetReviewsForProduct($request) { try { $response = $this->reviewService->saveWidgetReviewsForProduct($request); $this->cacheService->removeCache(); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("failed", $e->getCode()); } } /** * @param $request * @return Response */ public function requestReviewEmailAttachment($request) : Response { try { $data = $this->reviewService->requestReviewEmailAttachment($request); return Helper::rvxApi(["reviews" => $data])->success("Review Successfully sent", 200); } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("failed", $e->getCode()); } } /** * @param $request * @return Response */ public function likeDislikePreference($request) { try { $response = $this->reviewService->likeDIslikePreference($request->get_params()); return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("failed", $e->getCode()); } } public function singleActionProductMata($request) { $reviewData = Helper::arrayGet($request->get_params(), "review"); $aggregationData = Helper::arrayGet($request->get_params(), "aggregation"); $productId = Helper::arrayGet($aggregationData, "product_wp_id"); if (!$productId) { return; } $this->storeReviewMeta($productId, $reviewData); $this->storeAggregationMeta($productId, $aggregationData); } public function storeReviewMeta($productId, $payload) { $reviewAndMeta = ["reviews" => Helper::arrayGet($payload, "reviews"), "meta" => Helper::arrayGet($payload, "meta")]; $this->reviewService->postMetaReviewInsert($productId, $reviewAndMeta); } public function storeAggregationMeta($productId, $payload) { $aggregation_data = \json_encode(wp_slash(Helper::arrayGet($payload, "meta")), \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES); \set_transient("rvx_{$productId}_latest_reviews_insight", $aggregation_data, 604800); // Expires in 7 days } public function reviewRequestStoreItem($request) { try { $review = $this->reviewService->reviewRequestStoreItem($request->get_params()); return $review; // return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("failed", $e->getCode()); } } public function thanksMessage($request) { try { $response = $this->reviewService->thanksMessage($request); return $response; } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("failed", $e->getCode()); } } public function getSpecificReviewItem($request) { try { $defferentIds = $this->cacheService->clearShortcodesCache(\get_option('_rvx_reviews_ids'), $request->get_params()); if ($defferentIds == \false) { \delete_transient('rvx_shortcode_transient'); } $transient_key = 'rvx_shortcode_transient'; $resp = \get_transient($transient_key); if ($resp !== \false) { $data = ['reviews' => $resp['reviews'], 'meta' => $resp['meta']]; return Helper::rest($data)->success("Success (from transient)"); } else { $response = $this->reviewService->getSpecificReviewItem($request); $api_data = $response->getApiData(); \set_transient($transient_key, $api_data, 12 * HOUR_IN_SECONDS); \update_option('_rvx_reviews_ids', $request->get_params()); return Helper::saasResponse($response); } } catch (Throwable $e) { return Helper::rvxApi(["error" => $e->getMessage()])->fails("Specific Review Item Fails", $e->getCode()); } } public function getLocalSettings($request) { // Get API param $post_type = $request->get_param('cpt_type') ? \strtolower($request->get_param('cpt_type')) : 'product'; $data = (array) (new SettingService())->getSettingsData($post_type) ?? []; if ($data) { return Helper::rest($data)->success("Success"); } else { $response = $this->settingService->getLocalSettings($post_type); $apiResponse = Helper::getApiResponse($response); $review_setting = $apiResponse->data['data']['setting']['review_settings']; $this->settingService->updateReviewSettings($review_setting, $post_type); return $apiResponse; } } } Controllers/EmailTemplateController.php 0000777 00000013401 15251226203 0014356 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Rvx\Services\EmailService; use Rvx\Utilities\Helper; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class EmailTemplateController implements InvokableContract { protected $emailService; /** * @param EmailService $emailService */ public function __construct(EmailService $emailService) { $this->emailService = $emailService; } /** * @return void */ public function __invoke() { } /** * @return Response */ public function index() { $resp = $this->emailService->index(); return Helper::getApiResponse($resp); } /** * @return Response */ public function store($request) { try { $response = $this->emailService->store($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } /** * @return Response */ public function show($request) { $id = $request->get_param('id'); $resp = $this->emailService->show($id); return Helper::getApiResponse($resp); } public function update($request) { try { $response = $this->emailService->update($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function trash($request) { $id = $request->get_param('id'); $resp = $this->emailService->trash($id); return Helper::getApiResponse($resp); } public function mailRequest($request) { $resp = $this->emailService->mailRequest($request->get_params()); return Helper::getApiResponse($resp); } public function mailContents() { $resp = $this->emailService->content(); return Helper::getApiResponse($resp); } public function saveEmailRequest($request) { try { $response = $this->emailService->saveEmailRequest($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function followup($request) { try { $response = $this->emailService->followup($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function photoReview($request) { try { $response = $this->emailService->photoReview($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function testMail($request) { try { $response = $this->emailService->testMail($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function markAsDone($request) { try { $response = $this->emailService->markAsComplete($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function requestEmailCancel($request) { try { $response = $this->emailService->emailCancel($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function requestEmailSend($request) { try { $response = $this->emailService->requestEmailSend($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function requestEmailResend($request) { try { $response = $this->emailService->requestEmailResend($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function requestEmailUnsubscribe() { try { $response = $this->emailService->requestEmailUnsubscribe(); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } public function reviewRequestSettings() { $resp = $this->emailService->reviewRequestSettings(); return Helper::getApiResponse($resp); } public function allReminderSettings($request) { try { $response = $this->emailService->allReminderSettings($request->get_params()); return Helper::saasResponse($response); } catch (\Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('This Action Fails', $e->getCode()); } } } Controllers/Products/ProductController.php 0000777 00000002331 15251226203 0015056 0 ustar 00 <?php namespace Rvx\Rest\Controllers\Products; use Rvx\Services\ProductService; use Rvx\Utilities\Helper; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class ProductController implements InvokableContract { protected $productService; /** * @param ProductService $productService */ public function __construct(ProductService $productService) { $this->productService = $productService; } public function __invoke() { } /** * @return Response */ public function selectable($request) { $resp = $this->productService->getSelectProduct($request->get_params()); if ($resp->getStatusCode() === Response::HTTP_OK) { $data = $resp->getApiData(); if (isset($data['products']) && \is_array($data['products'])) { foreach ($data['products'] as &$product) { if (isset($product['wp_id'])) { $product['post_type'] = get_post_type($product['wp_id']); } } } return Helper::rest($data)->success($resp()->message, $resp->getStatusCode()); } return Helper::getApiResponse($resp); } } Controllers/GoogleReviewController.php 0000777 00000005020 15251226203 0014227 0 ustar 00 <?php namespace Rvx\Rest\Controllers; use Throwable; use Rvx\Services\GoogleReviewService; use Rvx\Utilities\Helper; use Rvx\WPDrill\Contracts\InvokableContract; use Rvx\WPDrill\Response; class GoogleReviewController implements InvokableContract { protected $googleReviewService; /** * @param GoogleReviewService $googleReviewService */ public function __construct(GoogleReviewService $googleReviewService) { $this->googleReviewService = $googleReviewService; } /** * @return void */ public function __invoke() { } /** * @return Response */ public function googleReviewGet() { $resp = $this->googleReviewService->googleReviewGet(); return Helper::getApiResponse($resp); } /** * @return Response */ public function googleReviewPlaceApi() { $resp = $this->googleReviewService->googleReviewPlaceApi(); return Helper::getApiResponse($resp); } /** * @return Response */ public function googleRecaptchaVerify($request) { $resp = $this->googleReviewService->googleRecaptchaVerify($request->get_params()); return $resp; } /** * @return Response */ public function googleReviewKey($request) { try { $response = $this->googleReviewService->googleReviewKey($request->get_params()); \delete_transient('rvx_google_api_settings'); // When settings is changed remove the cache wpdb transient data \delete_transient('rvx_google_reviews_cache'); // When settings is changed remove the cache wpdb transient data return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } /** * @return Response */ public function googleReviewSetting($request) { try { $response = $this->googleReviewService->googleReviewSetting($request->get_params()); \delete_transient('rvx_google_api_settings'); // When settings is changed remove the cache wpdb transient data \delete_transient('rvx_google_reviews_cache'); // When settings is changed remove the cache wpdb transient data return Helper::saasResponse($response); } catch (Throwable $e) { return Helper::rvxApi(['error' => $e->getMessage()])->fails('Review Bulk Fails', $e->getCode()); } } }
| ver. 1.6 |
Github
|
.
| PHP 8.1.34 | Генерация страницы: 0 |
proxy
|
phpinfo
|
Настройка