Changeset 3386622
- Timestamp:
- 10/29/2025 07:05:29 PM (4 months ago)
- Location:
- addons-for-elementor-builder
- Files:
-
- 692 added
- 28 edited
-
tags/1.6.1 (added)
-
tags/1.6.1/addons-for-elementor-builder.php (added)
-
tags/1.6.1/afeb.php (added)
-
tags/1.6.1/app (added)
-
tags/1.6.1/app/Ajax.php (added)
-
tags/1.6.1/app/Assets.php (added)
-
tags/1.6.1/app/Base.php (added)
-
tags/1.6.1/app/Controls (added)
-
tags/1.6.1/app/Controls.php (added)
-
tags/1.6.1/app/Controls/CHelper.php (added)
-
tags/1.6.1/app/Controls/DynamicSelect (added)
-
tags/1.6.1/app/Controls/DynamicSelect/DynamicSelect.php (added)
-
tags/1.6.1/app/Controls/DynamicSelect/DynamicSelectAPI.php (added)
-
tags/1.6.1/app/Controls/Helper.php (added)
-
tags/1.6.1/app/Controls/ImageSelect.php (added)
-
tags/1.6.1/app/Controls/ProVersion.php (added)
-
tags/1.6.1/app/Db.php (added)
-
tags/1.6.1/app/Documents (added)
-
tags/1.6.1/app/Documents.php (added)
-
tags/1.6.1/app/Documents/Builder.php (added)
-
tags/1.6.1/app/Documents/Popup.php (added)
-
tags/1.6.1/app/Extensions (added)
-
tags/1.6.1/app/Extensions.php (added)
-
tags/1.6.1/app/Extensions/CustomCssjs.php (added)
-
tags/1.6.1/app/Extensions/GoingUp.php (added)
-
tags/1.6.1/app/Extensions/GoingUpKit.php (added)
-
tags/1.6.1/app/Extensions/Preloader.php (added)
-
tags/1.6.1/app/Extensions/PreloaderKit.php (added)
-
tags/1.6.1/app/Extensions/RippleEffects.php (added)
-
tags/1.6.1/app/Extensions/Sticky.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions/Authentication.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions/Conditions.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions/Page.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions/Post.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions/Role.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/Conditions/User.php (added)
-
tags/1.6.1/app/Extensions/VisibilityControls/VisibilityControls.php (added)
-
tags/1.6.1/app/Extensions/WrapperLink.php (added)
-
tags/1.6.1/app/Form.php (added)
-
tags/1.6.1/app/Handler (added)
-
tags/1.6.1/app/Handler.php (added)
-
tags/1.6.1/app/Handler/Widgets (added)
-
tags/1.6.1/app/Handler/Widgets/FormBuilderHandler.php (added)
-
tags/1.6.1/app/Handler/Widgets/LoginRegisterHandler.php (added)
-
tags/1.6.1/app/Helper.php (added)
-
tags/1.6.1/app/I18n.php (added)
-
tags/1.6.1/app/Menus (added)
-
tags/1.6.1/app/Menus.php (added)
-
tags/1.6.1/app/Menus/Dashboard.php (added)
-
tags/1.6.1/app/Modules (added)
-
tags/1.6.1/app/Modules.php (added)
-
tags/1.6.1/app/Modules/DisplayConditions (added)
-
tags/1.6.1/app/Modules/DisplayConditions/DisplayConditions.php (added)
-
tags/1.6.1/app/Modules/DynamicTags (added)
-
tags/1.6.1/app/Modules/DynamicTags/DynamicTags.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Archive (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Archive/ArchiveDescription.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Archive/ArchiveTitle.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Archive/Module.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Author (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Author/AuthorName.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Author/AuthorURL.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Author/Module.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Module.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/FeaturedImage.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/Module.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostComments.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostContent.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostDate.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostExcerpt.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostTerms.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostTime.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostTitle.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Post/PostURL.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site/InternalURL.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site/Module.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site/PageTitle.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site/SiteTagLine.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site/SiteTitle.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Site/SiteURL.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/Module.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductContent.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductRating.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductRegularPrice.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductSKU.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductSale.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductSalePrice.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductShortDescription.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductStock.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductStockStatus.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductTerms.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductTitle.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/ProductURL.php (added)
-
tags/1.6.1/app/Modules/DynamicTags/Tags/Woo/WooProductTag.php (added)
-
tags/1.6.1/app/Modules/WPImport (added)
-
tags/1.6.1/app/Modules/WPImport/Parser.php (added)
-
tags/1.6.1/app/Modules/WPImport/RegexParser.php (added)
-
tags/1.6.1/app/Modules/WPImport/SimpleXMLParser.php (added)
-
tags/1.6.1/app/Modules/WPImport/WPImport.php (added)
-
tags/1.6.1/app/Modules/WPImport/XMLParser.php (added)
-
tags/1.6.1/app/NavMenus (added)
-
tags/1.6.1/app/NavMenus.php (added)
-
tags/1.6.1/app/NavMenus/AdvancedMenuEditWalker.php (added)
-
tags/1.6.1/app/NavMenus/AdvancedMenuWalker.php (added)
-
tags/1.6.1/app/NavMenus/Edit.php (added)
-
tags/1.6.1/app/Plugin (added)
-
tags/1.6.1/app/Plugin/Hooks.php (added)
-
tags/1.6.1/app/PostTypes (added)
-
tags/1.6.1/app/PostTypes.php (added)
-
tags/1.6.1/app/PostTypes/Builder.php (added)
-
tags/1.6.1/app/PostTypes/Popup.php (added)
-
tags/1.6.1/app/PostTypes/Submissions.php (added)
-
tags/1.6.1/app/RewriteRules.php (added)
-
tags/1.6.1/app/Security.php (added)
-
tags/1.6.1/app/System (added)
-
tags/1.6.1/app/System.php (added)
-
tags/1.6.1/app/System/Server.php (added)
-
tags/1.6.1/app/System/WordPress.php (added)
-
tags/1.6.1/app/TemplatesKit.php (added)
-
tags/1.6.1/app/Widgets (added)
-
tags/1.6.1/app/Widgets.php (added)
-
tags/1.6.1/app/Widgets/Accordion.php (added)
-
tags/1.6.1/app/Widgets/AdvancedMenus (added)
-
tags/1.6.1/app/Widgets/AdvancedMenus/AdvancedMenus.php (added)
-
tags/1.6.1/app/Widgets/AdvancedMenus/Helper.php (added)
-
tags/1.6.1/app/Widgets/AlertBox.php (added)
-
tags/1.6.1/app/Widgets/Breadcrumb (added)
-
tags/1.6.1/app/Widgets/Breadcrumb/Breadcrumb.php (added)
-
tags/1.6.1/app/Widgets/Breadcrumb/Helper.php (added)
-
tags/1.6.1/app/Widgets/Countdown.php (added)
-
tags/1.6.1/app/Widgets/CreativeButton.php (added)
-
tags/1.6.1/app/Widgets/DataTable.php (added)
-
tags/1.6.1/app/Widgets/Dynamic (added)
-
tags/1.6.1/app/Widgets/Dynamic/DynamicGridCarousel.php (added)
-
tags/1.6.1/app/Widgets/Dynamic/Helper.php (added)
-
tags/1.6.1/app/Widgets/FancyText.php (added)
-
tags/1.6.1/app/Widgets/FlipBox.php (added)
-
tags/1.6.1/app/Widgets/FormBuilder (added)
-
tags/1.6.1/app/Widgets/FormBuilder/FormBuilder.php (added)
-
tags/1.6.1/app/Widgets/FormBuilder/Helper.php (added)
-
tags/1.6.1/app/Widgets/Hotspot.php (added)
-
tags/1.6.1/app/Widgets/InformationBox (added)
-
tags/1.6.1/app/Widgets/InformationBox/InformationBox.php (added)
-
tags/1.6.1/app/Widgets/LoginRegister (added)
-
tags/1.6.1/app/Widgets/LoginRegister/LoginRegister.php (added)
-
tags/1.6.1/app/Widgets/Lottie.php (added)
-
tags/1.6.1/app/Widgets/Map.php (added)
-
tags/1.6.1/app/Widgets/NewsTicker.php (added)
-
tags/1.6.1/app/Widgets/NoticeBox (added)
-
tags/1.6.1/app/Widgets/NoticeBox/NoticeBox.php (added)
-
tags/1.6.1/app/Widgets/Offcanvas.php (added)
-
tags/1.6.1/app/Widgets/PriceBox (added)
-
tags/1.6.1/app/Widgets/PriceBox/PriceBox.php (added)
-
tags/1.6.1/app/Widgets/SearchForm (added)
-
tags/1.6.1/app/Widgets/SearchForm/Helper.php (added)
-
tags/1.6.1/app/Widgets/SearchForm/LoopDynamicCSS.php (added)
-
tags/1.6.1/app/Widgets/SearchForm/SearchForm.php (added)
-
tags/1.6.1/app/Widgets/SiteLogo.php (added)
-
tags/1.6.1/app/Widgets/Slides.php (added)
-
tags/1.6.1/app/Widgets/SoundPlayer.php (added)
-
tags/1.6.1/app/Widgets/Tabs.php (added)
-
tags/1.6.1/app/Widgets/TeamMemberCarousel.php (added)
-
tags/1.6.1/app/Widgets/Template.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/ArchiveTitle.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/AuthorBox.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/CommentsForm.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/DynamicArchivePosts.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PageTitle.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostComments.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostContent.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostDate.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostExcerpt.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostFeaturedImage.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostNavigation.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostTerms.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostTime.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/PostTitle.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/RenderContent.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/SiteTitle.php (added)
-
tags/1.6.1/app/Widgets/TemplateBuilder/TextRender.php (added)
-
tags/1.6.1/app/Widgets/TestimonialCarousel (added)
-
tags/1.6.1/app/Widgets/TestimonialCarousel/TestimonialCarousel.php (added)
-
tags/1.6.1/app/Widgets/Timeline (added)
-
tags/1.6.1/app/Widgets/Timeline/Timeline.php (added)
-
tags/1.6.1/app/Widgets/Woo (added)
-
tags/1.6.1/app/Widgets/Woo/AddToCart.php (added)
-
tags/1.6.1/app/Widgets/Woo/Checkout.php (added)
-
tags/1.6.1/app/Widgets/Woo/MyAccount.php (added)
-
tags/1.6.1/app/Widgets/Woo/ProductCategory.php (added)
-
tags/1.6.1/app/Widgets/Woo/ProductContent.php (added)
-
tags/1.6.1/app/Widgets/Woo/ProductExcerpt.php (added)
-
tags/1.6.1/app/Widgets/Woo/ProductImage.php (added)
-
tags/1.6.1/app/Widgets/Woo/ProductTags.php (added)
-
tags/1.6.1/assets (added)
-
tags/1.6.1/assets/css (added)
-
tags/1.6.1/assets/css/backend.css (added)
-
tags/1.6.1/assets/css/backend.min.css (added)
-
tags/1.6.1/assets/css/common.css (added)
-
tags/1.6.1/assets/css/common.min.css (added)
-
tags/1.6.1/assets/css/custom-footer.css (added)
-
tags/1.6.1/assets/css/custom-header.css (added)
-
tags/1.6.1/assets/css/documents (added)
-
tags/1.6.1/assets/css/documents/dynamic-loop-item.css (added)
-
tags/1.6.1/assets/css/documents/dynamic-loop-item.min.css (added)
-
tags/1.6.1/assets/css/documents/editor (added)
-
tags/1.6.1/assets/css/documents/editor/popup.css (added)
-
tags/1.6.1/assets/css/documents/editor/popup.min.css (added)
-
tags/1.6.1/assets/css/documents/editor/template-builder.css (added)
-
tags/1.6.1/assets/css/documents/editor/template-builder.min.css (added)
-
tags/1.6.1/assets/css/documents/popup.css (added)
-
tags/1.6.1/assets/css/documents/popup.min.css (added)
-
tags/1.6.1/assets/css/element-manager.css (added)
-
tags/1.6.1/assets/css/element-manager.min.css (added)
-
tags/1.6.1/assets/css/elementor-editor.css (added)
-
tags/1.6.1/assets/css/elementor-editor.min.css (added)
-
tags/1.6.1/assets/css/extensions (added)
-
tags/1.6.1/assets/css/extensions/going-up.css (added)
-
tags/1.6.1/assets/css/extensions/going-up.min.css (added)
-
tags/1.6.1/assets/css/extensions/preloader.css (added)
-
tags/1.6.1/assets/css/extensions/preloader.min.css (added)
-
tags/1.6.1/assets/css/extensions/ripple-effects.css (added)
-
tags/1.6.1/assets/css/extensions/ripple-effects.min.css (added)
-
tags/1.6.1/assets/css/extensions/wrapper-link.css (added)
-
tags/1.6.1/assets/css/extensions/wrapper-link.min.css (added)
-
tags/1.6.1/assets/css/normalize.css (added)
-
tags/1.6.1/assets/css/normalize.min.css (added)
-
tags/1.6.1/assets/css/pro-version.css (added)
-
tags/1.6.1/assets/css/pro-version.min.css (added)
-
tags/1.6.1/assets/css/widgets (added)
-
tags/1.6.1/assets/css/widgets/accordion.css (added)
-
tags/1.6.1/assets/css/widgets/accordion.min.css (added)
-
tags/1.6.1/assets/css/widgets/advanced-menus.css (added)
-
tags/1.6.1/assets/css/widgets/advanced-menus.min.css (added)
-
tags/1.6.1/assets/css/widgets/afeb-woo-add-to-cart.css (added)
-
tags/1.6.1/assets/css/widgets/afeb-woo-add-to-cart.min.css (added)
-
tags/1.6.1/assets/css/widgets/afeb-woo-product-image.css (added)
-
tags/1.6.1/assets/css/widgets/alert-box.css (added)
-
tags/1.6.1/assets/css/widgets/alert-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/author-box.css (added)
-
tags/1.6.1/assets/css/widgets/author-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/breadcrumb.css (added)
-
tags/1.6.1/assets/css/widgets/breadcrumb.min.css (added)
-
tags/1.6.1/assets/css/widgets/comments-form.css (added)
-
tags/1.6.1/assets/css/widgets/comments-form.min.css (added)
-
tags/1.6.1/assets/css/widgets/countdown.css (added)
-
tags/1.6.1/assets/css/widgets/countdown.min.css (added)
-
tags/1.6.1/assets/css/widgets/creative-button.css (added)
-
tags/1.6.1/assets/css/widgets/creative-button.min.css (added)
-
tags/1.6.1/assets/css/widgets/data-table.css (added)
-
tags/1.6.1/assets/css/widgets/data-table.min.css (added)
-
tags/1.6.1/assets/css/widgets/dynamic-grid-carousel.css (added)
-
tags/1.6.1/assets/css/widgets/dynamic-grid-carousel.min.css (added)
-
tags/1.6.1/assets/css/widgets/fancy-text.css (added)
-
tags/1.6.1/assets/css/widgets/fancy-text.min.css (added)
-
tags/1.6.1/assets/css/widgets/flip-box.css (added)
-
tags/1.6.1/assets/css/widgets/flip-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/form-builder.css (added)
-
tags/1.6.1/assets/css/widgets/form-builder.min.css (added)
-
tags/1.6.1/assets/css/widgets/hotspot.css (added)
-
tags/1.6.1/assets/css/widgets/hotspot.min.css (added)
-
tags/1.6.1/assets/css/widgets/information-box.css (added)
-
tags/1.6.1/assets/css/widgets/information-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/login-register.css (added)
-
tags/1.6.1/assets/css/widgets/login-register.min.css (added)
-
tags/1.6.1/assets/css/widgets/map.css (added)
-
tags/1.6.1/assets/css/widgets/map.min.css (added)
-
tags/1.6.1/assets/css/widgets/news-ticker.css (added)
-
tags/1.6.1/assets/css/widgets/news-ticker.min.css (added)
-
tags/1.6.1/assets/css/widgets/notice-box.css (added)
-
tags/1.6.1/assets/css/widgets/notice-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/off-canvas.css (added)
-
tags/1.6.1/assets/css/widgets/off-canvas.min.css (added)
-
tags/1.6.1/assets/css/widgets/post-navigation.css (added)
-
tags/1.6.1/assets/css/widgets/post-navigation.min.css (added)
-
tags/1.6.1/assets/css/widgets/price-box.css (added)
-
tags/1.6.1/assets/css/widgets/price-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/product-content.css (added)
-
tags/1.6.1/assets/css/widgets/rtl (added)
-
tags/1.6.1/assets/css/widgets/rtl/alert-box.css (added)
-
tags/1.6.1/assets/css/widgets/rtl/alert-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/rtl/author-box.css (added)
-
tags/1.6.1/assets/css/widgets/rtl/author-box.min.css (added)
-
tags/1.6.1/assets/css/widgets/rtl/woo-my-account.css (added)
-
tags/1.6.1/assets/css/widgets/rtl/woo-my-account.min.css (added)
-
tags/1.6.1/assets/css/widgets/search-form.css (added)
-
tags/1.6.1/assets/css/widgets/search-form.min.css (added)
-
tags/1.6.1/assets/css/widgets/slides.css (added)
-
tags/1.6.1/assets/css/widgets/slides.min.css (added)
-
tags/1.6.1/assets/css/widgets/sound-player.css (added)
-
tags/1.6.1/assets/css/widgets/sound-player.min.css (added)
-
tags/1.6.1/assets/css/widgets/tabs.css (added)
-
tags/1.6.1/assets/css/widgets/tabs.min.css (added)
-
tags/1.6.1/assets/css/widgets/team-member-carousel.css (added)
-
tags/1.6.1/assets/css/widgets/team-member-carousel.min.css (added)
-
tags/1.6.1/assets/css/widgets/testimonial-carousel.css (added)
-
tags/1.6.1/assets/css/widgets/testimonial-carousel.min.css (added)
-
tags/1.6.1/assets/css/widgets/timeline.css (added)
-
tags/1.6.1/assets/css/widgets/timeline.min.css (added)
-
tags/1.6.1/assets/css/widgets/widgets-icons.css (added)
-
tags/1.6.1/assets/css/widgets/widgets-icons.min.css (added)
-
tags/1.6.1/assets/css/widgets/woo-checkout-layout.css (added)
-
tags/1.6.1/assets/css/widgets/woo-checkout.css (added)
-
tags/1.6.1/assets/css/widgets/woo-checkout.min.css (added)
-
tags/1.6.1/assets/css/widgets/woo-my-account.css (added)
-
tags/1.6.1/assets/css/widgets/woo-my-account.min.css (added)
-
tags/1.6.1/assets/css/widgets/woo-product-category.css (added)
-
tags/1.6.1/assets/css/widgets/woo-product-tags.css (added)
-
tags/1.6.1/assets/docs (added)
-
tags/1.6.1/assets/docs/lottie.json (added)
-
tags/1.6.1/assets/docs/sample.csv (added)
-
tags/1.6.1/assets/img (added)
-
tags/1.6.1/assets/img/afeb-active-menu-icon.svg (added)
-
tags/1.6.1/assets/img/afeb-logo-text.svg (added)
-
tags/1.6.1/assets/img/afeb-logo.svg (added)
-
tags/1.6.1/assets/img/afeb-menu-icon.svg (added)
-
tags/1.6.1/assets/img/afeb-section-logo.svg (added)
-
tags/1.6.1/assets/img/dashboard-change-log.svg (added)
-
tags/1.6.1/assets/img/dashboard-frequently-asked-questions-arrow.svg (added)
-
tags/1.6.1/assets/img/dashboard-frequently-asked-questions.svg (added)
-
tags/1.6.1/assets/img/dashboard-give-us-review.svg (added)
-
tags/1.6.1/assets/img/dashboard-latest-news-arrow.svg (added)
-
tags/1.6.1/assets/img/dashboard-latest-news.svg (added)
-
tags/1.6.1/assets/img/dashboard-maf-pic.svg (added)
-
tags/1.6.1/assets/img/dashboard-maf.svg (added)
-
tags/1.6.1/assets/img/dashboard-primary-btn-arrow.svg (added)
-
tags/1.6.1/assets/img/dashboard-rate.png (added)
-
tags/1.6.1/assets/img/dashboard-sec-btn-arrow.svg (added)
-
tags/1.6.1/assets/img/dashboard-sec-sec-btn-arrow.svg (added)
-
tags/1.6.1/assets/img/dashboard-support-feedback-bg.svg (added)
-
tags/1.6.1/assets/img/dashboard-support-feedback.svg (added)
-
tags/1.6.1/assets/img/dashboard-system-info.svg (added)
-
tags/1.6.1/assets/img/dashboard-webilia-logo-panel.svg (added)
-
tags/1.6.1/assets/img/dashboard-welcome.svg (added)
-
tags/1.6.1/assets/img/dashboard-whats-news-magic-hat.svg (added)
-
tags/1.6.1/assets/img/extensions (added)
-
tags/1.6.1/assets/img/extensions/custom-cssjs.svg (added)
-
tags/1.6.1/assets/img/extensions/going-up.svg (added)
-
tags/1.6.1/assets/img/extensions/preloader.svg (added)
-
tags/1.6.1/assets/img/extensions/ripple-effects.svg (added)
-
tags/1.6.1/assets/img/extensions/sticky.svg (added)
-
tags/1.6.1/assets/img/extensions/visibility-controls.svg (added)
-
tags/1.6.1/assets/img/extensions/wrapper-link.svg (added)
-
tags/1.6.1/assets/img/transparent.jpg (added)
-
tags/1.6.1/assets/img/webilia.svg (added)
-
tags/1.6.1/assets/img/widgets (added)
-
tags/1.6.1/assets/img/widgets/accordion.svg (added)
-
tags/1.6.1/assets/img/widgets/add-to-cart.svg (added)
-
tags/1.6.1/assets/img/widgets/advanced-menus.svg (added)
-
tags/1.6.1/assets/img/widgets/alert-box.svg (added)
-
tags/1.6.1/assets/img/widgets/archive-title.svg (added)
-
tags/1.6.1/assets/img/widgets/author-box.svg (added)
-
tags/1.6.1/assets/img/widgets/breadcrumb.svg (added)
-
tags/1.6.1/assets/img/widgets/checkout.svg (added)
-
tags/1.6.1/assets/img/widgets/comments-form.svg (added)
-
tags/1.6.1/assets/img/widgets/countdown.svg (added)
-
tags/1.6.1/assets/img/widgets/creative-button.svg (added)
-
tags/1.6.1/assets/img/widgets/data-table.svg (added)
-
tags/1.6.1/assets/img/widgets/dynamic-archive-posts.svg (added)
-
tags/1.6.1/assets/img/widgets/dynamic-grid (added)
-
tags/1.6.1/assets/img/widgets/dynamic-grid-carousel.svg (added)
-
tags/1.6.1/assets/img/widgets/dynamic-grid/carousel.svg (added)
-
tags/1.6.1/assets/img/widgets/dynamic-grid/grid.svg (added)
-
tags/1.6.1/assets/img/widgets/fancy-text.svg (added)
-
tags/1.6.1/assets/img/widgets/flip-box.svg (added)
-
tags/1.6.1/assets/img/widgets/form-builder.svg (added)
-
tags/1.6.1/assets/img/widgets/going-up.svg (added)
-
tags/1.6.1/assets/img/widgets/hotspot.svg (added)
-
tags/1.6.1/assets/img/widgets/information-box.svg (added)
-
tags/1.6.1/assets/img/widgets/login-register.svg (added)
-
tags/1.6.1/assets/img/widgets/lottie.svg (added)
-
tags/1.6.1/assets/img/widgets/map.svg (added)
-
tags/1.6.1/assets/img/widgets/myacc.svg (added)
-
tags/1.6.1/assets/img/widgets/news-ticker.svg (added)
-
tags/1.6.1/assets/img/widgets/notice-box.svg (added)
-
tags/1.6.1/assets/img/widgets/off-canvas.svg (added)
-
tags/1.6.1/assets/img/widgets/page-title.svg (added)
-
tags/1.6.1/assets/img/widgets/post-comments.svg (added)
-
tags/1.6.1/assets/img/widgets/post-content.svg (added)
-
tags/1.6.1/assets/img/widgets/post-date.svg (added)
-
tags/1.6.1/assets/img/widgets/post-excerpt.svg (added)
-
tags/1.6.1/assets/img/widgets/post-featured-image.svg (added)
-
tags/1.6.1/assets/img/widgets/post-navigation.svg (added)
-
tags/1.6.1/assets/img/widgets/post-terms.svg (added)
-
tags/1.6.1/assets/img/widgets/post-time.svg (added)
-
tags/1.6.1/assets/img/widgets/post-title.svg (added)
-
tags/1.6.1/assets/img/widgets/price-box.svg (added)
-
tags/1.6.1/assets/img/widgets/product-content.svg (added)
-
tags/1.6.1/assets/img/widgets/product-excerpt.svg (added)
-
tags/1.6.1/assets/img/widgets/product-img.svg (added)
-
tags/1.6.1/assets/img/widgets/product-tags.svg (added)
-
tags/1.6.1/assets/img/widgets/products-category.svg (added)
-
tags/1.6.1/assets/img/widgets/search-form.svg (added)
-
tags/1.6.1/assets/img/widgets/site-logo.svg (added)
-
tags/1.6.1/assets/img/widgets/site-title.svg (added)
-
tags/1.6.1/assets/img/widgets/slides.svg (added)
-
tags/1.6.1/assets/img/widgets/sound-player.svg (added)
-
tags/1.6.1/assets/img/widgets/tabs.svg (added)
-
tags/1.6.1/assets/img/widgets/teammember-carousel.svg (added)
-
tags/1.6.1/assets/img/widgets/template.svg (added)
-
tags/1.6.1/assets/img/widgets/testimonial-carousel.svg (added)
-
tags/1.6.1/assets/img/widgets/timeline.svg (added)
-
tags/1.6.1/assets/js (added)
-
tags/1.6.1/assets/js/accordion.js (added)
-
tags/1.6.1/assets/js/accordion.min.js (added)
-
tags/1.6.1/assets/js/advanced-menus.js (added)
-
tags/1.6.1/assets/js/advanced-menus.min.js (added)
-
tags/1.6.1/assets/js/afeb-woo-atc-redirect.js (added)
-
tags/1.6.1/assets/js/afeb-woo-product-images.js (added)
-
tags/1.6.1/assets/js/alert-box.js (added)
-
tags/1.6.1/assets/js/alert-box.min.js (added)
-
tags/1.6.1/assets/js/backend.js (added)
-
tags/1.6.1/assets/js/backend.min.js (added)
-
tags/1.6.1/assets/js/countdown.js (added)
-
tags/1.6.1/assets/js/countdown.min.js (added)
-
tags/1.6.1/assets/js/custom-css-js.js (added)
-
tags/1.6.1/assets/js/custom-css-js.min.js (added)
-
tags/1.6.1/assets/js/data-table.js (added)
-
tags/1.6.1/assets/js/data-table.min.js (added)
-
tags/1.6.1/assets/js/dynamic-grid-carousel.js (added)
-
tags/1.6.1/assets/js/dynamic-grid-carousel.min.js (added)
-
tags/1.6.1/assets/js/dynamic-select.js (added)
-
tags/1.6.1/assets/js/dynamic-select.min.js (added)
-
tags/1.6.1/assets/js/editor.js (added)
-
tags/1.6.1/assets/js/editor.min.js (added)
-
tags/1.6.1/assets/js/fancy-text.js (added)
-
tags/1.6.1/assets/js/fancy-text.min.js (added)
-
tags/1.6.1/assets/js/form-builder.js (added)
-
tags/1.6.1/assets/js/form-builder.min.js (added)
-
tags/1.6.1/assets/js/frontend-form.js (added)
-
tags/1.6.1/assets/js/global (added)
-
tags/1.6.1/assets/js/global/component.js (added)
-
tags/1.6.1/assets/js/global/component.min.js (added)
-
tags/1.6.1/assets/js/global/custom-footer.js (added)
-
tags/1.6.1/assets/js/global/custom-header.js (added)
-
tags/1.6.1/assets/js/global/dynamic-hook.js (added)
-
tags/1.6.1/assets/js/global/dynamic-hook.min.js (added)
-
tags/1.6.1/assets/js/going-up.js (added)
-
tags/1.6.1/assets/js/going-up.min.js (added)
-
tags/1.6.1/assets/js/lite-cat-carousel-grid.js (added)
-
tags/1.6.1/assets/js/login-register.js (added)
-
tags/1.6.1/assets/js/login-register.min.js (added)
-
tags/1.6.1/assets/js/lottie.js (added)
-
tags/1.6.1/assets/js/lottie.min.js (added)
-
tags/1.6.1/assets/js/map.js (added)
-
tags/1.6.1/assets/js/map.min.js (added)
-
tags/1.6.1/assets/js/news-ticker.js (added)
-
tags/1.6.1/assets/js/news-ticker.min.js (added)
-
tags/1.6.1/assets/js/off-canvas.js (added)
-
tags/1.6.1/assets/js/off-canvas.min.js (added)
-
tags/1.6.1/assets/js/popup.js (added)
-
tags/1.6.1/assets/js/popup.min.js (added)
-
tags/1.6.1/assets/js/preloader.js (added)
-
tags/1.6.1/assets/js/preloader.min.js (added)
-
tags/1.6.1/assets/js/ripple-effects.js (added)
-
tags/1.6.1/assets/js/ripple-effects.min.js (added)
-
tags/1.6.1/assets/js/search-form.js (added)
-
tags/1.6.1/assets/js/search-form.min.js (added)
-
tags/1.6.1/assets/js/slides.js (added)
-
tags/1.6.1/assets/js/slides.min.js (added)
-
tags/1.6.1/assets/js/sound-player.js (added)
-
tags/1.6.1/assets/js/sound-player.min.js (added)
-
tags/1.6.1/assets/js/sticky.js (added)
-
tags/1.6.1/assets/js/sticky.min.js (added)
-
tags/1.6.1/assets/js/tabs.js (added)
-
tags/1.6.1/assets/js/tabs.min.js (added)
-
tags/1.6.1/assets/js/team-member-carousel.js (added)
-
tags/1.6.1/assets/js/team-member-carousel.min.js (added)
-
tags/1.6.1/assets/js/templates-kit.js (added)
-
tags/1.6.1/assets/js/templates-kit.min.js (added)
-
tags/1.6.1/assets/js/testimonial-carousel.js (added)
-
tags/1.6.1/assets/js/testimonial-carousel.min.js (added)
-
tags/1.6.1/assets/js/woo-checkout-live.js (added)
-
tags/1.6.1/assets/js/woo-my-account-tabs.js (added)
-
tags/1.6.1/assets/js/woo-product-category.js (added)
-
tags/1.6.1/assets/js/wrapper-link.js (added)
-
tags/1.6.1/assets/js/wrapper-link.min.js (added)
-
tags/1.6.1/assets/packages (added)
-
tags/1.6.1/assets/packages/data-table (added)
-
tags/1.6.1/assets/packages/data-table/data-table-buttons.css (added)
-
tags/1.6.1/assets/packages/data-table/data-table-buttons.js (added)
-
tags/1.6.1/assets/packages/data-table/data-table-buttons.min.css (added)
-
tags/1.6.1/assets/packages/data-table/data-table-buttons.min.js (added)
-
tags/1.6.1/assets/packages/data-table/data-table-csv.js (added)
-
tags/1.6.1/assets/packages/data-table/data-table-csv.min.js (added)
-
tags/1.6.1/assets/packages/data-table/data-table.css (added)
-
tags/1.6.1/assets/packages/data-table/data-table.js (added)
-
tags/1.6.1/assets/packages/data-table/data-table.min.css (added)
-
tags/1.6.1/assets/packages/data-table/data-table.min.js (added)
-
tags/1.6.1/assets/packages/font-awesome (added)
-
tags/1.6.1/assets/packages/font-awesome/fontawesome.css (added)
-
tags/1.6.1/assets/packages/font-awesome/fontawesome.min.css (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-brands-400.eot (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-brands-400.svg (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-brands-400.ttf (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-brands-400.woff (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-brands-400.woff2 (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-regular-400.eot (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-regular-400.svg (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-regular-400.ttf (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-regular-400.woff (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-regular-400.woff2 (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-solid-900.eot (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-solid-900.svg (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-solid-900.ttf (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-solid-900.woff (added)
-
tags/1.6.1/assets/packages/font-awesome/webfonts/fa-solid-900.woff2 (added)
-
tags/1.6.1/assets/packages/font-iconpicker (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonticonpicker.css (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonticonpicker.js (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonticonpicker.min.css (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonticonpicker.min.js (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonts (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonts/iconpicker.eot (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonts/iconpicker.svg (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonts/iconpicker.ttf (added)
-
tags/1.6.1/assets/packages/font-iconpicker/fonts/iconpicker.woff (added)
-
tags/1.6.1/assets/packages/glightbox (added)
-
tags/1.6.1/assets/packages/glightbox/glightbox.css (added)
-
tags/1.6.1/assets/packages/glightbox/glightbox.js (added)
-
tags/1.6.1/assets/packages/glightbox/glightbox.min.css (added)
-
tags/1.6.1/assets/packages/glightbox/glightbox.min.js (added)
-
tags/1.6.1/assets/packages/gmaps (added)
-
tags/1.6.1/assets/packages/gmaps/gmaps.js (added)
-
tags/1.6.1/assets/packages/gmaps/gmaps.min.js (added)
-
tags/1.6.1/assets/packages/howler (added)
-
tags/1.6.1/assets/packages/howler/howler.js (added)
-
tags/1.6.1/assets/packages/howler/howler.min.js (added)
-
tags/1.6.1/assets/packages/jquery-ui (added)
-
tags/1.6.1/assets/packages/jquery-ui/dialog.css (added)
-
tags/1.6.1/assets/packages/jquery-ui/dialog.min.css (added)
-
tags/1.6.1/assets/packages/leaflet (added)
-
tags/1.6.1/assets/packages/leaflet/images (added)
-
tags/1.6.1/assets/packages/leaflet/images/layers-2x.png (added)
-
tags/1.6.1/assets/packages/leaflet/images/layers.png (added)
-
tags/1.6.1/assets/packages/leaflet/images/marker-icon-2x.png (added)
-
tags/1.6.1/assets/packages/leaflet/images/marker-icon.png (added)
-
tags/1.6.1/assets/packages/leaflet/images/marker-shadow.png (added)
-
tags/1.6.1/assets/packages/leaflet/leaflet.css (added)
-
tags/1.6.1/assets/packages/leaflet/leaflet.js (added)
-
tags/1.6.1/assets/packages/leaflet/leaflet.min.css (added)
-
tags/1.6.1/assets/packages/leaflet/leaflet.min.js (added)
-
tags/1.6.1/assets/packages/lottie (added)
-
tags/1.6.1/assets/packages/lottie/lottie.js (added)
-
tags/1.6.1/assets/packages/lottie/lottie.min.js (added)
-
tags/1.6.1/assets/packages/mixitup (added)
-
tags/1.6.1/assets/packages/mixitup/mixitup.js (added)
-
tags/1.6.1/assets/packages/mixitup/mixitup.min.js (added)
-
tags/1.6.1/assets/packages/news-ticker-init (added)
-
tags/1.6.1/assets/packages/news-ticker-init/news-ticker-init.js (added)
-
tags/1.6.1/assets/packages/news-ticker-init/news-ticker-init.min.js (added)
-
tags/1.6.1/assets/packages/ripple (added)
-
tags/1.6.1/assets/packages/ripple/ripple.js (added)
-
tags/1.6.1/assets/packages/ripple/ripple.min.js (added)
-
tags/1.6.1/assets/packages/slick (added)
-
tags/1.6.1/assets/packages/slick/slick-theme.css (added)
-
tags/1.6.1/assets/packages/slick/slick-theme.min.css (added)
-
tags/1.6.1/assets/packages/slick/slick.css (added)
-
tags/1.6.1/assets/packages/slick/slick.js (added)
-
tags/1.6.1/assets/packages/slick/slick.min.css (added)
-
tags/1.6.1/assets/packages/slick/slick.min.js (added)
-
tags/1.6.1/assets/packages/smart-menus (added)
-
tags/1.6.1/assets/packages/smart-menus/smartmenus.js (added)
-
tags/1.6.1/assets/packages/smart-menus/smartmenus.min.js (added)
-
tags/1.6.1/assets/packages/sticky (added)
-
tags/1.6.1/assets/packages/sticky/sticky.js (added)
-
tags/1.6.1/assets/packages/sticky/sticky.min.js (added)
-
tags/1.6.1/assets/packages/swiper (added)
-
tags/1.6.1/assets/packages/swiper/swiper-bundle.css (added)
-
tags/1.6.1/assets/packages/swiper/swiper-bundle.js (added)
-
tags/1.6.1/assets/packages/swiper/swiper-bundle.min.css (added)
-
tags/1.6.1/assets/packages/swiper/swiper-bundle.min.js (added)
-
tags/1.6.1/composer.json (added)
-
tags/1.6.1/composer.lock (added)
-
tags/1.6.1/html (added)
-
tags/1.6.1/html/admin (added)
-
tags/1.6.1/html/admin/menus (added)
-
tags/1.6.1/html/admin/menus/builder (added)
-
tags/1.6.1/html/admin/menus/builder/dialogs (added)
-
tags/1.6.1/html/admin/menus/builder/dialogs/new-template (added)
-
tags/1.6.1/html/admin/menus/builder/dialogs/new-template/tpl.php (added)
-
tags/1.6.1/html/admin/menus/builder/editor (added)
-
tags/1.6.1/html/admin/menus/builder/editor/canvas (added)
-
tags/1.6.1/html/admin/menus/builder/editor/canvas/tpl.php (added)
-
tags/1.6.1/html/admin/menus/builder/editor/dynamic-loop-item (added)
-
tags/1.6.1/html/admin/menus/builder/editor/dynamic-loop-item/tpl.php (added)
-
tags/1.6.1/html/admin/menus/builder/editor/footer (added)
-
tags/1.6.1/html/admin/menus/builder/editor/footer/tpl.php (added)
-
tags/1.6.1/html/admin/menus/builder/editor/header (added)
-
tags/1.6.1/html/admin/menus/builder/editor/header-footer (added)
-
tags/1.6.1/html/admin/menus/builder/editor/header-footer/tpl.php (added)
-
tags/1.6.1/html/admin/menus/builder/editor/header/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/3rdpt-widgets (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/3rdpt-widgets/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/dashboard (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/dashboard/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/extensions (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/extensions/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/settings (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/settings/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/templates-kit (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/templates-kit/dialogs (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/templates-kit/dialogs/import (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/templates-kit/dialogs/import/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/templates-kit/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/widgets (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/content/widgets/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/fragments/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/tabs (added)
-
tags/1.6.1/html/admin/menus/dashboard/tabs/tpl.php (added)
-
tags/1.6.1/html/admin/menus/dashboard/tpl.php (added)
-
tags/1.6.1/html/admin/menus/popup (added)
-
tags/1.6.1/html/admin/menus/popup/dialogs (added)
-
tags/1.6.1/html/admin/menus/popup/dialogs/new-popup (added)
-
tags/1.6.1/html/admin/menus/popup/dialogs/new-popup/tpl.php (added)
-
tags/1.6.1/html/admin/menus/popup/editor (added)
-
tags/1.6.1/html/admin/menus/popup/editor/tpl.php (added)
-
tags/1.6.1/html/admin/metaboxes (added)
-
tags/1.6.1/html/admin/metaboxes/submissions (added)
-
tags/1.6.1/html/admin/metaboxes/submissions/additional-info (added)
-
tags/1.6.1/html/admin/metaboxes/submissions/additional-info/tpl.php (added)
-
tags/1.6.1/html/admin/metaboxes/submissions/submission (added)
-
tags/1.6.1/html/admin/metaboxes/submissions/submission/tpl.php (added)
-
tags/1.6.1/html/front (added)
-
tags/1.6.1/html/front/popup (added)
-
tags/1.6.1/html/front/popup/tpl.php (added)
-
tags/1.6.1/i18n (added)
-
tags/1.6.1/i18n/languages (added)
-
tags/1.6.1/i18n/languages/addons-for-elementor-builder-en_US.mo (added)
-
tags/1.6.1/i18n/languages/addons-for-elementor-builder-en_US.po (added)
-
tags/1.6.1/readme.txt (added)
-
tags/1.6.1/vendor (added)
-
tags/1.6.1/vendor/autoload.php (added)
-
tags/1.6.1/vendor/composer (added)
-
tags/1.6.1/vendor/composer/ClassLoader.php (added)
-
tags/1.6.1/vendor/composer/InstalledVersions.php (added)
-
tags/1.6.1/vendor/composer/LICENSE (added)
-
tags/1.6.1/vendor/composer/autoload_classmap.php (added)
-
tags/1.6.1/vendor/composer/autoload_namespaces.php (added)
-
tags/1.6.1/vendor/composer/autoload_psr4.php (added)
-
tags/1.6.1/vendor/composer/autoload_real.php (added)
-
tags/1.6.1/vendor/composer/autoload_static.php (added)
-
tags/1.6.1/vendor/composer/installed.json (added)
-
tags/1.6.1/vendor/composer/installed.php (added)
-
trunk/addons-for-elementor-builder.php (modified) (1 diff)
-
trunk/afeb.php (modified) (1 diff)
-
trunk/app/Ajax.php (modified) (33 diffs)
-
trunk/app/Assets.php (modified) (4 diffs)
-
trunk/app/Base.php (modified) (1 diff)
-
trunk/app/Documents/Builder.php (modified) (1 diff)
-
trunk/app/Handler/Widgets/FormBuilderHandler.php (modified) (1 diff)
-
trunk/app/I18n.php (modified) (1 diff)
-
trunk/app/Modules/DynamicTags/Tags/Author/AuthorURL.php (modified) (1 diff)
-
trunk/app/Widgets.php (modified) (7 diffs)
-
trunk/app/Widgets/FancyText.php (modified) (4 diffs)
-
trunk/app/Widgets/FormBuilder/FormBuilder.php (modified) (5 diffs)
-
trunk/app/Widgets/FormBuilder/Helper.php (modified) (28 diffs)
-
trunk/app/Widgets/LoginRegister/LoginRegister.php (modified) (8 diffs)
-
trunk/app/Widgets/SearchForm/Helper.php (modified) (1 diff)
-
trunk/app/Widgets/Slides.php (modified) (2 diffs)
-
trunk/app/Widgets/TeamMemberCarousel.php (modified) (1 diff)
-
trunk/app/Widgets/TemplateBuilder/CommentsForm.php (modified) (2 diffs)
-
trunk/app/Widgets/TemplateBuilder/TextRender.php (modified) (1 diff)
-
trunk/app/Widgets/Woo/AddToCart.php (modified) (5 diffs)
-
trunk/app/Widgets/Woo/ProductCategory.php (modified) (3 diffs)
-
trunk/app/Widgets/Woo/ProductImage.php (modified) (1 diff)
-
trunk/assets/css/common.css (added)
-
trunk/assets/css/normalize.css (added)
-
trunk/assets/css/widgets/rtl/woo-my-account.css (added)
-
trunk/assets/css/widgets/widgets-icons.css (modified) (1 diff)
-
trunk/assets/css/widgets/widgets-icons.min.css (modified) (1 diff)
-
trunk/assets/css/widgets/woo-checkout.css (added)
-
trunk/assets/css/widgets/woo-my-account.css (added)
-
trunk/assets/js/global/dynamic-hook.js (added)
-
trunk/assets/packages/data-table/data-table-buttons.css (added)
-
trunk/assets/packages/data-table/data-table-buttons.js (added)
-
trunk/assets/packages/data-table/data-table-csv.js (added)
-
trunk/assets/packages/data-table/data-table.css (added)
-
trunk/assets/packages/data-table/data-table.js (added)
-
trunk/assets/packages/font-awesome/fontawesome.css (added)
-
trunk/assets/packages/font-iconpicker/fonticonpicker.css (added)
-
trunk/assets/packages/font-iconpicker/fonticonpicker.js (added)
-
trunk/assets/packages/glightbox (added)
-
trunk/assets/packages/glightbox/glightbox.css (added)
-
trunk/assets/packages/glightbox/glightbox.js (added)
-
trunk/assets/packages/glightbox/glightbox.min.css (added)
-
trunk/assets/packages/glightbox/glightbox.min.js (added)
-
trunk/assets/packages/gmaps/gmaps.js (added)
-
trunk/assets/packages/howler/howler.js (added)
-
trunk/assets/packages/jquery-ui/dialog.css (added)
-
trunk/assets/packages/leaflet/leaflet.css (added)
-
trunk/assets/packages/leaflet/leaflet.js (added)
-
trunk/assets/packages/lottie/lottie.js (added)
-
trunk/assets/packages/mixitup/mixitup.js (added)
-
trunk/assets/packages/news-ticker-init/news-ticker-init.js (added)
-
trunk/assets/packages/ripple/ripple.js (added)
-
trunk/assets/packages/slick/slick-theme.css (added)
-
trunk/assets/packages/slick/slick.css (added)
-
trunk/assets/packages/slick/slick.js (added)
-
trunk/assets/packages/smart-menus/smartmenus.js (added)
-
trunk/assets/packages/sticky/sticky.js (added)
-
trunk/assets/packages/swiper (added)
-
trunk/assets/packages/swiper/swiper-bundle.css (added)
-
trunk/assets/packages/swiper/swiper-bundle.js (added)
-
trunk/assets/packages/swiper/swiper-bundle.min.css (added)
-
trunk/assets/packages/swiper/swiper-bundle.min.js (added)
-
trunk/html/admin/menus/dashboard/fragments/content/dashboard/tpl.php (modified) (3 diffs)
-
trunk/html/admin/metaboxes/submissions/additional-info/tpl.php (modified) (1 diff)
-
trunk/html/admin/metaboxes/submissions/submission/tpl.php (modified) (1 diff)
-
trunk/readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
addons-for-elementor-builder/trunk/addons-for-elementor-builder.php
r3382971 r3386622 4 4 * Plugin URI: https://vertexaddons.com/ 5 5 * Description: Just one plugin instead of a lot! 6 * Version: 1.6. 06 * Version: 1.6.1 7 7 * Author: Webilia 8 8 * Author URI: https://webilia.com/ -
addons-for-elementor-builder/trunk/afeb.php
r3382971 r3386622 23 23 * @var string 24 24 */ 25 public $version = '1.6. 0';25 public $version = '1.6.1'; 26 26 27 27 /** -
addons-for-elementor-builder/trunk/app/Ajax.php
r3382971 r3386622 12 12 use Plugin_Upgrader; 13 13 use WP_Ajax_Upgrader_Skin; 14 use WP_Filesystem_Base; 14 15 use WP_Query; 15 16 if (!defined('ABSPATH')) {17 exit;18 }19 16 20 17 /** 21 18 * "Vertex Addons for Elementor" General Ajax Class 22 * 19 * 23 20 * @class Ajax 24 21 * @version 1.0.4 … … 28 25 /** 29 26 * Initialize "Vertex Addons for Elementor" Ajax 30 * 27 * 31 28 * @since 1.0.4 32 29 */ … … 38 35 /** 39 36 * Ajax Class Actions 40 * 37 * 41 38 * @since 1.0.4 42 39 */ … … 66 63 $data = isset($_POST['data']) && is_array($_POST['data']) ? map_deep($_POST['data'], 'sanitize_text_field') : [ 67 64 'library' => 'fa-regular', 68 'value' => "far fa-arrow-alt-circle-up" 65 'value' => "far fa-arrow-alt-circle-up", 69 66 ]; 70 67 … … 87 84 $type = isset($_POST['data']['type']) ? sanitize_text_field(wp_unslash($_POST['data']['type'])) : ''; 88 85 89 if (!trim($type)) { 86 if (!trim($type)) 87 { 90 88 wp_send_json_error(['message' => esc_html__('Please use a valid template type', 'addons-for-elementor-builder')]); 91 89 } … … 97 95 'post_title' => $name, 98 96 'post_type' => Builder::BUILDER_POST_TYPE, 99 'post_name' => Builder::BUILDER_POST_TYPE 97 'post_name' => Builder::BUILDER_POST_TYPE, 100 98 ]); 101 99 102 if ($id) { 100 if ($id) 101 { 103 102 $template_name = ''; 104 103 $page_settings = [ … … 106 105 'display_condition' => [['_id' => 'ff0d1cf', 'conditon_group' => 'entire']], 107 106 'display_condition_temp' => [], 108 'activeItemIndex' => 1 107 'activeItemIndex' => 1, 109 108 ]; 110 109 111 switch ($type) { 110 switch ($type) 111 { 112 112 case 'archive': 113 113 $template_name = 'Archive'; … … 130 130 } 131 131 132 if ($name == '') { 132 if ($name == '') 133 { 133 134 $id = intval($id); 134 135 wp_update_post([ 135 136 'ID' => $id, 136 'post_title' => "Vertex {$template_name} Template_{$id}"137 'post_title' => "Vertex $template_name Template_$id", 137 138 ]); 138 139 } … … 146 147 $redirect = get_edit_post_link($id, 'raw'); 147 148 148 if (did_action('elementor/loaded') && class_exists(Plugin::class)) { 149 if (did_action('elementor/loaded') && class_exists(Plugin::class)) 150 { 149 151 $document = Plugin::instance()->documents->get($id); 150 if ($document) { 152 if ($document) 153 { 151 154 $redirect = $document->get_edit_url(); 152 155 } … … 155 158 wp_send_json_success([ 156 159 'redirect' => $redirect, 157 'message' => esc_html__('The new template has been created', 'addons-for-elementor-builder') 160 'message' => esc_html__('The new template has been created', 'addons-for-elementor-builder'), 158 161 ]); 159 162 } … … 177 180 'post_title' => $name, 178 181 'post_type' => Popup::POPUP_POST_TYPE, 179 'post_name' => Popup::POPUP_POST_TYPE 182 'post_name' => Popup::POPUP_POST_TYPE, 180 183 ]); 181 184 182 if ($id) { 183 if ($name == '') { 185 if ($id) 186 { 187 if ($name == '') 188 { 184 189 $id = intval($id); 185 190 wp_update_post([ 186 191 'ID' => $id, 187 'post_title' => "Vertex Popup_ {$id}"192 'post_title' => "Vertex Popup_$id", 188 193 ]); 189 194 } … … 193 198 $redirect = get_edit_post_link($id, 'raw'); 194 199 195 if (did_action('elementor/loaded') && class_exists(Plugin::class)) { 200 if (did_action('elementor/loaded') && class_exists(Plugin::class)) 201 { 196 202 $document = Plugin::instance()->documents->get($id); 197 if ($document) { 203 if ($document) 204 { 198 205 $redirect = $document->get_edit_url(); 199 206 } … … 202 209 wp_send_json_success([ 203 210 'redirect' => $redirect, 204 'message' => esc_html__('The new popup has been created', 'addons-for-elementor-builder') 211 'message' => esc_html__('The new popup has been created', 'addons-for-elementor-builder'), 205 212 ]); 206 213 } … … 211 218 /** 212 219 * Activate Required Plugins 213 * 220 * 214 221 * @since 1.4.0 215 222 */ … … 228 235 set_time_limit(0); 229 236 230 foreach ($plugins as $plugin_slug => $plugin_path) { 231 if (Helper::is_plugin_installed($plugin_slug, $plugin_path)) { 232 if (!is_plugin_active($plugin_path)) { 237 foreach ($plugins as $plugin_slug => $plugin_path) 238 { 239 if (Helper::is_plugin_installed($plugin_slug, $plugin_path)) 240 { 241 if (!is_plugin_active($plugin_path)) 242 { 233 243 activate_plugin($plugin_path); 234 244 } 235 } else { 245 } 246 else 247 { 236 248 require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php'; 237 249 require_once ABSPATH . 'wp-admin/includes/plugin-install.php'; … … 240 252 'plugin_information', 241 253 [ 242 'slug' => $plugin_slug,254 'slug' => $plugin_slug, 243 255 'fields' => ['sections' => false], 244 256 ] … … 253 265 254 266 if (is_wp_error($result)) $error = $result->get_error_message(); 255 elseif (is_wp_error($skin->result)) $error = $skin->result->get_error_message(); 256 elseif ($skin->get_errors()->has_errors()) $error = $skin->get_error_messages(); 257 elseif (is_null($result)) { 267 else if (is_wp_error($skin->result)) $error = $skin->result->get_error_message(); 268 else if ($skin->get_errors()->has_errors()) $error = $skin->get_error_messages(); 269 else if (is_null($result)) 270 { 258 271 $error = esc_html__('Unable to connect to the filesystem. Please confirm your credentials.', 'addons-for-elementor-builder'); 259 272 260 273 global $wp_filesystem; 261 274 if ($wp_filesystem instanceof WP_Filesystem_Base && is_wp_error($wp_filesystem->errors) && $wp_filesystem->errors->has_errors()) 262 $error = esc_html($wp_filesystem->errors->get_error_message());275 $error = esc_html($wp_filesystem->errors->get_error_message()); 263 276 } 264 277 … … 275 288 /** 276 289 * Import Settings 277 * 290 * 278 291 * @since 1.4.0 279 292 */ … … 284 297 $time_limit = ini_get('max_execution_time'); 285 298 286 if (!did_action('elementor/loaded') || !class_exists(Plugin::class)) { 299 if (!did_action('elementor/loaded') || !class_exists(Plugin::class)) 300 { 287 301 wp_send_json_error(['message' => esc_html__('Elementor must be active to import settings.', 'addons-for-elementor-builder')]); 288 302 } … … 292 306 $kit_id = isset($_POST['afeb_templates_kit']) ? sanitize_file_name(wp_unslash($_POST['afeb_templates_kit'])) : ''; 293 307 $random_number = substr(str_shuffle('0123456789abcdefghijklmnopqrstvwxyzABCDEFGHIJKLMNOPQRSTVWXYZ'), 0, 7); 294 $site_settings = @file_get_contents('https://cdn.webilia.com/u/c/vertex/' . $kit_id . '/site-settings.json?' . $random_number);295 308 $error = ''; 296 297 if ($site_settings !== false) { 298 $site_settings = json_decode($site_settings, true); 299 300 if (!empty($site_settings['settings'])) { 301 $kit = Plugin::instance()->kits_manager->get_active_kit(); 302 $active_kit_id = $kit->get_id(); 303 304 if (!$active_kit_id) { 305 $created_default_kit = Plugin::instance()->kits_manager->create_default(); 306 307 if (!$created_default_kit) { 309 $site_settings_url = 'https://cdn.webilia.com/u/c/vertex/' . $kit_id . '/site-settings.json?' . $random_number; 310 311 $response = wp_remote_get($site_settings_url, ['timeout' => 20]); 312 313 if (is_wp_error($response)) 314 { 315 $error = esc_html__('The site settings file could not be retrieved from the destination server. The file address may be incorrect or the destination server may be temporarily experiencing issues.', 'addons-for-elementor-builder'); 316 } 317 else 318 { 319 $body = wp_remote_retrieve_body($response); 320 321 if (!empty($body)) 322 { 323 $decoded_settings = json_decode($body, true); 324 325 if (json_last_error() === JSON_ERROR_NONE && is_array($decoded_settings) && !empty($decoded_settings['settings'])) 326 { 327 $site_settings = $decoded_settings; 328 329 $kit = Plugin::instance()->kits_manager->get_active_kit(); 330 $active_kit_id = $kit->get_id(); 331 332 if (!$active_kit_id) 333 { 334 $created_default_kit = Plugin::instance()->kits_manager->create_default(); 335 336 if (!$created_default_kit) 337 { 338 set_time_limit($time_limit); 339 wp_send_json_error(['message' => esc_html__('There was a problem creating the default Elementor kit, the default kit cannot be created.', 'addons-for-elementor-builder')]); 340 } 341 342 update_option(Manager::OPTION_ACTIVE, $created_default_kit); 343 $active_kit_id = $created_default_kit; 344 } 345 346 $default_kit = Plugin::instance()->documents->get_doc_for_frontend($active_kit_id); 347 $kit_settings = $default_kit->get_settings(); 348 $new_settings = $site_settings['settings']; 349 $settings = array_merge($kit_settings, $new_settings); 350 $save_new_settings = $default_kit->save(['settings' => $settings]); 351 352 if ($save_new_settings === true) 353 { 354 update_option('elementor_disable_color_schemes', 'yes'); 355 update_option('elementor_disable_typography_schemes', 'yes'); 356 308 357 set_time_limit($time_limit); 309 wp_send_json_error(['message' => esc_html__('There was a problem creating the default Elementor kit, the default kit cannot be created.', 'addons-for-elementor-builder')]); 310 } 311 312 update_option(Manager::OPTION_ACTIVE, $created_default_kit); 313 $active_kit_id = $created_default_kit; 314 } 315 316 $default_kit = Plugin::instance()->documents->get_doc_for_frontend($active_kit_id); 317 $kit_settings = $default_kit->get_settings(); 318 $new_settings = $site_settings['settings']; 319 $settings = array_merge($kit_settings, $new_settings); 320 $save_new_settings = $default_kit->save(['settings' => $settings]); 321 322 if ($save_new_settings === true) { 323 update_option('elementor_disable_color_schemes', 'yes'); 324 update_option('elementor_disable_typography_schemes', 'yes'); 325 326 set_time_limit($time_limit); 327 wp_send_json_success(); 328 } 329 } else { 358 wp_send_json_success(); 359 } 360 } 361 else 362 { 363 $error = esc_html__('No settings exist. The site settings file may have been downloaded incompletely or it may be corrupted.', 'addons-for-elementor-builder'); 364 } 365 } 366 else 367 { 330 368 $error = esc_html__('No settings exist. The site settings file may have been downloaded incompletely or it may be corrupted.', 'addons-for-elementor-builder'); 331 369 } 332 } else {333 $error = esc_html__('The site settings file could not be retrieved from the destination server. The file address may be incorrect or the destination server may be temporarily experiencing issues.', 'addons-for-elementor-builder');334 370 } 335 371 336 372 set_time_limit($time_limit); 337 373 338 if (!empty($error)) { 374 if (!empty($error)) 375 { 339 376 wp_send_json_error(['message' => $error]); 340 377 } … … 343 380 /** 344 381 * Import Templates Kit 345 * 382 * 346 383 * @since 1.4.0 347 384 */ … … 362 399 'post_status' => 'any', 363 400 'posts_per_page' => '-1', 364 'meta_key' => '_afeb_demo_import_item' 401 'meta_key' => '_afeb_demo_import_item', 365 402 ]; 366 403 $error = esc_html__('Previous imported files will not be reset.', 'addons-for-elementor-builder'); … … 371 408 $imported_items = new WP_Query($args); 372 409 373 if ($imported_items->have_posts()) { 374 while ($imported_items->have_posts()) { 410 if ($imported_items->have_posts()) 411 { 412 while ($imported_items->have_posts()) 413 { 375 414 $imported_items->the_post(); 376 415 … … 388 427 ]); 389 428 390 if (!empty($imported_terms)) { 429 if (!empty($imported_terms)) 430 { 391 431 foreach ($imported_terms as $imported_term) 392 432 wp_delete_term($imported_term->term_id, $imported_term->taxonomy); 393 433 } 394 395 $error = ''; 396 } else { 397 $error = ''; 398 } 399 400 if (!empty($error)) { 401 set_time_limit($time_limit); 402 wp_send_json_error(['message' => $error]); 403 } 404 405 add_filter('upload_mimes', function ($mimes) { 434 } 435 436 $error = ''; 437 add_filter('upload_mimes', function ($mimes) 438 { 406 439 // Allow SVG files. 407 $mimes['svg'] = 'image/svg+xml';440 $mimes['svg'] = 'image/svg+xml'; 408 441 $mimes['svgz'] = 'image/svg+xml'; 409 442 … … 417 450 }, 99); 418 451 419 add_filter('wp_handle_upload_prefilter', function ($file) { 420 if ($file['type'] === 'image/svg+xml') { 452 add_filter('wp_handle_upload_prefilter', function ($file) 453 { 454 if ($file['type'] === 'image/svg+xml') 455 { 421 456 $file_content = file_get_contents($file['tmp_name']); 422 457 $sanitized_content = (new Security())->sanitize_svg($file_content); … … 430 465 define('WP_LOAD_IMPORTERS', true); 431 466 432 if (!class_exists('WP_Import')) { 433 $wp_importer = AFEB_ABSPATH . '/app/Modules/WPImport/WPImporter.php'; 467 if (!class_exists('WP_Import')) 468 { 469 $wp_importer = AFEB_ABSPATH . '/app/Modules/WPImport/WPImporter.php'; 434 470 if (file_exists($wp_importer)) require $wp_importer; 435 471 } 436 472 437 if (class_exists('AFEB\Modules\WPImport\WPImport')) { 473 if (class_exists('AFEB\Modules\WPImport\WPImport')) 474 { 438 475 $kit_id = isset($_POST['afeb_templates_kit']) ? sanitize_file_name(wp_unslash($_POST['afeb_templates_kit'])) : ''; 439 476 … … 452 489 $result = serialize($wp_import); 453 490 454 if (strpos($result, 'summary') !== false) { 491 if (strpos($result, 'summary') !== false) 492 { 455 493 456 494 $templates_kit->fix_elementor_images($kit_id); 457 458 495 $templates_kit->setup_templates($kit_id); 459 496 … … 465 502 set_time_limit($time_limit); 466 503 wp_send_json_success(); 467 } else { 504 } 505 else 506 { 468 507 $wp_import = array_values((array) $wp_import); 469 508 470 foreach ($wp_import as $key => $value) { 509 foreach ($wp_import as $value) 510 { 471 511 if ( 472 512 isset($value['status']) && 473 513 isset($value['errors']) 474 ) { 514 ) 515 { 475 516 $error = isset($value['errors'][0]) ? esc_html($value['errors'][0]) : ''; 476 517 } 477 518 } 478 519 } 479 } else { 520 } 521 else 522 { 480 523 $error = esc_html__('Operation not completed, Class WPImport does not exist.', 'addons-for-elementor-builder'); 481 524 } … … 496 539 $template_id = !empty($_POST['data']['template_id']) ? intval(wp_unslash($_POST['data']['template_id'])) : -1; 497 540 498 if ($template_id !== -1) { 541 if ($template_id !== -1) 542 { 499 543 $post_type = !empty($_POST['data']['post_type']) ? sanitize_text_field(wp_unslash($_POST['data']['post_type'])) : ''; 500 544 $number_of_items = !empty($_POST['data']['number_of_items']) ? intval(wp_unslash($_POST['data']['number_of_items'])) : 5; … … 516 560 $is_content = $helper->dynamic_loop_item($template_id, $query->posts); 517 561 518 if (!$is_content) { 562 if (!$is_content) 563 { 519 564 echo -1; 520 565 } … … 527 572 } 528 573 529 public function afeb_update_submission_handler() { 530 531 if ( ! current_user_can( 'edit_posts' ) ) { 532 wp_send_json_error( __( 'Permission denied.', 'addons-for-elementor-builder' ) ); 533 } 534 535 $submission_id = intval( $_POST['post_id'] ?? 0 ); 536 if ( ! $submission_id ) { 537 wp_send_json_error( __( 'Invalid submission ID.', 'addons-for-elementor-builder' ) ); 574 public function afeb_update_submission_handler() 575 { 576 577 if (!current_user_can('edit_posts')) 578 { 579 wp_send_json_error(__('Permission denied.', 'addons-for-elementor-builder')); 580 } 581 582 $submission_id = intval($_POST['post_id'] ?? 0); 583 if (!$submission_id) 584 { 585 wp_send_json_error(__('Invalid submission ID.', 'addons-for-elementor-builder')); 538 586 } 539 587 540 588 // Get original form reference 541 $page_id = intval( get_post_meta( $submission_id, 'afeb_page_id', true ) ); 542 $form_id = sanitize_text_field( get_post_meta( $submission_id, 'afeb_form_id', true ) ); 543 544 if ( ! $page_id || ! $form_id ) { 545 wp_send_json_error( __( 'Parent form reference not found.', 'addons-for-elementor-builder' ) ); 546 } 547 548 $current_meta = get_post_meta( $submission_id, 'afeb_form_fields', true ); 549 $current_meta = is_array( $current_meta ) ? $current_meta : []; 589 $page_id = intval(get_post_meta($submission_id, 'afeb_page_id', true)); 590 $form_id = sanitize_text_field(get_post_meta($submission_id, 'afeb_form_id', true)); 591 592 if (!$page_id || !$form_id) 593 { 594 wp_send_json_error(__('Parent form reference not found.', 'addons-for-elementor-builder')); 595 } 596 597 $current_meta = get_post_meta($submission_id, 'afeb_form_fields', true); 598 $current_meta = is_array($current_meta) ? $current_meta : []; 550 599 551 600 // Load Elementor widget settings 552 $settings = \AFEB\Widgets::get_widget_preview_settings( $page_id, $form_id);553 $original_fields = $settings['form_fields'] ?? [];601 $settings = Widgets::get_widget_preview_settings($page_id, $form_id); 602 $original_fields = $settings['form_fields'] ?? []; 554 603 555 604 // Posted values from admin editor 556 $submitted_fields = isset( $_POST['form_fields'] ) && is_array( $_POST['form_fields'] ) ? $_POST['form_fields'] : []; 557 558 if ( empty( $submitted_fields ) ) { 559 $fallback_fields = isset( $_POST['afeb-form-fields'] ) && is_array( $_POST['afeb-form-fields'] ) ? wp_unslash( $_POST['afeb-form-fields'] ) : []; 560 561 if ( ! empty( $fallback_fields ) && ! empty( $current_meta ) ) { 562 foreach ( $current_meta as $index => $meta_field ) { 605 $submitted_fields = isset($_POST['form_fields']) && is_array($_POST['form_fields']) ? $_POST['form_fields'] : []; 606 607 if (empty($submitted_fields)) 608 { 609 $fallback_fields = isset($_POST['afeb-form-fields']) && is_array($_POST['afeb-form-fields']) ? wp_unslash($_POST['afeb-form-fields']) : []; 610 611 if (!empty($fallback_fields) && !empty($current_meta)) 612 { 613 foreach ($current_meta as $index => $meta_field) 614 { 563 615 $raw_value = null; 564 616 565 if ( array_key_exists( $index, $fallback_fields ) ) { 566 $raw_value = $fallback_fields[ $index ]; 567 } elseif ( isset( $meta_field['_id'] ) && array_key_exists( $meta_field['_id'], $fallback_fields ) ) { 568 $raw_value = $fallback_fields[ $meta_field['_id'] ]; 569 } 570 571 if ( null === $raw_value ) { 617 if (array_key_exists($index, $fallback_fields)) 618 { 619 $raw_value = $fallback_fields[$index]; 620 } 621 else if (isset($meta_field['_id']) && array_key_exists($meta_field['_id'], $fallback_fields)) 622 { 623 $raw_value = $fallback_fields[$meta_field['_id']]; 624 } 625 626 if (null === $raw_value) 627 { 572 628 continue; 573 629 } 574 630 575 if ( 'checkbox' === ( $meta_field['type'] ?? '' ) ) { 576 $raw_value = is_array( $raw_value ) 577 ? array_values( array_filter( array_map( 'wp_unslash', $raw_value ), 'strlen' ) ) 578 : (array) wp_unslash( $raw_value ); 579 } elseif ( 'upload' === ( $meta_field['type'] ?? '' ) ) { 580 $raw_value = array_values( array_filter( (array) $raw_value ) ); 581 } 582 583 $submitted_fields[] = array_merge( $meta_field, [ 'value' => $raw_value ] ); 584 } 585 } 586 } 587 588 if ( ! isset( $_FILES['form_files'] ) && isset( $_FILES['afeb-form-fields'] ) && ! empty( $current_meta ) ) { 631 if ('checkbox' === ($meta_field['type'] ?? '')) 632 { 633 $raw_value = is_array($raw_value) 634 ? array_values(array_filter(array_map('wp_unslash', $raw_value), 'strlen')) 635 : (array) wp_unslash($raw_value); 636 } 637 else if ('upload' === ($meta_field['type'] ?? '')) 638 { 639 $raw_value = array_values(array_filter((array) $raw_value)); 640 } 641 642 $submitted_fields[] = array_merge($meta_field, ['value' => $raw_value]); 643 } 644 } 645 } 646 647 if (!isset($_FILES['form_files']) && isset($_FILES['afeb-form-fields']) && !empty($current_meta)) 648 { 589 649 $files = $_FILES['afeb-form-fields']; 590 650 $_FILES['form_files'] = [ 591 'name' => [],592 'type' => [],651 'name' => [], 652 'type' => [], 593 653 'tmp_name' => [], 594 'error' => [],595 'size' => [],654 'error' => [], 655 'size' => [], 596 656 ]; 597 657 598 foreach ( $current_meta as $index => $meta_field ) { 658 foreach ($current_meta as $index => $meta_field) 659 { 599 660 $fid = $meta_field['_id'] ?? $index; 600 661 601 foreach ( [ 'name', 'type', 'tmp_name', 'error', 'size' ] as $prop ) { 602 if ( isset( $files[ $prop ][ $index ] ) ) { 603 $_FILES['form_files'][ $prop ][ $fid ] = $files[ $prop ][ $index ]; 604 } 605 } 606 } 607 } 608 $new_fields_meta = []; 609 $field_errors = []; 610 611 if ( ! empty( $submitted_fields ) && ! empty( $current_meta ) ) { 662 foreach (['name', 'type', 'tmp_name', 'error', 'size'] as $prop) 663 { 664 if (isset($files[$prop][$index])) 665 { 666 $_FILES['form_files'][$prop][$fid] = $files[$prop][$index]; 667 } 668 } 669 } 670 } 671 $new_fields_meta = []; 672 $field_errors = []; 673 674 if (!empty($submitted_fields) && !empty($current_meta)) 675 { 612 676 $current_meta_by_id = []; 613 foreach ( $current_meta as $meta_field ) { 614 if ( empty( $meta_field['_id'] ) ) { 677 foreach ($current_meta as $meta_field) 678 { 679 if (empty($meta_field['_id'])) 680 { 615 681 continue; 616 682 } 617 $current_meta_by_id[ $meta_field['_id'] ] = $meta_field; 618 } 619 620 foreach ( $submitted_fields as $idx => $field ) { 683 $current_meta_by_id[$meta_field['_id']] = $meta_field; 684 } 685 686 foreach ($submitted_fields as $idx => $field) 687 { 621 688 $fid = $field['_id'] ?? ''; 622 689 623 if ( $fid && isset( $current_meta_by_id[ $fid ] ) ) { 624 $submitted_fields[ $idx ] = array_merge( $current_meta_by_id[ $fid ], $field ); 625 } elseif ( isset( $current_meta[ $idx ] ) && is_array( $current_meta[ $idx ] ) ) { 626 $submitted_fields[ $idx ] = array_merge( $current_meta[ $idx ], $field ); 627 } 628 } 629 } 630 631 foreach ( $submitted_fields as $field ) { 632 $fid = $field['_id'] ?? ''; 633 $type = $field['type'] ?? 'text'; 690 if ($fid && isset($current_meta_by_id[$fid])) 691 { 692 $submitted_fields[$idx] = array_merge($current_meta_by_id[$fid], $field); 693 } 694 else if (isset($current_meta[$idx]) && is_array($current_meta[$idx])) 695 { 696 $submitted_fields[$idx] = array_merge($current_meta[$idx], $field); 697 } 698 } 699 } 700 701 foreach ($submitted_fields as $field) 702 { 703 $fid = $field['_id'] ?? ''; 704 $type = $field['type'] ?? 'text'; 634 705 $value = $field['value'] ?? []; 635 706 636 707 // Match saved Elementor definition 637 708 $original = null; 638 foreach ( $original_fields as $of ) { 639 if ( ! empty( $of['field_id'] ) && $of['field_id'] === $fid ) { 709 foreach ($original_fields as $of) 710 { 711 if (!empty($of['field_id']) && $of['field_id'] === $fid) 712 { 640 713 $original = $of; 641 714 break; … … 643 716 } 644 717 645 if ( $type === 'upload' && $original ) { 718 if ($type === 'upload' && $original) 719 { 646 720 // Extract validation rules 647 $allowed_exts = ! empty( $original['allowed_file_types'])648 ? array_map( 'strtolower', array_map( 'trim', explode( ',', $original['allowed_file_types'] ) ))721 $allowed_exts = !empty($original['allowed_file_types']) 722 ? array_map('strtolower', array_map('trim', explode(',', $original['allowed_file_types']))) 649 723 : []; 650 724 $allowed_mimes = wp_get_mime_types(); 651 if ( ! empty( $allowed_exts ) ) { 652 $allowed_mimes = array_intersect_key( $allowed_mimes, array_flip( $allowed_exts ) ); 653 } 654 $max_size = ! empty( $original['max_file_size'] ) ? intval( $original['max_file_size'] ) * 1024 : 0; // KB → bytes 655 $is_required = ! empty( $original['required'] ); 725 if (!empty($allowed_exts)) 726 { 727 $allowed_mimes = array_intersect_key($allowed_mimes, array_flip($allowed_exts)); 728 } 729 $max_size = !empty($original['max_file_size']) ? intval($original['max_file_size']) * 1024 : 0; // KB → bytes 730 $is_required = !empty($original['required']); 656 731 657 732 // Normalize from $_FILES 658 733 $file_data = []; 659 if ( isset( $_FILES['form_files']['name'][ $fid ] ) ) { 660 foreach ( (array) $_FILES['form_files']['name'][ $fid ] as $idx => $name ) { 661 if ( ! $name ) { 734 if (isset($_FILES['form_files']['name'][$fid])) 735 { 736 foreach ((array) $_FILES['form_files']['name'][$fid] as $idx => $name) 737 { 738 if (!$name) 739 { 662 740 continue; 663 741 } 664 742 $file_data[] = [ 665 'name' => $_FILES['form_files']['name'][ $fid ][ $idx],666 'type' => $_FILES['form_files']['type'][ $fid ][ $idx],667 'tmp_name' => $_FILES['form_files']['tmp_name'][ $fid ][ $idx],668 'error' => $_FILES['form_files']['error'][ $fid ][ $idx],669 'size' => $_FILES['form_files']['size'][ $fid ][ $idx],743 'name' => $_FILES['form_files']['name'][$fid][$idx], 744 'type' => $_FILES['form_files']['type'][$fid][$idx], 745 'tmp_name' => $_FILES['form_files']['tmp_name'][$fid][$idx], 746 'error' => $_FILES['form_files']['error'][$fid][$idx], 747 'size' => $_FILES['form_files']['size'][$fid][$idx], 670 748 ]; 671 749 } … … 674 752 // Validate 675 753 $validation = \AFEB\Widgets\FormBuilder\Helper::validate_uploaded_files( 676 ! empty( $file_data) ? $file_data : (array) $value,754 !empty($file_data) ? $file_data : (array) $value, 677 755 [ 678 756 'mime_types' => $allowed_mimes, 679 'exts' => $allowed_exts,680 'max_size' => $max_size,757 'exts' => $allowed_exts, 758 'max_size' => $max_size, 681 759 ], 682 760 $is_required 683 761 ); 684 762 685 if ( ! $validation['valid'] ) { 686 $field_errors[ $fid ] = $validation['errors']; 687 } 688 689 $new_fields_meta[] = array_merge( $field, [ 'value' => $validation['files'] ?? [] ] ); 690 } 691 else { 763 if (!$validation['valid']) 764 { 765 $field_errors[$fid] = $validation['errors']; 766 } 767 768 $new_fields_meta[] = array_merge($field, ['value' => $validation['files'] ?? []]); 769 } 770 else 771 { 692 772 // Non-upload fields, keep sanitized value 693 if ( is_array( $value ) ) { 694 $sanitized = map_deep( $value, 'sanitize_text_field' ); 695 } else { 696 $sanitized = sanitize_text_field( $value ); 697 } 698 $new_fields_meta[] = array_merge( $field, [ 'value' => $sanitized ] ); 699 } 700 } 701 702 if ( ! empty( $field_errors ) ) { 703 wp_send_json_error( [ 704 'message' => __( 'Some fields have errors.', 'addons-for-elementor-builder' ), 705 'errors' => $field_errors, 706 ] ); 773 if (is_array($value)) 774 { 775 $sanitized = map_deep($value, 'sanitize_text_field'); 776 } 777 else 778 { 779 $sanitized = sanitize_text_field($value); 780 } 781 $new_fields_meta[] = array_merge($field, ['value' => $sanitized]); 782 } 783 } 784 785 if (!empty($field_errors)) 786 { 787 wp_send_json_error([ 788 'message' => __('Some fields have errors.', 'addons-for-elementor-builder'), 789 'errors' => $field_errors, 790 ]); 707 791 } 708 792 709 793 // Save updated meta 710 update_post_meta( $submission_id, 'afeb_form_fields', $new_fields_meta ); 711 712 wp_send_json_success( __( 'Submission updated successfully.', 'addons-for-elementor-builder' ) ); 713 } 714 794 update_post_meta($submission_id, 'afeb_form_fields', $new_fields_meta); 795 796 wp_send_json_success(__('Submission updated successfully.', 'addons-for-elementor-builder')); 797 } 715 798 } -
addons-for-elementor-builder/trunk/app/Assets.php
r3382971 r3386622 89 89 ); 90 90 91 // Swiper (rollback to afterInit-supporting version) 92 wp_enqueue_style( 93 'afeb-swiper', 94 'https://unpkg.com/[email protected]/swiper-bundle.min.css', 95 [], 96 '7.4.1' 97 ); 98 99 wp_enqueue_script( 100 'afeb-swiper', 101 'https://unpkg.com/[email protected]/swiper-bundle.min.js', 102 [], 103 '7.4.1', 104 false 105 ); 91 // Swiper 92 $this->register_swiper_assets(); 93 wp_enqueue_style('swiper'); 94 wp_enqueue_script('swiper'); 106 95 107 96 // Lightbox 108 wp_enqueue_style( 109 'afeb-lightbox', 110 'https://cdnjs.cloudflare.com/ajax/libs/glightbox/3.2.0/css/glightbox.min.css', 111 [], 112 '3.2.0' 113 ); 114 115 wp_enqueue_script( 116 'afeb-lightbox', 117 'https://cdnjs.cloudflare.com/ajax/libs/glightbox/3.2.0/js/glightbox.min.js', 118 [], 119 '3.2.0', 120 true 121 ); 97 $this->register_glightbox_assets(); 98 wp_enqueue_style('glightbox'); 99 wp_enqueue_script('glightbox'); 122 100 123 101 // Widget JS … … 125 103 'afeb-woo-product-images', 126 104 $this->assets_url('js/afeb-woo-product-images.js'), 127 ['jquery', ' afeb-swiper', 'afeb-lightbox'],105 ['jquery', 'swiper', 'glightbox'], 128 106 AFEB_VERSION, 129 107 true … … 163 141 { 164 142 $handle = 'afeb-woo-product-images'; 143 $this->register_swiper_assets(); 144 $this->register_glightbox_assets(); 165 145 wp_register_script( 166 146 $handle, 167 147 $this->assets_url('js/afeb-woo-product-images.js'), 168 ['jquery' ],148 ['jquery', 'swiper', 'glightbox'], 169 149 AFEB_VERSION, 170 150 true … … 1499 1479 } 1500 1480 1481 private function register_swiper_assets() 1482 { 1483 if (!wp_style_is('swiper', 'registered')) 1484 { 1485 wp_register_style( 1486 'swiper', 1487 $this->assets_url('packages/swiper/swiper-bundle.min.css'), 1488 [], 1489 '9.3.2' 1490 ); 1491 } 1492 1493 if (!wp_script_is('swiper', 'registered')) 1494 { 1495 wp_register_script( 1496 'swiper', 1497 $this->assets_url('packages/swiper/swiper-bundle.min.js'), 1498 [], 1499 '9.3.2', 1500 true 1501 ); 1502 } 1503 } 1504 1505 private function register_glightbox_assets() 1506 { 1507 if (!wp_style_is('glightbox', 'registered')) 1508 { 1509 wp_register_style( 1510 'glightbox', 1511 $this->assets_url('packages/glightbox/glightbox.min.css'), 1512 [], 1513 '3.2.0' 1514 ); 1515 } 1516 1517 if (!wp_script_is('glightbox', 'registered')) 1518 { 1519 wp_register_script( 1520 'glightbox', 1521 $this->assets_url('packages/glightbox/glightbox.min.js'), 1522 [], 1523 '3.2.0', 1524 true 1525 ); 1526 } 1527 } 1528 1501 1529 public function woo_add_to_cart_script() 1502 1530 { -
addons-for-elementor-builder/trunk/app/Base.php
r3382971 r3386622 31 31 */ 32 32 const AFEB_URL = 'https://vertexaddons.com'; 33 34 /** 35 * "Vertex Addons for Elementor" Contact URL 36 */ 37 const AFEB_CONTACT_URL = 'https://vertexaddons.com/contact'; 33 38 34 39 /** -
addons-for-elementor-builder/trunk/app/Documents/Builder.php
r3297649 r3386622 60 60 61 61 add_action('elementor/widgets/register', function ($widgets_manager) { 62 $options = get_option('afeb-widgets-status', []); 62 $options = array_merge( 63 (array) get_option('afeb-widgets-status', []), 64 (array) get_option('afeb-3rdpt-widgets-status', []) 65 ); 63 66 $widgets = $this->widgets->get_template_builder_widgets(); 64 67 $widgets = array_replace_recursive($widgets, $options); -
addons-for-elementor-builder/trunk/app/Handler/Widgets/FormBuilderHandler.php
r3382971 r3386622 368 368 'post_title' => $form_title ?: "Vertex Submission", 369 369 'post_type' => Submissions::SUBMISSIONS_POST_TYPE, 370 ] );371 372 if ( !$id) return false;370 ], true); 371 372 if (is_wp_error($id) || !$id) return false; 373 373 374 374 if (trim($form_title)) update_post_meta($id, 'afeb_form_name', $form_title); -
addons-for-elementor-builder/trunk/app/I18n.php
r3297649 r3386622 42 42 load_textdomain('addons-for-elementor-builder', $language_file_path); 43 43 } 44 else45 {46 // Otherwise use plugin directory /path/to/plugin/i18n/languages/addons-for-elementor-builder-en_US.mo47 load_plugin_textdomain('addons-for-elementor-builder', false, dirname(AFEB_BASENAME) . '/i18n/languages/');48 }49 44 } 50 45 } -
addons-for-elementor-builder/trunk/app/Modules/DynamicTags/Tags/Author/AuthorURL.php
r3297649 r3386622 77 77 public function get_value(array $options = []) 78 78 { 79 return get_author_posts_url(get_the_author_ ID());79 return get_author_posts_url(get_the_author_meta('ID')); 80 80 } 81 81 } -
addons-for-elementor-builder/trunk/app/Widgets.php
r3382971 r3386622 225 225 'image' => 'search-form.svg', 226 226 ], 227 'Woo_MyAccount' => [228 'title' => esc_html__('Woo My Account', 'addons-for-elementor-builder'),229 'status' => 1,230 'class' => 'MyAccount',231 'nsp' => 'Woo',232 'image' => 'myacc.svg',233 ],234 227 'Site_Logo' => [ 235 228 'title' => esc_html__('Site Logo', 'addons-for-elementor-builder'), … … 268 261 'nsp' => 1, 269 262 'image' => 'timeline.svg', 270 ],271 'Woo_Checkout' => [272 'title' => esc_html__('Woo Checkout', 'addons-for-elementor-builder'),273 'status' => 1,274 'class' => 'Checkout',275 'nsp' => 'Woo',276 'image' => 'checkout.svg',277 ],278 'ProductCategory' => [279 'title' => esc_html__('Woo Product Category', 'addons-for-elementor-builder'),280 'status' => class_exists('WooCommerce') ? 1 : 0,281 'nsp' => 'Woo',282 'image' => 'products-category.svg',283 ],284 'ProductTags' => [285 'title' => esc_html__('Woo Product Tags', 'addons-for-elementor-builder'),286 'status' => 1,287 'categories' => 'single, woocommerce-elements-single',288 'nsp' => 'Woo',289 'image' => 'product-tags.svg',290 263 ], 291 264 ]; … … 393 366 'image' => 'site-title.svg', 394 367 ], 395 'ProductImage' => [396 'title' => esc_html__('Product Image', 'addons-for-elementor-builder'),397 'status' => 1,398 'categories' => 'single, woocommerce-elements-single',399 'nsp' => 'Woo',400 'image' => 'product-img.svg',401 ],402 'Add_To_Cart' => [403 'title' => esc_html__('Woo Add To Cart', 'addons-for-elementor-builder'),404 'status' => 1,405 'nsp' => 'Woo',406 'image' => 'add-to-cart.svg',407 ],408 'ProductExcerpt' => [409 'title' => esc_html__('Product Excerpt', 'addons-for-elementor-builder'),410 'status' => 1,411 'categories' => 'single, woocommerce-elements-single',412 'nsp' => 'Woo',413 'image' => 'product-excerpt.svg',414 ],415 'ProductContent' => [416 'title' => esc_html__('Product Content', 'addons-for-elementor-builder'),417 'status' => 1,418 'categories' => 'single, woocommerce-elements-single',419 'nsp' => 'Woo',420 'image' => 'product-content.svg',421 ]422 368 ]; 423 369 return $widgets; … … 440 386 foreach ($template_builder_widgets as $widget_key => $widget) 441 387 $widgets[$widget_key] = $widget; 388 389 foreach ($this->trdpt_widgets() as $widget_key => $widget) { 390 if (!empty($widget['template_builder'])) { 391 $widgets[$widget_key] = $widget; 392 } 393 } 442 394 443 395 return $widgets; … … 543 495 public function trdpt_widgets() 544 496 { 545 $output = []; 497 $woo_status = class_exists('WooCommerce') ? 1 : 0; 498 499 $output = [ 500 'Woo_MyAccount' => [ 501 'title' => esc_html__('Woo My Account', 'addons-for-elementor-builder'), 502 'status' => $woo_status, 503 'class' => 'MyAccount', 504 'nsp' => 'Woo', 505 'image' => 'myacc.svg', 506 ], 507 'Woo_Checkout' => [ 508 'title' => esc_html__('Woo Checkout', 'addons-for-elementor-builder'), 509 'status' => $woo_status, 510 'class' => 'Checkout', 511 'nsp' => 'Woo', 512 'image' => 'checkout.svg', 513 ], 514 'ProductCategory' => [ 515 'title' => esc_html__('Woo Product Category', 'addons-for-elementor-builder'), 516 'status' => $woo_status, 517 'nsp' => 'Woo', 518 'image' => 'products-category.svg', 519 ], 520 'ProductTags' => [ 521 'title' => esc_html__('Woo Product Tags', 'addons-for-elementor-builder'), 522 'status' => $woo_status, 523 'categories' => 'single, woocommerce-elements-single', 524 'nsp' => 'Woo', 525 'image' => 'product-tags.svg', 526 ], 527 'ProductImage' => [ 528 'title' => esc_html__('Product Image', 'addons-for-elementor-builder'), 529 'status' => $woo_status, 530 'categories' => 'single, woocommerce-elements-single', 531 'nsp' => 'Woo', 532 'image' => 'product-img.svg', 533 'template_builder' => true, 534 ], 535 'Add_To_Cart' => [ 536 'title' => esc_html__('Woo Add To Cart', 'addons-for-elementor-builder'), 537 'status' => $woo_status, 538 'nsp' => 'Woo', 539 'image' => 'add-to-cart.svg', 540 'template_builder' => true, 541 ], 542 'ProductExcerpt' => [ 543 'title' => esc_html__('Product Excerpt', 'addons-for-elementor-builder'), 544 'status' => $woo_status, 545 'categories' => 'single, woocommerce-elements-single', 546 'nsp' => 'Woo', 547 'image' => 'product-excerpt.svg', 548 'template_builder' => true, 549 ], 550 'ProductContent' => [ 551 'title' => esc_html__('Product Content', 'addons-for-elementor-builder'), 552 'status' => $woo_status, 553 'categories' => 'single, woocommerce-elements-single', 554 'nsp' => 'Woo', 555 'image' => 'product-content.svg', 556 'template_builder' => true, 557 ], 558 ]; 559 546 560 return apply_filters('afeb/widgets/trdpt_widgets', $output); 547 561 } … … 559 573 { 560 574 $output = ['pname' => '', 'ppath' => '']; 575 576 $woocommerce_widgets = [ 577 'Woo_MyAccount', 578 'Woo_Checkout', 579 'ProductCategory', 580 'ProductTags', 581 'ProductImage', 582 'Add_To_Cart', 583 'ProductExcerpt', 584 'ProductContent', 585 ]; 586 587 if (strpos($widgets_key, 'Woo') !== false || in_array($widgets_key, $woocommerce_widgets, true)) { 588 $output['pname'] = 'woocommerce'; 589 $output['ppath'] = $output['pname'] . '/woocommerce.php'; 590 } 591 561 592 return apply_filters('afeb/widgets/trdpt_plugins', $output, $widgets_key); 562 593 } … … 574 605 { 575 606 foreach ($widgets as $widget_key => $widget) { 607 if (!empty($widget['template_builder']) && $name_space !== 'TemplateBuilder') { 608 continue; 609 } 610 576 611 if (isset($widget['status']) && $widget['status'] == 1) { 577 612 -
addons-for-elementor-builder/trunk/app/Widgets/FancyText.php
r3297649 r3386622 222 222 $classes[] = in_array($settings['ft_efct'], ['typing', 'rotate-2', 'rotate-3', 'scale']) ? 223 223 'afeb-anim-text-letters' : ''; 224 225 $classes = array_filter($classes); 226 $classes = array_map('sanitize_html_class', $classes); 224 227 $this->add_render_attribute( 225 228 [ 226 229 'fancy_text' => [ 227 'class' => implode(' ', array_filter($classes, 'esc_attr')),230 'class' => implode(' ', $classes), 228 231 'data-settings' => [ 229 232 wp_json_encode([ … … 236 239 ); 237 240 238 echo $this->get_render_attribute_string('fancy_text');239 241 } 240 242 … … 255 257 in_array($settings['ft_html_tg'], $html_tags)) ? 256 258 $settings['ft_html_tg'] : 'h3'; 257 $type = !empty($settings['ft_efct']) ? $settings['ft_efct'] : 'typing'; ?> 258 <<?php echo $html_tag; ?> <?php $this->render_attrs($settings); ?>> 259 $type = !empty($settings['ft_efct']) ? $settings['ft_efct'] : 'typing'; 260 $this->render_attrs($settings); 261 $escaped_html_tag = tag_escape($html_tag); 262 ?> 263 <<?php echo $escaped_html_tag; ?> <?php $this->print_render_attribute_string('fancy_text'); ?>> 259 264 260 265 <?php if (!empty($settings['ft_prfx_txt'])): ?> … … 287 292 <?php endif; ?> 288 293 289 </<?php echo $ html_tag; ?>>294 </<?php echo $escaped_html_tag; ?>> 290 295 <?php } 291 296 } -
addons-for-elementor-builder/trunk/app/Widgets/FormBuilder/FormBuilder.php
r3382971 r3386622 1568 1568 Icons_Manager::render_icon($value['step_icon'], ['aria-hidden' => 'true']); 1569 1569 $step_icon[] = ob_get_clean(); 1570 $step_label[] = '<span class="afeb-step-main-label">' . $value['field_label'] . '</span>'; 1571 $step_sub_label[] = '<span class="afeb-step-sub-label">' . $value['field_sub_label'] . '</span>'; 1570 $step_label[] = sprintf( 1571 '<span class="afeb-step-main-label">%s</span>', 1572 esc_html($value['field_label']) 1573 ); 1574 $step_sub_label[] = sprintf( 1575 '<span class="afeb-step-sub-label">%s</span>', 1576 esc_html($value['field_sub_label']) 1577 ); 1572 1578 } 1573 1579 } … … 1602 1608 $step_html = '<span class="afeb-step"><span class="afeb-step-content">' . $step_icon[$i] . '</span><span class="afeb-step-label">' . $step_label[$i] . $step_sub_label[$i] . '</span></span>'; 1603 1609 1604 echo $step_html;1610 echo wp_kses_post($step_html); 1605 1611 1606 1612 if ($settings['show_separator'] == 'yes') { … … 1613 1619 echo '</div>'; 1614 1620 ?> 1615 <div <?php echo $this->get_render_attribute_string('wrapper'); ?>>1621 <div <?php $this->print_render_attribute_string('wrapper'); ?>> 1616 1622 <?php 1617 1623 $step_count = 0; … … 1766 1772 $_COOKIE['afeb_form_submit_success_' . $this->get_id()] = !empty($settings['success_message']) ? 1767 1773 $settings['success_message'] : OldCHelper::$LIM; 1768 if (!empty($_COOKIE['afeb_form_submit_success_' . $this->get_id()])): ?> 1774 $form_submit_success_cookie_key = 'afeb_form_submit_success_' . $this->get_id(); 1775 $form_submit_success_message = ''; 1776 if (!empty($_COOKIE[$form_submit_success_cookie_key])) { 1777 $form_submit_success_message = sanitize_text_field(wp_unslash($_COOKIE[$form_submit_success_cookie_key])); 1778 } 1779 if (!empty($form_submit_success_message)): ?> 1769 1780 <div class="afeb-field-group afeb-form-builder-message-group"> 1770 1781 <div class="afeb-form-builder-success-box"> 1771 <?php echo esc_html($ _COOKIE['afeb_form_submit_success_' . $this->get_id()]); ?>1782 <?php echo esc_html($form_submit_success_message); ?> 1772 1783 </div> 1773 1784 </div> … … 1777 1788 $_COOKIE['afeb_form_submit_error_' . $this->get_id()] = !empty($settings['error_message']) ? 1778 1789 $settings['error_message'] : OldCHelper::$LIM; 1779 if (!empty($_COOKIE['afeb_form_submit_error_' . $this->get_id()])) : 1790 $form_submit_error_cookie_key = 'afeb_form_submit_error_' . $this->get_id(); 1791 $form_submit_error_message = ''; 1792 if (!empty($_COOKIE[$form_submit_error_cookie_key])) { 1793 $form_submit_error_message = sanitize_text_field(wp_unslash($_COOKIE[$form_submit_error_cookie_key])); 1794 } 1795 if (!empty($form_submit_error_message)) : 1780 1796 ?> 1781 1797 <div class="afeb-field-group afeb-form-builder-message-group"> 1782 1798 <div class="afeb-form-builder-error-box"> 1783 <?php echo esc_html($ _COOKIE['afeb_form_submit_error_' . $this->get_id()]); ?>1799 <?php echo esc_html($form_submit_error_message); ?> 1784 1800 </div> 1785 1801 </div> -
addons-for-elementor-builder/trunk/app/Widgets/FormBuilder/Helper.php
r3382971 r3386622 5 5 use Elementor\Icons_Manager; 6 6 use Elementor\Utils; 7 8 if (!defined('ABSPATH')) { 9 exit; 10 } 7 use function wp_handle_upload; 11 8 12 9 /** 13 10 * "Vertex Addons for Elementor" FormBuilder Widget Helper Class 14 * 11 * 15 12 * @class Helper 16 13 * @version 1.4.0 … … 20 17 public function form_fields_render_attributes($context, $i, $settings, $item) 21 18 { 19 $field_identifier = $this->get_field_identifier($item); 20 22 21 $context->add_render_attribute( 23 22 [ … … 27 26 'afeb-field-group', 28 27 'afeb-column', 29 'afeb-field-group-' . esc_attr($ item['field_id']),28 'afeb-field-group-' . esc_attr($field_identifier), 30 29 ], 31 30 ], 32 31 'input' . $i => [ 33 'type' => ('acceptance' === $item['field_type']) ? 'checkbox' : (($item['field_type'] === 'upload') ? 'file' : $item['field_type']),32 'type' => ('acceptance' === $item['field_type']) ? 'checkbox' : (($item['field_type'] === 'upload') ? 'file' : $item['field_type']), 34 33 'name' => $this->get_attribute_name($item), 35 34 'id' => $this->get_attribute_id($item), … … 60 59 $context->add_render_attribute('label' . $i, 'class', 'afeb-hidden-element'); 61 60 62 if (!empty($item['required'])) { 61 if (!empty($item['required'])) 62 { 63 63 $class = 'afeb-form-field-required'; 64 64 if (!empty($settings['mark_required'])) … … 70 70 } 71 71 72 public function get_attribute_name($item) 73 { 74 return "form_fields[{$item['field_id']}]"; 75 } 76 77 public function get_attribute_id($item) 72 public function get_attribute_name($item): string 73 { 74 $field_identifier = $this->get_field_identifier($item); 75 if ($field_identifier === '') return 'form_fields[]'; 76 77 return "form_fields[$field_identifier]"; 78 } 79 80 private function get_field_identifier($item) 81 { 82 if (!empty($item['field_id'])) return $item['field_id']; 83 84 return $item['_id'] ?? ''; 85 } 86 87 public function get_attribute_id($item): string 78 88 { 79 89 $id_suffix = !empty($item['field_id']) ? $item['field_id'] : $item['_id']; … … 87 97 } 88 98 89 public function make_textarea_field($context, $item, $item_index) 99 public function make_textarea_field($context, $item, $item_index): string 90 100 { 91 101 $context->add_render_attribute('textarea' . $item_index, [ … … 94 104 'afeb-form-field', 95 105 'elementor-field-textual', 96 esc_attr($item['css_classes']) 106 esc_attr($item['css_classes']), 97 107 ], 98 108 'name' => $this->get_attribute_name($item), … … 101 111 ]); 102 112 103 if ($context->get_settings_for_display()['show_placeholders'] == 'true' && !Utils::is_empty($item['placeholder'])) { 113 if ($context->get_settings_for_display()['show_placeholders'] == 'true' && !Utils::is_empty($item['placeholder'])) 114 { 104 115 $context->add_render_attribute('textarea' . $item_index, 'placeholder', $item['placeholder']); 105 116 } 106 117 107 if ($item['required']) { 118 if ($item['required']) 119 { 108 120 $this->add_required_attribute($context, 'textarea' . $item_index); 109 121 } … … 117 129 { 118 130 ob_start(); 119 ?>131 ?> 120 132 <div class="afeb-form-field afeb-select-wrap <?php echo esc_attr($item['css_classes']); ?>"> 121 133 <select 122 134 id="<?php echo $this->get_attribute_id($item); ?>" 123 135 class="afeb-form-field-textual elementor-field-textual" 136 title="" 124 137 name="<?php echo $this->get_attribute_name($item); ?>" 125 138 <?php echo $item['required'] ? 'required' : '' ?>> … … 129 142 $options = preg_split("/\\r\\n|\\r|\\n/", $item['field_options']); 130 143 131 foreach ($options as $key => $option) { 144 foreach ($options as $key => $option) 145 { 132 146 $option_value = esc_attr($option); 133 147 $option_label = esc_html($option); 134 148 135 if (strpos($option, '|') !== false) { 136 list($label, $value) = explode('|', $option); 149 if (strpos($option, '|') !== false) 150 { 151 [$label, $value] = explode('|', $option); 137 152 $option_value = esc_attr($value); 138 153 $option_label = esc_html($label); 139 154 } 140 155 141 if (isset($options_temp[$option_value]) || !trim($option_value)) { 156 if (isset($options_temp[$option_value]) || !trim($option_value)) 157 { 142 158 continue; 143 159 } 144 ?>160 ?> 145 161 <option value="<?php echo esc_attr($option_value); ?>"> 146 162 <?php … … 149 165 ?> 150 166 </option> 151 <?php167 <?php 152 168 $options_temp[$option_value] = $option_label; 153 169 } ?> 154 170 </select> 155 171 </div> 156 <?php 157 $select = ob_get_clean(); 158 return $select; 172 <?php 173 return ob_get_clean(); 159 174 } 160 175 … … 164 179 array_filter( 165 180 preg_split("/\\r\\n|\\r|\\n/", $item['field_options']), 166 static function ($option) { 181 static function ($option) 182 { 167 183 return trim($option) !== ''; 168 184 } … … 170 186 ); 171 187 172 if (empty($options)) { 188 if (empty($options)) 189 { 173 190 return ''; 174 191 } … … 176 193 $options_temp = []; 177 194 ob_start(); 178 ?> 179 <div class="afeb-field-sub-group <?php echo esc_attr($item['css_classes']) . ' ' . esc_attr($item['inline_list']); ?>"> 195 ?> 196 <div 197 class="afeb-field-sub-group <?php echo esc_attr($item['css_classes']) . ' ' . esc_attr($item['inline_list']); ?>"> 180 198 <?php 181 199 foreach ($options as $key => $option): … … 183 201 $option_value = $option; 184 202 185 if (strpos($option, '|') !== false) { 186 list($option_label, $option_value) = explode('|', $option); 187 } 188 189 if (isset($options_temp[$option_value]) || !trim($option_value)) { 190 continue; 191 } 192 ?> 193 <span class="afeb-form-field-option" data-key="form-field-<?php echo esc_attr($item['field_id']); ?>"> 203 if (strpos($option, '|') !== false) 204 { 205 [$option_label, $option_value] = explode('|', $option); 206 } 207 208 if (isset($options_temp[$option_value]) || !trim($option_value)) 209 { 210 continue; 211 } 212 ?> 213 <span class="afeb-form-field-option" 214 data-key="form-field-<?php echo esc_attr($this->get_field_identifier($item)); ?>"> 194 215 <input 195 216 id="<?php echo esc_attr($this->get_attribute_id($item) . '-' . $key) ?>" … … 201 222 <input 202 223 type="hidden" 203 name="<?php echo esc_attr($this->get_attribute_name($item) . ( ($type == 'checkbox' && count($options) > 1)? '[]' : '')); ?>">224 name="<?php echo esc_attr($this->get_attribute_name($item) . (count($options) > 1 ? '[]' : '')); ?>"> 204 225 <?php endif; ?> 205 <label for="<?php echo esc_attr($this->get_attribute_id($item) . '-' . $key) ?>"><?php echo esc_html($option_label); ?></label> 226 <label 227 for="<?php echo esc_attr($this->get_attribute_id($item) . '-' . $key) ?>"><?php echo esc_html($option_label); ?></label> 206 228 </span> 207 <?php229 <?php 208 230 $options_temp[$option_value] = $option_label; 209 231 endforeach; 210 232 ?> 211 233 </div> 212 <?php 213 $radio_checkbox = ob_get_clean(); 214 return $radio_checkbox; 234 <?php 235 return ob_get_clean(); 215 236 } 216 237 217 238 private function render_form_icon($context, $settings) 218 239 { 219 ?>220 <span <?php echo $context->get_render_attribute_string('icon-align'); ?>>240 ?> 241 <span <?php $context->print_render_attribute_string('icon-align'); ?>> 221 242 <?php Icons_Manager::render_icon($settings['selected_button_icon'], ['aria-hidden' => 'true']); ?> 222 243 <?php if (empty($settings['button_text'])): ?> … … 226 247 <?php endif; ?> 227 248 </span> 228 <?php249 <?php 229 250 } 230 251 231 252 public function render_submit_button($context, $settings) 232 253 { 233 ?>234 <button type="submit" <?php echo $context->get_render_attribute_string('button'); ?>>235 <span <?php echo $context->get_render_attribute_string('content-wrapper'); ?>>254 ?> 255 <button type="submit" <?php $context->print_render_attribute_string('button'); ?>> 256 <span <?php $context->print_render_attribute_string('content-wrapper'); ?>> 236 257 <?php if ( 237 258 !empty($settings['selected_button_icon']) && … … 241 262 <?php endif; ?> 242 263 <?php if (!empty($settings['button_text'])): ?> 243 <span><?php echo $context->print_unescaped_setting('button_text'); ?></span>264 <span><?php echo wp_kses_post($settings['button_text']); ?></span> 244 265 <?php endif; ?> 245 266 <?php if ( … … 251 272 </span> 252 273 </button> 253 <?php 254 } 274 <?php 275 } 276 255 277 /** 256 278 * Get all available field types for the form builder. … … 261 283 { 262 284 return [ 263 'text'=> esc_html__('Text', 'addons-for-elementor-builder'),264 'textarea'=> esc_html__('Textarea', 'addons-for-elementor-builder'),265 'email'=> esc_html__('Email', 'addons-for-elementor-builder'),266 'url'=> esc_html__('URL', 'addons-for-elementor-builder'),267 'number'=> esc_html__('Number', 'addons-for-elementor-builder'),268 'tel'=> esc_html__('Tel', 'addons-for-elementor-builder'),269 'radio'=> esc_html__('Radio', 'addons-for-elementor-builder'),270 'select'=> esc_html__('Select', 'addons-for-elementor-builder'),271 'checkbox'=> esc_html__('Checkbox', 'addons-for-elementor-builder'),272 'date'=> esc_html__('Date', 'addons-for-elementor-builder'),273 'time'=> esc_html__('Time', 'addons-for-elementor-builder'),274 'upload'=> esc_html__('File Upload', 'addons-for-elementor-builder'),275 'password'=> esc_html__('Password', 'addons-for-elementor-builder'),276 'html'=> esc_html__('HTML', 'addons-for-elementor-builder'),277 'recaptcha_v3' => esc_html__('reCAPTCHA V3', 'addons-for-elementor-builder'),278 'hidden'=> esc_html__('Hidden', 'addons-for-elementor-builder'),279 'step'=> esc_html__('Step', 'addons-for-elementor-builder'),285 'text' => esc_html__('Text', 'addons-for-elementor-builder'), 286 'textarea' => esc_html__('Textarea', 'addons-for-elementor-builder'), 287 'email' => esc_html__('Email', 'addons-for-elementor-builder'), 288 'url' => esc_html__('URL', 'addons-for-elementor-builder'), 289 'number' => esc_html__('Number', 'addons-for-elementor-builder'), 290 'tel' => esc_html__('Tel', 'addons-for-elementor-builder'), 291 'radio' => esc_html__('Radio', 'addons-for-elementor-builder'), 292 'select' => esc_html__('Select', 'addons-for-elementor-builder'), 293 'checkbox' => esc_html__('Checkbox', 'addons-for-elementor-builder'), 294 'date' => esc_html__('Date', 'addons-for-elementor-builder'), 295 'time' => esc_html__('Time', 'addons-for-elementor-builder'), 296 'upload' => esc_html__('File Upload', 'addons-for-elementor-builder'), 297 'password' => esc_html__('Password', 'addons-for-elementor-builder'), 298 'html' => esc_html__('HTML', 'addons-for-elementor-builder'), 299 'recaptcha_v3' => esc_html__('reCAPTCHA V3', 'addons-for-elementor-builder'), 300 'hidden' => esc_html__('Hidden', 'addons-for-elementor-builder'), 301 'step' => esc_html__('Step', 'addons-for-elementor-builder'), 280 302 ]; 281 303 } … … 289 311 { 290 312 return [ 291 [292 '_id' => 'field_' . wp_generate_password(8, false, false),293 'type'=> 'text',294 'label'=> esc_html__('Untitled', 'addons-for-elementor-builder'),295 'placeholder'=> '',296 'required'=> false,297 'value'=> '',298 'column_width' => 100,299 ],313 [ 314 '_id' => 'field_' . wp_generate_password(8, false), 315 'type' => 'text', 316 'label' => esc_html__('Untitled', 'addons-for-elementor-builder'), 317 'placeholder' => '', 318 'required' => false, 319 'value' => '', 320 'column_width' => 100, 321 ], 300 322 ]; 301 323 } … … 309 331 { 310 332 $defaults = [ 311 'extensions' => ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'zip'],312 'mime_types' => [313 'image/jpeg', 'image/png', 'image/gif',314 'application/pdf',315 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',316 'application/zip'317 ],318 'max_size'=> 5 * 1024 * 1024, // 5MB333 'extensions' => ['jpg', 'jpeg', 'png', 'gif', 'pdf', 'doc', 'docx', 'zip'], 334 'mime_types' => [ 335 'image/jpeg', 'image/png', 'image/gif', 336 'application/pdf', 337 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 338 'application/zip', 339 ], 340 'max_size' => 5 * 1024 * 1024, // 5MB 319 341 ]; 320 342 … … 322 344 } 323 345 324 /** 325 * Validate uploaded files array with enhanced security and error handling. 326 * 327 * @param array $files Array of files to validate (either $_FILES array or URLs) 328 * @param array $rules { 329 * @type int $max_size Maximum file size in bytes 330 * @type array $exts Allowed file extensions (e.g., ['jpg', 'png']) 331 * @type array $mime_types Allowed mime types (wp_get_mime_types() format) 332 * } 333 * @param bool $is_required Whether the field is required 334 * @return array { 335 * @type bool $valid Whether all files are valid 336 * @type array $files Array of validated file URLs 337 * @type array $errors Array of error messages 338 * } 339 */ 340 public static function validate_uploaded_files($files, $rules = [], $is_required = false) 346 public static function validate_uploaded_files($files, $rules = [], $is_required = false): array 341 347 { 342 348 $normalized_files = []; … … 345 351 // Convert MB to bytes if needed (common case where max_size is in MB) 346 352 $max_size = !empty($rules['max_size']) ? 347 (is_numeric($rules['max_size']) ? (int)$rules['max_size'] * 1024 * 1024 : wp_max_upload_size()) 348 : wp_max_upload_size(); 349 350 $allowed_exts = !empty($rules['exts']) ? array_map('strtolower', (array)$rules['exts']) : []; 351 $allowed_mimes = !empty($rules['mime_types']) ? (array)$rules['mime_types'] : wp_get_mime_types(); 352 353 if (!is_array($files)) { 353 (is_numeric($rules['max_size']) ? (int) $rules['max_size'] * 1024 * 1024 : wp_max_upload_size()) 354 : wp_max_upload_size(); 355 356 $allowed_exts = !empty($rules['exts']) ? array_map('strtolower', (array) $rules['exts']) : []; 357 $allowed_mimes = !empty($rules['mime_types']) ? (array) $rules['mime_types'] : wp_get_mime_types(); 358 359 if (!is_array($files)) 360 { 354 361 $files = $files ? [$files] : []; 355 362 } … … 389 396 { 390 397 $errors[] = sprintf( 391 __('"%s" is not an allowed file type. Allowed: %s', 'addons-for-elementor-builder'),392 esc_html($file['name']),393 esc_html(implode(', ', $allowed_exts))398 __('"%s" is not an allowed file type. Allowed: %s', 'addons-for-elementor-builder'), 399 esc_html($file['name']), 400 esc_html(implode(', ', $allowed_exts)) 394 401 ); 395 402 continue; … … 400 407 { 401 408 $errors[] = sprintf( 402 __('"%s" exceeds maximum file size of %s.', 'addons-for-elementor-builder'),403 esc_html($file['name']),404 size_format($max_size)409 __('"%s" exceeds maximum file size of %s.', 'addons-for-elementor-builder'), 410 esc_html($file['name']), 411 size_format($max_size) 405 412 ); 406 413 continue; 407 414 } 408 415 409 if ( ! function_exists( 'wp_handle_upload' )) require_once ABSPATH . 'wp-admin/includes/file.php';416 if (!function_exists('wp_handle_upload')) require_once ABSPATH . 'wp-admin/includes/file.php'; 410 417 411 418 // Handle the upload 412 $upload = \wp_handle_upload($file, [413 'test_form' => false,414 'test_type' => true,415 'mimes' => $allowed_mimes419 $upload = wp_handle_upload($file, [ 420 'test_form' => false, 421 'test_type' => true, 422 'mimes' => $allowed_mimes, 416 423 ]); 417 424 … … 425 432 } 426 433 // Handle existing URLs (for multi-step forms) 427 else if (is_string($file) && filter_var($file, FILTER_VALIDATE_URL)) $normalized_files[] = esc_url_raw($file);434 else if (is_string($file) && filter_var($file, FILTER_VALIDATE_URL)) $normalized_files[] = esc_url_raw($file); 428 435 } 429 436 … … 445 452 { 446 453 $messages = [ 447 UPLOAD_ERR_INI_SIZE=> __('"%s" exceeds server upload limit.', 'addons-for-elementor-builder'),448 UPLOAD_ERR_FORM_SIZE=> __('"%s" exceeds form upload limit.', 'addons-for-elementor-builder'),449 UPLOAD_ERR_PARTIAL=> __('"%s" was only partially uploaded.', 'addons-for-elementor-builder'),450 UPLOAD_ERR_NO_FILE=> __('No file was uploaded for "%s".', 'addons-for-elementor-builder'),451 UPLOAD_ERR_NO_TMP_DIR => __('Missing temporary folder for "%s".', 'addons-for-elementor-builder'),452 UPLOAD_ERR_CANT_WRITE => __('Failed to write "%s" to disk.', 'addons-for-elementor-builder'),453 UPLOAD_ERR_EXTENSION=> __('Server extension stopped "%s" upload.', 'addons-for-elementor-builder'),454 UPLOAD_ERR_INI_SIZE => __('"%s" exceeds server upload limit.', 'addons-for-elementor-builder'), 455 UPLOAD_ERR_FORM_SIZE => __('"%s" exceeds form upload limit.', 'addons-for-elementor-builder'), 456 UPLOAD_ERR_PARTIAL => __('"%s" was only partially uploaded.', 'addons-for-elementor-builder'), 457 UPLOAD_ERR_NO_FILE => __('No file was uploaded for "%s".', 'addons-for-elementor-builder'), 458 UPLOAD_ERR_NO_TMP_DIR => __('Missing temporary folder for "%s".', 'addons-for-elementor-builder'), 459 UPLOAD_ERR_CANT_WRITE => __('Failed to write "%s" to disk.', 'addons-for-elementor-builder'), 460 UPLOAD_ERR_EXTENSION => __('Server extension stopped "%s" upload.', 'addons-for-elementor-builder'), 454 461 ]; 455 462 456 463 return sprintf( 457 $messages[$error_code] ?? __('Upload error for "%s".', 'addons-for-elementor-builder'),458 esc_html($filename)464 $messages[$error_code] ?? __('Upload error for "%s".', 'addons-for-elementor-builder'), 465 esc_html($filename) 459 466 ); 460 467 } 461 462 463 464 /**465 * Normalize submission fields into associative array keyed by _id.466 *467 * @param array $fields_meta468 * @param array $posted_fields469 * @return array470 */471 public static function normalize_submission_fields_by_id(array $fields_meta, array $posted_fields = []): array472 {473 $out = [];474 $index_map = []; // Track original positions475 476 // First pass: create index map477 foreach ($fields_meta as $index => $field) {478 $id = $field['_id'] ?? '';479 if ($id) {480 $index_map[$id] = $index;481 }482 }483 484 // Second pass: build ordered output485 foreach ($fields_meta as $field) {486 $id = $field['_id'] ?? '';487 if (!$id) continue;488 489 $out[$id] = $field;490 if (isset($posted_fields[$id])) {491 $out[$id]['value'] = $posted_fields[$id];492 }493 }494 495 // Third pass: sort by original positions496 uasort($out, function($a, $b) use ($index_map) {497 return $index_map[$a['_id']] <=> $index_map[$b['_id']];498 });499 500 return $out;501 }502 503 468 } -
addons-for-elementor-builder/trunk/app/Widgets/LoginRegister/LoginRegister.php
r3382971 r3386622 1607 1607 if (($this->is_editor == 'yes' && !empty($settings['succ_msg_bx_prev']))) 1608 1608 $_COOKIE['afeb_login_success_' . $options['widget_id']] = CHelper::$LIM; 1609 if (!empty($_COOKIE['afeb_login_success_' . $options['widget_id']])): ?> 1609 $login_success_cookie_key = 'afeb_login_success_' . $options['widget_id']; 1610 $login_success_message = ''; 1611 if (!empty($_COOKIE[$login_success_cookie_key])) { 1612 $login_success_message = sanitize_text_field(wp_unslash($_COOKIE[$login_success_cookie_key])); 1613 } 1614 if (!empty($login_success_message)): ?> 1610 1615 <div class="afeb-lr-form-succ-box"> 1611 <?php echo esc_html($ _COOKIE['afeb_login_success_' . $options['widget_id']]); ?>1616 <?php echo esc_html($login_success_message); ?> 1612 1617 </div> 1613 1618 <?php endif; ?> … … 1615 1620 if (($this->is_editor == 'yes' && !empty($settings['err_msg_bx_prev']))) 1616 1621 $_COOKIE['afeb_login_error_' . $options['widget_id']] = CHelper::$LIM; 1617 if (!empty($_COOKIE['afeb_login_error_' . $options['widget_id']])) : 1622 $login_error_cookie_key = 'afeb_login_error_' . $options['widget_id']; 1623 $login_error_message = ''; 1624 if (!empty($_COOKIE[$login_error_cookie_key])) { 1625 $login_error_message = sanitize_text_field(wp_unslash($_COOKIE[$login_error_cookie_key])); 1626 } 1627 if (!empty($login_error_message)) : 1618 1628 ?> 1619 1629 <div class="afeb-lr-form-err-box"> 1620 <?php echo esc_html($ _COOKIE['afeb_login_error_' . $options['widget_id']]); ?>1630 <?php echo esc_html($login_error_message); ?> 1621 1631 </div> 1622 1632 <?php endif; ?> … … 1722 1732 if (($this->is_editor == 'yes' && !empty($settings['succ_msg_bx_prev']))) 1723 1733 $_COOKIE['afeb_register_success_' . $options['widget_id']] = CHelper::$LIM; 1724 if (!empty($_COOKIE['afeb_register_success_' . $options['widget_id']])) : ?> 1734 $register_success_cookie_key = 'afeb_register_success_' . $options['widget_id']; 1735 $register_success_message = ''; 1736 if (!empty($_COOKIE[$register_success_cookie_key])) { 1737 $register_success_message = sanitize_text_field(wp_unslash($_COOKIE[$register_success_cookie_key])); 1738 } 1739 if (!empty($register_success_message)) : ?> 1725 1740 <div class="afeb-lr-form-succ-box"> 1726 <?php echo esc_html($ _COOKIE['afeb_register_success_' . $options['widget_id']]); ?>1741 <?php echo esc_html($register_success_message); ?> 1727 1742 </div> 1728 1743 <?php endif; ?> … … 1730 1745 if (($this->is_editor == 'yes' && !empty($settings['err_msg_bx_prev']))) 1731 1746 $_COOKIE['afeb_register_error_' . $options['widget_id']] = CHelper::$LIM; 1732 if (!empty($_COOKIE['afeb_register_error_' . $options['widget_id']])) : ?> 1747 $register_error_cookie_key = 'afeb_register_error_' . $options['widget_id']; 1748 $register_error_message = ''; 1749 if (!empty($_COOKIE[$register_error_cookie_key])) { 1750 $register_error_message = sanitize_text_field(wp_unslash($_COOKIE[$register_error_cookie_key])); 1751 } 1752 if (!empty($register_error_message)) : ?> 1733 1753 <div class="afeb-lr-form-err-box"> 1734 <?php echo esc_html($ _COOKIE['afeb_register_error_' . $options['widget_id']]); ?>1754 <?php echo esc_html($register_error_message); ?> 1735 1755 </div> 1736 1756 <?php endif; ?> … … 1786 1806 if (($this->is_editor == 'yes' && !empty($settings['succ_msg_bx_prev']))) 1787 1807 $_COOKIE['afeb_lostpassword_success_' . $options['widget_id']] = CHelper::$LIM; 1788 if (!empty($_COOKIE['afeb_lostpassword_success_' . $options['widget_id']])) : ?> 1808 $lostpassword_success_cookie_key = 'afeb_lostpassword_success_' . $options['widget_id']; 1809 $lostpassword_success_message = ''; 1810 if (!empty($_COOKIE[$lostpassword_success_cookie_key])) { 1811 $lostpassword_success_message = sanitize_text_field(wp_unslash($_COOKIE[$lostpassword_success_cookie_key])); 1812 } 1813 if (!empty($lostpassword_success_message)) : ?> 1789 1814 <div class="afeb-lr-form-succ-box"> 1790 <?php echo esc_html($ _COOKIE['afeb_lostpassword_success_' . $options['widget_id']]); ?>1815 <?php echo esc_html($lostpassword_success_message); ?> 1791 1816 </div> 1792 1817 <?php endif; ?> … … 1794 1819 if (($this->is_editor == 'yes' && !empty($settings['err_msg_bx_prev']))) 1795 1820 $_COOKIE['afeb_lostpassword_error_' . $options['widget_id']] = CHelper::$LIM; 1796 if (!empty($_COOKIE['afeb_lostpassword_error_' . $options['widget_id']])) : ?> 1821 $lostpassword_error_cookie_key = 'afeb_lostpassword_error_' . $options['widget_id']; 1822 $lostpassword_error_message = ''; 1823 if (!empty($_COOKIE[$lostpassword_error_cookie_key])) { 1824 $lostpassword_error_message = sanitize_text_field(wp_unslash($_COOKIE[$lostpassword_error_cookie_key])); 1825 } 1826 if (!empty($lostpassword_error_message)) : ?> 1797 1827 <div class="afeb-lr-form-err-box"> 1798 <?php echo esc_html($ _COOKIE['afeb_lostpassword_error_' . $options['widget_id']]); ?>1828 <?php echo esc_html($lostpassword_error_message); ?> 1799 1829 </div> 1800 1830 <?php endif; ?> … … 1873 1903 if (($this->is_editor == 'yes' && !empty($settings['succ_msg_bx_prev']))) 1874 1904 $_COOKIE['afeb_resetpassword_success_' . $options['widget_id']] = CHelper::$LIM; 1875 if (!empty($_COOKIE['afeb_resetpassword_success_' . $options['widget_id']])) : ?> 1905 $resetpassword_success_cookie_key = 'afeb_resetpassword_success_' . $options['widget_id']; 1906 $resetpassword_success_message = ''; 1907 if (!empty($_COOKIE[$resetpassword_success_cookie_key])) { 1908 $resetpassword_success_message = sanitize_text_field(wp_unslash($_COOKIE[$resetpassword_success_cookie_key])); 1909 } 1910 if (!empty($resetpassword_success_message)) : ?> 1876 1911 <div class="afeb-lr-form-succ-box"> 1877 <?php echo esc_html($ _COOKIE['afeb_resetpassword_success_' . $options['widget_id']]); ?>1912 <?php echo esc_html($resetpassword_success_message); ?> 1878 1913 </div> 1879 1914 <?php else: … … 1883 1918 if (($this->is_editor == 'yes' && !empty($settings['err_msg_bx_prev']))) 1884 1919 $_COOKIE['afeb_resetpassword_error_' . $options['widget_id']] = CHelper::$LIM; 1885 if (!empty($_COOKIE['afeb_resetpassword_error_' . $options['widget_id']])) : ?> 1920 $resetpassword_error_cookie_key = 'afeb_resetpassword_error_' . $options['widget_id']; 1921 $resetpassword_error_message = ''; 1922 if (!empty($_COOKIE[$resetpassword_error_cookie_key])) { 1923 $resetpassword_error_message = sanitize_text_field(wp_unslash($_COOKIE[$resetpassword_error_cookie_key])); 1924 } 1925 if (!empty($resetpassword_error_message)) : ?> 1886 1926 <div class="afeb-lr-form-err-box"> 1887 <?php echo esc_html($ _COOKIE['afeb_resetpassword_error_' . $options['widget_id']]); ?>1927 <?php echo esc_html($resetpassword_error_message); ?> 1888 1928 </div> 1889 1929 <?php endif; ?> -
addons-for-elementor-builder/trunk/app/Widgets/SearchForm/Helper.php
r3297649 r3386622 135 135 } 136 136 137 $ css = '';138 $ css = sprintf('<style id="%s">%s</style>', 'afeb-dynamic-loop-' . $template_id, $css);137 $style_id = 'afeb-dynamic-loop-' . sanitize_key($template_id); 138 $sanitized_css = wp_strip_all_tags($post_css); 139 139 140 echo $css; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 140 printf( 141 '<style id="%s">%s</style>', 142 esc_attr($style_id), 143 $sanitized_css 144 ); 141 145 142 146 Plugin::instance()->documents->restore_document(); -
addons-for-elementor-builder/trunk/app/Widgets/Slides.php
r3297649 r3386622 855 855 } 856 856 857 $title_tag = Utils::validate_html_tag($settings['slides_title_tag']); 858 $description_tag = Utils::validate_html_tag($settings['slides_description_tag']); 859 860 $this->add_render_attribute('button', 'class', ['elementor-button', 'afeb-slides-item-button']); 861 862 $slides = []; 857 $title_tag = tag_escape(Utils::validate_html_tag($settings['slides_title_tag'])); 858 $description_tag = tag_escape(Utils::validate_html_tag($settings['slides_description_tag'])); 859 863 860 $slide_count = 0; 864 865 foreach ($settings['slides_content_repeater'] as $slide) {866 $slide_html = '';867 $btn_attributes = '';868 $slide_attributes = '';869 $slide_element = 'div';870 $btn_element = 'a';871 872 if (!empty($slide['link']['url'])) {873 $this->add_link_attributes('slide_link' . $slide_count, $slide['link']);874 875 if ($slide['link_click'] === 'button') {876 $btn_attributes = $this->get_render_attribute_string('slide_link' . $slide_count);877 } else {878 $slide_element = 'a';879 $slide_attributes = $this->get_render_attribute_string('slide_link' . $slide_count);880 }881 }882 883 $slide_html .= '<' . $slide_element . ' class="afeb-slides-item-inner" ' . $slide_attributes . '>';884 $slide_html .= '<div class="afeb-slides-contents">';885 886 if ($slide['heading']) {887 $slide_html .= '<' . $title_tag . ' class="afeb-slides-item-heading">' . $slide['heading'] . '</' . $title_tag . '>';888 }889 890 if ($slide['description']) {891 $slide_html .= '<' . $description_tag . ' class="afeb-slides-item-description">' . $slide['description'] . '</' . $description_tag . '>';892 }893 894 if ($slide['button_text']) {895 $slide_html .= '<' . $btn_element . ' ' . $btn_attributes . ' ' . $this->get_render_attribute_string('button') . '>' . $slide['button_text'] . '</' . $btn_element . '>';896 }897 898 $slide_html .= '</div></' . $slide_element . '>';899 $slide_html = '<div class="afeb-slides-item-bg" role="img"></div>' . $slide_html;900 $slides[] = '<div class="elementor-repeater-item-' . esc_attr($slide['_id']) . ' afeb-slides-item" role="group" aria-roledescription="slide">' . $slide_html . '</div>';901 902 $slide_count++;903 }904 861 905 862 $slick = [ … … 928 885 ?> 929 886 <div <?php $this->print_render_attribute_string('slides'); ?>> 887 <?php foreach ($settings['slides_content_repeater'] as $slide): 888 $slide_element = 'div'; 889 $slide_wrapper_key = 'slide-wrapper-' . $slide_count; 890 $button_key = 'slide-button-' . $slide_count; 891 $slide_item_key = 'slide-item-' . $slide_count; 892 893 $this->add_render_attribute($slide_wrapper_key, 'class', 'afeb-slides-item-inner'); 894 $this->add_render_attribute($button_key, 'class', ['elementor-button', 'afeb-slides-item-button']); 895 896 if (!empty($slide['link']['url'])) { 897 if ($slide['link_click'] === 'button') { 898 $this->add_link_attributes($button_key, $slide['link']); 899 } else { 900 $slide_element = 'a'; 901 $this->add_link_attributes($slide_wrapper_key, $slide['link']); 902 } 903 } 904 905 $this->add_render_attribute($slide_item_key, 'class', [ 906 'elementor-repeater-item-' . sanitize_html_class($slide['_id']), 907 'afeb-slides-item' 908 ]); 909 $this->add_render_attribute($slide_item_key, 'role', 'group'); 910 $this->add_render_attribute($slide_item_key, 'aria-roledescription', 'slide'); 911 912 $slide_tag = tag_escape($slide_element); 913 $button_element = (!empty($slide['link']['url']) && $slide['link_click'] === 'button') ? 'a' : 'span'; 914 $button_tag = tag_escape($button_element); 915 ?> 916 <div <?php $this->print_render_attribute_string($slide_item_key); ?>> 917 <div class="afeb-slides-item-bg" role="img"></div> 918 <<?php echo $slide_tag; ?> <?php $this->print_render_attribute_string($slide_wrapper_key); ?>> 919 <div class="afeb-slides-contents"> 920 <?php if (!empty($slide['heading'])): ?> 921 <<?php echo $title_tag; ?> class="afeb-slides-item-heading"> 922 <?php echo wp_kses_post($slide['heading']); ?> 923 </<?php echo $title_tag; ?>> 924 <?php endif; ?> 925 926 <?php if (!empty($slide['description'])): ?> 927 <<?php echo $description_tag; ?> class="afeb-slides-item-description"> 928 <?php echo wp_kses_post($slide['description']); ?> 929 </<?php echo $description_tag; ?>> 930 <?php endif; ?> 931 932 <?php if (!empty($slide['button_text'])): ?> 933 <<?php echo $button_tag; ?> <?php $this->print_render_attribute_string($button_key); ?>> 934 <?php echo esc_html($slide['button_text']); ?> 935 </<?php echo $button_tag; ?>> 936 <?php endif; ?> 937 </div> 938 </<?php echo $slide_tag; ?>> 939 </div> 930 940 <?php 931 // PHPCS - Slides for each is safe. 932 echo implode('', $slides); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 933 ?> 941 $slide_count++; 942 endforeach; ?> 934 943 </div> 935 944 <?php -
addons-for-elementor-builder/trunk/app/Widgets/TeamMemberCarousel.php
r3297649 r3386622 1181 1181 } 1182 1182 ?> 1183 <a <?php echo $this->get_render_attribute_string('button_attribute_' . $i); ?>>1183 <a <?php $this->print_render_attribute_string('button_attribute_' . $i); ?>> 1184 1184 <?php echo esc_html($repeater_item['buttons_label_' . $i]); ?> 1185 1185 </a> -
addons-for-elementor-builder/trunk/app/Widgets/TemplateBuilder/CommentsForm.php
r3297649 r3386622 1149 1149 ] 1150 1150 ); 1151 1152 $this->get_render_attribute_string('comments_form');1153 1151 } 1154 1152 … … 1169 1167 } 1170 1168 1171 echo "<div {$this->render_attrs($settings)}>"; 1169 $this->render_attrs($settings); 1170 1171 ?> 1172 <div <?php $this->print_render_attribute_string('comments_form'); ?>> 1173 <?php 1172 1174 1173 1175 $count = get_comments_number(get_the_ID()); -
addons-for-elementor-builder/trunk/app/Widgets/TemplateBuilder/TextRender.php
r3297649 r3386622 252 252 if (!empty($settings['text_render_url']['url'])) { 253 253 $this->add_link_attributes('url', $settings['text_render_url']); 254 $text_render = sprintf('<a %1$s>%2$s</a>', $this->get_render_attribute_string('url'), $text_render); 254 255 ob_start(); 256 ?> 257 <a <?php $this->print_render_attribute_string('url'); ?>> 258 <?php echo $text_render; // Already escaped above ?> 259 </a> 260 <?php 261 $text_render = trim(ob_get_clean()); 255 262 } 256 263 257 $text_render_html = sprintf( 258 '<%1$s %2$s>%3$s</%1$s>', 259 Utils::validate_html_tag($settings['text_render_html_tag']), 260 $this->get_render_attribute_string('text-render'), 261 $text_render 262 ); 263 264 // PHPCS - the variable $text_render_html holds safe data 265 echo $text_render_html; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 264 $text_render_tag = tag_escape(Utils::validate_html_tag($settings['text_render_html_tag'])); 265 ?> 266 <<?php echo $text_render_tag; ?> <?php $this->print_render_attribute_string('text-render'); ?>> 267 <?php echo $text_render; // Escaped above ?> 268 </<?php echo $text_render_tag; ?>> 269 <?php 266 270 } 267 271 -
addons-for-elementor-builder/trunk/app/Widgets/Woo/AddToCart.php
r3382971 r3386622 30 30 public function get_icon(): string 31 31 { 32 return 'afeb p-iconsvg-add-to-cart';32 return 'afeb-iconsvg-add-to-cart'; 33 33 } 34 34 … … 77 77 'query_slug' => 'product', 78 78 'render_type' => 'template', 79 'description' => esc_html__('Search for a product by name.' ),79 'description' => esc_html__('Search for a product by name.', 'addons-for-elementor-builder-pro'), 80 80 ]); 81 81 … … 84 84 'condition' => ['product_source' => 'specific'], 85 85 'render_type' => 'template', 86 'description' => esc_html__('Used if no product is selected above.' ),86 'description' => esc_html__('Used if no product is selected above.', 'addons-for-elementor-builder-pro'), 87 87 ]); 88 88 … … 95 95 'label' => esc_html__('Input Position', 'addons-for-elementor-builder-pro'), 96 96 'options' => [ 97 'horizontal' => ['title' => esc_html__('Horizontal' ), 'icon' => 'eicon-h-align-left'],98 'vertical' => ['title' => esc_html__('Vertical' ), 'icon' => 'eicon-v-align-top'],97 'horizontal' => ['title' => esc_html__('Horizontal', 'addons-for-elementor-builder-pro'), 'icon' => 'eicon-h-align-left'], 98 'vertical' => ['title' => esc_html__('Vertical', 'addons-for-elementor-builder-pro'), 'icon' => 'eicon-v-align-top'], 99 99 ], 100 100 'default' => 'horizontal', … … 123 123 'stay' => esc_html__('Stay on Page (AJAX)', 'addons-for-elementor-builder-pro'), 124 124 'cart' => esc_html__('Go to Cart Page', 'addons-for-elementor-builder-pro'), 125 'checkout' => esc_html__('Go to Checkout Page' ),125 'checkout' => esc_html__('Go to Checkout Page', 'addons-for-elementor-builder-pro'), 126 126 ], 127 127 'render_type' => 'template', -
addons-for-elementor-builder/trunk/app/Widgets/Woo/ProductCategory.php
r3382971 r3386622 33 33 wp_register_script( 34 34 'swiper', 35 'https://unpkg.com/swiper/swiper-bundle.min.js',35 $this->helper->assets_url('packages/swiper/swiper-bundle.min.js'), 36 36 [], 37 37 '9.3.2', … … 40 40 wp_register_style( 41 41 'swiper', 42 'https://unpkg.com/swiper/swiper-bundle.min.css',42 $this->helper->assets_url('packages/swiper/swiper-bundle.min.css'), 43 43 [], 44 44 '9.3.2' … … 561 561 echo '</h3>'; 562 562 } 563 if ($show_desc && term_description($term->term_id, 'product_cat')) { 564 echo '<div class="afebp-woo-cat-desc">' . wp_kses_post(term_description($term->term_id, 'product_cat')) . '</div>'; 563 $term_description = term_description($term); 564 565 if ($show_desc && $term_description) { 566 echo '<div class="afebp-woo-cat-desc">' . wp_kses_post($term_description) . '</div>'; 565 567 } 566 568 echo '</a>'; -
addons-for-elementor-builder/trunk/app/Widgets/Woo/ProductImage.php
r3382971 r3386622 166 166 167 167 $helper->slider('arrow_padding', [ 168 'label' => __('Padding' ),168 'label' => __('Padding', 'addons-for-elementor-builder'), 169 169 'selectors' => [$selector => 'padding: {{SIZE}}{{UNIT}};'], 170 170 ]); -
addons-for-elementor-builder/trunk/assets/css/widgets/widgets-icons.css
r3382971 r3386622 163 163 } 164 164 165 .afeb-iconsvg-myacc:before { 166 background-image: url(../../img/widgets/myacc.svg) 167 } 168 169 .afeb-iconsvg-add-to-cart:before { 170 background-image: url(../../img/widgets/add-to-cart.svg) 171 } 172 165 173 .afeb-iconsvg-site-logo::before { 166 174 background-image: url(../../img/widgets/site-logo.svg) -
addons-for-elementor-builder/trunk/assets/css/widgets/widgets-icons.min.css
r3382971 r3386622 1 .afeb-iconsvg-accordion::before {background-image:url(../../img/widgets/accordion.svg)}.afeb-iconsvg-products-category::before{background-image:url(../../img/widgets/products-category.svg)}.afeb-iconsvg-product-excerpt::before{background-image:url(../../img/widgets/product-excerpt.svg)}.afeb-iconsvg-product-tags::before{background-image:url(../../img/widgets/product-tags.svg)}.afeb-iconsvg-product-content::before{background-image:url(../../img/widgets/product-content.svg)}.afeb-iconsvg-advanced-menus::before{background-image:url(../../img/widgets/advanced-menus.svg)}.afeb-iconsvg-product-img::before{background-image:url(../../img/widgets/product-img.svg)}.afeb-iconsvg-alert-box::before{background-image:url(../../img/widgets/alert-box.svg)}.afeb-iconsvg-author-box::before{background-image:url(../../img/widgets/author-box.svg)}.afeb-iconsvg-archive-title:before{background-image:url(../../img/widgets/archive-title.svg)}.afeb-iconsvg-breadcrumb::before{background-image:url(../../img/widgets/breadcrumb.svg)}.afeb-iconsvg-comments-form::before{background-image:url(../../img/widgets/comments-form.svg)}.afeb-iconsvg-countdown::before{background-image:url(../../img/widgets/countdown.svg)}.afeb-iconsvg-creative-button::before{background-image:url(../../img/widgets/creative-button.svg)}.afeb-iconsvg-datatable::before{background-image:url(../../img/widgets/data-table.svg)}.afeb-iconsvg-dynamic-archive-posts::before{background-image:url(../../img/widgets/dynamic-archive-posts.svg)}.afeb-iconsvg-dynamic-grid-carousel::before{background-image:url(../../img/widgets/dynamic-grid-carousel.svg)}.afeb-iconsvg-fancy-text::before{background-image:url(../../img/widgets/fancy-text.svg)}.afeb-iconsvg-flip-box::before{background-image:url(../../img/widgets/flip-box.svg)}.afeb-iconsvg-form-builder::before{background-image:url(../../img/widgets/form-builder.svg)}.afeb-iconsvg-going-up:before{background-image:url(../../img/widgets/going-up.svg)}.afeb-iconsvg-hotspot::before{background-image:url(../../img/widgets/hotspot.svg)}.afeb-iconsvg-information-box::before{background-image:url(../../img/widgets/information-box.svg)}.afeb-iconsvg-login-register::before{background-image:url(../../img/widgets/login-register.svg)}.afeb-iconsvg-lottie::before{background-image:url(../../img/widgets/lottie.svg)}.afeb-iconsvg-map::before{background-image:url(../../img/widgets/map.svg)}.afeb-iconsvg-news-ticker::before{background-image:url(../../img/widgets/news-ticker.svg)}.afeb-iconsvg-notice-box::before{background-image:url(../../img/widgets/notice-box.svg)}.afeb-iconsvg-offcanvas:before{background-image:url(../../img/widgets/off-canvas.svg)}.afeb-iconsvg-page-title:before{background-image:url(../../img/widgets/page-title.svg)}.afeb-iconsvg-post-content:before{background-image:url(../../img/widgets/post-content.svg)}.afeb-iconsvg-post-date:before{background-image:url(../../img/widgets/post-date.svg)}.afeb-iconsvg-post-excerpt:before{background-image:url(../../img/widgets/post-excerpt.svg)}.afeb-iconsvg-post-featured-image:before{background-image:url(../../img/widgets/post-featured-image.svg)}.afeb-iconsvg-post-title:before{background-image:url(../../img/widgets/post-title.svg)}.afeb-iconsvg-post-terms:before{background-image:url(../../img/widgets/post-terms.svg)}.afeb-iconsvg-post-time:before{background-image:url(../../img/widgets/post-time.svg)}.afeb-iconsvg-post-comments:before{background-image:url(../../img/widgets/post-comments.svg)}.afeb-iconsvg-post-navigation:before{background-image:url(../../img/widgets/post-navigation.svg)}.afeb-iconsvg-price-box::before{background-image:url(../../img/widgets/price-box.svg)}.afeb-iconsvg-search-form:before{background-image:url(../../img/widgets/search-form.svg)}.afeb-iconsvg-site-logo::before{background-image:url(../../img/widgets/site-logo.svg)}.afeb-iconsvg-site-title:before{background-image:url(../../img/widgets/site-title.svg)}.afeb-iconsvg-slides:before{background-image:url(../../img/widgets/slides.svg)}.afeb-iconsvg-sound-player:before{background-image:url(../../img/widgets/sound-player.svg)}.afeb-iconsvg-tabs:before{background-image:url(../../img/widgets/tabs.svg)}.afeb-iconsvg-team-member-carousel:before{background-image:url(../../img/widgets/teammember-carousel.svg)}.afeb-iconsvg-template:before{background-image:url(../../img/widgets/template.svg)}.afeb-iconsvg-testimonial-carousel:before{background-image:url(../../img/widgets/testimonial-carousel.svg)}.afeb-iconsvg-timeline::before{background-image:url(../../img/widgets/timeline.svg)}.afeb-iconsvg-checkout::before{background-image:url(../../img/widgets/checkout.svg)}1 .afeb-iconsvg-accordion::before {background-image: url(../../img/widgets/accordion.svg) }.afeb-iconsvg-products-category::before {background-image: url(../../img/widgets/products-category.svg) }.afeb-iconsvg-product-excerpt::before {background-image: url(../../img/widgets/product-excerpt.svg);}.afeb-iconsvg-product-tags::before {background-image: url(../../img/widgets/product-tags.svg);}.afeb-iconsvg-product-content::before {background-image: url(../../img/widgets/product-content.svg);}.afeb-iconsvg-advanced-menus::before {background-image: url(../../img/widgets/advanced-menus.svg) }.afeb-iconsvg-product-img::before {background-image: url(../../img/widgets/product-img.svg) }.afeb-iconsvg-alert-box::before {background-image: url(../../img/widgets/alert-box.svg) }.afeb-iconsvg-author-box::before {background-image: url(../../img/widgets/author-box.svg) }.afeb-iconsvg-archive-title:before {background-image: url(../../img/widgets/archive-title.svg) }.afeb-iconsvg-breadcrumb::before {background-image: url(../../img/widgets/breadcrumb.svg) }.afeb-iconsvg-comments-form::before {background-image: url(../../img/widgets/comments-form.svg) }.afeb-iconsvg-countdown::before {background-image: url(../../img/widgets/countdown.svg) }.afeb-iconsvg-creative-button::before {background-image: url(../../img/widgets/creative-button.svg) }.afeb-iconsvg-datatable::before {background-image: url(../../img/widgets/data-table.svg) }.afeb-iconsvg-dynamic-archive-posts::before {background-image: url(../../img/widgets/dynamic-archive-posts.svg) }.afeb-iconsvg-dynamic-grid-carousel::before {background-image: url(../../img/widgets/dynamic-grid-carousel.svg) }.afeb-iconsvg-fancy-text::before {background-image: url(../../img/widgets/fancy-text.svg) }.afeb-iconsvg-flip-box::before {background-image: url(../../img/widgets/flip-box.svg) }.afeb-iconsvg-form-builder::before {background-image: url(../../img/widgets/form-builder.svg) }.afeb-iconsvg-going-up:before {background-image: url(../../img/widgets/going-up.svg) }.afeb-iconsvg-hotspot::before {background-image: url(../../img/widgets/hotspot.svg) }.afeb-iconsvg-information-box::before {background-image: url(../../img/widgets/information-box.svg) }.afeb-iconsvg-login-register::before {background-image: url(../../img/widgets/login-register.svg) }.afeb-iconsvg-lottie::before {background-image: url(../../img/widgets/lottie.svg) }.afeb-iconsvg-map::before {background-image: url(../../img/widgets/map.svg) }.afeb-iconsvg-news-ticker::before {background-image: url(../../img/widgets/news-ticker.svg) }.afeb-iconsvg-notice-box::before {background-image: url(../../img/widgets/notice-box.svg) }.afeb-iconsvg-offcanvas:before {background-image: url(../../img/widgets/off-canvas.svg) }.afeb-iconsvg-page-title:before {background-image: url(../../img/widgets/page-title.svg) }.afeb-iconsvg-post-content:before {background-image: url(../../img/widgets/post-content.svg) }.afeb-iconsvg-post-date:before {background-image: url(../../img/widgets/post-date.svg) }.afeb-iconsvg-post-excerpt:before {background-image: url(../../img/widgets/post-excerpt.svg) }.afeb-iconsvg-post-featured-image:before {background-image: url(../../img/widgets/post-featured-image.svg) }.afeb-iconsvg-post-title:before {background-image: url(../../img/widgets/post-title.svg) }.afeb-iconsvg-post-terms:before {background-image: url(../../img/widgets/post-terms.svg) }.afeb-iconsvg-post-time:before {background-image: url(../../img/widgets/post-time.svg) }.afeb-iconsvg-post-comments:before {background-image: url(../../img/widgets/post-comments.svg) }.afeb-iconsvg-post-navigation:before {background-image: url(../../img/widgets/post-navigation.svg) }.afeb-iconsvg-price-box::before {background-image: url(../../img/widgets/price-box.svg) }.afeb-iconsvg-search-form:before {background-image: url(../../img/widgets/search-form.svg) }.afeb-iconsvg-myacc:before {background-image: url(../../img/widgets/myacc.svg) }.afeb-iconsvg-add-to-cart:before {background-image: url(../../img/widgets/add-to-cart.svg) }.afeb-iconsvg-site-logo::before {background-image: url(../../img/widgets/site-logo.svg) }.afeb-iconsvg-site-title:before {background-image: url(../../img/widgets/site-title.svg) }.afeb-iconsvg-slides:before {background-image: url(../../img/widgets/slides.svg) }.afeb-iconsvg-sound-player:before {background-image: url(../../img/widgets/sound-player.svg) }.afeb-iconsvg-tabs:before {background-image: url(../../img/widgets/tabs.svg) }.afeb-iconsvg-team-member-carousel:before {background-image: url(../../img/widgets/teammember-carousel.svg) }.afeb-iconsvg-template:before {background-image: url(../../img/widgets/template.svg) }.afeb-iconsvg-testimonial-carousel:before {background-image: url(../../img/widgets/testimonial-carousel.svg) }.afeb-iconsvg-timeline::before {background-image: url(../../img/widgets/timeline.svg) }.afeb-iconsvg-checkout::before {background-image: url(../../img/widgets/checkout.svg) } -
addons-for-elementor-builder/trunk/html/admin/menus/dashboard/fragments/content/dashboard/tpl.php
r3382971 r3386622 55 55 56 56 <div class="afeb-changelog-list-box"> 57 <div class="afeb-changelog-date"> 58 <?php esc_html_e('October 28, 2025', 'addons-for-elementor-builder'); ?> 59 <span class="afeb-changelog-version"><?php esc_html_e('Version 1.6.1', 'addons-for-elementor-builder'); ?></span> 60 </div> 61 <ul class="afeb-changelog-list"> 62 <li><?php esc_html_e('Fixed : Enhanced the security and fixed some minor issues.', 'addons-for-elementor-builder'); ?></li> 63 </ul> 57 64 <div class="afeb-changelog-date"> 58 65 <?php esc_html_e('October 22, 2025', 'addons-for-elementor-builder'); ?> … … 106 113 <li><?php esc_html_e('Added : Layout animation feature in the Dynamic Grid/Carousel Widget', 'addons-for-elementor-builder'); ?></li> 107 114 <li><?php esc_html_e('Added : Irregular grid feature for the 2-column layout in the Dynamic Grid/Carousel Widget', 'addons-for-elementor-builder'); ?></li> 108 <li><?php esc_html_e( 'Added : \'Stay in Column\' feature in the Sticky Extension', 'addons-for-elementor-builder'); ?></li>115 <li><?php esc_html_e("Added : 'Stay in Column' feature in the Sticky Extension", 'addons-for-elementor-builder'); ?></li> 109 116 <li><?php esc_html_e('Added : Feature to display pages related to each demo in the Templates Kit section', 'addons-for-elementor-builder'); ?></li> 110 117 </ul> … … 506 513 </p> 507 514 <div class="afeb-space afeb-mr-20"></div> 508 <a class="afeb-box-btn afeb-primary-btn" href="https://wordpress.org/support/plugin/addons-for-elementor-builder/reviews/ ?filter=5" target="_blank">515 <a class="afeb-box-btn afeb-primary-btn" href="https://wordpress.org/support/plugin/addons-for-elementor-builder/reviews/" target="_blank"> 509 516 <?php esc_html_e("Rate On WordPress", 'addons-for-elementor-builder'); ?> 510 517 </a> -
addons-for-elementor-builder/trunk/html/admin/metaboxes/submissions/additional-info/tpl.php
r3297649 r3386622 14 14 ?>: 15 15 <a href="<?php echo get_the_permalink($page_id) ?>" title="<?php echo get_the_title($page_id); ?>"> 16 <b><?php echo get_the_title($page_id); ?></b>16 <b><?php echo esc_html(get_the_title($page_id)); ?></b> 17 17 </a> 18 18 </span> -
addons-for-elementor-builder/trunk/html/admin/metaboxes/submissions/submission/tpl.php
r3382971 r3386622 171 171 formData.append('action', 'afeb_update_submission'); 172 172 formData.append('post_id', '<?php echo esc_js($post_id); ?>'); 173 formData.append('nonce', '<?php echo wp_create_nonce( 'afeb_admin_submission'); ?>');173 formData.append('nonce', '<?php echo esc_js( wp_create_nonce( 'afeb_admin_submission' ) ); ?>'); 174 174 175 175 // Append our fields manually from DOM -
addons-for-elementor-builder/trunk/readme.txt
r3382971 r3386622 6 6 Requires PHP: 7.2 7 7 Tested up to: 6.8 8 Stable tag: 1.6. 08 Stable tag: 1.6.1 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 120 120 Want to dive deeper into how each widget works? Check out [Vertex documentation](https://api.webilia.com/go/vertex-docs) to learn about every feature and customization option available in the Vertex Addons. 121 121 122 == Development and Source == 123 124 The distributed plugin bundles several minified assets for performance. Human-readable sources are provided or linked below so the code can be audited, modified, or rebuilt as needed. 125 126 === Vertex-authored assets === 127 128 The following readable sources live in the repository next to their compiled counterparts: 129 130 * `assets/js/global/dynamic-hook.js` → `assets/js/global/dynamic-hook.min.js` 131 * `assets/packages/ripple/ripple.js` → `assets/packages/ripple/ripple.min.js` 132 * `assets/packages/sticky/sticky.js` → `assets/packages/sticky/sticky.min.js` 133 * `assets/packages/news-ticker-init/news-ticker-init.js` → `assets/packages/news-ticker-init/news-ticker-init.min.js` 134 * `assets/css/common.css` → `assets/css/common.min.css` 135 * `assets/css/widgets/woo-checkout.css` → `assets/css/widgets/woo-checkout.min.css` 136 * `assets/css/widgets/woo-my-account.css` → `assets/css/widgets/woo-my-account.min.css` 137 * `assets/css/widgets/rtl/woo-my-account.css` → `assets/css/widgets/rtl/woo-my-account.min.css` 138 139 Pro add-on assets follow the same pattern: 140 141 * `plugins/addons-for-elementor-builder-pro/assets/js/form-builder.js` → `plugins/addons-for-elementor-builder-pro/assets/js/form-builder.min.js` 142 * `plugins/addons-for-elementor-builder-pro/assets/css/widgets/form-builder.css` → `plugins/addons-for-elementor-builder-pro/assets/css/widgets/form-builder.min.css` 143 144 When you modify any of the above helpers, re-minify them with your preferred tooling before releasing a build. Each file can be minified individually with tools such as `uglify-js`, `terser`, or `cssnano`. 145 146 === Third-party libraries === 147 148 The plugin also ships minified builds of open-source libraries. Readable, beautified copies of the distributed bundles now live next to every `.min` file, so you can inspect or diff the exact payload we include. Refer to the upstream repositories for the canonical source code and build instructions: 149 150 * DataTables core and extensions (`assets/packages/data-table/data-table*.{js,css}`) — <https://datatables.net/> 151 * Font Awesome (`assets/packages/font-awesome/fontawesome.{css,min.css}`) — <https://fontawesome.com/> 152 * Font Icon Picker (`assets/packages/font-iconpicker/fonticonpicker*.{js,css}`) — <https://github.com/itsjavi/fonticonpicker> 153 * GLightbox (`assets/packages/glightbox/glightbox*.{js,css}`) — <https://github.com/mcstudios/glightbox> 154 * GMaps.js (`assets/packages/gmaps/gmaps.{js,min.js}`) — <https://github.com/hpneo/gmaps> 155 * Howler.js (`assets/packages/howler/howler.{js,min.js}`) — <https://github.com/goldfire/howler.js> 156 * Leaflet (`assets/packages/leaflet/leaflet*.{js,css}`) — <https://leafletjs.com/> 157 * LightGallery (Pro add-on: `plugins/addons-for-elementor-builder-pro/assets/packages/lightgallery/lightgallery-bundle.{css,min.css}`) — <https://www.lightgalleryjs.com/> 158 * Lottie Web (`assets/packages/lottie/lottie.{js,min.js}`) — <https://github.com/airbnb/lottie-web> 159 * MixItUp (`assets/packages/mixitup/mixitup.{js,min.js}`) — <https://www.kunkalabs.com/mixitup/> 160 * Normalize.css (`assets/css/normalize.{css,min.css}`) — <https://github.com/necolas/normalize.css> 161 * Slick Slider (`assets/packages/slick/slick*.{js,css}`) — <https://github.com/kenwheeler/slick> 162 * SmartMenus (`assets/packages/smart-menus/smartmenus.{js,min.js}`) — <https://github.com/vadikom/smartmenus> 163 * Swiper (`assets/packages/swiper/swiper-bundle*.{js,css}`) — <https://swiperjs.com/> 164 * jQuery UI dialog styles (`assets/packages/jquery-ui/dialog.{css,min.css}`) — <https://jqueryui.com/dialog/> 165 166 Each vendor project documents its own build pipeline; follow the linked instructions if you need to regenerate the distributed files from source. 167 168 == External services == 169 170 = Google Maps Platform = 171 Vertex Addons can load the Google Maps JavaScript and Static Maps APIs hosted at `maps.googleapis.com` when you enable map-related widgets. The visitor's browser calls Google's servers with the API key you configure, the map coordinates you supply, and standard browser metadata (such as IP address and user agent) so the map tiles and related functionality can be rendered. See the [Google Maps Platform Terms of Service](https://maps.google.com/help/terms_maps/) and the [Google Privacy Policy](https://policies.google.com/privacy) for details on how Google handles this data. 172 173 = Vertex Addons CDN and API = 174 When you browse or import Templates Kits, the plugin connects to Webilia-operated endpoints at `cdn.webilia.com` and `api.webilia.com` to fetch kit listings, previews, and assets. Those requests transmit the selected kit identifier together with the default WordPress request headers, which include your site's URL and WordPress version, so the templates can be downloaded and installed. Review the [Vertex Addons Terms & Conditions](https://vertexaddons.com/terms-and-conditions/) and [Vertex Addons Privacy Policy](https://vertexaddons.com/privacy-policy/) to understand how that data is processed. 175 122 176 == Commercial == 123 177 This plugin is free but offers additional paid commercial upgrades and support. [Learn more](https://vertexaddons.com) … … 177 231 178 232 == Changelog == 233 234 = 1.6.1 = 235 * Fixed : Enhanced the security and fixed some minor issues. 236 237 = 1.6.0 = 238 Added : Woo Checkout Widget 239 Added : Woo Add To Cart Widget 240 Added : Woo Product Category Widget 241 Added : Woo Product Tags Widget 242 Added : Product Image Widget 243 Added : Product Content Widget 244 Added : Product Excerpt Widget 179 245 180 246 = 1.5.3 =
Note: See TracChangeset
for help on using the changeset viewer.