PATH:
home
/
letacommog
/
laindinois
/
wp-content
/
plugins
/
wiloke-listing-tools
/
app
/
Controllers
<?php namespace WilokeListingTools\Controllers; use WilokeListingTools\Controllers\TransformAddListingData\TransformAddListingToBackEnd; use WilokeListingTools\Controllers\TransformAddListingData\TransformAddListingToBackEndFactory; use WilokeListingTools\Framework\Helpers\AddListingFieldSkeleton; use WilokeListingTools\Framework\Helpers\Collection\ArrayCollectionFactory; use WilokeListingTools\Framework\Helpers\General; use WilokeListingTools\Controllers\Retrieve\AjaxRetrieve; use WilokeListingTools\Framework\Helpers\GetSettings; use WilokeListingTools\Framework\Helpers\SearchFormSkeleton; use WilokeListingTools\Framework\Helpers\Submission; use WilokeListingTools\Framework\Helpers\Time; use WilokeListingTools\Framework\Helpers\Validation as ValidationHelper; use WilokeListingTools\Frontend\User; trait Validation { protected $aListingData = [ 'post_title' => 'No Title 1', 'post_status' => 'unpaid' ]; protected $aCoupon; protected $aRawFeaturedImage; protected $aRawCoverImg; protected $parentListingID; protected $aRawLogo; protected $myRoom; protected $myPosts; protected $aTags = []; protected $category = []; protected $location = []; protected $email; protected $website; protected $phone; protected $aGoogleAddress = []; protected $aPriceRange = []; protected $aSocialNetworks = []; protected $aBusinessHours = []; protected $aGallery = []; protected $aRawGallery = []; protected $aGeneralData = []; protected $aEventCalendar = []; protected $aHostedBy = []; protected $aCustomButton = []; protected $aVideos = []; protected $aCustomGroupCollection = []; protected $aCustomSections; protected $aRestaurantMenu = []; protected $singlePrice; protected $aBookingComBannerCreator = []; protected $aMyProducts = []; protected $aListingRelationships = []; protected $aAddListingSettings; /** * @var \WilokeListingTools\Framework\Helpers\AddListingFieldSkeleton $oAddListingSkeleton */ protected $oAddListingSkeleton; protected $aCustomTaxonomies = []; /** * @var RetrieveController */ protected $oRetrieveValidation; protected $aRestData = []; protected $aResolvedToggleKeys = [ 'video' => 'videos' ]; protected function isAllowSaving($key) { return !isset($this->aPlanSettings[$key]) || $this->aPlanSettings[$key] !== 'disable'; } /** * @param string $key * * @return array|string */ public function getRestData($key = '') { if (!empty($key)) { return isset($this->aRestData[$key]) ? $this->aRestData[$key] : ''; } return $this->aRestData; } protected function getToggleKey($sectionKey) { $key = isset($this->aResolvedToggleKeys[$sectionKey]) ? $this->aResolvedToggleKeys[$sectionKey] : $sectionKey; return 'toggle_'.$key; } protected function sureItemsDoNotExceededPlan($planKey, $aItems) { if (!isset($this->aPlanSettings[$planKey]) || empty($this->aPlanSettings[$planKey])) { return $aItems; } return array_splice($aItems, 0, $this->aPlanSettings[$planKey]); } protected function cleanListingCat($aSection) { if (!isset($aSection['listing_cat']) || empty($aSection['listing_cat'])) { $this->category = []; return true; } if (isset($aSection['listing_cat']['id'])) { $this->category = abs($aSection['listing_cat']['id']); return true; } if (is_array($aSection['listing_cat'])) { array_map( function ($aItem) { $this->category[] = absint($aItem['id']); }, $aSection['listing_cat'] ); } else { $this->category = [$aSection['listing_cat']]; } return true; } protected function cleanListingTag($aSection) { if (!isset($aSection['listing_tag']) || empty($aSection['listing_tag'])) { $this->aTags = []; } if (isset($aSection['listing_tag']['id'])) { $this->aTags = [abs($aSection['listing_tag']['id'])]; } array_map( function ($aItem) { $this->aTags[] = absint($aItem['id']); }, $aSection['listing_tag'] ); return true; } protected function cleanRestaurantMenu($aSection) { if (!$this->isAllowSaving('toggle_restaurant_menu')) { return false; } if (!isset($aSection['restaurant_menu']) || empty($aSection['restaurant_menu'])) { return false; } $aMenus = $this->sureItemsDoNotExceededPlan('maximumRestaurantMenus', $aSection['restaurant_menu']); foreach ($aMenus as $menuOrder => $aMenu) { if (isset($aMenu['items']) && !empty($aMenu['items'])) { foreach ($aMenu['items'] as $itemOrder => $aItem) { if (isset($aItem['gallery']) && !empty($aItem['gallery'])) { $aGallery = $this->sureItemsDoNotExceededPlan('maximumGalleryImages', $aItem['gallery']); $aMenu['items'][$itemOrder]['gallery'] = Submission::convertGalleryToBackendFormat($aGallery); } $aMenus[$menuOrder]['items'] = $this->sureItemsDoNotExceededPlan('maximumItemsInMenu', $aMenu['items']); } } } $this->aRestaurantMenu = ValidationHelper::deepValidation($aMenus); return false; } protected function cleanSocialNetworks($aValue) { if (empty($aValue)) { return []; } foreach ($aValue as $aSocial) { $key = (string)ValidationHelper::deepValidation($aSocial['id']); $this->aSocialNetworks[$key] = ValidationHelper::deepValidation($aSocial['value']); } } protected function cleanCoupon($aSection) { if (Submission::isPlanSupported($this->planID, 'toggle_coupon')) { foreach ($aSection as $key => $val) { $key = str_replace('coupon_', '', $key); if ($key === 'expiry_date') { $this->aCoupon[$key] = ValidationHelper::deepValidation($val, 'absint'); if (!empty($this->aCoupon[$key])) { $this->aCoupon[$key] = $this->aCoupon[$key] / 1000; // JS timestamp always bigger 1k PHP timestamp } } else { $this->aCoupon[$key] = ValidationHelper::deepValidation($val); } } } } protected function cleanListingTitle(array $aSection) { if (isset($aSection['listing_title']) && !empty($aSection['listing_title'])) { if (isset($aSection['listing_title']['listing_title'])) { $listingTitle = $aSection['listing_title']['listing_title']; $this->aListingData['post_title'] = ValidationHelper::deepValidation($listingTitle); } else { $this->aListingData['post_title'] = ValidationHelper::deepValidation($aSection['listing_title']); } } } protected function cleanListingContent(array $aSection) { if (isset($aSection['listing_content']) && !empty($aSection['listing_content'])) { $this->aListingData['post_content'] = wp_kses_post($aSection['listing_content']); return true; } return false; } protected function surePassConditional($sectionKey) { $toggleKey = $this->getToggleKey($sectionKey); if (!Submission::isPlanSupported($this->planID, $toggleKey)) { return true; } $aFieldGroups = ArrayCollectionFactory::set($this->aAddListingSettings) ->deepPluck($sectionKey.'->fieldGroups') ->output() ; if (empty($aFieldGroups)) { return true; } foreach ($aFieldGroups as $fieldKey => $aFieldInfo) { if (!Submission::isPlanSupported($this->planID, $this->getToggleKey($fieldKey))) { return true; } $toggle = ArrayCollectionFactory::set($aFieldInfo)->pluck('toggle')->format('string')->output('enable'); $required = ArrayCollectionFactory::set($aFieldInfo)->pluck('isRequired')->format('bool')->output(); if (($toggle != 'disable') && $required && (!isset($this->aData[$sectionKey]) || !isset($this->aData[$sectionKey][$fieldKey]) || empty($this->aData[$sectionKey][$fieldKey])) ) { $this->oRetrieveValidation->error( [ sprintf(esc_html__('%s is required', 'wiloke-listing-tools'), isset($aFieldInfo['label']) ? $aFieldInfo['label'] : $aFieldInfo['key']) ] ); } } } protected function cleanGeneralData(array $aSection, $sectionKey = "") { foreach ($aSection as $key => $val) { $type = ArrayCollectionFactory::set($this->aAddListingSettings)->deepPluck($sectionKey.'->type')->output(); switch ($type) { case 'custom_taxonomy': $taxonomy = $this->oAddListingSkeleton->getFieldParam( $sectionKey, 'fieldGroups->my_taxonomy->taxonomy' ); if (empty($val)) { $this->aCustomTaxonomies[$taxonomy] = []; } else { $maximum = $this->oAddListingSkeleton->getFieldParam( $sectionKey, 'fieldGroups->my_taxonomy->maximum' ); if ($maximum > 1) { $aTermIDs = array_slice($val, 0, $maximum); foreach ($aTermIDs as $aTerm) { $this->aCustomTaxonomies[$taxonomy][] = absint($aTerm['id']); } } else { $this->aCustomTaxonomies[$taxonomy] = [absint($val['id'])]; } } break; case 'header': case 'listing_title': if ($key === 'listing_title') { $this->cleanListingTitle(['listing_title' => $val]); } else { $this->aGeneralData[$key] = ValidationHelper::deepValidation($val); } break; case 'contact_info': if ($key === 'social_networks') { $this->cleanSocialNetworks($val); } else { $this->aGeneralData[$key] = ValidationHelper::deepValidation($val); } break; case 'listing_type_relationships': if (isset($val['id'])) { $this->aListingRelationships[$sectionKey][] = abs($val['id']); } else { foreach ($val as $aItem) { $this->aListingRelationships[$sectionKey][] = abs($aItem['id']); } } break; case 'group': // supporting 1 deep currently if (ArrayCollectionFactory::set($val)->pluck('0->items->0')) { $aRawItems = ArrayCollectionFactory::set($val) ->deepPluck('0->items') ->output() ; $aGeneralData = ArrayCollectionFactory::set($val)->pluck('0')->except('items')->output(); $this->aCustomGroupCollection[$sectionKey] = ValidationHelper::deepValidation($aGeneralData); $aFieldSettings = ArrayCollectionFactory::set($this->aAddListingSettings) ->deepPluck($sectionKey. '->fieldGroups->settings->fieldsSkeleton') ->magicKeyGroup('key') ->output() ; $aItemVals = []; foreach ($aRawItems as $rawItemOrder => $aRawItemVals) { foreach ($aRawItemVals as $rawItemKey => $rawItemVal) { $builtFieldVal = TransformAddListingToBackEndFactory::set( ArrayCollectionFactory::set($aFieldSettings) ->deepPluck($rawItemKey.'->type') ->output(), ArrayCollectionFactory::set($aFieldSettings) ->deepPluck($rawItemKey.'->maximum') ->output(100) )->input($rawItemVal)->withKey($rawItemKey) ; $aItemVals = array_merge($aItemVals, $builtFieldVal); } $this->aCustomGroupCollection[$sectionKey]['items'][$rawItemOrder] = $aItemVals; } } else { $this->aCustomGroupCollection[$sectionKey] = ''; } break; case 'image': if ($key === 'image') { $imgIDKey = $sectionKey.'_'.$key.'_id'; $imgKey = $sectionKey.'_'.$key; if (isset($val['id'])) { $this->aCustomSections[$imgIDKey] = ValidationHelper::deepValidation($val['id']); $this->aCustomSections[$imgKey] = ValidationHelper::deepValidation($val['src']); } else { $this->aCustomSections[$imgIDKey] = ""; $this->aCustomSections[$imgKey] = ""; } } else { $key = $sectionKey.'_link_to'; if (!empty($val)) { $this->aCustomSections[$key] = ValidationHelper::deepValidation($val); } else { $this->aCustomSections[$key] = ""; } } break; case 'date_time': if (!empty($val)) { $this->aCustomSections[$sectionKey] = Time::convertJSTimestampToPHPTimestamp($val); } break; default: if ($this->oAddListingSkeleton->getFieldParam($sectionKey, 'isCustomSection')) { $type = $this->oAddListingSkeleton->getFieldParam($sectionKey, 'type'); if (in_array($type, ['select'])) { if (empty($val)) { $this->aCustomSections[$sectionKey] = ''; } else { $maximum = $this->oAddListingSkeleton->getFieldParam( $sectionKey, 'fieldGroups->settings->maximum', 1 ); $val = ValidationHelper::deepValidation($val); if ($maximum > 1) { $aValues = array_slice($val, 0, $maximum); foreach ($aValues as $aValue) { if (isset($aValue['id'])) { $cleanedVal = $aValue['id']; } else { $cleanedVal = $aValue; } $this->aCustomSections[$sectionKey][] = $cleanedVal; } } else { if (isset($val['id'])) { $cleanedVal = $this->aCustomSections[$sectionKey] = $val['id']; } else { $cleanedVal = $this->aCustomSections[$sectionKey] = $val; } $this->aCustomSections[$sectionKey] = $cleanedVal; } } } elseif ($type === 'multiple-checkbox') { if (empty($val)) { $this->aCustomSections[$sectionKey] = ''; } else { $this->aCustomSections[$sectionKey] = ValidationHelper::deepValidation($val); } } else { $this->aCustomSections[$sectionKey] = ValidationHelper::deepValidation($val); } } else { $this->aRestData[$sectionKey] = ValidationHelper::deepValidation($val); } break; } } } protected function cleanFeaturedImage(array $aSection, $sectionKey) { if (!isset($aSection['featured_image']) || !is_array($aSection['featured_image'])) { $this->aRawFeaturedImage = []; } $this->aRawFeaturedImage = ValidationHelper::deepValidation($aSection['featured_image']); } protected function cleanListingAddress($aSection, $sectionKey) { if ( !empty($aSection['address']) && !empty($aSection['address']['lat']) && !empty($aSection['address']['lng']) ) { $this->aGoogleAddress['address'] = ValidationHelper::deepValidation( $aSection['address']['address'] ); $this->aGoogleAddress['latLng'] = ValidationHelper::deepValidation($aSection['address']['lat']).','. ValidationHelper::deepValidation($aSection['address']['lng']); } if (!empty($aSection['listing_location'])) { if (isset($aSection['listing_location']['id'])) { $this->location = [absint($aSection['listing_location']['id'])]; } else { if (is_array($aSection['listing_location'])) { $this->location = array_map( function ($aItem) { return abs($aItem['id']); }, $aSection['listing_location'] ); } else { $this->location = [absint($aSection['listing_location'])]; } } } return true; } protected function parseBusinessHour($input) { if ($input == 'Midnight') { return '00:00:00'; } $aItem = str_split($input, 2); return $aItem[0].':'.$aItem[1].':00'; } protected function cleanSinglePrice($aSection) { if (!empty($aSection['single_price'])) { $this->singlePrice = floatval($aSection['single_price']); } } protected function cleanPriceRange($aSection) { if ( !isset($aSection['minimum_price']) || !isset($aSection['maximum_price']) || empty($aSection['minimum_price']) || empty($aSection['maximum_price']) ) { return false; } $aSection['minimum_price'] = floatval($aSection['minimum_price']); $aSection['maximum_price'] = floatval($aSection['maximum_price']); if ($aSection['minimum_price'] >= $aSection['maximum_price']) { return false; } $this->aPriceRange['minimum_price'] = $aSection['minimum_price']; $this->aPriceRange['maximum_price'] = $aSection['maximum_price']; $this->aPriceRange['price_range'] = ValidationHelper::deepValidation($aSection['price_range']); $this->aPriceRange['price_range_desc'] = ValidationHelper::deepValidation($aSection['price_range_desc']); return true; } protected function cleanBusinessHours(array $aSection) { // var_export($aSection);die; if (!isset($aSection['settings']) || empty($aSection['settings'])) { return false; } $this->aBusinessHours['hourMode'] = ValidationHelper::deepValidation($aSection['settings']['hourMode']); $this->aBusinessHours['timeFormat'] = ValidationHelper::deepValidation($aSection['settings']['timeFormat']); if ($this->aBusinessHours['hourMode'] === 'open_for_selected_hours') { foreach ($aSection['settings']['operating_times'] as $dayOfWeek => $aItems) { if (!$aItems[0]['isOpen'] || empty($aItems[0]['open']) || empty($aItems[0]['close'])) { $this->aBusinessHours['businessHours'][$dayOfWeek]['isOpen'] = 'no'; } else { $aBHourItem = []; if ($aItems[0]['open'] === '24hrs') { $aBHourItem['firstOpenHour'] = '24:00:00'; $aBHourItem['firstCloseHour'] = '24:00:00'; } else { $aBHourItem['firstOpenHour'] = $this->parseBusinessHour($aItems[0]['open']); $aBHourItem['firstCloseHour'] = $this->parseBusinessHour($aItems[0]['close']); if (!empty($aItems[1]['open']) && !empty($aItems[1]['close'])) { $aBHourItem['secondOpenHour'] = $this->parseBusinessHour($aItems[1]['open']); $aBHourItem['secondCloseHour'] = $this->parseBusinessHour($aItems[1]['close']); } } $this->aBusinessHours['businessHours'][$dayOfWeek]['operating_times'] = $aBHourItem; $this->aBusinessHours['businessHours'][$dayOfWeek]['isOpen'] = 'yes'; } } } return true; } protected function isValidPost($postID, $postType) { if (get_post_type($postID) !== $postType) { return false; } if (!in_array(get_post_status($postID), ['pending', 'publish'])) { return false; } if (current_user_can('administrator')) { return true; } return get_post_field('post_author', $postID) == get_current_user_id(); } private function getSelectTreeItem($aItem, $postType = '') { if (isset($aItem['id'])) { $val = $aItem['id']; } else { $val = $aItem; } if (!empty($postType)) { if (!$this->isValidPost($val, $postType)) { return false; } } return $val; } private function getSelectTreeVal($rawVal, $postType = '') { if (empty($rawVal)) { return false; } if (isset($rawVal['id']) || !is_array($rawVal)) { $val = $this->getSelectTreeItem($rawVal, $postType); } else { $val = []; foreach ($rawVal as $item) { $val[] = $this->getSelectTreeItem($item, $postType); } } return $val; } protected function cleanMyPosts($aSection) { if (empty($aSection['my_posts'])) { return false; } $this->myPosts = $this->getSelectTreeVal($aSection['my_posts'], 'post'); return true; } protected function cleanMyRoom($aSection) { if (!isset($aSection['my_room']) || empty($aSection['my_room'])) { return false; } $this->myRoom = $this->getSelectTreeVal($aSection['my_room'], 'product'); return true; } protected function cleanHostedBy($aSection) { $this->aHostedBy = ValidationHelper::deepValidation($aSection); return true; } protected function cleanMyProducts($aSection) { if (!isset($aSection['my_products']) || empty($aSection['my_products'])) { return false; } $this->aMyProducts = $this->getSelectTreeVal($aSection['my_products'], 'product'); return true; } protected function cleanBookingcombannercreator($aSection) { if (!Submission::isPlanSupported('toggle_bookingcombannercreator', $this->planID)) { return false; } foreach ($aSection as $key => $val) { $key = sanitize_text_field(str_replace('bookingcombannercreator_', '', $key)); if ($key === 'bannerImg') { $this->aBookingComBannerCreator[$key] = isset($val['src']) ? $val['src'] : ''; $this->aBookingComBannerCreator[$key.'_id'] = isset($val['id']) ? $val['id'] : ''; } else { $this->aBookingComBannerCreator[$key] = ValidationHelper::deepValidation($val); } } } protected function cleanVideo($aSection) { if (!Submission::isPlanSupported('toggle_videos', $this->planID)) { return false; } if (!isset($aSection['video_srcs']) || empty($aSection['video_srcs'])) { return false; } $aVideos = $this->sureItemsDoNotExceededPlan('maximumVideos', $aSection['video_srcs']); foreach ($aVideos as $order => $aValue) { if (empty($aValue) || !isset($aValue['value']) || empty($aValue['value'])) { continue; } if (strpos($aValue['value'], 'youtube') !== -1) { $aValue['value'] = preg_replace_callback( '/&.*/', function () { return ''; }, $aValue['value'] ); } $this->aVideos[$order]['src'] = ValidationHelper::deepValidation($aValue['value']); $this->aVideos[$order]['thumbnail'] = ''; }; return true; } protected function cleanEventCalendar($aSection) { if (!isset($aSection['event_calendar']) || empty($aSection['event_calendar'])) { return false; } $aEventCalendar = $aSection['event_calendar']; if (empty($aEventCalendar['date'])) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('The event calendar is required', 'wiloke-listing-tools') ]); } if (empty($aEventCalendar['date']['starts'])) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('The Start date is required', 'wiloke-listing-tools') ]); } if (empty($aEventCalendar['date']['ends'])) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('The End date is required', 'wiloke-listing-tools') ]); } $oStart = \DateTime::createFromFormat( $this->getEventDateFormat(), $aEventCalendar['date']['starts'] ); if (!$oStart) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('Invalid start date format', 'wiloke-listing-tools') ]); } $oEnd = \DateTime::createFromFormat( $this->getEventDateFormat(), $aEventCalendar['date']['ends'] ); if (!$oEnd) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('Invalid end date format', 'wiloke-listing-tools') ]); } $aEventCalendar['date']['starts'] = $oStart->getTimestamp(); $aEventCalendar['date']['ends'] = $oEnd->getTimestamp(); if ($aEventCalendar['date']['starts'] >= $aEventCalendar['date']['ends']) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('The End date must be greater than Start date', 'wiloke-listing-tools') ]); } if ($aEventCalendar['frequency'] === 'weekly') { if (empty($aEventCalendar['specifyDays'])) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('You must specify Event Occur day', 'wiloke-listing-tools') ]); } } $dateFormat = get_option('date_format'); $this->aEventCalendar['frequency'] = $aEventCalendar['frequency']; $this->aEventCalendar['starts'] = $oStart->format($dateFormat); $this->aEventCalendar['openingAt'] = $oStart->format('H:i:s'); $this->aEventCalendar['endsOn'] = $oEnd->format($dateFormat); $this->aEventCalendar['closedAt'] = $oEnd->format('H:i:s'); $this->aEventCalendar['specifyDays'] = $aEventCalendar['specifyDays']; return true; } protected function cleanEventBelongsToListing($aSection) { if (isset($aSection['event_belongs_to_listing']) && !empty($aSection['event_belongs_to_listing'])) { $aResponse = $this->middleware(['isUserLoggedIn', 'isPostAuthor', 'isPublishedPost'], [ 'postID' => $aSection['event_belongs_to_listing']['id'], 'postAuthor' => get_current_user_id(), 'passedIfAdmin' => true, 'isBoolean' => true ]); if ($aResponse['status'] === 'error') { $this->oRetrieveValidation->error($aResponse); } $this->parentListingID = $aSection['event_belongs_to_listing']['id']; } } protected function cleanGallery($aSection) { if (!Submission::isPlanSupported('toggle_videos', $this->planID)) { return false; } if (!isset($aSection['gallery']) || empty($aSection['gallery'])) { return false; } $aRawGallery = $this->sureItemsDoNotExceededPlan('maximumGalleryImages', $aSection['gallery']); $this->aGallery = array_reduce( $aRawGallery, function ($aAcummulator, $aImg) { return $aAcummulator + [$aImg['id'] => $aImg['src']]; }, [] ); return true; } protected function cleanCustomButton($aSection) { $this->aCustomButton = ValidationHelper::deepValidation($aSection); } protected function processHandleData() { $this->oRetrieveValidation = new RetrieveController(new AjaxRetrieve()); if (!isset($this->aData) || empty($this->aData)) { $this->oRetrieveValidation->error([ 'msg' => esc_html__('Please fill up all requirement fields.', 'wiloke-listing-tools') ]); } $this->oAddListingSkeleton = new AddListingFieldSkeleton($this->listingType); $this->aAddListingSettings = $this->oAddListingSkeleton->getFields(); foreach ($this->aAddListingSettings as $sectionKey => $aSections) { foreach ($aSections['fieldGroups'] as $fieldKey => $aField) { // if ((isset($aField['toggle']) && $aField['toggle'] === 'disable') || // !isset($aField['isRequired']) || // $aField['isRequired'] !== 'yes') { // continue; // } // if ($fieldKey === 'cover_image') { // var_export($aField);die; // } $this->surePassConditional($sectionKey); } } foreach ($this->aData as $sectionKey => $aSection) { $cbFunc = General::generateCallbackFunction($sectionKey, 'clean'); if (method_exists($this, $cbFunc)) { $this->$cbFunc($aSection, $sectionKey); } else { if (is_array($aSection)) { $this->cleanGeneralData($aSection, $sectionKey); } } } } }
[+]
..
[-] WebhookController.php
[edit]
[-] SetCoupon.php
[edit]
[-] TermController.php
[edit]
[-] PostController.php
[edit]
[-] SetMyPosts.php
[edit]
[-] NotificationsController.php
[edit]
[-] AjaxUploadImgController.php
[edit]
[-] TaxonomiesControllers.php
[edit]
[-] FavoriteStatisticController.php
[edit]
[-] BelongsToCustomTaxonomies.php
[edit]
[-] DashboardController.php
[edit]
[-] ModifyQueryController.php
[edit]
[-] SetCustomGroup.php
[edit]
[+]
Map
[-] TraitHostedBy.php
[edit]
[-] SearchFormController.php
[edit]
[-] InsertFeaturedImg.php
[edit]
[-] PaymentGatewaysController.php
[edit]
[-] PaymentController.php
[edit]
[-] DokanController.php
[edit]
[-] SchemaController.php
[edit]
[-] UserController.php
[edit]
[-] BelongsToLocation.php
[edit]
[-] WooCommerceBookingController.php
[edit]
[-] IsMyPaymentID.php
[edit]
[-] StripeController.php
[edit]
[-] ContactFormController.php
[edit]
[-] AddListingButtonController.php
[edit]
[-] Validation.php
[edit]
[-] GalleryController.php
[edit]
[-] SetListingRelationship.php
[edit]
[-] AddListingController.php
[edit]
[-] MergingSettingValues.php
[edit]
[-] GoogleReCaptchaController.php
[edit]
[-] CouponController.php
[edit]
[-] InvoiceController.php
[edit]
[-] SingleJsonSkeleton.php
[edit]
[-] SingleController.php
[edit]
[-] InsertImg.php
[edit]
[-] EmailController.php
[edit]
[-] BelongsToCategories.php
[edit]
[-] ReviewController.php
[edit]
[-] SetSinglePrice.php
[edit]
[-] PrintSidebarItems.php
[edit]
[-] SetPlanRelationship.php
[edit]
[-] BookingComController.php
[edit]
[-] WooCommerceController.php
[edit]
[-] FacebookLoginController.php
[edit]
[-] EventController.php
[edit]
[-] SetRestaurantMenu.php
[edit]
[-] SetProductsToListing.php
[edit]
[-] UserPlanController.php
[edit]
[-] FollowController.php
[edit]
[+]
Retrieve
[-] SetGeneral.php
[edit]
[-] VerifyPurchaseCode.php
[edit]
[-] PlanRelationshipController.php
[edit]
[-] FreePlanController.php
[edit]
[-] AddBookingComBannerCreator.php
[edit]
[-] ReportController.php
[edit]
[-] RetrieveController.php
[edit]
[-] SetCustomButton.php
[edit]
[-] GetWilokeToolSettings.php
[edit]
[-] PaymentMetaController.php
[edit]
[-] RegisterLoginController.php
[edit]
[-] TermsAndPolicyController.php
[edit]
[-] AppleLoginController.php
[edit]
[-] ChangePlanStatusController.php
[edit]
[-] NextBillingPaymentController.php
[edit]
[-] AddListingPaymentController.php
[edit]
[-] PromotionController.php
[edit]
[-] PrintAddListingSettings.php
[edit]
[-] PayPalExecuteAddListingPayment.php
[edit]
[-] ClaimController.php
[edit]
[-] ViewStatisticController.php
[edit]
[-] SessionController.php
[edit]
[-] SharesStatisticController.php
[edit]
[-] TraitSetEventData.php
[edit]
[-] PrintAddListingFields.php
[edit]
[-] GuardController.php
[edit]
[+]
TransformAddListingData
[-] MessageController.php
[edit]
[-] OptimizeScripts.php
[edit]
[-] InsertLogo.php
[edit]
[-] SetPostDuration.php
[edit]
[-] GridItemController.php
[edit]
[-] SetVideo.php
[edit]
[-] AddMorePhotosVideosController.php
[edit]
[-] TraitAddListingSettings.php
[edit]
[-] InsertGallery.php
[edit]
[-] BillingControllers.php
[edit]
[-] GetSingleImage.php
[edit]
[-] BelongsToTags.php
[edit]
[-] PermalinksController.php
[edit]
[-] RunUpdateDBToLatestVersionController.php
[edit]
[-] SetListingBelongsToPlanID.php
[edit]
[-] NoticeController.php
[edit]
[-] DirectBankTransferController.php
[edit]
[-] SetPriceRange.php
[edit]
[-] TagsBelongsToCatController.php
[edit]
[-] PayPalController.php
[edit]
[-] InsertAddress.php
[edit]
[-] MapListingController.php
[edit]
[-] ListingController.php
[edit]
[-] AuthorPageController.php
[edit]
[-] RestaurantMenuController.php
[edit]
[-] PaymentStatusController.php
[edit]
[-] SetSocialNetworks.php
[edit]
[-] SetCustomSections.php
[edit]
[-] TranslationController.php
[edit]
[-] IconController.php
[edit]
[-] SetGroupData.php
[edit]
[-] SetContactInfo.php
[edit]
[-] ProfileController.php
[edit]
[-] ShareController.php
[edit]
[-] InsertCoverImage.php
[edit]
[-] HandleSubmit.php
[edit]
[-] SetMyRoom.php
[edit]
[-] ModalController.php
[edit]