mirror of
https://gh.wpcy.net/https://github.com/elementor/one-click-accessibility.git
synced 2026-04-21 04:22:21 +08:00
* Bump WP version * ♻️ Initial Refactor commit [APP-687] (#109) * Initial refactor commit * ✅ Added build and tests CI/CD * PR Rejects * Rejects leftover * Setup base (#110) * Initial refactor commit * ✅ Added build and tests CI/CD * update: add src for admin settings * update: incorrect constant names * update: namespace * add: accessibility settings * update: webpack to output files inside a folder * update: build output folders * update: removed commented code * update: npm scripts * add: webpack config * add: hooks * update: move admin setting to the module folder * update: assets loading logic * update: settings variable * update: removed duplicate css import * Update modules/settings/assets/js/api/index.js Co-authored-by: VasylD <vasyld@elementor.red> --------- Co-authored-by: Ohad <ohad@elementor.com> Co-authored-by: VasylD <vasyld@elementor.red> * [Infra] ✅ updated Github actions (#114) * updated github actions * removed composer github auth * PHPCS * removed package-lock.json from ignore to allow `npm ci` * added missing husky * ignore legacy * removed unused non existing import * Add connect modal (#111) * Initial refactor commit * ✅ Added build and tests CI/CD * update: add src for admin settings * update: incorrect constant names * update: namespace * add: accessibility settings * update: webpack to output files inside a folder * update: build output folders * update: removed commented code * update: npm scripts * add: webpack config * add: hooks * update: move admin setting to the module folder * update: assets loading logic * update: add rule to move jsx props to multiline imporving readability * add: connect modal * update: hooks import for better readability * update: replace functions with hooks * fix: alignment and style * update: imports * update: removed conflicting imports * fix: add compatibility for mobile devices --------- Co-authored-by: Ohad <ohad@elementor.com> * [APP 705] add connect module, settings and notification component (#112) * Initial refactor commit * ✅ Added build and tests CI/CD * update: add src for admin settings * update: incorrect constant names * update: namespace * add: accessibility settings * update: webpack to output files inside a folder * update: build output folders * update: removed commented code * update: npm scripts * add: webpack config * add: hooks * update: move admin setting to the module folder * update: assets loading logic * update: add rule to move jsx props to multiline imporving readability * add: connect modal * update: hooks import for better readability * update: replace functions with hooks * add: connect module * add: settings and get settings route * add: hooks and contexts to get settings * add: hooks * add: notification component * add: data api * add: settings provider and connect settings * add: husky * fix: formatting and text-domain * update: filter names * fix: hook import * add: set function for settings * add: prop-types package * update: refactor notification component and context * update: remove filter for authorize url * update: imports and exports of hooks * update: plugin settings context filename and relevant imports --------- Co-authored-by: Ohad <ohad@elementor.com> * [APP 707] general setting components (#113) * Initial refactor commit * ✅ Added build and tests CI/CD * update: add src for admin settings * update: incorrect constant names * update: namespace * add: accessibility settings * update: webpack to output files inside a folder * update: build output folders * update: removed commented code * update: npm scripts * add: webpack config * add: hooks * update: move admin setting to the module folder * update: assets loading logic * update: add rule to move jsx props to multiline imporving readability * add: connect modal * update: hooks import for better readability * update: replace functions with hooks * add: connect module * add: settings and get settings route * add: hooks and contexts to get settings * add: hooks * add: notification component * add: data api * add: settings provider and connect settings * add: husky * add: icon size control * fix: icon size control labels * add: icon select component * add: color picker component * add: accessibility icons * add: icon export * update: add icons to the component * fix: styling for the icon select control * update: color picker with react-colorful component * update: icon size component with live icon design * fix: styling of radio boxes * add: icon design settings layout * add: position settings layout * add: layout exports * add: alignment matrix and position control components * add: position settings & position settings for mobile layout * fix: formatting and text-domain * update: filter names * fix: hook import * add: set function for settings * add: prop-types package * update: refactor notification component and context * update: remove filter for authorize url * Update modules/settings/assets/js/components/color-picker/style.css Co-authored-by: Raz Ohad <admin@bainternet.info> * update: color picker class name --------- Co-authored-by: Ohad <ohad@elementor.com> Co-authored-by: Raz Ohad <admin@bainternet.info> * [App 780] Navigation Sidebar (#115) * Initial refactor commit * ✅ Added build and tests CI/CD * update: add src for admin settings * update: incorrect constant names * update: namespace * add: accessibility settings * update: webpack to output files inside a folder * update: build output folders * update: removed commented code * update: npm scripts * add: webpack config * add: hooks * update: move admin setting to the module folder * update: assets loading logic * update: add rule to move jsx props to multiline imporving readability * add: connect modal * update: hooks import for better readability * update: replace functions with hooks * add: connect module * add: settings and get settings route * add: hooks and contexts to get settings * add: hooks * add: notification component * add: data api * add: settings provider and connect settings * add: husky * fix: formatting and text-domain * update: filter names * fix: hook import * add: set function for settings * add: prop-types package * update: refactor notification component and context * update: remove filter for authorize url * update: imports and exports of hooks * update: plugin settings context filename and relevant imports * update: icons and icon imports * add: sidebar(wip) * update: fix width of connect screen on mobile * update: sidebar layout * add: credit card and user arrow icons * update: hidden wpfooter and fixed sidebar height * update: sidebar layout * add: basic page layouts * update: sidebar layout * add: sidebar menu, sidebar app bar and my account menu components * update: add sidebar and menu settings * update: add page layouts * update: admin top bar * add: bottom bar * add: bottom bar and top bar * add: bottom bar and top bar * update: page content styling * fix: styling * fix: styling * update: text domain * update: added translations * fix: admin top bar layout * update: exports of icons * update: exports of components * add: aliases for imports and fix exports * fix: height and styling of the layout * fix: unhide wp footer * update: keep widget menu open on page load (default) * update: linter rules to move first prop to new line * update: linter rules to move first prop to new line --------- Co-authored-by: Ohad <ohad@elementor.com> * Fix error on install plugin, add prettier (#116) * Feature/app 810 assemble icon settings page (#117) * Initial refactor commit * ✅ Added build and tests CI/CD * update: add src for admin settings * update: incorrect constant names * update: namespace * add: accessibility settings * update: webpack to output files inside a folder * update: build output folders * update: removed commented code * update: npm scripts * add: webpack config * add: hooks * update: move admin setting to the module folder * update: assets loading logic * update: add rule to move jsx props to multiline imporving readability * add: connect modal * update: hooks import for better readability * update: replace functions with hooks * add: connect module * add: settings and get settings route * add: hooks and contexts to get settings * add: hooks * add: notification component * add: data api * add: settings provider and connect settings * add: husky * add: icon size control * fix: icon size control labels * add: icon select component * add: color picker component * add: accessibility icons * add: icon export * update: add icons to the component * fix: styling for the icon select control * update: color picker with react-colorful component * update: icon size component with live icon design * fix: styling of radio boxes * add: icon design settings layout * add: position settings layout * add: layout exports * add: alignment matrix and position control components * add: position settings & position settings for mobile layout * fix: formatting and text-domain * update: filter names * fix: hook import * add: set function for settings * add: prop-types package * update: refactor notification component and context * update: remove filter for authorize url * update: imports and exports of hooks * update: plugin settings context filename and relevant imports * update: icons and icon imports * add: sidebar(wip) * update: fix width of connect screen on mobile * update: sidebar layout * Update modules/settings/assets/js/components/color-picker/style.css Co-authored-by: Raz Ohad <admin@bainternet.info> * update: color picker class name * add: credit card and user arrow icons * update: hidden wpfooter and fixed sidebar height * update: sidebar layout * add: basic page layouts * update: sidebar layout * add: sidebar menu, sidebar app bar and my account menu components * update: add sidebar and menu settings * update: add page layouts * update: admin top bar * add: bottom bar * add: bottom bar and top bar * add: bottom bar and top bar * update: page content styling * fix: styling * fix: styling * update: text domain * add: props to wrapper * add: icon design and position setting layouts * add: in page scroll behaviour to the settings * add: widget icons and getter function * update: icon design settings getter and setter functions * update: imports * add: mobile layout for position settings * add: icon position settings * add: icon position settings hooks and handlers * fix: alignment of controls in AlignmentMatrixControl * update: useSettings and usePositionSetting hooks and relevant functions * fix: colors of AlignmentMatrixControl * fix: styling of components and layouts * add: aliases * add: container wrapper to page * update: accessibility options rendering logic * fix: order of the icons * add: aliases for components and hooks imports * fix: styling of settings panel * fix: container height for settings page * update: toggle control states * add: widget icon settings * add: load saved widget icon settings * update: move layout to page for different designs per page * update: add changes tracking and disable button logic * add: async/await to save settings * update: convert options to array of objects * Update modules/settings/assets/js/components/bottom-bar/index.js Co-authored-by: VasylD <vasyld@elementor.red> * Update modules/settings/assets/js/app.js Co-authored-by: VasylD <vasyld@elementor.red> * fix: remove duplicate entries --------- Co-authored-by: Ohad <ohad@elementor.com> Co-authored-by: Raz Ohad <admin@bainternet.info> Co-authored-by: VasylD <vasyld@elementor.red> * Feature/app 708 widget menu settings (#118) * add: icons for menu settings * add: placeholder layout for widget preview in menu settings * update: load saved settings and updated imports * add: logics for handling and saving menu settings * add: useSavedSettings hook * update: set export as default for Sidebar layout * add: widget menu settings layout and settings * update: add widget menu settings and widget preview layouts * add: hide/show minimum option alert notification * update: styling of the save button * update: save settings logic to use async/await * fix: accessibility text icon * update: app type (#119) * [APP-834] Update account menu buttons (#121) * update: account menu buttons * update: billing link * add: error handling for switch account * [APP-835] add service data (#122) * add: client functions * add: site register and site info endpoints * update: add plan data settings * update: add support for 201 response code * update: add plan data key * update: store the plan data on the once the site is registered * update: add filter for client url * add: retry registering in there is any error after connect * update: setting prefix * add: plan data * update: add account details to menu * fix: lint issues * update: add data checkbox support (#123) * [APP-928] Settings pointer (#125) * add: settings pointer * update: add alias for the settings * [APP-837] Add post connect modal (#120) * add: post connect modal * update: settings prefix * fix: connect modal design * update: connect modal text * add: connect modal graphics * update: connect modal icon * update: post connect modal * update: sidebar menu text * update: text of icon settings * update: text * update: php compatibility with return types * add: accessibility statement page structure (#126) * [APP-721] Render widget and global settings (#124) * add: webhook endpoint * add: widget module * add: default widget settings on successful registration * update: name of global object to ea11yWidget * update: remove json encoding to make objects available on the frontend * update: widget url, filter and enqueuing method * update: removed obsolete code * update: enqueue script only when connected * update: add check for valid plan data and key * update: conditional check * update: conditional check * fix: widget loading error (#128) * [Legacy] Upgrade To New [APP-949] (#127) * Added `Notice_Base` and `Notices` component to core module * Always load core module and load all other modules based on legacy status * added filter in customizer settings * added bubble / pimple in admin menu to indicate upgrade * added `Dismissible_Deprecated_Nag` notice to none legacy pages * added `Dismissible_Deprecated_Nag` notice to legacy pages * Added `Upgrade` component to legacy module includes: * loading of notices * introduction modal * admin menu pimple * customizer notice * pointer * confirmation modal * upgrade logic and handler * ✅ Fixed legacy module test * added `local:quick-run` command to run in browser mode * update phpunit workflow * ensure wp.ajax is loaded * wrong translations * Updated strings * added "Equally" * remove unused test * ✅ use custom version of wp test library (#129) * ✅ use custom version of wp test library * cleanup * update WP versions for testing * [APP-711] Widget preview (#130) * add: dynamic script loader for widget * update: settings name * update: settings save function and comments * update: tools settings object structure * add: widget preview section * update: added setting page slug as a constant * update: enqueue widget for preview in the settings * add: widget icon assets link * add: widget icon svgs * update: store widget url in a constant * update: store widget url in a constant * update: trigger widget preview update on menu item changes * update: remove the icon option from the frontend. * update: add widget URL * update: plan data setting type * update: widget plan url * update: widget plan url and parse plan data * fix: phpcs error ext-json missing * fix: widget url * fix: save and use plan data as a serialized option * fix: use template string for widget url * [APP-908] Accessibility generator (#131) * add: accessibility statement radio icons * update: add form group on radio buttons * add: statement generator * add: statement generator * add: accessibility statement data option * update: create page in WordPress and save it to the option * update: exclude zip file from the git * update: render statement page conditionally * add: statement link layout and settings * add: preload statement data * update: publish the created page and add link for it * update: changed Dynamic Script Loader to WidgetLoader * add: accessibility statement url * update: text and styling * update: styling of the preview text * update: restructure statement generator * add: support for dynamic update in statement links * update: remove index.css file for widget loader * add: widget styling for settings page * add: empty link when hide link is enabled * update: statement page structure and logic * fix: typo * update: convert component into a styled component * fix: styling and layout * update: icons * update: convert radio buttons to styled component * fix: typo and style * add: fading for the link preview * update: import * update: styling and spacing * fix: sidebar layout * update: wpcs to latest version * fix: spacing * fix: wpcs version * add: check for valid statement page * fix: jitters on rendering * fix: use escape attribute * update: settings menu slug and plugin name * fix: menu item rendering * update: definition of the styled text field * add: addPage function to the API * fix: add notification on page creation * add: copy link icon * update: optimize SVGs * [APP-908] Additional fixes (#133) * fix: text domains * updated: styled component syntax * update: use await instead of then * fix: prevent application crash in case widget fails to load * add: generated info tip card * update: refactor function * Fix: Fix the QA bugs [n/a] (#135) * [APP-830] Add mixpanel events (#134) * [APP-830] Add mixpanel events * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * [APP-830] Add user to init Mixpanel (#136) * [APP-830] Add mixpanel events * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * Merge branch 'develop' into feature/APP-830-add-mixpanel # Conflicts: # .gitignore # modules/settings/assets/js/components/sidebar-menu/index.js # modules/settings/assets/js/pages/accessibility-statement.js * [APP-830] Add user to init Mixpanel * [APP-830] Add user to init Mixpanel * [APP-830] Add user to init Mixpanel * [APP-830] rename events (#137) * Connect and Preview Fixes (#139) * updated connect admin page * Use unified widget URL instead of hardcoded Js to support envs * Removed enqueue of fictional widget.js and reuse settings `admin` handle * Fix: Fix the QA bugs [n/a] (#138) * New: Finish the BE integration [n/a] * Fix: Fix some bugs [n/a] * upgrade flow UI and design tweaks [app-949] (#141) * Updated Learn More links with UTM's * Tweaked Pointer strings Icon and CTA * dismissible notice strings * sticky notice strings * updated upgrade flow design for pointer, notices, introduction modal, and confirmation modal * added build script * [APP-979] Update links and plugin name (#140) * Ensure loading of legacy widget based on any saved data and fixed legacy JS * Bug/app 1002 (#143) * Bug: Update the logo in the "Hide Widget" modal [APP-1001] * Fix: Update the side menu spaces [APP-1002] * [APP-991] Add translation for statement (#142) * [APP-979] Update links and plugin name * [APP-991] Add translation for statement * Set Prod Widget URL * [APP-1004][APP-1005][APP-1006] Fix generator UI and logic, fix statement UI, fix copy link (#144) * [APP-1004] Fix generator UI and logic * [APP-1005] Fix statement UI * [APP-1005] Fix statement UI * Mixpanel record session * Fix: Enhance position values validation [APP-1009] (#146) * Bug/app 1003 (#147) * Fix: Add a border to the preview [n/a] * Fix: Fix Capabilities screen UI [APP-1003] * [APP-1020] add missed events (#148) * [APP-1015] fix switch account (#149) * [APP-1015] fix switch account (#150) * [APP-1021] Fix switch modal ui (#151) * fix: ui issues * fix: translation strings * [APP-912] add default settings for RTL (#152) * [APP-912] add default settings for RTL * [APP-912] add default settings for RTL * [APP-912] add default settings for RTL * [APP-1026] Remove HTML breaking <style> tag & update pointer logic (#153) * fix: remove extra closing tag * update: hide settings pointer when plugin settings is opened * update: remove unused functions * update: add help text to mobile position settings * Bug/app 1003 (#157) * Fix: Add missed translations [n/a] * Fix: Refresh the plan data on page load [n/a] * New: Add loader to the settings [n/a] * update: delete lock key after each check (#160) * New: Update dashboard icon size [n/a] (#158) * New: Update dashboard icon size [n/a] * Fix: Fix widget previews [n/a] * [APP-1018] Help menu change (#155) * update: remove accessibility word from menu items * update: remove top bar * update: add help button to the sidebar * update: re-add spacing in styled css code * update: create styled components * [APP-973] Add an UTM for users upgrading from one click to the new widget (#165) * update: ui of the statement preview (#166) * [APP-1011][APP-1013] focus outline and sitemap settings (#161) * [APP-1011][APP-1013] focus outline and sitemap settings * [APP-1011][APP-1013] focus outline and sitemap settings * [APP-1011][APP-1013] focus outline and sitemap settings * [APP-1011][APP-1013] focus outline and sitemap settings * update: video link (#167) * [APP-1051] Fix layout on the small and medium devices (#156) * fix: layout on the small and medium devices * update: change components to styled components * refactor: position settings wrapper into a separate component * [APP-1012][APP-1085] Add skip to content settings and event for Mixpanel (#169) * [APP-1012][APP-1085] Add skip to content settings and event for Mixpanel * [APP-1012][APP-1085] Add skip to content settings and event for Mixpanel * [APP-1012][APP-1085] Add skip to content settings and event for Mixpanel * [APP-1012][APP-1085] Add skip to content settings and event for Mixpanel * [APP-1048] Add tooltip to accessibility statement (#159) * add: tooltip to accessibility statement * update: hide infotip when statement link is set * update: infotip's text * fix: infotip naming and logic * [APP-1049] Add back button accessibility statement (#164) * add: back button to the statement link section * add: Edit link button to statement page section * update: add admin_url and generate query args properly * update: learn more link for accessibility statement page (#168) * Fix: Update overlay height [n/a] (#171) * Fix settings and connect issues (#170) * fix: token fails to refresh after expiry * update: add 12 hour time for plan data refresh and fix missing subscription id * update: add check to refresh plan data * fix: decoding errors and alignment and add logging for errors * update: refresh logic and formatting * Update/app 1029 app name (#173) * update: plugin name * update: default menu option * update: menu structure * update: add inline checks * update: reduce padding on app icon in menu * fix: height of the modal * update: app menu icon color * update: menu icon colors * fix: menu icon size * update: plugin names * update: HELP_LINK * update: app name * update: icon background color * update: icon size * fix: admin icon size * fix: width of the sidebar * Fix/toggle not working properly (#174) * fix: toggles not working properly in some cases * fix: saving of the settings was not working * add: missing adminUrl in settings data * fix: switch was not working properly in some cases (#175) * Fix/app 1093 incorrect position on default (#176) * fix: switch was not working properly in some cases * fix: default setting structure for the icon position * [APP-1096] Text changes (#177) * fix: switch was not working properly in some cases * update: plugin name and action buttons title * fix: revert change to is_active function * fix: button color * New: Add the skip link [APP-1012] (#179) * [APP-1097] Fix preview load (#178) * [APP-1097] Fix preview load * [APP-1097] Fix preview load * [APP-1097] Fix preview load * Update modules/settings/assets/js/components/widget-loader/index.js --------- Co-authored-by: Raz Ohad <ohad@elementor.com> * [APP-1123] Accessibility statement text (#181) * fix: switch was not working properly in some cases * update: accessibility statement content * [APP-1121] Add support for react-jsx-runtime for older WP versions (#180) * fix: switch was not working properly in some cases * update: revert wp-scripts version to 28.0.0 to add support for older WordPress versions * update: revert wp-scripts to 27.9.0 * add: support for react-jsx-runtime in older versions of WordPress * update: version to the latest wp-scripts 30.3.0 * update: add lib/ to gitignore * update: plugin name * Fix: Fix admin widget previews [n/a] (#183) * [APP-1061] change mixpanel user id (#184) * [APP-1129] change toggle_event for mixpanel (#186) * Remove skip to content btn if anchor does not exist (#187) * fix: hide wp notices to keep the layout from shifting (#189) * [APP-1143] fix bug with capability display (#195) * [APP-1143] fix bug with capability display * [APP-1143] fix bug with capability display * [APP-1143] fix bug with capability display * [APP-1143] fix bug with capability display * add: loading text to widget preview (#196) * [APP-1142] add 'appType' super props, change identify key (#191) * [APP-1108][APP-1109][APP-1110] Add analytics backend logic * [APP-1142] Add 'appType' super props * [APP-1144] Accessibility statement tooltip text update (#198) * update: text * update: switch design * Tweak: Update widget loaders [n/a] (#197) * added images to readme (#172) * added images to readme * updated readme * V3.0.0 * updated readme * updated tested up to * Fix: Update the skip link rendering hook [APP-1157] (#203) * bumped v3.0.1 (#206) * Fix: Adapt widget preview to smaller height viewports [APP-1130] (#217) * update: convert menu icon to base64 svg (#199) * update: convert menu icon to base64 svg * update: logo to svg logo with base64 encoded * update: svg app icon * [APP-1201] Improve admin panel accessibility (#220) * [APP-1201] add accessibility rules * [APP-1201] add accessibility rules * [APP-1210] add prop to Mixpanel, move event names to const (#225) * [APP-1159] Add mismatch URL flow (#210) * update: convert imports to named imports * add: function to check if current screen is settings page * update: rename elementor logo to app logo * add: url mismatch flow and components * update: remove obsolete code * Update modules/connect/rest/authorize.php Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * Update modules/settings/module.php Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * fix: modal was not closing * update: remove url mismatch notice * update: mismatch modal and rendering logic * add: toast notifications for errors * update: convert components into styled components * update: remove bottom border from the dialog * update: text copy * fix: logo alignment * update: renamed styled component --------- Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * [APP-1108][APP-1109][APP-1110] Add analytics backend logic (#190) * [APP-1108][APP-1109][APP-1110] Add analytics backend logic * [APP-1108][APP-1109][APP-1110] Add analytics backend logic * Add nonce to the widget settings * Update routes and DB table * Fix comments * Fix comments * Fix comments * Fix comments * Fix comments * Fix comments * [APP-1101] Move action button to footer (#208) * update: add save changes footer to the bottom and remove it from capabilities * add: logic to save settings for skiptocontent using footer * update: text * update: convert component to styled component * [APP-1198] [APP-1199] Quota bar and notices (#219) * add: quota bar * add: openLink helper function * add: styled elements and visits link placeholder * update: remove hover state from the box * add: quota notices * update: quota access and usage calculations * add: logic to calculate plan usage * update: move logic to calculate plan usage to hook * add: todo note * add: todos * add: mixpanel events * fix: hide quota bar when sidebar is minimized * fix: settings panel was not expanding when sidebar is minimized * update: text and structure of the bar * update: quota calculation logic * update: remove TODOs * update: text and values * fix: height of the container for icon settings * update: golinks * update: golinks * fix: prevent icon options from wrapping on smaller screen sizes (#229) * [APP-1107] Add dashboard for analytics (#204) * [APP-1108][APP-1109][APP-1110] Add analytics backend logic * [APP-1108][APP-1109][APP-1110] Add analytics backend logic * Add nonce to the widget settings * Update routes and DB table * Fix comments * Fix comments * Fix comments * Fix comments * Fix comments * Fix comments * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1107] Add dashboard for analytics * [APP-1201] add accessibility rules * [APP-1107] fixed API endpoint * [APP-1107] fixed API endpoint * [APP-1107] fixed API endpoint * [APP-1107] add check for is_active * update to the latest * update to the latest * update to the latest * fix bugs, add changes * fix bugs, add changes * fix bugs, add changes * fix bugs, add changes * [APP-1105] Add pro capabilities (#205) * add: volume and solid crown icon * add: volume and crown icons to export * update: refactor menu item to a new component * add: screen reader to the menu items and reorganize them * add: pro item infotip content * add: capabilities item and pro info tip to exports * update: import ProInfoTip component and change disabled logic * update: imports * update: refactor pro item infotip into the separate component * update: refactor infotip and add comments * add: custom switch component * add: logo settings layout * update: switch component * add: useToggleSetting hook to manage widget settings. * update: move pro feature key to a separate constant * fix: pro icon style * update: remove branding key * update: pro enable check structure * update: pro enabled check structure * update: key name * update: update key before checking for it * fix: null error * add: update logic to get the tools settings based on plan * update: exclude remove-elementor-label from the minimum option rule * update: add formlabel and eventnames * add: logic to deactivate the features which are disabled for the plan * fix: PHP warning * fix: keyword name * add: GOLINKS * add: open link function * fix: PHP warning undefined key * update: logic to show the icon and added golinks * [APP-1045] Add billing tab (#223) * add: plan name and subscription link * update: refactor my account menu * update: move truncate email to a helper file * update: simplify truncation logic * [APP-1270] Delete transient and force info update (#236) * add: force update site/info on mismatch url * update: add a constant for the transient * add: delete_transient for switch account as well * add: delete_transient for disconnect as well * [APP-1267] Quota bar undefined (#234) * fix: undefined was shown when there is no quota data * add: preloader * fix: make bottom bar sticky on the settings pages (#237) * [APP-1268] Pro tip spacing (#235) * fix: pro tip spacing * fix: pro icon * [APP-1271] Align menu icons (#238) * update: hide info button on minimized sidebar * fix: alignment of quota bar icon * fix: conditional logic * update: improve sidebar motion * fix: switch account issue * update: upgrade link for analytics popup (#239) * [APP-1281] fix usage percentage formatting (#240) * fix: format display of percentage correctly. * update: fraction conversion logic * Force referer and lower transient time to 15 minutes [APP-1286] (#242) * reduce transient timeout * force referrer in script tags * [APP-1262] Enable routes for get statistic on disabled analytics (#233) * [APP-1262] Enable routes for get statistic on disabled analytics * [APP-1262] Enable routes for get statistic on disabled analytics * [APP-1262] Enable routes for get statistic on disabled analytics * [APP-1262] Enable routes for get statistic on disabled analytics * [APP-1262] Enable routes for get statistic on disabled analytics * [APP-1262] Enable routes for get statistic on disabled analytics * [APP-1243] Admin upgrade notices (#241) * add: admin quota notices * add: fix function name and phpcs issues * fix: formatting issues * [APP-1287] change Mixpanel check for free trial (#243) * Fix/quota text (#244) * fix: wp notice close logic plus banner text * update: banner text * [APP-1292] missing mixpanel events (#245) * add: missing mixpanel events * update: use variable for hardcoded names * update: use variable for hardcoded names * [APP-1293] Add additional checks (#246) * update: add additional check to prevent fatal error * fix: formatting * [APP-1312] minimize client css (#252) * [APP-1168] widget icon radius * add: icon radius component * add: icon radius component * update: add support for widget radius * fix: minor ui fixes * fix: resolve comments * fix: alignment of the icon * update: add styled components * add: corner radius mixpanel event * fix: corner radius should have default values when no value is set based on icon * fix: icon radius input style * add: accessibility attributes * fix: active states color * add: logic to control invalid inputs * update: make aria attributes translatable * update: styled component names * add: spacing between the components * [APP-1342] add super props, store plan scope after register/switch (#250) * [APP-0000] store plan scope after register/switch * Update modules/settings/module.php Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * remove deprecated method * remove deprecated method * [1342] Add super prop to mixpanel * [1342] Add super prop to mixpanel * [1342] Add super prop to mixpanel --------- Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com> * [Legacy] Added strict settings sanitization (#257) * [Legacy] Added strict settings sanitization * use correct esc_x method * hardcoded 6.8.0 * added svn for wp test library * fix: default border radius (#258) * fix: default border radius * add: default corner radius for new users * update: add support for default values for users with saved style settings * updated phpunit workflow * revert to master * hardcode 6.8.x * update: default values for existing users * update: remove saving default corner radius for new users * fix: update default radius for text icon * fix: PHPUnit tests for WP 6.8.0 * align with develop * set to latest --------- Co-authored-by: Raz Ohad <admin@bainternet.info> Co-authored-by: Raz Ohad <ohad@elementor.com> * fix: widget icon spacing (#262) * Added custom gutenberg link to toggle widget [APP-1306] (#256) * New: Added Ally Trigger Dynamic Tag for Elementor [APP-1305] (#254) * New: Added Ally Trigger Dynamic Tag for Elementor [APP-1305] * typo Update modules/widget/components/ally-trigger.php * New: Add the what's new functionality [APP-1329] (#264) * add: statement page selector field (#261) * add: statement page selector field * add: updated the statement link button to a search field * fix: add support for create statement data * New: Bump the Notifications SDK to 1.2.0 [APP-1427] (#267) * Fix: Resolve a11y issues [APP-1331] (#269) * [APP-1417] Add support for custom icon (#270) * add: media upload button * add: support for custom icon * fix: code alignment, phpcs * fix: code alignment and linting * add: mixpanel events * fix: styling of custom svg * fix: missing variable * fix: missing variable * fix: load gutenberg block without css * fix: icon spacing in preview * fix: indentation * fix: indents * [APP-1440] Fix doing_it_wrong warning for translations (#271) * fix: doing_it_wrong warning for translations * update: stop explicitly loading translations * fix: add package-lock * fix: add package-lock * Bumped V3.3.0 * Update manager.php --------- Co-authored-by: Yakir Sitbon <kingyes1@gmail.com> Co-authored-by: Nirbhay Singh <121793120+nirbhayel@users.noreply.github.com> Co-authored-by: VasylD <vasyld@elementor.red> Co-authored-by: Pavlo Kniazevych <139438463+pkniazevych@users.noreply.github.com>
396 lines
12 KiB
PHP
396 lines
12 KiB
PHP
<?php
|
|
|
|
namespace EA11y\Classes\Rest;
|
|
|
|
use ReflectionClass;
|
|
use WP_Error;
|
|
use WP_REST_Request;
|
|
use WP_REST_Response;
|
|
use WP_User;
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit; // Exit if accessed directly.
|
|
}
|
|
|
|
abstract class Route {
|
|
|
|
/**
|
|
* Should the endpoint be validated for user authentication?
|
|
* If set to TRUE, the default permission callback will make sure the user is logged in and has a valid user id
|
|
* @var bool
|
|
*/
|
|
protected $auth = true;
|
|
|
|
/**
|
|
* holds current authenticated user id
|
|
* @var int
|
|
*/
|
|
protected $current_user_id;
|
|
|
|
/**
|
|
* Rest Endpoint namespace
|
|
* @var string
|
|
*/
|
|
protected $namespace = 'ea11y/v1';
|
|
|
|
/**
|
|
* Should the endpoint override an existing one?
|
|
* @var bool
|
|
*/
|
|
protected bool $override = false;
|
|
|
|
/**
|
|
* @var array The valid HTTP methods. The list represents the general REST methods. Do not modify.
|
|
*/
|
|
private $valid_http_methods = [
|
|
'GET',
|
|
'PATCH',
|
|
'POST',
|
|
'PUT',
|
|
'DELETE',
|
|
];
|
|
|
|
/**
|
|
* Route_Base constructor.
|
|
*/
|
|
public function __construct() {
|
|
add_action( 'rest_api_init', [ $this, 'rest_api_init' ] );
|
|
}
|
|
|
|
/**
|
|
* rest_api_init
|
|
*
|
|
* Registers REST endpoints.
|
|
* Loops through the REST methods for this route, creates an endpoint configuration for
|
|
* each of them and registers all the endpoints with the WordPress system.
|
|
*/
|
|
public function rest_api_init(): void {
|
|
$methods = $this->get_methods();
|
|
if ( empty( $methods ) ) {
|
|
return;
|
|
}
|
|
|
|
$callbacks = [];
|
|
foreach ( (array) $methods as $method ) {
|
|
if ( ! in_array( $method, $this->valid_http_methods, true ) ) {
|
|
continue;
|
|
}
|
|
$callbacks[] = $this->build_endpoint_method_config( $method );
|
|
}
|
|
|
|
$arguments = $this->get_arguments();
|
|
|
|
if ( ! $callbacks && empty( $arguments ) ) {
|
|
return;
|
|
}
|
|
|
|
$arguments = array_merge( $arguments, (array) $callbacks );
|
|
register_rest_route( $this->namespace, '/' . $this->get_endpoint() . '/', $arguments, $this->override );
|
|
}
|
|
|
|
/**
|
|
* get_methods
|
|
* Rest Endpoint methods
|
|
*
|
|
* Returns an array of the supported REST methods for this route
|
|
* @return array<string> REST methods being configured for this route.
|
|
*/
|
|
abstract public function get_methods(): array;
|
|
|
|
/**
|
|
* get_callback
|
|
*
|
|
* Returns a reference to the callback function to handle the REST method specified by the /method/ parameter.
|
|
* @param string $method The REST method name
|
|
*
|
|
* @return callable A reference to a member function with the same name as the REST method being passed as a parameter,
|
|
* or a reference to the default function /callback/.
|
|
*/
|
|
public function get_callback_method( string $method ): callable {
|
|
$method_name = strtolower( $method );
|
|
$callback = $this->method_exists_in_current_class( $method_name ) ? $method_name : 'callback';
|
|
return [ $this, $callback ];
|
|
}
|
|
|
|
/**
|
|
* get_permission_callback_method
|
|
*
|
|
* Returns a reference to the permission callback for the method if exists or the default one if it doesn't.
|
|
* @param string $method The REST method name
|
|
*
|
|
* @return callable If a method called (rest-method)_permission_callback exists, returns a reference to it, otherwise
|
|
* returns a reference to the default member method /permission_callback/.
|
|
*/
|
|
public function get_permission_callback_method( string $method ): callable {
|
|
$method_name = strtolower( $method );
|
|
$permission_callback_method = $method_name . '_permission_callback';
|
|
$permission_callback = $this->method_exists_in_current_class( $permission_callback_method ) ? $permission_callback_method : 'permission_callback';
|
|
return [ $this, $permission_callback ];
|
|
}
|
|
|
|
/**
|
|
* maybe_add_args_to_config
|
|
*
|
|
* Checks if the class has a method call (rest-method)_args.
|
|
* If it does, the function calls it and adds its response to the config object passed to the function, under the /args/ key.
|
|
* @param string $method The REST method name being configured
|
|
* @param array $config The configuration object for the method
|
|
*
|
|
* @return array The configuration object for the method, possibly after being amended
|
|
*/
|
|
public function maybe_add_args_to_config( string $method, array $config ): array {
|
|
$method_name = strtolower( $method );
|
|
$method_args = $method_name . '_args';
|
|
if ( $this->method_exists_in_current_class( $method_args ) ) {
|
|
$config['args'] = $this->{$method_args}();
|
|
}
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* maybe_add_response_to_swagger
|
|
*
|
|
* If the function method /(rest-method)_response_callback/ exists, adds the filter
|
|
* /swagger_api_response_(namespace with slashes replaced with underscores)_(endpoint with slashes replaced with underscores)/
|
|
* with the aforementioned function method.
|
|
* This filter is used with the WP API Swagger UI plugin to create documentation for the API.
|
|
* The value being passed is an array: [
|
|
'200' => ['description' => 'OK'],
|
|
'404' => ['description' => 'Not Found'],
|
|
'400' => ['description' => 'Bad Request']
|
|
]
|
|
* @param string $method REST method name
|
|
*/
|
|
public function maybe_add_response_to_swagger( string $method ): void {
|
|
$method_name = strtolower( $method );
|
|
$method_response_callback = $method_name . '_response_callback';
|
|
if ( $this->method_exists_in_current_class( $method_response_callback ) ) {
|
|
$response_filter = $method_name . '_' . str_replace(
|
|
'/',
|
|
'_',
|
|
$this->namespace . '/' . $this->get_endpoint()
|
|
);
|
|
add_filter( 'swagger_api_responses_' . $response_filter, [ $this, $method_response_callback ] );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* build_endpoint_method_config
|
|
*
|
|
* Builds a configuration array for the endpoint based on the presence of the callback, permission, additional parameters,
|
|
* and response to Swagger member functions.
|
|
* @param string $method The REST method for the endpoint
|
|
*
|
|
* @return array The endpoint configuration for the method specified by the parameter
|
|
*/
|
|
private function build_endpoint_method_config( string $method ): array {
|
|
$config = [
|
|
'methods' => $method,
|
|
'callback' => $this->get_callback_method( $method ),
|
|
'permission_callback' => $this->get_permission_callback_method( $method ),
|
|
];
|
|
$config = $this->maybe_add_args_to_config( $method, $config );
|
|
return $config;
|
|
}
|
|
|
|
/**
|
|
* method_exists_in_current_class
|
|
*
|
|
* Uses reflection to check if this class has the /method/ method.
|
|
* @param string $method The name of the method being checked.
|
|
*
|
|
* @return bool TRUE if the class has the /method/ method, FALSE otherwise.
|
|
*/
|
|
private function method_exists_in_current_class( string $method ): bool {
|
|
$class_name = get_class( $this );
|
|
try {
|
|
$reflection = new ReflectionClass( $class_name );
|
|
} catch ( \ReflectionException $e ) {
|
|
return false;
|
|
}
|
|
if ( ! $reflection->hasMethod( $method ) ) {
|
|
return false;
|
|
}
|
|
$method_ref = $reflection->getMethod( $method );
|
|
|
|
return ( $method_ref && $class_name === $method_ref->class );
|
|
}
|
|
|
|
/**
|
|
* @param $data
|
|
*
|
|
* @return WP_REST_Response
|
|
*/
|
|
public function respond_success_json( $data = [] ): WP_REST_Response {
|
|
return new WP_REST_Response([
|
|
'success' => true,
|
|
'data' => $data,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @param array{message: string, code: string} $data
|
|
*
|
|
* @return WP_Error
|
|
*/
|
|
public function respond_error_json( array $data ): WP_Error {
|
|
if ( ! isset( $data['message'] ) || ! isset( $data['code'] ) ) {
|
|
_doing_it_wrong(
|
|
__FUNCTION__,
|
|
esc_html__( 'Both `message` and `code` keys must be provided', 'pojo-accessibility' ),
|
|
'1.0.0'
|
|
); // @codeCoverageIgnore
|
|
}
|
|
|
|
return new WP_Error(
|
|
$data['code'] ?? 'internal_server_error',
|
|
$data['message'] ?? esc_html__( 'Internal server error', 'pojo-accessibility' ),
|
|
);
|
|
}
|
|
|
|
public function verify_capability( $capability = 'manage_options' ) {
|
|
if ( ! current_user_can( $capability ) ) {
|
|
return $this->respond_error_json([
|
|
'message' => esc_html__( 'You do not have sufficient permissions to access this data.', 'pojo-accessibility' ),
|
|
'code' => '401 Unauthorized',
|
|
]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* permission_callback
|
|
* Permissions callback fallback for the endpoint
|
|
* Gets the current user ID and sets the /current_user_id/ property.
|
|
* If the /auth/ property is set to /true/ will make sure that the user is logged in (has an id greater than 0)
|
|
*
|
|
* @param WP_REST_Request $request unused
|
|
*
|
|
* @return bool TRUE, if permission granted, FALSE otherwise
|
|
*/
|
|
public function permission_callback( WP_REST_Request $request ): bool {
|
|
// try to get current user
|
|
$this->current_user_id = get_current_user_id();
|
|
if ( $this->auth ) {
|
|
return $this->current_user_id > 0;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* callback
|
|
* Fallback callback function, returns a response consisting of the string /ok/.
|
|
*
|
|
* @param WP_REST_Request $request unused
|
|
*
|
|
* @return WP_REST_Response Default Response of the string 'ok'.
|
|
*/
|
|
public function callback( WP_REST_Request $request ): WP_REST_Response {
|
|
return rest_ensure_response( [ 'OK' ] );
|
|
}
|
|
|
|
/**
|
|
* respond_wrong_method
|
|
*
|
|
* Creates a WordPress error object with the /rest_no_route/ code and the message and code supplied or the defaults.
|
|
* @param null $message The error message for the wrong method.
|
|
* Optional.
|
|
* Defaults to null, which makes sets the message to /No route was found matching the URL and request method/
|
|
* @param int $code The HTTP status code.
|
|
* Optional.
|
|
* Defaults to 404 (Not found).
|
|
*
|
|
* @return WP_Error The WordPress error object with the error message and status code supplied
|
|
*/
|
|
public function respond_wrong_method( $message = null, int $code = 404 ): WP_Error {
|
|
if ( null === $message ) {
|
|
$message = __( 'No route was found matching the URL and request method', 'pojo-accessibility' );
|
|
}
|
|
|
|
return new WP_Error( 'rest_no_route', $message, [ 'status' => $code ] );
|
|
}
|
|
|
|
/**
|
|
* respond_with_code
|
|
* Create a new /WP_REST_Response/ object with the specified data and HTTP response code.
|
|
*
|
|
* @param array|null $data The data to return in this response
|
|
* @param int $code The HTTP response code.
|
|
* Optional.
|
|
* Defaults to 200 (OK).
|
|
*
|
|
* @return WP_REST_Response The WordPress response object loaded with the data and the response code.
|
|
*/
|
|
public function respond_with_code( ?array $data = null, int $code = 200 ): WP_REST_Response {
|
|
return new WP_REST_Response( $data, $code );
|
|
}
|
|
|
|
/**
|
|
* get_user_from_request
|
|
*
|
|
* Returns the current user object.
|
|
* Depends on the property /current_user_id/ to be set.
|
|
* @return WP_User|false The user object or false if not found or on error.
|
|
*/
|
|
public function get_user_from_request() {
|
|
return get_user_by( 'id', $this->current_user_id );
|
|
}
|
|
|
|
/**
|
|
* get_arguments
|
|
* Rest Endpoint extra arguments
|
|
* @return array Additional arguments for the route configuration
|
|
*/
|
|
public function get_arguments(): array {
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* get_endpoint
|
|
* Rest route Endpoint
|
|
* @return string Endpoint uri component (comes after the route namespace)
|
|
*/
|
|
abstract public function get_endpoint(): string;
|
|
|
|
/**
|
|
* get_name
|
|
* @return string The name of the route
|
|
*/
|
|
abstract public function get_name(): string;
|
|
|
|
/**
|
|
* get_self_url
|
|
*
|
|
* @param string $endpoint
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_self_url( string $endpoint = '' ): string {
|
|
return rest_url( $this->namespace . '/' . $endpoint );
|
|
}
|
|
|
|
public function verify_nonce( $nonce = '', $name = '' ) {
|
|
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $nonce ) ), $name ) ) {
|
|
return $this->respond_error_json([
|
|
'message' => esc_html__( 'Invalid nonce', 'pojo-accessibility' ),
|
|
'code' => 'bad_request',
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function verify_nonce_and_capability( $nonce = '', $name = '', $capability = 'manage_options' ) {
|
|
$valid = $this->verify_nonce( $nonce, $name );
|
|
|
|
if ( is_wp_error( $valid ) ) {
|
|
return $valid;
|
|
}
|
|
|
|
if ( ! current_user_can( $capability ) ) {
|
|
return $this->respond_error_json([
|
|
'message' => esc_html__( 'You do not have sufficient permissions to access this data.', 'pojo-accessibility' ),
|
|
'code' => 'bad_request',
|
|
]);
|
|
}
|
|
}
|
|
|
|
}
|