├── images
├── Thumbs.db
├── blank.gif
├── google.png
├── select.png
├── slider.png
├── facebook.png
├── general.png
├── menu_icon.png
├── select2.png
├── twitter.png
├── waiting.gif
├── wordpress.png
├── custom_hex.png
├── gc_button1.gif
├── information.png
├── app-sprite01.png
├── appointments.png
├── custom_hsb_b.png
├── custom_hsb_h.png
├── custom_hsb_s.png
├── custom_indic.gif
├── custom_rgb_b.png
├── custom_rgb_g.png
├── custom_rgb_r.png
├── custom_submit.png
├── transactions.png
├── colorpicker_hex.png
├── large-greyscale.png
├── colorpicker_hsb_b.png
├── colorpicker_hsb_h.png
├── colorpicker_hsb_s.png
├── colorpicker_indic.gif
├── colorpicker_overlay.png
├── colorpicker_rgb_b.png
├── colorpicker_rgb_g.png
├── colorpicker_rgb_r.png
├── colorpicker_select.gif
├── colorpicker_submit.png
├── custom_background.png
├── gcal-instructions-01.png
├── gcal-instructions-02.png
├── gcal-instructions-03.png
├── gcal-instructions-04.png
├── gcal-instructions-05.png
├── gcal-instructions-06.png
├── gcal-instructions-07.png
├── gcal-instructions-08.png
├── gcal-instructions-09.png
├── gcal-instructions-10.png
└── colorpicker_background.png
├── _src
├── admin
│ ├── css
│ │ ├── unslider.js
│ │ └── unslider.css
│ └── js
│ │ ├── admin-gcal.dev.js
│ │ └── switch-button.dev.js
└── shortcodes
│ └── js
│ └── app-services.dev.js
├── admin
├── css
│ ├── unslider.css.map
│ ├── jquery-ui
│ │ └── images
│ │ │ ├── ui-icons_444_256x240.png
│ │ │ ├── ui-icons_555_256x240.png
│ │ │ ├── ui-icons_222222_256x240.png
│ │ │ ├── ui-icons_23282D_256x240.png
│ │ │ ├── ui-icons_32373C_256x240.png
│ │ │ └── ui-icons_ffffff_256x240.png
│ └── unslider.css
├── js
│ ├── admin-gcal.js
│ ├── admin-edit.js
│ ├── switch-button.js
│ ├── admin-multidatepicker.js
│ └── editor-shortcodes.js
├── views
│ ├── page-settings-tab-services.php
│ ├── user-profile-my-appointments.php
│ ├── page-settings-tab-workers-section-workers.php
│ ├── page-settings-tab-services-section-services.php
│ ├── user-profile-worker-appointments.php
│ ├── page-settings-tab-log.php
│ ├── page-settings-tab-main.php
│ ├── page-settings-tab-addons.php
│ ├── page-appointments-status-filter.php
│ ├── page-settings-tab-workers.php
│ ├── user-profile-working-hours.php
│ ├── user-profile-personal-data.php
│ └── page-settings-tab-working_hours.php
├── tinymce-shortcodes-i18n.php
├── widgets
│ └── class-app-dashboard-widget.php
└── pages
│ └── class-admin-transactions-page.php
├── wporg-assets
├── icon-128x128.png
├── icon-256x256.png
├── screenshot-1.png
├── screenshot-2.jpg
├── screenshot-3.png
├── screenshot-4.png
├── screenshot-5.jpg
├── banner-1544x500.png
└── banner-772x250.png
├── bower_components
├── sweetalert
│ ├── .gitignore
│ ├── sweetalert.gif
│ ├── example
│ │ └── images
│ │ │ ├── logo_big.png
│ │ │ ├── vs_icon.png
│ │ │ ├── logo_small.png
│ │ │ ├── thumbs-up.jpg
│ │ │ ├── vs_icon@2x.png
│ │ │ ├── logo_big@2x.png
│ │ │ ├── logo_small@2x.png
│ │ │ └── te-logo-small.svg
│ ├── .travis.yml
│ ├── .jshintrc
│ ├── .editorconfig
│ ├── dev
│ │ ├── gulpfile-wrap-template.js
│ │ ├── modules
│ │ │ ├── default-params.js
│ │ │ ├── utils.js
│ │ │ └── injected-html.js
│ │ └── ie9.css
│ ├── bower.json
│ ├── test
│ │ └── index.html
│ ├── lib
│ │ └── modules
│ │ │ ├── default-params.js
│ │ │ ├── injected-html.js
│ │ │ └── utils.js
│ ├── .bower.json
│ ├── LICENSE
│ └── package.json
├── jquery-ui-multiselect-widget
│ ├── i18n
│ │ ├── jquery.multiselect.filter.zh-cn.js
│ │ ├── jquery.multiselect.filter.zh-tw.js
│ │ ├── jquery.multiselect.filter.cs.js
│ │ ├── jquery.multiselect.filter.ja.js
│ │ ├── jquery.multiselect.filter.ru.js
│ │ ├── jquery.multiselect.filter.tr.js
│ │ ├── jquery.multiselect.filter.de.js
│ │ ├── jquery.multiselect.filter.fr.js
│ │ ├── jquery.multiselect.filter.pl.js
│ │ ├── jquery.multiselect.filter.br.js
│ │ ├── jquery.multiselect.filter.hu.js
│ │ ├── jquery.multiselect.filter.es.js
│ │ ├── jquery.multiselect.filter.it.js
│ │ ├── jquery.multiselect.zh-cn.js
│ │ ├── jquery.multiselect.zh-tw.js
│ │ ├── jquery.multiselect.cs.js
│ │ ├── jquery.multiselect.ja.js
│ │ ├── jquery.multiselect.de.js
│ │ ├── jquery.multiselect.tr.js
│ │ ├── jquery.multiselect.hu.js
│ │ ├── jquery.multiselect.pl.js
│ │ ├── jquery.multiselect.ru.js
│ │ ├── jquery.multiselect.br.js
│ │ ├── jquery.multiselect.es.js
│ │ ├── jquery.multiselect.fr.js
│ │ └── jquery.multiselect.it.js
│ ├── jquery.multiselect.filter.css
│ ├── .bower.json
│ ├── package.json
│ ├── demos
│ │ ├── assets
│ │ │ ├── style.css
│ │ │ ├── prettify.css
│ │ │ └── ba.hashchange.js
│ │ ├── enabledisable.htm
│ │ └── preselected.htm
│ ├── tests
│ │ ├── visual
│ │ │ ├── style.css
│ │ │ ├── formsubmission.htm
│ │ │ ├── formsubmission.php
│ │ │ └── formsubmission-single.php
│ │ └── unit
│ │ │ └── html.js
│ ├── MIT-LICENSE
│ ├── README.markdown
│ └── jquery.multiselect.css
└── unslider
│ ├── readme.md
│ ├── bower.json
│ ├── src
│ └── css
│ │ ├── unslider
│ │ ├── dots.less
│ │ └── reset.less
│ │ ├── variables.less
│ │ ├── unslider.less
│ │ └── unslider-dots.less
│ ├── dist
│ └── css
│ │ ├── unslider.css
│ │ └── unslider-dots.css
│ └── .bower.json
├── .gitignore
├── css
├── smoothness
│ └── images
│ │ ├── ui-icons_222222_256x240.png
│ │ ├── ui-icons_2e83ff_256x240.png
│ │ ├── ui-icons_454545_256x240.png
│ │ ├── ui-icons_888888_256x240.png
│ │ ├── ui-icons_cd0a0a_256x240.png
│ │ ├── ui-bg_flat_0_aaaaaa_40x100.png
│ │ ├── ui-bg_flat_75_ffffff_40x100.png
│ │ ├── ui-bg_glass_55_fbf9ee_1x400.png
│ │ ├── ui-bg_glass_65_ffffff_1x400.png
│ │ ├── ui-bg_glass_75_dadada_1x400.png
│ │ ├── ui-bg_glass_75_e6e6e6_1x400.png
│ │ ├── ui-bg_glass_95_fef1ec_1x400.png
│ │ └── ui-bg_highlight-soft_75_cccccc_1x100.png
├── locations.css
└── jquery.multiselect.css
├── .gitmodules
├── includes
├── gcal
│ ├── views
│ │ ├── page-settings-tab-gcal.php
│ │ ├── settings-gcal-general.php
│ │ ├── profile-gcal-not-connected.php
│ │ ├── settings-gcal-step-2.php
│ │ └── settings-gcal-button.php
│ └── class-app-gcal-logger.php
├── addons
│ ├── app-schedule-durations.php
│ ├── app-admin-export_date_range.php
│ ├── app-locations-location_support.php
│ ├── app-schedule-paddings.php
│ ├── app-admin-admin_permissions.php
│ ├── app-users-additional_fields.php
│ ├── app-locations-service_locations.php
│ ├── app-schedule-tetris.php
│ ├── app-locations-worker_locations.php
│ ├── app-schedule-show_scheduled_users.php
│ ├── app-post_types-worker_names.php
│ ├── app-emails-html_emails.php
│ ├── app-schedule-default_service.php
│ ├── app-admin-pending_count.php
│ ├── app-post_types-biography.php
│ ├── app-post_types-service_description.php
│ ├── app-users-limit_services_login.php
│ ├── app-mp-product_cart_appointments.php
│ ├── app-schedule-shared_resources.php
│ └── app-locations-locations_on_google_maps.php
├── external
│ ├── jquery-ui-multiselect-widget
│ │ ├── i18n
│ │ │ ├── jquery.multiselect.filter.zh-cn.js
│ │ │ ├── jquery.multiselect.filter.zh-tw.js
│ │ │ ├── jquery.multiselect.filter.cs.js
│ │ │ ├── jquery.multiselect.filter.ja.js
│ │ │ ├── jquery.multiselect.filter.de.js
│ │ │ ├── jquery.multiselect.filter.ru.js
│ │ │ ├── jquery.multiselect.filter.tr.js
│ │ │ ├── jquery.multiselect.filter.fr.js
│ │ │ ├── jquery.multiselect.filter.hu.js
│ │ │ ├── jquery.multiselect.filter.pl.js
│ │ │ ├── jquery.multiselect.filter.br.js
│ │ │ ├── jquery.multiselect.filter.es.js
│ │ │ ├── jquery.multiselect.filter.it.js
│ │ │ ├── jquery.multiselect.zh-cn.js
│ │ │ ├── jquery.multiselect.zh-tw.js
│ │ │ ├── jquery.multiselect.cs.js
│ │ │ ├── jquery.multiselect.ja.js
│ │ │ ├── jquery.multiselect.de.js
│ │ │ ├── jquery.multiselect.tr.js
│ │ │ ├── jquery.multiselect.hu.js
│ │ │ ├── jquery.multiselect.pl.js
│ │ │ ├── jquery.multiselect.ru.js
│ │ │ ├── jquery.multiselect.br.js
│ │ │ ├── jquery.multiselect.es.js
│ │ │ ├── jquery.multiselect.fr.js
│ │ │ └── jquery.multiselect.it.js
│ │ ├── jquery.multiselect.filter.css
│ │ └── jquery.multiselect.css
│ ├── unslider
│ │ └── css
│ │ │ ├── unslider.css
│ │ │ └── unslider-dots.css
│ ├── google
│ │ ├── Exception.php
│ │ ├── Auth
│ │ │ ├── Exception.php
│ │ │ ├── Abstract.php
│ │ │ └── LoginTicket.php
│ │ ├── Cache
│ │ │ ├── Exception.php
│ │ │ ├── Null.php
│ │ │ └── Abstract.php
│ │ ├── Logger
│ │ │ ├── Exception.php
│ │ │ └── Null.php
│ │ ├── Task
│ │ │ ├── Exception.php
│ │ │ └── Retryable.php
│ │ ├── Signer
│ │ │ └── Abstract.php
│ │ ├── Verifier
│ │ │ └── Abstract.php
│ │ ├── autoload.php
│ │ ├── Service.php
│ │ ├── Service
│ │ │ └── Cloudsearch.php
│ │ └── IO
│ │ │ └── Exception.php
│ └── twitteroauth
│ │ └── LICENSE
├── integration
│ ├── integration.php
│ └── class-app-divi.php
├── pro
│ ├── includes
│ │ └── addons
│ │ │ ├── app-emails-html_emails.php
│ │ │ └── lib
│ │ │ └── class-app-locations-list-table.php
│ └── class-app-pro.php
├── shortcodes
│ └── js
│ │ ├── app-services.js
│ │ └── my-appointments.js
├── class_app_timed_abstractions.php
└── sample-appointments-page.php
├── phpunit.xml.dist
├── tools
└── generate-changelog.sh
├── .travis.yml
├── humans.txt
├── bower.json
├── .distignore
├── js
├── eye.js
├── js-check.js
└── layout.js
├── tests
├── test-activate.php
├── test-shortcodes.php
├── test-gcal.php
├── addons
│ ├── test-addon-worker-locations.php
│ ├── test-addons.php
│ ├── test-addon-service-locations.php
│ ├── test-addon-paddings.php
│ └── test-addon-additional-fields.php
├── test-misc.php
├── admin
│ └── test-admin-addons.php
└── notifications
│ └── test-notifications-templates.php
├── bitbucket-pipelines.yml
└── assets
└── css
└── vendor
└── jquery.switch_button.css
/images/Thumbs.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/Thumbs.db
--------------------------------------------------------------------------------
/images/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/blank.gif
--------------------------------------------------------------------------------
/images/google.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/google.png
--------------------------------------------------------------------------------
/images/select.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/select.png
--------------------------------------------------------------------------------
/images/slider.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/slider.png
--------------------------------------------------------------------------------
/images/facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/facebook.png
--------------------------------------------------------------------------------
/images/general.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/general.png
--------------------------------------------------------------------------------
/images/menu_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/menu_icon.png
--------------------------------------------------------------------------------
/images/select2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/select2.png
--------------------------------------------------------------------------------
/images/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/twitter.png
--------------------------------------------------------------------------------
/images/waiting.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/waiting.gif
--------------------------------------------------------------------------------
/images/wordpress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/wordpress.png
--------------------------------------------------------------------------------
/images/custom_hex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_hex.png
--------------------------------------------------------------------------------
/images/gc_button1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gc_button1.gif
--------------------------------------------------------------------------------
/images/information.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/information.png
--------------------------------------------------------------------------------
/_src/admin/css/unslider.js:
--------------------------------------------------------------------------------
1 | // Import our unslider.css and bower unslider
2 | import './unslider.css';
3 |
--------------------------------------------------------------------------------
/images/app-sprite01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/app-sprite01.png
--------------------------------------------------------------------------------
/images/appointments.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/appointments.png
--------------------------------------------------------------------------------
/images/custom_hsb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_hsb_b.png
--------------------------------------------------------------------------------
/images/custom_hsb_h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_hsb_h.png
--------------------------------------------------------------------------------
/images/custom_hsb_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_hsb_s.png
--------------------------------------------------------------------------------
/images/custom_indic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_indic.gif
--------------------------------------------------------------------------------
/images/custom_rgb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_rgb_b.png
--------------------------------------------------------------------------------
/images/custom_rgb_g.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_rgb_g.png
--------------------------------------------------------------------------------
/images/custom_rgb_r.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_rgb_r.png
--------------------------------------------------------------------------------
/images/custom_submit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_submit.png
--------------------------------------------------------------------------------
/images/transactions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/transactions.png
--------------------------------------------------------------------------------
/images/colorpicker_hex.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_hex.png
--------------------------------------------------------------------------------
/images/large-greyscale.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/large-greyscale.png
--------------------------------------------------------------------------------
/admin/css/unslider.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"unslider.css","sourceRoot":""}
--------------------------------------------------------------------------------
/images/colorpicker_hsb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_hsb_b.png
--------------------------------------------------------------------------------
/images/colorpicker_hsb_h.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_hsb_h.png
--------------------------------------------------------------------------------
/images/colorpicker_hsb_s.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_hsb_s.png
--------------------------------------------------------------------------------
/images/colorpicker_indic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_indic.gif
--------------------------------------------------------------------------------
/images/colorpicker_overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_overlay.png
--------------------------------------------------------------------------------
/images/colorpicker_rgb_b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_rgb_b.png
--------------------------------------------------------------------------------
/images/colorpicker_rgb_g.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_rgb_g.png
--------------------------------------------------------------------------------
/images/colorpicker_rgb_r.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_rgb_r.png
--------------------------------------------------------------------------------
/images/colorpicker_select.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_select.gif
--------------------------------------------------------------------------------
/images/colorpicker_submit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_submit.png
--------------------------------------------------------------------------------
/images/custom_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/custom_background.png
--------------------------------------------------------------------------------
/wporg-assets/icon-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/icon-128x128.png
--------------------------------------------------------------------------------
/wporg-assets/icon-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/icon-256x256.png
--------------------------------------------------------------------------------
/wporg-assets/screenshot-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/screenshot-1.png
--------------------------------------------------------------------------------
/wporg-assets/screenshot-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/screenshot-2.jpg
--------------------------------------------------------------------------------
/wporg-assets/screenshot-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/screenshot-3.png
--------------------------------------------------------------------------------
/wporg-assets/screenshot-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/screenshot-4.png
--------------------------------------------------------------------------------
/wporg-assets/screenshot-5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/screenshot-5.jpg
--------------------------------------------------------------------------------
/bower_components/sweetalert/.gitignore:
--------------------------------------------------------------------------------
1 | *.codekit
2 | *.sass-cache
3 | *.DS_STORE
4 | node_modules
5 | bower_components
6 |
--------------------------------------------------------------------------------
/images/gcal-instructions-01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-01.png
--------------------------------------------------------------------------------
/images/gcal-instructions-02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-02.png
--------------------------------------------------------------------------------
/images/gcal-instructions-03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-03.png
--------------------------------------------------------------------------------
/images/gcal-instructions-04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-04.png
--------------------------------------------------------------------------------
/images/gcal-instructions-05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-05.png
--------------------------------------------------------------------------------
/images/gcal-instructions-06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-06.png
--------------------------------------------------------------------------------
/images/gcal-instructions-07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-07.png
--------------------------------------------------------------------------------
/images/gcal-instructions-08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-08.png
--------------------------------------------------------------------------------
/images/gcal-instructions-09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-09.png
--------------------------------------------------------------------------------
/images/gcal-instructions-10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/gcal-instructions-10.png
--------------------------------------------------------------------------------
/wporg-assets/banner-1544x500.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/banner-1544x500.png
--------------------------------------------------------------------------------
/wporg-assets/banner-772x250.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/wporg-assets/banner-772x250.png
--------------------------------------------------------------------------------
/images/colorpicker_background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/images/colorpicker_background.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/sweetalert.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/sweetalert.gif
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .DS_Store
3 | build/
4 | /vendor/
5 | tmp/
6 | .idea
7 | npm-debug.log
8 | log.log
9 | languages/*.mo
10 |
--------------------------------------------------------------------------------
/css/smoothness/images/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-icons_2e83ff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-icons_2e83ff_256x240.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-icons_454545_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-icons_454545_256x240.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-icons_888888_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-icons_888888_256x240.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-icons_cd0a0a_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-icons_cd0a0a_256x240.png
--------------------------------------------------------------------------------
/_src/admin/js/admin-gcal.dev.js:
--------------------------------------------------------------------------------
1 | jQuery( document ).ready( function( $ ) {
2 | $('.gcal-slider').unslider({
3 | nav: false
4 | });
5 | }( jQuery ));
--------------------------------------------------------------------------------
/admin/css/jquery-ui/images/ui-icons_444_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/admin/css/jquery-ui/images/ui-icons_444_256x240.png
--------------------------------------------------------------------------------
/admin/css/jquery-ui/images/ui-icons_555_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/admin/css/jquery-ui/images/ui-icons_555_256x240.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
--------------------------------------------------------------------------------
/admin/css/jquery-ui/images/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/admin/css/jquery-ui/images/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/admin/css/jquery-ui/images/ui-icons_23282D_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/admin/css/jquery-ui/images/ui-icons_23282D_256x240.png
--------------------------------------------------------------------------------
/admin/css/jquery-ui/images/ui-icons_32373C_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/admin/css/jquery-ui/images/ui-icons_32373C_256x240.png
--------------------------------------------------------------------------------
/admin/css/jquery-ui/images/ui-icons_ffffff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/admin/css/jquery-ui/images/ui-icons_ffffff_256x240.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/logo_big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/logo_big.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/vs_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/vs_icon.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/logo_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/logo_small.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/thumbs-up.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/thumbs-up.jpg
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/vs_icon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/vs_icon@2x.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/logo_big@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/logo_big@2x.png
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/logo_small@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/bower_components/sweetalert/example/images/logo_small@2x.png
--------------------------------------------------------------------------------
/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wpmudev/appointments/master/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "includes/external/wpmudev-dash"]
2 | path = includes/external/wpmudev-dash
3 | url = git@bitbucket.org:incsub/wpmudev-dashboard-notification.git
4 | branch = master
5 |
--------------------------------------------------------------------------------
/includes/gcal/views/page-settings-tab-gcal.php:
--------------------------------------------------------------------------------
1 | get_gcal_api() ) ) {
5 | $appointments->get_gcal_api()->admin->render_tab();
6 | }
--------------------------------------------------------------------------------
/bower_components/sweetalert/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "0.12"
4 | before script:
5 | - npm install -g gulp
6 | - npm install -g bower
7 | - bower install
8 | script: gulp test
9 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "predef": [
3 | "document",
4 | "window",
5 | "module",
6 | "define"
7 | ],
8 | "browser": true,
9 | "esnext": true,
10 | "validthis": true
11 | }
12 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/.editorconfig:
--------------------------------------------------------------------------------
1 | # editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | charset = utf-8
7 | end_of_line = lf
8 | indent_size = 2
9 | indent_style = space
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 |
--------------------------------------------------------------------------------
/includes/addons/app-schedule-durations.php:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 | ./tests/
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.filter.fr.js:
--------------------------------------------------------------------------------
1 | /* French initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Charles SANQUER (charles.sanquer@spyrit.net). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselectfilter.prototype.options, {
7 | label: "Filtre:",
8 | placeholder: "Entrer un mot clé"
9 | });
10 |
11 | })( jQuery );
12 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.filter.pl.js:
--------------------------------------------------------------------------------
1 | /* Polish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Tomasz Mazur (contact@tomaszmazur.eu). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselectfilter.prototype.options, {
7 | label: "Filtruj:",
8 | placeholder: "Wprowadź słowa kluczowe"
9 | });
10 |
11 | })( jQuery );
12 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/jquery.multiselect.filter.css:
--------------------------------------------------------------------------------
1 | .ui-multiselect-hasfilter ul { position:relative; top:2px }
2 | .ui-multiselect-filter { float:left; margin-right:10px; font-size:11px }
3 | .ui-multiselect-filter input { width:100px; font-size:10px; margin-left:5px; height:15px; padding:2px; border:1px solid #292929; -webkit-appearance:textfield; -webkit-box-sizing:content-box; }
4 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.filter.br.js:
--------------------------------------------------------------------------------
1 | /* Brazilian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Vinícius Fontoura Corrêa (vinusfc@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselectfilter.prototype.options, {
7 | label: "Filtro:",
8 | placeholder: "Entre com a palavra"
9 | });
10 |
11 | })( jQuery );
12 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.filter.hu.js:
--------------------------------------------------------------------------------
1 | /* Hungarian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Adam Fónagy (adam.fonagy@greenformatics.hu). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselectfilter.prototype.options, {
7 | label: "Keresés:",
8 | placeholder: "kulcsszó megadása"
9 | });
10 |
11 | })( jQuery );
12 |
--------------------------------------------------------------------------------
/includes/addons/app-post_types-biography.php:
--------------------------------------------------------------------------------
1 | $GIT_DIR/log.log
13 |
14 | echo "The log has been output to $GIT_DIR/log.log"
15 | exit 0
16 |
--------------------------------------------------------------------------------
/includes/addons/app-post_types-service_description.php:
--------------------------------------------------------------------------------
1 | MarketPress
9 | Author: WPMU DEV
10 | Free: true
11 | */
12 |
--------------------------------------------------------------------------------
/includes/addons/app-schedule-shared_resources.php:
--------------------------------------------------------------------------------
1 | Google Maps Plugin
9 | Author: WPMU DEV
10 | Free: true
11 | */
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.cs.js:
--------------------------------------------------------------------------------
1 | /* Czech initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Michi (michi.m@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Vybrat vše',
8 | uncheckAllText: 'Zrušit výběr',
9 | noneSelectedText: 'Nic není vybráno',
10 | selectedText: '# vybráno'
11 | });
12 |
13 | })( jQuery );
14 |
15 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.ja.js:
--------------------------------------------------------------------------------
1 | /* Japanese initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Daisuke (daisuketaniwaki@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'すべて選択',
8 | uncheckAllText: '選択解除',
9 | noneSelectedText: '選択してください',
10 | selectedText: '#つ選択中'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.cs.js:
--------------------------------------------------------------------------------
1 | /* Czech initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Michi (michi.m@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Vybrat vše',
8 | uncheckAllText: 'Zrušit výběr',
9 | noneSelectedText: 'Nic není vybráno',
10 | selectedText: '# vybráno'
11 | });
12 |
13 | })( jQuery );
14 |
15 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.ja.js:
--------------------------------------------------------------------------------
1 | /* Japanese initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Daisuke (daisuketaniwaki@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'すべて選択',
8 | uncheckAllText: '選択解除',
9 | noneSelectedText: '選択してください',
10 | selectedText: '#つ選択中'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.de.js:
--------------------------------------------------------------------------------
1 | /* German initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Sven Tatter (sven.tatter@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Alle auswählen',
8 | uncheckAllText: 'Alle abwählen',
9 | noneSelectedText: 'Nichts ausgewählt',
10 | selectedText: '# ausgewählt'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.tr.js:
--------------------------------------------------------------------------------
1 | /* Turkish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Yusuf Özer (realsby@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Tümünü seç',
8 | uncheckAllText: 'Tümünü sil',
9 | noneSelectedText: 'Seçenekleri belirleyin',
10 | selectedText: '# adet seçildi'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/humans.txt:
--------------------------------------------------------------------------------
1 | /* TEAM */
2 | Developer: Hakan Evin
3 | Contact:
4 | Twitter:
5 | Location:
6 |
7 | Developer: Ve Bailovity
8 | Contact: ve [at] incsub [dot] com
9 | Twitter: @vebailovity
10 | Location: Zrenjanin, Serbia
11 |
12 | Developer: Panos Lyraki
13 | Contact: panos [dot] lyraki [at] gmail [dot] com
14 | Twitter:
15 | Location:
16 |
17 | Developer: Marcin Pietrzak
18 | Contact: marcin [at] incsub [dot] com
19 | Twitter:
20 | Location: Poland
21 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.de.js:
--------------------------------------------------------------------------------
1 | /* German initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Sven Tatter (sven.tatter@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Alle auswählen',
8 | uncheckAllText: 'Alle abwählen',
9 | noneSelectedText: 'Nichts ausgewählt',
10 | selectedText: '# ausgewählt'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.tr.js:
--------------------------------------------------------------------------------
1 | /* Turkish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Yusuf Özer (realsby@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Tümünü seç',
8 | uncheckAllText: 'Tümünü sil',
9 | noneSelectedText: 'Seçenekleri belirleyin',
10 | selectedText: '# adet seçildi'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.hu.js:
--------------------------------------------------------------------------------
1 | /* Hungarian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Adam Fónagy (adam.fonagy@greenformatics.hu). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Mind kijelöl',
8 | uncheckAllText: 'Mind eltávolít',
9 | noneSelectedText: 'Nincs kijelölés',
10 | selectedText: '# kijelölve'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.pl.js:
--------------------------------------------------------------------------------
1 | /* Spanish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Tomasz Mazur (contact@tomaszmazur.eu). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Zaznacz wszystkie',
8 | uncheckAllText: 'Odznacz wszystkie',
9 | noneSelectedText: 'Wybierz opcje',
10 | selectedText: 'Zaznaczono #'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.ru.js:
--------------------------------------------------------------------------------
1 | /* Russian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Artem Packhomov (gorblnu4@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Отметить все',
8 | uncheckAllText: 'Снять отметку со всех',
9 | noneSelectedText: 'Выберите из списка',
10 | selectedText: 'Выбрано #'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.hu.js:
--------------------------------------------------------------------------------
1 | /* Hungarian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Adam Fónagy (adam.fonagy@greenformatics.hu). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Mind kijelöl',
8 | uncheckAllText: 'Mind eltávolít',
9 | noneSelectedText: 'Nincs kijelölés',
10 | selectedText: '# kijelölve'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.pl.js:
--------------------------------------------------------------------------------
1 | /* Spanish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Tomasz Mazur (contact@tomaszmazur.eu). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Zaznacz wszystkie',
8 | uncheckAllText: 'Odznacz wszystkie',
9 | noneSelectedText: 'Wybierz opcje',
10 | selectedText: 'Zaznaczono #'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.ru.js:
--------------------------------------------------------------------------------
1 | /* Russian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Artem Packhomov (gorblnu4@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Отметить все',
8 | uncheckAllText: 'Снять отметку со всех',
9 | noneSelectedText: 'Выберите из списка',
10 | selectedText: 'Выбрано #'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.br.js:
--------------------------------------------------------------------------------
1 | /* Brazilian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Vinícius Fontoura Corrêa (vinusfc@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Marcar todos',
8 | uncheckAllText: 'Desmarcar todos',
9 | noneSelectedText: 'Selecione as opções',
10 | selectedText: '# selecionado'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.es.js:
--------------------------------------------------------------------------------
1 | /* Spanish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Vinius Fontoura Correa(vinusfc@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Marca todas',
8 | uncheckAllText: 'Desmarque todas',
9 | noneSelectedText: 'Seleccione las opciones',
10 | selectedText: '# seleccionado'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.fr.js:
--------------------------------------------------------------------------------
1 | /* French initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Charles SANQUER (charles.sanquer@spyrit.net). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Tout cocher',
8 | uncheckAllText: 'Tout décocher',
9 | noneSelectedText: 'Sélectionner les options',
10 | selectedText: '# sélectionnés'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.br.js:
--------------------------------------------------------------------------------
1 | /* Brazilian initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Vinícius Fontoura Corrêa (vinusfc@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Marcar todos',
8 | uncheckAllText: 'Desmarcar todos',
9 | noneSelectedText: 'Selecione as opções',
10 | selectedText: '# selecionado'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.es.js:
--------------------------------------------------------------------------------
1 | /* Spanish initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Vinius Fontoura Correa(vinusfc@gmail.com). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Marca todas',
8 | uncheckAllText: 'Desmarque todas',
9 | noneSelectedText: 'Seleccione las opciones',
10 | selectedText: '# seleccionado'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.fr.js:
--------------------------------------------------------------------------------
1 | /* French initialisation for the jQuery UI multiselect plugin. */
2 | /* Written by Charles SANQUER (charles.sanquer@spyrit.net). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Tout cocher',
8 | uncheckAllText: 'Tout décocher',
9 | noneSelectedText: 'Selectionner les options',
10 | selectedText: '# selectionnés'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/i18n/jquery.multiselect.it.js:
--------------------------------------------------------------------------------
1 | /* Italian initialization for the jQuery UI multiselect plugin. */
2 | /* Written by Vincenzo Farruggia(mastropinguino@networky.net). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Seleziona tutto',
8 | uncheckAllText: 'Deseleziona tutto',
9 | noneSelectedText: 'Seleziona le opzioni',
10 | selectedText: '# selezionati'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/dev/gulpfile-wrap-template.js:
--------------------------------------------------------------------------------
1 | ;(function(window, document, undefined) {
2 | "use strict";
3 |
4 | <%= contents %>
5 |
6 | /*
7 | * Use SweetAlert with RequireJS
8 | */
9 |
10 | if (typeof define === 'function' && define.amd) {
11 | define(function () {
12 | return sweetAlert;
13 | });
14 | } else if (typeof module !== 'undefined' && module.exports) {
15 | module.exports = sweetAlert;
16 | }
17 |
18 | })(window, document);
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/i18n/jquery.multiselect.it.js:
--------------------------------------------------------------------------------
1 | /* Italian initialization for the jQuery UI multiselect plugin. */
2 | /* Written by Vincenzo Farruggia(mastropinguino@networky.net). */
3 |
4 | (function ( $ ) {
5 |
6 | $.extend($.ech.multiselect.prototype.options, {
7 | checkAllText: 'Seleziona tutto',
8 | uncheckAllText: 'Deseleziona tutto',
9 | noneSelectedText: 'Seleziona le opzioni',
10 | selectedText: '# selezionati'
11 | });
12 |
13 | })( jQuery );
14 |
--------------------------------------------------------------------------------
/includes/gcal/class-app-gcal-logger.php:
--------------------------------------------------------------------------------
1 | dateFormat = 'Y-m-d H:i:s';
9 | }
10 |
11 | /**
12 | * {@inheritdoc}
13 | */
14 | protected function write( $message ) {
15 | if ( defined( 'WP_DEBUG_LOG' ) && WP_DEBUG_LOG ) {
16 | error_log( '[Appointments+] ' . $message );
17 | }
18 | }
19 |
20 | }
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "appointments",
3 | "description": "",
4 | "main": "appointments.php",
5 | "authors": [
6 | "WPMU DEV"
7 | ],
8 | "license": "GPLv2",
9 | "homepage": "",
10 | "ignore": [
11 | "**/.*",
12 | "node_modules",
13 | "bower_components",
14 | "test",
15 | "tests"
16 | ],
17 | "dependencies": {
18 | "sweetalert": "^1.1.3",
19 | "jquery-ui-multiselect-widget": "^2.0.1",
20 | "unslider": "https://github.com/slventures/unslider.git"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/.distignore:
--------------------------------------------------------------------------------
1 | # A set of files you probably don't want in your WordPress.org distribution
2 | .distignore
3 | .editorconfig
4 | .git
5 | .gitignore
6 | .gitlab-ci.yml
7 | .travis.yml
8 | .DS_Store
9 | Thumbs.db
10 | behat.yml
11 | bin
12 | circle.yml
13 | composer.json
14 | composer.lock
15 | Gruntfile.js
16 | package.json
17 | phpunit.xml
18 | phpunit.xml.dist
19 | multisite.xml
20 | multisite.xml.dist
21 | phpcs.ruleset.xml
22 | README.md
23 | wp-cli.local.yml
24 | tests
25 | vendor
26 | node_modules
27 | *.zip
28 | *.tar.gz
29 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery-ui-multiselect-widget",
3 | "homepage": "https://github.com/ehynds/jquery-ui-multiselect-widget",
4 | "version": "2.0.2",
5 | "_release": "2.0.2",
6 | "_resolution": {
7 | "type": "version",
8 | "tag": "v2.0.2",
9 | "commit": "d51756ab11912a28ad23e5405a577c5924cb8092"
10 | },
11 | "_source": "https://github.com/ehynds/jquery-ui-multiselect-widget.git",
12 | "_target": "^2.0.1",
13 | "_originalSource": "jquery-ui-multiselect-widget"
14 | }
--------------------------------------------------------------------------------
/bower_components/unslider/readme.md:
--------------------------------------------------------------------------------
1 | Unslider
2 | ========
3 |
4 | [](https://gitter.im/idiot/unslider?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
5 |
6 | The easiest way to get a simple slider up and running in seconds. All you need
7 | is some valid markup, jQuery and some extra CSS, and Unslider can do the rest.
8 |
9 | Check the docs out: http://unslider.com
10 |
11 | Licensed under the [WTFPL](http://www.wtfpl.net).
--------------------------------------------------------------------------------
/bower_components/unslider/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "unslider",
3 | "version": "2.0.3",
4 | "homepage": "http://unslider.com",
5 | "authors": [
6 | "Visual Idiot "
7 | ],
8 | "description": "The simplest little slider.",
9 | "main": "src/js/unslider.js",
10 | "keywords": [
11 | "slider",
12 | "jquery",
13 | "unslider",
14 | "carousel"
15 | ],
16 | "license": "WTFPL",
17 | "ignore": [
18 | "**/.*",
19 | "node_modules",
20 | "bower_components",
21 | "test",
22 | "tests"
23 | ]
24 | }
25 |
--------------------------------------------------------------------------------
/bower_components/unslider/src/css/unslider/dots.less:
--------------------------------------------------------------------------------
1 | .unslider-nav {
2 | ol {
3 | list-style: none;
4 | text-align: center;
5 |
6 | li {
7 | display: inline-block;
8 | width: 6px;
9 | height: 6px;
10 | margin: 0 4px;
11 |
12 | background: transparent;
13 | border-radius: 5px;
14 |
15 | overflow: hidden;
16 | text-indent: -999em;
17 |
18 | border: 2px solid @unslider-dot-colour;
19 |
20 | cursor: pointer;
21 |
22 | &.unslider-active {
23 | background: @unslider-dot-colour;
24 | cursor: default;
25 | }
26 | }
27 | }
28 | }
--------------------------------------------------------------------------------
/includes/external/unslider/css/unslider.css:
--------------------------------------------------------------------------------
1 | .unslider{overflow:auto;margin:0;padding:0}.unslider-wrap{position:relative}.unslider-wrap.unslider-carousel>li{float:left}.unslider-vertical>ul{height:100%}.unslider-vertical li{float:none;width:100%}.unslider-fade{position:relative}.unslider-fade .unslider-wrap li{position:absolute;left:0;top:0;right:0;z-index:8}.unslider-fade .unslider-wrap li.unslider-active{z-index:10}.unslider li,.unslider ol,.unslider ul{list-style:none;margin:0;padding:0;border:none}.unslider-arrow{position:absolute;left:20px;z-index:2;cursor:pointer}.unslider-arrow.next{left:auto;right:20px}
--------------------------------------------------------------------------------
/bower_components/unslider/dist/css/unslider.css:
--------------------------------------------------------------------------------
1 | .unslider{overflow:auto;margin:0;padding:0}.unslider-wrap{position:relative}.unslider-wrap.unslider-carousel>li{float:left}.unslider-vertical>ul{height:100%}.unslider-vertical li{float:none;width:100%}.unslider-fade{position:relative}.unslider-fade .unslider-wrap li{position:absolute;left:0;top:0;right:0;z-index:8}.unslider-fade .unslider-wrap li.unslider-active{z-index:10}.unslider li,.unslider ol,.unslider ul{list-style:none;margin:0;padding:0;border:none}.unslider-arrow{position:absolute;left:20px;z-index:2;cursor:pointer}.unslider-arrow.next{left:auto;right:20px}
--------------------------------------------------------------------------------
/includes/integration/integration.php:
--------------------------------------------------------------------------------
1 | (http://tristanedwards.me)"
6 | ],
7 | "description": "A beautiful replacement for JavaScript's alert.",
8 | "main": [
9 | "dist/sweetalert.min.js",
10 | "dist/sweetalert.css"
11 | ],
12 | "keywords": [
13 | "alert",
14 | "modal"
15 | ],
16 | "repository": {
17 | "type": "git",
18 | "url": "git@github.com:t4t5/sweetalert.git"
19 | },
20 | "license": "MIT",
21 | "devDependencies": {
22 | "qunit": "~1.18.0",
23 | "jquery": "~2.1.4"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/bower_components/unslider/src/css/unslider-dots.less:
--------------------------------------------------------------------------------
1 | /**
2 | * Here's where everything gets included. You don't need
3 | * to change anything here, and doing so might break
4 | * stuff. Here be dragons and all that.
5 | */
6 | @import 'variables';
7 | @unslider-dot-navigation: true;
8 |
9 | // Unfortunately, LESS isn't great at conditionals
10 | .use-dots() when (@unslider-dot-navigation = true) { @import 'unslider/dots'; }
11 | .use-dots();
12 |
13 | // You can also import dots directly yourself to use
14 | // in a more specific selector, like so:
15 | // #demo {
16 | // .use-dots() when (@unslider-dot-navigation = true) { @import 'unslider/dots'; }
17 | // .use-dots();
18 | // }
--------------------------------------------------------------------------------
/bower_components/sweetalert/dev/modules/default-params.js:
--------------------------------------------------------------------------------
1 | var defaultParams = {
2 | title: '',
3 | text: '',
4 | type: null,
5 | allowOutsideClick: false,
6 | showConfirmButton: true,
7 | showCancelButton: false,
8 | closeOnConfirm: true,
9 | closeOnCancel: true,
10 | confirmButtonText: 'OK',
11 | confirmButtonColor: '#8CD4F5',
12 | cancelButtonText: 'Cancel',
13 | imageUrl: null,
14 | imageSize: null,
15 | timer: null,
16 | customClass: '',
17 | html: false,
18 | animation: true,
19 | allowEscapeKey: true,
20 | inputType: 'text',
21 | inputPlaceholder: '',
22 | inputValue: '',
23 | showLoaderOnConfirm: false
24 | };
25 |
26 | export default defaultParams;
27 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jquery-ui-multiselect-widget",
3 | "description": "MultiSelect progessively enhances an ordinary multiple select control into elegant drop down list of checkboxes, stylable with ThemeRoller.",
4 | "version": "2.0.2",
5 | "license": "MIT or GPL-2.0",
6 | "author": "Eric Hynds",
7 | "contributors": [
8 | {
9 | "name": "Micheal"
10 | }, {
11 | "name": "AB Zainuddin",
12 | "email": "burhan@codeyellow.nl"
13 | }
14 | ],
15 | "repository": {
16 | "type": "git",
17 | "url": "https://github.com/ehynds/jquery-ui-multiselect-widget"
18 | },
19 | "main": "src/jquery.multiselect.js",
20 | "dependencies": {},
21 | "devDependencies": {}
22 | }
23 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/dev/ie9.css:
--------------------------------------------------------------------------------
1 | /* Internet Explorer 9 has some special quirks that are fixed here */
2 | /* The icons are not animated. */
3 | /* This file is automatically merged into sweet-alert.min.js through Gulp */
4 |
5 | /* Error icon */
6 | .sweet-alert .sa-icon.sa-error .sa-line.sa-left {
7 | -ms-transform: rotate(45deg)\9;
8 | }
9 | .sweet-alert .sa-icon.sa-error .sa-line.sa-right {
10 | -ms-transform: rotate(-45deg)\9;
11 | }
12 |
13 |
14 | /* Success icon */
15 | .sweet-alert .sa-icon.sa-success {
16 | border-color: transparent\9;
17 | }
18 | .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {
19 | -ms-transform: rotate(45deg)\9;
20 | }
21 | .sweet-alert .sa-icon.sa-success .sa-line.sa-long {
22 | -ms-transform: rotate(-45deg)\9;
23 | }
--------------------------------------------------------------------------------
/includes/external/google/Exception.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/tests/test-activate.php:
--------------------------------------------------------------------------------
1 | prefix . 'app_appointments',
15 | $wpdb->prefix . 'app_appointmentmeta',
16 | $wpdb->prefix . 'app_transactions',
17 | $wpdb->prefix . 'app_working_hours',
18 | $wpdb->prefix . 'app_exceptions',
19 | $wpdb->prefix . 'app_services',
20 | $wpdb->prefix . 'app_workers',
21 | $wpdb->prefix . 'app_cache'
22 | );
23 |
24 | foreach ( $tables as $table ) {
25 | $results = $wpdb->get_results( "DESCRIBE $table" );
26 | $this->assertNotEmpty( $results );
27 | }
28 |
29 | }
30 |
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/admin/js/admin-edit.js:
--------------------------------------------------------------------------------
1 | !function(e){function n(o){if(t[o])return t[o].exports;var r=t[o]={i:o,l:!1,exports:{}};return e[o].call(r.exports,r,r.exports,n),r.l=!0,r.exports}var t={};n.m=e,n.c=t,n.i=function(e){return e},n.d=function(e,t,o){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:o})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},n.p="",n(n.s=1)}([,function(e,n){jQuery(document).ready(function(e){console.log("aa"),console.log(e(".wp-list-table.services .edit")),e(".wp-list-table.services .edit").on("click",function(){console.log(this),console.log(e(this)),e("ul.subsubsub a").removeClass("current")})})}]);
2 | //# sourceMappingURL=admin-edit.js.map
--------------------------------------------------------------------------------
/css/locations.css:
--------------------------------------------------------------------------------
1 | #app-locations-new_location {
2 | width: 80%;
3 | max-width: 400px;
4 | margin: 0 auto;
5 | padding: 1em;
6 | overflow: hidden;
7 |
8 | -moz-box-shadow: 0 0 8px #aaa;
9 | -webkit-box-shadow: 0 0 8px #aaa;
10 | box-shadow: 0 0 8px #aaa;
11 | }
12 | #app-locations-new_location label {
13 | display: block;
14 | margin-bottom: 1em;
15 | }
16 | #app-locations-new_location input[type="text"] {
17 | width: 100%;
18 | }
19 |
20 | #app-locations-create_location {
21 | float: left;
22 | }
23 | #app-locations-cancel_location {
24 | float: right;
25 | }
26 |
27 | #app-locations-list li {
28 | padding: 5px 0;
29 | }
30 |
31 | /* Util */
32 | .app-hspacer {
33 | padding: 0 1.5em;
34 | color: #aaa;
35 | }
36 | .app-inline_help {
37 | color: #999;
38 | font-size: .75em;
39 | }
--------------------------------------------------------------------------------
/includes/pro/includes/addons/app-emails-html_emails.php:
--------------------------------------------------------------------------------
1 | _add_hooks();
18 | }
19 |
20 | private function _add_hooks () {
21 | add_filter('app-emails-content_type', array($this, 'switch_content_type'));
22 | }
23 |
24 | public function switch_content_type () {
25 | return 'text/html';
26 | }
27 | }
28 | App_Emails_HtmlEmails::serve();
--------------------------------------------------------------------------------
/bower_components/sweetalert/test/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Tests
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/includes/gcal/views/profile-gcal-not-connected.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
17 |
18 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/lib/modules/default-params.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, '__esModule', {
4 | value: true
5 | });
6 | var defaultParams = {
7 | title: '',
8 | text: '',
9 | type: null,
10 | allowOutsideClick: false,
11 | showConfirmButton: true,
12 | showCancelButton: false,
13 | closeOnConfirm: true,
14 | closeOnCancel: true,
15 | confirmButtonText: 'OK',
16 | confirmButtonColor: '#8CD4F5',
17 | cancelButtonText: 'Cancel',
18 | imageUrl: null,
19 | imageSize: null,
20 | timer: null,
21 | customClass: '',
22 | html: false,
23 | animation: true,
24 | allowEscapeKey: true,
25 | inputType: 'text',
26 | inputPlaceholder: '',
27 | inputValue: '',
28 | showLoaderOnConfirm: false
29 | };
30 |
31 | exports['default'] = defaultParams;
32 | module.exports = exports['default'];
--------------------------------------------------------------------------------
/tests/test-shortcodes.php:
--------------------------------------------------------------------------------
1 | assertArrayHasKey( $shortcode, $shortcode_tags, sprintf( 'Shortcode %s is not registered', $shortcode ) );
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-services.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
9 |
10 |
11 | $name ) : ?>
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/admin/views/user-profile-my-appointments.php:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
23 |
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-workers-section-workers.php:
--------------------------------------------------------------------------------
1 | There must be at least one service defined. Capacity is the number of customers that can take the service at the same time. Enter 0 for no specific limit (Limited to number of service providers, or to 1 if no service provider is defined for that service). Price is only required if you request payment to accept appointments. You can define a description page for the service you are providing.', 'appointments' ) ?>
2 |
10 |
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-services-section-services.php:
--------------------------------------------------------------------------------
1 | There must be at least one service defined. Capacity is the number of customers that can take the service at the same time. Enter 0 for no specific limit (Limited to number of service providers, or to 1 if no service provider is defined for that service). Price is only required if you request payment to accept appointments. You can define a description page for the service you are providing.', 'appointments' ) ?>
2 |
10 |
--------------------------------------------------------------------------------
/bower_components/unslider/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "unslider",
3 | "homepage": "http://unslider.com",
4 | "authors": [
5 | "Visual Idiot "
6 | ],
7 | "description": "The simplest little slider.",
8 | "main": "src/js/unslider.js",
9 | "keywords": [
10 | "slider",
11 | "jquery",
12 | "unslider",
13 | "carousel"
14 | ],
15 | "license": "WTFPL",
16 | "ignore": [
17 | "**/.*",
18 | "node_modules",
19 | "bower_components",
20 | "test",
21 | "tests"
22 | ],
23 | "_release": "365b8e16da",
24 | "_resolution": {
25 | "type": "branch",
26 | "branch": "master",
27 | "commit": "365b8e16daf57b0a1496fca1b18f008a52fd47eb"
28 | },
29 | "_source": "https://github.com/slventures/unslider.git",
30 | "_target": "*",
31 | "_originalSource": "https://github.com/slventures/unslider.git"
32 | }
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/demos/assets/prettify.css:
--------------------------------------------------------------------------------
1 | /* Pretty printing styles. Used with prettify.js. */
2 |
3 | .str { color: #080; }
4 | .kwd { color: #008; }
5 | .com { color: #800; }
6 | .typ { color: #606; }
7 | .lit { color: #066; }
8 | .pun { color: #660; }
9 | .pln { color: #000; }
10 | .tag { color: #008; }
11 | .atn { color: #606; }
12 | .atv { color: #080; }
13 | .dec { color: #606; }
14 | pre.prettyprint { padding: 5px; border:1px solid #d2d2d2; background:#f5f5f5 }
15 |
16 | @media print {
17 | .str { color: #060; }
18 | .kwd { color: #006; font-weight: bold; }
19 | .com { color: #600; font-style: italic; }
20 | .typ { color: #404; font-weight: bold; }
21 | .lit { color: #044; }
22 | .pun { color: #440; }
23 | .pln { color: #000; }
24 | .tag { color: #006; font-weight: bold; }
25 | .atn { color: #404; }
26 | .atv { color: #060; }
27 | }
28 |
--------------------------------------------------------------------------------
/includes/external/google/Auth/Exception.php:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
22 |
--------------------------------------------------------------------------------
/tests/test-gcal.php:
--------------------------------------------------------------------------------
1 | _set_gcal_options();
13 |
14 | $api = $appointments->get_gcal_api();
15 | $this->assertTrue( $api->is_connected() );
16 | }
17 |
18 | function _set_gcal_options() {
19 | add_filter( 'appointments_gcal_access_token', array( $this, '_get_api_token' ) );
20 | $options = appointments_get_options();
21 | $options['gcal_access_code'] = 'access-code';
22 | $options['gcal_client_id'] = 'client-id';
23 | $options['gcal_client_secret'] = 'client-secret';
24 | appointments_update_options( $options );
25 | }
26 |
27 | function _get_api_token() {
28 | $token = new stdClass();
29 | $token->access_token = 'access-token';
30 | return json_encode( $token );
31 | }
32 |
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-log.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | uploads_dir ) ) {
6 | if ( file_exists( $appointments->log_file ) )
7 | echo nl2br( file_get_contents( $appointments->log_file ) );
8 | else
9 | echo __( 'There are no log records yet.', 'appointments' );
10 | }
11 | else
12 | echo __( 'Uploads directory is not writable.', 'appointments' );
13 | ?>
14 |
15 |
16 |
17 |
20 |
21 |
--------------------------------------------------------------------------------
/includes/external/unslider/css/unslider-dots.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Here's where everything gets included. You don't need
3 | * to change anything here, and doing so might break
4 | * stuff. Here be dragons and all that.
5 | */
6 | /**
7 | * Default variables
8 | *
9 | * While these can be set with JavaScript, it's probably
10 | * better and faster to just set them here, compile to
11 | * CSS and include that instead to use some of that
12 | * hardware-accelerated goodness.
13 | */
14 | .unslider-nav ol {
15 | list-style: none;
16 | text-align: center;
17 | }
18 | .unslider-nav ol li {
19 | display: inline-block;
20 | width: 6px;
21 | height: 6px;
22 | margin: 0 4px;
23 | background: transparent;
24 | border-radius: 5px;
25 | overflow: hidden;
26 | text-indent: -999em;
27 | border: 2px solid #fff;
28 | cursor: pointer;
29 | }
30 | .unslider-nav ol li.unslider-active {
31 | background: #fff;
32 | cursor: default;
33 | }
34 |
--------------------------------------------------------------------------------
/bitbucket-pipelines.yml:
--------------------------------------------------------------------------------
1 | # This is a sample build configuration for PHP.
2 | # Check our guides at https://confluence.atlassian.com/x/VYk8Lw for more examples.
3 | # Only use spaces to indent your .yml configuration.
4 | # -----
5 | # You can specify a custom docker image from Docker Hub as your build environment. https://hub.docker.com/r/dockunit/prebuilt-images/tags/
6 | image: incsub/wp-test-env
7 |
8 | pipelines:
9 | default:
10 | - step:
11 | script: # Modify the commands below to build your repository.
12 | - mkdir -p ~/.ssh
13 | - (umask 077 ; echo $PIPELINES_SSH_KEY | base64 --decode > ~/.ssh/id_rsa)
14 | - ssh-keyscan -t rsa -H bitbucket.org >> ~/.ssh/known_hosts
15 | - git submodule update --init --recursive
16 | - service mysql start
17 | - bash bin/install-wp-tests.sh wordpress_test root '' localhost latest
18 | - phpunit-multi 5.3,5.6,7.0 #runs phpunit against passed php versions
--------------------------------------------------------------------------------
/bower_components/unslider/dist/css/unslider-dots.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Here's where everything gets included. You don't need
3 | * to change anything here, and doing so might break
4 | * stuff. Here be dragons and all that.
5 | */
6 | /**
7 | * Default variables
8 | *
9 | * While these can be set with JavaScript, it's probably
10 | * better and faster to just set them here, compile to
11 | * CSS and include that instead to use some of that
12 | * hardware-accelerated goodness.
13 | */
14 | .unslider-nav ol {
15 | list-style: none;
16 | text-align: center;
17 | }
18 | .unslider-nav ol li {
19 | display: inline-block;
20 | width: 6px;
21 | height: 6px;
22 | margin: 0 4px;
23 | background: transparent;
24 | border-radius: 5px;
25 | overflow: hidden;
26 | text-indent: -999em;
27 | border: 2px solid #fff;
28 | cursor: pointer;
29 | }
30 | .unslider-nav ol li.unslider-active {
31 | background: #fff;
32 | cursor: default;
33 | }
34 |
--------------------------------------------------------------------------------
/assets/css/vendor/jquery.switch_button.css:
--------------------------------------------------------------------------------
1 | .switch-button-label {
2 | float: left;
3 |
4 | font-size: 10pt;
5 | cursor: pointer;
6 | }
7 |
8 | .switch-button-label.off {
9 | color: #adadad;
10 | }
11 |
12 | .switch-button-label.on {
13 | color: #0088cc;
14 | }
15 |
16 | .switch-button-background {
17 | float: left;
18 | position: relative;
19 |
20 | background: #ccc;
21 | border: 1px solid #aaa;
22 |
23 | margin: 1px 10px;
24 |
25 | -webkit-border-radius: 4px;
26 | -moz-border-radius: 4px;
27 | border-radius: 4px;
28 |
29 | cursor: pointer;
30 | }
31 | .switch-button-background.checked {
32 | background: #46b450;
33 | }
34 |
35 | .switch-button-button {
36 | position: absolute;
37 |
38 | left: -1px;
39 | top : -1px;
40 |
41 | background: #fafafa;
42 | border: 1px solid #aaa;
43 |
44 | -webkit-border-radius: 4px;
45 | -moz-border-radius: 4px;
46 | border-radius: 4px;
47 | }
48 |
--------------------------------------------------------------------------------
/includes/external/google/Signer/Abstract.php:
--------------------------------------------------------------------------------
1 |
22 | */
23 | abstract class Google_Signer_Abstract
24 | {
25 | /**
26 | * Signs data, returns the signature as binary data.
27 | */
28 | abstract public function sign($data);
29 | }
30 |
--------------------------------------------------------------------------------
/admin/css/unslider.css:
--------------------------------------------------------------------------------
1 | .unslider{max-width:700px;position:relative;overflow:visible;margin-bottom:50px;border:1px solid #adadad}.unslider-wrap li p{padding:1em 20px;margin:0;background:#14485f;color:#fff;min-height:45px}.unslider-wrap li p a{color:#fff;font-weight:700}.unslider-arrow{display:block;width:32px;height:32px;top:50%;right:-50px;left:auto;margin-top:-16px;overflow:hidden;background:rgba(0,0,0,.2) no-repeat 50% 50%;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAQAAABuQZ3IAAAAi0lEQVR4AU3OISBEQQBAwS0AACS9NxqQgCZpkiYBVddFvWhAAUABAPQCAGC4g/0vTnrBqCfDIZl70J+kMUBPpEwT4FNXxBxz4F1HxHyr4EVTxBLb4EFNxEon4CJSlVNw9AcV9sC16h8osgke1P1ArgXwouVvdQq86ww/GQefusNf7kBviBlxpT8k+gL/Wox4r1d4MwAAAABJRU5ErkJggg==");background-size:7px 11px;border-radius:32px;text-indent:-999em;opacity:.8;transition:opacity .2s}.unslider-arrow:hover{opacity:1}.unslider-arrow.next{right:20px}.unslider-arrow.prev{-ms-transform:rotate(-180deg);transform:rotate(-180deg);left:20px}
2 | /*# sourceMappingURL=unslider.css.map*/
--------------------------------------------------------------------------------
/bower_components/sweetalert/.bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sweetalert",
3 | "homepage": "http://tristanedwards.me/sweetalert",
4 | "authors": [
5 | "Tristan Edwards (http://tristanedwards.me)"
6 | ],
7 | "description": "A beautiful replacement for JavaScript's alert.",
8 | "main": [
9 | "dist/sweetalert.min.js",
10 | "dist/sweetalert.css"
11 | ],
12 | "keywords": [
13 | "alert",
14 | "modal"
15 | ],
16 | "repository": {
17 | "type": "git",
18 | "url": "git@github.com:t4t5/sweetalert.git"
19 | },
20 | "license": "MIT",
21 | "devDependencies": {
22 | "qunit": "~1.18.0",
23 | "jquery": "~2.1.4"
24 | },
25 | "version": "1.1.3",
26 | "_release": "1.1.3",
27 | "_resolution": {
28 | "type": "version",
29 | "tag": "v1.1.3",
30 | "commit": "1228f1e0a7ccda1f445224f3945867b4fc1234e5"
31 | },
32 | "_source": "https://github.com/t4t5/sweetalert.git",
33 | "_target": "^1.1.3",
34 | "_originalSource": "sweetalert"
35 | }
--------------------------------------------------------------------------------
/includes/external/google/Verifier/Abstract.php:
--------------------------------------------------------------------------------
1 |
22 | */
23 | abstract class Google_Verifier_Abstract
24 | {
25 | /**
26 | * Checks a signature, returns true if the signature is correct,
27 | * false otherwise.
28 | */
29 | abstract public function verify($data, $signature);
30 | }
31 |
--------------------------------------------------------------------------------
/includes/gcal/views/settings-gcal-step-2.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/includes/integration/class-app-divi.php:
--------------------------------------------------------------------------------
1 | is_divi_active() ) {
26 | $class .= ' et_smooth_scroll_disabled';
27 | }
28 |
29 | return $class;
30 | }
31 |
32 | }
33 |
34 | new Appointments_Integrations_Divi();
35 |
--------------------------------------------------------------------------------
/tests/addons/test-addon-worker-locations.php:
--------------------------------------------------------------------------------
1 | load_addon( 'app-locations-location_support' );
11 | $this->load_addon( 'app-locations-worker_locations' );
12 |
13 | $locations_class = App_Locations_LocationsWorker::serve();
14 | $locations_class->initialize();
15 | }
16 |
17 | function test_set_location_when_adding_a_worker() {
18 |
19 | $args = array(
20 | 'address' => 'Location Address'
21 | );
22 | $location_id = appointments_insert_location( $args );
23 |
24 | $_POST['worker_location'] = $location_id;
25 |
26 | $worker_id = $this->factory->worker->create_object( array( 'user_email' => 'worker@email.dev' ) );
27 |
28 | /** @var App_Locations_WorkerLocations $addon */
29 | $worker_location = App_Locations_WorkerLocations::worker_to_location_id( $worker_id );
30 |
31 | $this->assertEquals( $worker_location, $location_id );
32 | }
33 |
34 | }
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-main.php:
--------------------------------------------------------------------------------
1 | time_base();
6 | $min_time_setting = isset( $options["min_time"] ) ? $options["min_time"] : '';
7 | ?>
8 |
9 |
10 |
--------------------------------------------------------------------------------
/tests/addons/test-addons.php:
--------------------------------------------------------------------------------
1 | addons_loader->get_active_addons();
13 | foreach ( $loaded as $addon ) {
14 | Appointments_Addon::deactivate_addon( $addon );
15 | }
16 | }
17 | function test_activate_addon() {
18 | $appointments = appointments();
19 |
20 | Appointments_Addon::activate_addon( 'app-users-limit_services_login' );
21 | $this->assertContains( 'app-users-limit_services_login', $appointments->addons_loader->get_active_addons() );
22 | }
23 |
24 | function test_deactivate_addon() {
25 | $appointments = appointments();
26 |
27 | Appointments_Addon::activate_addon( 'app-users-limit_services_login' );
28 | Appointments_Addon::deactivate_addon( 'app-users-limit_services_login' );
29 |
30 | $this->assertNotContains( 'app-users-limit_services_login', $appointments->addons_loader->get_active_addons() );
31 | }
32 | }
--------------------------------------------------------------------------------
/admin/tinymce-shortcodes-i18n.php:
--------------------------------------------------------------------------------
1 | shortcodes );
6 |
7 | $strings->label = esc_js( __( 'Appointments', 'appointments' ) );
8 | $strings->shortcodes = new stdClass();
9 | foreach ( $registered_shortcodes as $shortcode ) {
10 | $instance = App_Shortcodes::get_shortcode_instance( $shortcode );
11 | if ( $instance && $instance->name ) {
12 | $strings->shortcodes->$shortcode = new stdClass();
13 | $_defaults = $instance->get_defaults();
14 | $defaults = array();
15 | foreach ( $_defaults as $key => $default ) {
16 | if ( isset( $default['type'] ) ) {
17 | $defaults[ $key ] = $default;
18 | }
19 | }
20 | $strings->shortcodes->$shortcode->defaults = $defaults;
21 | $strings->shortcodes->$shortcode->name = $instance->name;
22 | $strings->shortcodes->$shortcode->shortcode = $shortcode;
23 | }
24 | }
25 | $strings = wp_json_encode( $strings );
26 |
27 | $strings = 'tinyMCE.addI18n({' . _WP_Editors::$mce_locale . ': { appointments_shortcodes: ' . $strings . '}});';
--------------------------------------------------------------------------------
/bower_components/sweetalert/example/images/te-logo-small.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | te-logo-small
5 | Created with Sketch.
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/MIT-LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2011 Eric Hynds
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/admin/js/switch-button.js:
--------------------------------------------------------------------------------
1 | !function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={i:o,l:!1,exports:{}};return t[o].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,o){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:o})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=5)}({5:function(t,e){jQuery(window.document).ready(function(){"use strict";if(jQuery.fn.switchButton){var t=function(){jQuery(".appointments-settings .switch-button").each(function(){var t=jQuery(this).data("slave");if(t){var e=jQuery(".appointments-settings ."+t);jQuery(".switch-button-background",jQuery(this).closest("td")).hasClass("checked")?e.show():e.hide()}})};jQuery(".appointments-settings .switch-button").each(function(){var e={checked:jQuery(this).checked,on_label:jQuery(this).data("on")||switch_button.labels.label_on,off_label:jQuery(this).data("off")||switch_button.labels.label_off,on_callback:t,off_callback:t};jQuery(this).switchButton(e)})}})}});
2 | //# sourceMappingURL=switch-button.js.map
--------------------------------------------------------------------------------
/bower_components/sweetalert/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Tristan Edwards
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-addons.php:
--------------------------------------------------------------------------------
1 | prepare_items();
9 | ?>
10 |
11 |
14 |
15 |
44 |
--------------------------------------------------------------------------------
/includes/external/google/autoload.php:
--------------------------------------------------------------------------------
1 | ').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);
10 |
--------------------------------------------------------------------------------
/admin/js/admin-multidatepicker.js:
--------------------------------------------------------------------------------
1 | !function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=2)}({2:function(t,e){var n=function(t){function e(t){var e=new String(t);return 1==e.length&&(e="0"+e),e}var n,r,o=[],u={init:function(t){var u=this,a={dateFormat:"yy-mm-dd",numberOfMonths:2};a.onSelect=function(t){u.toggleDate(t)},a.beforeShowDay=function(t){var n=t.getFullYear(),r=e(t.getMonth()+1),i=e(t.getDate()),u=n+"-"+r+"-"+i;return jQuery.inArray(u,o)>=0?[!0,"ui-state-highlight"]:[!0,""]},n=jQuery(t.data("rel"));var c=n.val().split(",");for(i in c)this.toggleDate(c[i]);r=t.datepicker(a)},toggleDate:function(t){var e=jQuery.inArray(t,o);e>-1?o.splice(e,1):o.push(t),this.updateRel()},updateRel:function(){n.val(this.getDates().join(","))},getDates:function(){return o}};return u.init(t),u};window.AppDatepicker=n}});
2 | //# sourceMappingURL=admin-multidatepicker.js.map
--------------------------------------------------------------------------------
/bower_components/unslider/src/css/unslider/reset.less:
--------------------------------------------------------------------------------
1 | .unslider {
2 | // Should either be relative or absolute
3 | // as long as it's not static, but we'll
4 | // set it using jQuery
5 | // position: relative;
6 | overflow: auto;
7 | margin: 0;
8 | padding: 0;
9 |
10 | &-wrap {
11 | position: relative;
12 |
13 | &.unslider-carousel > li {
14 | float: left;
15 | }
16 | }
17 |
18 | // Vertical sliders don't float left
19 | &-vertical {
20 | > ul {
21 | height: 100%;
22 | }
23 |
24 | li {
25 | float: none;
26 | width: 100%;
27 | }
28 | }
29 |
30 | // Fading needs everything to appear on top of
31 | // each other
32 | &-fade {
33 | position: relative;
34 |
35 | .unslider-wrap li {
36 | position: absolute;
37 | left: 0;
38 | top: 0;
39 | right: 0;
40 | z-index: 8;
41 |
42 | &.unslider-active {
43 | z-index: 10;
44 | }
45 | }
46 | }
47 |
48 | ul, ol, li {
49 | list-style: none;
50 |
51 | /* Reset any weird spacing */
52 | margin: 0;
53 | padding: 0;
54 |
55 | border: none;
56 | }
57 |
58 | &-arrow {
59 | position: absolute;
60 | left: 20px;
61 | z-index: 2;
62 |
63 | cursor: pointer;
64 |
65 | &.next {
66 | left: auto;
67 | right: 20px;
68 | }
69 | }
70 | }
--------------------------------------------------------------------------------
/includes/external/google/Logger/Null.php:
--------------------------------------------------------------------------------
1 | factory->service->create_object( array( 'name' => 'A service', 'price' => 11 ) );
14 | $worker_id = $this->factory->worker->create_object( array( 'price' => 5, 'services_provided' => array( $service_id ), 'user_email' => 'test@email.dev' ) );
15 | $_REQUEST["app_service_id"] = $service_id;
16 | $_REQUEST["app_worker_id"] = $worker_id;
17 |
18 | $this->assertEquals( 16.00, $appointments->get_price() );
19 |
20 | $_REQUEST["app_service_id"] = 12; // Service doesn't exist
21 | $_REQUEST["app_worker_id"] = $worker_id;
22 |
23 | $this->assertEquals( 0, $appointments->get_price() );
24 |
25 | $_REQUEST["app_service_id"] = $service_id;
26 | $_REQUEST["app_worker_id"] = 123123; // Worker does not exist
27 |
28 | $this->assertEquals( 11.00, $appointments->get_price() );
29 |
30 |
31 | $_REQUEST["app_service_id"] = 123123123;
32 | $_REQUEST["app_worker_id"] = 123123;
33 | $this->assertEquals( 0, $appointments->get_price() );
34 | unset( $_REQUEST["app_service_id"] );
35 | unset( $_REQUEST["app_worker_id"] );
36 | }
37 | }
--------------------------------------------------------------------------------
/bower_components/sweetalert/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "sweetalert",
3 | "version": "1.1.3",
4 | "description": "A beautiful replacement for JavaScript's \"alert\"",
5 | "main": "lib/sweetalert.js",
6 | "directories": {
7 | "example": "example"
8 | },
9 | "scripts": {
10 | "test": "gulp test"
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "https://github.com/t4t5/sweetalert"
15 | },
16 | "keywords": [
17 | "sweetalert",
18 | "alert",
19 | "modal",
20 | "popup"
21 | ],
22 | "author": "Tristan Edwards (http://tristanedwards.me)",
23 | "license": "MIT",
24 | "bugs": {
25 | "url": "https://github.com/t4t5/sweetalert/issues"
26 | },
27 | "homepage": "http://tristanedwards.me/sweetalert",
28 | "devDependencies": {
29 | "babelify": "^6.0.2",
30 | "browserify": "^9.0.8",
31 | "glob": "^5.0.3",
32 | "gulp": "^3.9.0",
33 | "gulp-babel": "^5.2.1",
34 | "gulp-concat": "^2.4.3",
35 | "gulp-jshint": "^1.9.0",
36 | "gulp-minify-css": "^0.3.13",
37 | "gulp-qunit": "latest",
38 | "gulp-rename": "^1.2.0",
39 | "gulp-sass": "^2.0.1",
40 | "gulp-uglify": "^1.0.2",
41 | "gulp-wrap": "^0.11.0",
42 | "path": "^0.11.14",
43 | "vinyl-buffer": "^1.0.0",
44 | "vinyl-source-stream": "^1.1.0"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/includes/gcal/views/settings-gcal-button.php:
--------------------------------------------------------------------------------
1 |
2 |
18 |
--------------------------------------------------------------------------------
/admin/views/page-appointments-status-filter.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | () |
4 | () |
5 | () |
6 | () |
7 | ()
8 |
9 |
10 |
--------------------------------------------------------------------------------
/admin/widgets/class-app-dashboard-widget.php:
--------------------------------------------------------------------------------
1 |
21 |
37 |
25 | *
26 | */
27 | abstract class Google_Auth_Abstract
28 | {
29 | /**
30 | * An utility function that first calls $this->auth->sign($request) and then
31 | * executes makeRequest() on that signed request. Used for when a request
32 | * should be authenticated
33 | * @param Google_Http_Request $request
34 | * @return Google_Http_Request $request
35 | */
36 | abstract public function authenticatedRequest(Google_Http_Request $request);
37 | abstract public function sign(Google_Http_Request $request);
38 | }
39 |
--------------------------------------------------------------------------------
/includes/external/google/Cache/Null.php:
--------------------------------------------------------------------------------
1 | load_addon( 'app-locations-location_support' );
14 | $this->load_addon( 'app-locations-service_locations' );
15 | }
16 |
17 | private function __init_addon() {
18 | $locations_class = App_Locations_LocationsWorker::serve();
19 | $locations_class->initialize();
20 | }
21 |
22 | function test_init() {
23 | $this->assertTrue( class_exists( 'App_Locations_LocationsWorker' ) );
24 | $this->__init_addon();
25 | $this->assertTrue( class_exists( 'Appointments_Location' ) );
26 | $this->assertTrue( class_exists( 'App_Locations_ServiceLocations' ) );
27 | }
28 |
29 | function test_get_service_location() {
30 | $this->__init_addon();
31 |
32 | $args = array(
33 | 'address' => 'Location Address'
34 | );
35 | $id = appointments_insert_location( $args );
36 |
37 | $args = $this->factory->service->generate_args();
38 | $args['ID'] = 5;
39 | $_POST['service_location'] = array();
40 | $_POST['service_location'][5] = $id;
41 | $service_id = $this->factory->service->create_object( $args );
42 | $service = appointments_get_service( $service_id );
43 | $this->assertFalse( $service->location );
44 | }
45 |
46 |
47 |
48 | }
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/README.markdown:
--------------------------------------------------------------------------------
1 | # jQuery UI MultiSelect Widget
2 |
3 | MultiSelect progessively enhances an ordinary multiple select control into elegant drop down list of checkboxes, stylable with ThemeRoller.
4 |
5 | ### Version 3
6 | Version 3 of the widget is available in pre-release. This introduces a lot of new features and substantial performance imrovements.
7 |
8 | Check out the [release notes](https://github.com/ehynds/jquery-ui-multiselect-widget/releases/tag/3.0.0) for an exact list of changes and see the [wiki](https://github.com/ehynds/jquery-ui-multiselect-widget/wiki/Migrating-to-Version-3) for the information you may need to switch over. The main wiki will be getting updates for the new features and changed options.
9 |
10 | ### Requirements
11 | The [usage](https://github.com/ehynds/jquery-ui-multiselect-widget/wiki/Usage) section of the Wiki specifies the widget's dependencies.
12 |
13 | # License
14 |
15 | MultiSelect is dual-licensed under the [GPL 2 license](https://github.com/ehynds/jquery-ui-multiselect-widget/blob/master/GPL-LICENSE) and the [MIT license](https://github.com/ehynds/jquery-ui-multiselect-widget/blob/master/MIT-LICENSE).
16 |
17 | # Contributing
18 |
19 | When submitting a pull request, please describe the change you are making - preferably with a use case. Unit tests are now (14 March 2016) required for the pull to be merged.
20 |
21 | Please do not submit minified code in your pull request, that tends to cause merge conflicts.
22 |
--------------------------------------------------------------------------------
/js/js-check.js:
--------------------------------------------------------------------------------
1 | /* http://odino.org/logging-javascript-errors/ */
2 | window.MaximumErrorCount = 5;
3 |
4 | window.onerror = function(errorMsg, file, lineNumber) {
5 | window.errorCount || (window.errorCount = 0);
6 |
7 | var frontend = false;
8 | if ( typeof ajaxurl == 'undefined' ) {
9 | frontend = true;
10 | ajaxurl = _appointments_data.ajax_url;
11 | }
12 |
13 | if (window.errorCount <= window.MaximumErrorCount) {
14 | jQuery.post(ajaxurl, {
15 | action: 'js_error',
16 | errorMessage: errorMsg,
17 | file: file,
18 | url: window.location.href,
19 | lineNumber: lineNumber,
20 | ua: navigator.userAgent
21 | }, function(response){
22 | if(response && response.message) {
23 | if ( frontend) { jQuery('body').prepend(response.message);}
24 | else { jQuery('#wpbody-content').prepend(response.message);}
25 | }
26 | }, 'json'
27 | );
28 | }
29 | }
30 |
31 | // Remove # from url so that page can be refreshed
32 | function app_location() {
33 | if ( _appointments_data.thank_page_url ) {
34 | return _appointments_data.thank_page_url;
35 | }
36 |
37 | var loc = window.location.href;
38 | index = loc.indexOf("#");
39 | if (index > 0) {
40 | loc = loc.substring(0, index);
41 | }
42 | return loc;
43 | }
44 |
45 | function app_cancel_location() {
46 | if ( _appointments_data.cancel_url ) {
47 | return _appointments_data.cancel_url;
48 | }
49 | return '';
50 | }
51 |
--------------------------------------------------------------------------------
/includes/external/google/Service.php:
--------------------------------------------------------------------------------
1 | client = $client;
31 | }
32 |
33 | /**
34 | * Return the associated Google_Client class.
35 | * @return Google_Client
36 | */
37 | public function getClient()
38 | {
39 | return $this->client;
40 | }
41 |
42 | /**
43 | * Create a new HTTP Batch handler for this service
44 | *
45 | * @return Google_Http_Batch
46 | */
47 | public function createBatch()
48 | {
49 | return new Google_Http_Batch(
50 | $this->client,
51 | false,
52 | $this->rootUrl,
53 | $this->batchPath
54 | );
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-workers.php:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
9 |
10 |
11 | $name ): ?>
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/admin/views/user-profile-working-hours.php:
--------------------------------------------------------------------------------
1 |
2 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/includes/class_app_timed_abstractions.php:
--------------------------------------------------------------------------------
1 | _start = is_numeric( $start ) ? $start : strtotime( $start );
10 | $this->_end = is_numeric( $end ) ? $end : strtotime( $end );
11 | }
12 |
13 | /**
14 | * check perion contain
15 | *
16 | * @since 2.2.4 added `$use_bundaries` argument.
17 | *
18 | * @param integer $start Start date to check.
19 | * @param integer $end end date to check.
20 | * @param boolean $use_bundaries Force to use boundaries, instead exac match.
21 | */
22 | public function contains( $start, $end, $use_bundaries = false ) {
23 | $start = is_numeric( $start ) ? $start : strtotime( $start );
24 | $end = is_numeric( $end ) ? $end : strtotime( $end );
25 | if ( $use_bundaries || appointments_use_legacy_boundaries_calculus() ) {
26 | return $this->_contains_boundaries( $start, $end );
27 | }
28 | return $this->_contains_exact( $start, $end );
29 | }
30 |
31 | public function get_start() {
32 | return $this->_start; }
33 | public function get_end() {
34 | return $this->_end; }
35 |
36 | // doesn't handle enclosed appointments
37 | protected function _contains_exact( $start, $end ) {
38 | return (
39 | $this->_start >= $start
40 | &&
41 | $this->_end <= $end
42 | );
43 | }
44 | // detects appointments overlap
45 | protected function _contains_boundaries( $start, $end ) {
46 | return (
47 | $end > $this->_start
48 | &&
49 | $start < $this->_end
50 | );
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/_src/admin/js/switch-button.dev.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Appointments
3 | * http://premium.wpmudev.org/
4 | *
5 | * Copyright (c) 2017 Incsub
6 | * Licensed under the GPLv2+ license.
7 | *
8 | * Switch button
9 | */
10 |
11 | /* global window, jQuery, switch_button */
12 |
13 | jQuery( window.document ).ready(function(){
14 | "use strict";
15 | if ( jQuery.fn.switchButton ) {
16 | var appointment_admin_check_slaves = function() {
17 | jQuery('.appointments-settings .switch-button' ).each( function() {
18 | var slave = jQuery(this).data('slave');
19 | if ( slave ) {
20 | var slaves = jQuery( '.appointments-settings .'+slave );
21 | if ( jQuery( '.switch-button-background', jQuery(this).closest('td') ).hasClass( 'checked' ) ) {
22 | slaves.show();
23 | } else {
24 | slaves.hide();
25 | }
26 | }
27 | });
28 | };
29 | jQuery('.appointments-settings .switch-button').each(function() {
30 | var options = {
31 | checked: jQuery(this).checked,
32 | on_label: jQuery(this).data('on') || switch_button.labels.label_on,
33 | off_label: jQuery(this).data('off') || switch_button.labels.label_off,
34 | on_callback: appointment_admin_check_slaves,
35 | off_callback: appointment_admin_check_slaves
36 | };
37 | jQuery(this).switchButton(options);
38 | });
39 | }
40 | });
41 |
42 |
--------------------------------------------------------------------------------
/includes/external/google/Service/Cloudsearch.php:
--------------------------------------------------------------------------------
1 |
22 | * The Google Cloud Search API defines an application interface to index
23 | * documents that contain structured data and to search those indexes. It
24 | * supports full text search.
25 | *
26 | *
27 | * For more information about this service, see the API
28 | * Documentation
29 | *
30 | *
31 | * @author Google, Inc.
32 | */
33 | class Google_Service_Cloudsearch extends Google_Service
34 | {
35 |
36 |
37 |
38 |
39 |
40 | /**
41 | * Constructs the internal representation of the Cloudsearch service.
42 | *
43 | * @param Google_Client $client
44 | */
45 | public function __construct(Google_Client $client)
46 | {
47 | parent::__construct($client);
48 | $this->servicePath = '';
49 | $this->version = 'v1';
50 | $this->serviceName = 'cloudsearch';
51 |
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/tests/addons/test-addon-paddings.php:
--------------------------------------------------------------------------------
1 | load_addon( 'app-schedule-paddings' );
13 | $this->__init_addon();
14 | }
15 |
16 | private function __init_addon() {
17 | $addon = App_Schedule_Paddings::serve();
18 | $addon->initialize();
19 | $this->addon = $addon;
20 | }
21 |
22 | function test_init() {
23 | $this->assertTrue( class_exists( 'App_Schedule_Paddings' ) );
24 | }
25 |
26 | function test_set_paddings() {
27 | $options = appointments_get_options();
28 | $service_args = array(
29 | 'name' => 'My Service',
30 | 'duration' => 90
31 | );
32 | $service_id = appointments_insert_service( $service_args );
33 |
34 | $worker_id = $this->factory->worker->create_object( $this->factory->worker->generate_args() );
35 |
36 | $services_padding = array();
37 | $services_padding[$service_id] = array(
38 | App_Schedule_Paddings::PADDING_BEFORE => 0,
39 | App_Schedule_Paddings::PADDING_AFTER => 15
40 | );
41 | update_option( 'appointments_services_padding', $services_padding );
42 |
43 | $options['service_padding'][$service_id] = array( 'before' => 0, 'after' => 15 );
44 | appointments_update_options( $options );
45 |
46 | // With default working hours
47 | $now = strtotime( 'next Monday', current_time( 'timestamp' ) );
48 | $slots = appointments_get_weekly_schedule_slots( $now, $service_id );
49 | $time_slots = $slots['time_slots'];
50 | }
51 |
52 |
53 | }
--------------------------------------------------------------------------------
/css/jquery.multiselect.css:
--------------------------------------------------------------------------------
1 | .ui-multiselect { padding:2px 0 2px 4px; text-align:left }
2 | .ui-multiselect span.ui-icon { float:right }
3 | .ui-multiselect-single .ui-multiselect-checkboxes input { position:absolute !important; top: auto !important; left:-9999px; }
4 | .ui-multiselect-single .ui-multiselect-checkboxes label { padding:5px !important }
5 |
6 | .ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 4px }
7 | .ui-multiselect-header ul { font-size:0.9em }
8 | .ui-multiselect-header ul li { float:left; padding:0 10px 0 0 }
9 | .ui-multiselect-header a { text-decoration:none }
10 | .ui-multiselect-header a:hover { text-decoration:underline }
11 | .ui-multiselect-header span.ui-icon { float:left }
12 | .ui-multiselect-header li.ui-multiselect-close { float:right; text-align:right; padding-right:0 }
13 |
14 | .ui-multiselect-menu { display:none; padding:3px; position:absolute; z-index:10000; text-align: left }
15 | .ui-multiselect-checkboxes { position:relative /* fixes bug in IE6/7 */; overflow-y:scroll }
16 | .ui-multiselect-checkboxes label { cursor:default; display:block; border:1px solid transparent; padding:3px 1px }
17 | .ui-multiselect-checkboxes label input { position:relative; top:1px }
18 | .ui-multiselect-checkboxes li { clear:both; font-size:0.9em; padding-right:3px }
19 | .ui-multiselect-checkboxes li.ui-multiselect-optgroup-label { text-align:center; font-weight:bold; border-bottom:1px solid }
20 | .ui-multiselect-checkboxes li.ui-multiselect-optgroup-label a { display:block; padding:3px; margin:1px 0; text-decoration:none }
21 |
22 | /* remove label borders in IE6 because IE6 does not support transparency */
23 | * html .ui-multiselect-checkboxes label { border:none }
--------------------------------------------------------------------------------
/includes/external/google/Cache/Abstract.php:
--------------------------------------------------------------------------------
1 |
22 | */
23 | abstract class Google_Cache_Abstract
24 | {
25 |
26 | abstract public function __construct(Google_Client $client);
27 |
28 | /**
29 | * Retrieves the data for the given key, or false if they
30 | * key is unknown or expired
31 | *
32 | * @param String $key The key who's data to retrieve
33 | * @param boolean|int $expiration Expiration time in seconds
34 | *
35 | */
36 | abstract public function get($key, $expiration = false);
37 |
38 | /**
39 | * Store the key => $value set. The $value is serialized
40 | * by this function so can be of any type
41 | *
42 | * @param string $key Key of the data
43 | * @param string $value data
44 | */
45 | abstract public function set($key, $value);
46 |
47 | /**
48 | * Removes the key/data pair for the given $key
49 | *
50 | * @param String $key
51 | */
52 | abstract public function delete($key);
53 | }
54 |
--------------------------------------------------------------------------------
/admin/views/user-profile-personal-data.php:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/includes/external/jquery-ui-multiselect-widget/jquery.multiselect.css:
--------------------------------------------------------------------------------
1 | .ui-multiselect { padding:2px 0 2px 4px; text-align:left }
2 | .ui-multiselect span.ui-icon { float:right }
3 | .ui-multiselect-single .ui-multiselect-checkboxes input { left:-9999px; position:absolute !important; top: auto !important; }
4 | .ui-multiselect-single .ui-multiselect-checkboxes label { padding:5px !important }
5 |
6 | .ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 4px; }
7 | .ui-multiselect-header ul { font-size:0.9em }
8 | .ui-multiselect-header ul li { float:left; padding:0 10px 0 0; }
9 | .ui-multiselect-header a { text-decoration:none; }
10 | .ui-multiselect-header a:hover { text-decoration:underline; }
11 | .ui-multiselect-header span.ui-icon { float:left; }
12 | .ui-multiselect-header .ui-multiselect-close { float:right; padding-right:0; text-align:right; }
13 |
14 | .ui-multiselect-menu { display:none; padding:3px; position:absolute; text-align: left; }
15 | .ui-multiselect-checkboxes { overflow-y:auto; position:relative; }
16 | .ui-multiselect-checkboxes label { border:1px solid transparent; cursor:default; display:block; padding:3px 1px; }
17 | .ui-multiselect-checkboxes label input { position:relative; top:1px }
18 | .ui-multiselect-checkboxes li { clear:both; font-size:0.9em; list-style: none; padding-right:3px; }
19 | .ui-multiselect-checkboxes .ui-multiselect-optgroup { padding: 3px; }
20 | .ui-multiselect-columns { display: inline-block; vertical-align: top; }
21 | .ui-multiselect-checkboxes .ui-multiselect-optgroup a { border-bottom:1px solid; cursor: pointer; display:block; font-weight:bold; margin:1px 0; padding:3px; text-align:center; text-decoration:none; }
22 |
23 | @media print{
24 | .ui-multiselect-menu {display: none;}
25 | }
26 |
--------------------------------------------------------------------------------
/includes/sample-appointments-page.php:
--------------------------------------------------------------------------------
1 | load_scripts_styles( );
14 | }
15 | add_action( 'template_redirect', 'add_appointments_css_style' );
16 |
17 | */
18 |
19 | get_header(); ?>
20 |
21 |
22 |
23 |
24 |
25 |
26 |
>
27 |
30 |
31 |
32 |
33 |
34 | '
' . __( 'Pages:' ) . ' ', 'after' => '
' ) ); ?>
35 |
36 |
37 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/tests/admin/test-admin-addons.php:
--------------------------------------------------------------------------------
1 | load_admin();
17 | $appointments->admin->admin_init();
18 | $settings_page = $appointments->admin->pages['settings'];
19 |
20 |
21 | $_REQUEST['_wpnonce'] = wp_create_nonce( 'activate-addon' );
22 | $_REQUEST['_wp_http_referer'] = wp_unslash( $_SERVER['REQUEST_URI'] );
23 | $_REQUEST['addon'] = 'app-users-limit_services_login';
24 |
25 | /** @var $settings_page Appointments_Admin_Settings_Page */
26 | $settings_page->_save_addons( 'activate' );
27 |
28 | $this->assertContains( 'app-users-limit_services_login', $appointments->addons_loader->get_active_addons() );
29 |
30 |
31 | $_REQUEST['_wpnonce'] = wp_create_nonce( 'bulk-addons' );
32 | $_REQUEST['_wp_http_referer'] = wp_unslash( $_SERVER['REQUEST_URI'] );
33 | $_REQUEST['addon'] = array( 'app-admin-admin_permissions', 'app-admin-export_date_range' );
34 |
35 | /** @var $settings_page Appointments_Admin_Settings_Page */
36 | $settings_page->_save_addons( 'activate' );
37 |
38 | $this->assertContains( 'app-users-limit_services_login', $appointments->addons_loader->get_active_addons() );
39 | $this->assertContains( 'app-admin-export_date_range', $appointments->addons_loader->get_active_addons() );
40 | $this->assertContains( 'app-admin-admin_permissions', $appointments->addons_loader->get_active_addons() );
41 |
42 | global $current_screen;
43 | $current_screen = null;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/tests/notifications/test-notifications-templates.php:
--------------------------------------------------------------------------------
1 | factory->service->create_object( $this->factory->service->generate_args() );
22 |
23 | $worker_args = $this->factory->worker->generate_args();
24 | $worker_args['services_provided'] = array( $service_id );
25 | $worker_id = $this->factory->worker->create_object( $worker_args );
26 |
27 | $app_args = $this->factory->appointment->generate_args();
28 | $app_args['worker'] = $worker_id;
29 | $app_args['service'] = $service_id;
30 | $app_id = $this->factory->appointment->create_object( $app_args );
31 |
32 | $notifications = $appointments->notifications;
33 | $confirmation_template = $notifications->confirmation->get_customer_template( $app_id, 'email@email.dev' );
34 |
35 | $app = appointments_get_appointment( $app_id );
36 | $expected = array(
37 | $app->name,
38 | wp_specialchars_decode( get_option( 'blogname' ), ENT_QUOTES ),
39 | appointments_get_service( $service_id )->name,
40 | mysql2date( get_option( 'date_format' ) . ' ' . get_option( 'time_format' ), $app->start ),
41 | appointments_get_worker_name( $worker_id ),
42 | appointments_get_cancel_link_url( $app_id )
43 | );
44 |
45 | $this->assertEquals( implode( '||', $expected ), $confirmation_template['body'] );
46 | }
47 | }
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/tests/unit/html.js:
--------------------------------------------------------------------------------
1 | (function($){
2 | var el, widget, elems, btn, selectClone;
3 |
4 | module("html", {
5 | setup: function() {
6 | el = $("select").multiselect();
7 | widget = el.multiselect("widget");
8 | btn = el.multiselect("getButton");
9 | selectClone = $("select").clone();
10 | }
11 | });
12 |
13 | test("pull in optgroup's class", function(){
14 | expect(5);
15 |
16 | elems = widget.find('.ui-multiselect-optgroup');
17 | equals( elems.length, 3, 'There are three labels' );
18 |
19 | elems.filter(":not(:last)").each( function() {
20 | equals($(this).hasClass('ui-multiselect-optgroup'),true,'Default class is present when no extra class is defined');
21 | });
22 | elems.filter(":last").each( function() {
23 | equals($(this).hasClass('ui-multiselect-optgroup'),true,'Default class is present when extra class is defined');
24 | equals($(this).hasClass('optgroupClass'),true,'Extra class is present');
25 | });
26 |
27 | });
28 |
29 | test("pull in options's class", function(){
30 | expect(1);
31 |
32 | equals(widget.find('input[value="9"]').parents('li:first').hasClass('optionClass'),true,'Extra class is present');
33 | });
34 |
35 | test("pull in select's ID and adds _ms if it exists", function(){
36 | expect(1);
37 | equals(btn.attr("id"), el.attr("id") + "_ms", "Id is taken from select and _ms is appended");
38 | });
39 |
40 | test("don't attempt to pull in select's ID and adds _ms if none exists", function(){
41 | expect(1);
42 | selectClone.attr("id", "");
43 | var clonedEl = selectClone.multiselect();
44 | var clonedBtn = clonedEl.multiselect("getButton");
45 | equals(clonedBtn.attr("id"), undefined, "No ID is added");
46 | });
47 |
48 | })(jQuery);
49 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/jquery.multiselect.css:
--------------------------------------------------------------------------------
1 | .ui-multiselect { padding:2px 0 2px 4px; text-align:left }
2 | .ui-multiselect span.ui-icon { float:right }
3 | .ui-multiselect-single .ui-multiselect-checkboxes input { left:-9999px; position:absolute !important; top: auto !important; }
4 | .ui-multiselect-single .ui-multiselect-checkboxes label { padding:5px !important }
5 |
6 | .ui-multiselect-header { margin-bottom:3px; padding:3px 0 3px 4px; }
7 | .ui-multiselect-header ul { font-size:0.9em }
8 | .ui-multiselect-header ul li { float:left; padding:0 10px 0 0; }
9 | .ui-multiselect-header a { text-decoration:none; }
10 | .ui-multiselect-header a:hover { text-decoration:underline; }
11 | .ui-multiselect-header span.ui-icon { float:left; }
12 | .ui-multiselect-header .ui-multiselect-close { float:right; padding-right:0; text-align:right; }
13 |
14 | .ui-multiselect-menu { display:none; padding:3px; position:absolute; text-align: left; }
15 | .ui-multiselect-checkboxes { overflow-y:auto; position:relative; }
16 | .ui-multiselect-checkboxes label { border:1px solid transparent; cursor:default; display:block; padding:3px 1px; }
17 | .ui-multiselect-checkboxes label input { position:relative; top:1px }
18 | .ui-multiselect-checkboxes label img { height: 30px; vertical-align: middle; padding-right: 3px;}
19 | .ui-multiselect-checkboxes li { clear:both; font-size:0.9em; list-style: none; padding-right:3px; }
20 | .ui-multiselect-checkboxes .ui-multiselect-optgroup { padding: 3px; }
21 | .ui-multiselect-columns { display: inline-block; vertical-align: top; }
22 | .ui-multiselect-checkboxes .ui-multiselect-optgroup a { border-bottom:1px solid; cursor: pointer; display:block; font-weight:bold; margin:1px 0; padding:3px; text-align:center; text-decoration:none; }
23 |
24 | @media print{
25 | .ui-multiselect-menu {display: none;}
26 | }
27 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/dev/modules/utils.js:
--------------------------------------------------------------------------------
1 | /*
2 | * Allow user to pass their own params
3 | */
4 | var extend = function(a, b) {
5 | for (var key in b) {
6 | if (b.hasOwnProperty(key)) {
7 | a[key] = b[key];
8 | }
9 | }
10 | return a;
11 | };
12 |
13 | /*
14 | * Convert HEX codes to RGB values (#000000 -> rgb(0,0,0))
15 | */
16 | var hexToRgb = function(hex) {
17 | var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
18 | return result ? parseInt(result[1], 16) + ', ' + parseInt(result[2], 16) + ', ' + parseInt(result[3], 16) : null;
19 | };
20 |
21 | /*
22 | * Check if the user is using Internet Explorer 8 (for fallbacks)
23 | */
24 | var isIE8 = function() {
25 | return (window.attachEvent && !window.addEventListener);
26 | };
27 |
28 | /*
29 | * IE compatible logging for developers
30 | */
31 | var logStr = function(string) {
32 | if (window.console) {
33 | // IE...
34 | window.console.log('SweetAlert: ' + string);
35 | }
36 | };
37 |
38 | /*
39 | * Set hover, active and focus-states for buttons
40 | * (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
41 | */
42 | var colorLuminance = function(hex, lum) {
43 | // Validate hex string
44 | hex = String(hex).replace(/[^0-9a-f]/gi, '');
45 | if (hex.length < 6) {
46 | hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
47 | }
48 | lum = lum || 0;
49 |
50 | // Convert to decimal and change luminosity
51 | var rgb = '#';
52 | var c;
53 | var i;
54 |
55 | for (i = 0; i < 3; i++) {
56 | c = parseInt(hex.substr(i * 2, 2), 16);
57 | c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
58 | rgb += ('00' + c).substr(c.length);
59 | }
60 |
61 | return rgb;
62 | };
63 |
64 |
65 | export {
66 | extend,
67 | hexToRgb,
68 | isIE8,
69 | logStr,
70 | colorLuminance
71 | };
72 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/tests/visual/formsubmission.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jQuery MultiSelect Plugin Tests
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | Form Submission Test
16 | Testing to ensure the correct values are actually passed when the form is submitted.
17 |
18 |
35 |
36 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/includes/pro/includes/addons/lib/class-app-locations-list-table.php:
--------------------------------------------------------------------------------
1 | 'location',
8 | 'plural' => 'locations',
9 | 'ajax' => false
10 | ) );
11 | }
12 |
13 | function column_location_address( $item ) {
14 | $delete_link = add_query_arg( 'action_app', 'save_delete_locations' );
15 | $delete_link = wp_nonce_url( $delete_link, 'update_app_settings', 'app_nonce' );
16 | $delete_link = add_query_arg( 'location_id', $item->get_id(), $delete_link );
17 | $actions = array(
18 | 'edit' => '' . __( 'Edit', 'appointments' ) . ' ',
19 | 'delete' => '' . __( 'Delete', 'appointments' ) . ' '
20 | );
21 |
22 | return $item->get_admin_label() . $this->row_actions( $actions, true );
23 | }
24 |
25 | function column_id( $item ) {
26 | return $item->get_id();
27 | }
28 |
29 | protected function display_tablenav( $which ) {}
30 |
31 | function get_columns(){
32 | return array(
33 | 'id' => 'ID',
34 | 'location_address' => __( 'Location', 'appointments' ),
35 | );
36 | }
37 |
38 | function prepare_items() {
39 | if ( empty( $this->items ) ) {
40 | $this->items = array();
41 | }
42 |
43 | $columns = $this->get_columns();
44 | $hidden = array( 'id' );
45 | $sortable = $this->get_sortable_columns();
46 |
47 | $this->_column_headers = array($columns, $hidden, $sortable);
48 |
49 | $this->set_pagination_args( array(
50 | 'total_items' => count( $this->items ),
51 | 'per_page' => 0,
52 | 'total_pages' => 0
53 | ) );
54 | }
55 |
56 | }
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/tests/visual/formsubmission.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jQuery MultiSelect Plugin Tests
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | Form Submission Test
16 | Testing to ensure the correct values are actually passed when the form is submitted.
17 |
18 |
19 |
20 |
21 |
22 |
39 |
40 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/tests/visual/formsubmission-single.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jQuery MultiSelect Plugin Tests
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | Form Submission Test (Single Select)
16 | Testing to ensure the correct values are actually passed when the form is submitted.
17 |
18 |
19 |
20 |
21 |
22 |
39 |
40 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/lib/modules/injected-html.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 |
3 | Object.defineProperty(exports, "__esModule", {
4 | value: true
5 | });
6 | var injectedHTML =
7 |
8 | // Dark overlay
9 | "
" +
10 |
11 | // Modal
12 | "" +
13 |
14 | // Error icon
15 | "
\n \n \n \n \n
" +
16 |
17 | // Warning icon
18 | "
\n \n \n
" +
19 |
20 | // Info icon
21 | "
" +
22 |
23 | // Success icon
24 | "
" + "
" +
25 |
26 | // Title, text and input
27 | "
Title \n
Text
\n
\n \n
\n " +
28 |
29 | // Input errors
30 | "
" +
31 |
32 | // Cancel and confirm buttons
33 | "
" +
37 |
38 | // End of modal
39 | "
";
40 |
41 | exports["default"] = injectedHTML;
42 | module.exports = exports["default"];
--------------------------------------------------------------------------------
/_src/shortcodes/js/app-services.dev.js:
--------------------------------------------------------------------------------
1 | jQuery( document).ready( function( $ ) {
2 | "use strict";
3 |
4 | window.Appointments = window.Appointments || {};
5 | Appointments.shortcodes = Appointments.shortcodes || {};
6 |
7 | Appointments.shortcodes.services = {
8 | thumbnailsCache: [],
9 | strings: null,
10 |
11 | init: function() {
12 | var self = this;
13 | this.strings = appointmentsStrings;
14 | this.$servicesSelector = $('.app_select_services');
15 | this.$submitButton = $('.app_services_button');
16 |
17 | if ( this.strings.autorefresh == '1' ) {
18 | this.$submitButton.hide();
19 | }
20 |
21 | this.bind();
22 | },
23 |
24 | bind: function() {
25 | var self = this;
26 |
27 | this.$submitButton.click(function(){
28 | var selected_service = self.$servicesSelector.val();
29 | if ( typeof selected_service=='undefined' || selected_service===null ) {
30 | selected_service=self.strings.first_service_id;
31 | }
32 |
33 | self.reload( selected_service );
34 | });
35 |
36 | this.$servicesSelector.change(function(){
37 | var selected_service = $(this).val();
38 |
39 | if ( self.strings.autorefresh == '1' ) {
40 | self.$submitButton.trigger( 'click' );
41 | return false;
42 | }
43 |
44 | $('.app_service_excerpt').hide();
45 | $('#app_service_excerpt_'+selected_service).show();
46 | });
47 | },
48 |
49 | reload: function( service ) {
50 | window.location.href = this.strings.reload_url.replace('__selected_service__', service);
51 | }
52 |
53 | };
54 |
55 | Appointments.shortcodes.services.init();
56 | });
--------------------------------------------------------------------------------
/includes/pro/class-app-pro.php:
--------------------------------------------------------------------------------
1 | includes();
16 |
17 | // Login with Google
18 | $this->google_login = new Appointments_Google_Login();
19 |
20 | add_action( 'plugins_loaded', array( $this, 'load_integrations' ), 999 );
21 |
22 | add_filter( 'appointments_addons', array( $this, 'load_extra_addons' ) );
23 |
24 | add_filter( 'appointments_before_insert_service', '__return_true' );
25 | add_filter( 'appointments_before_insert_worker', '__return_true' );
26 |
27 | add_filter( 'appointments_default_options', array( $this, 'appointments_default_options' ) );
28 |
29 | }
30 |
31 | /**
32 | * Por version default options
33 | *
34 | * @param array $options
35 | *
36 | * @return array
37 | */
38 | public function appointments_default_options( $options ) {
39 | // In PRO version we don't want to keep the data in case of plugin uninstall by default
40 | $options['keep_options_on_uninstall'] = false;
41 | return $options;
42 | }
43 |
44 | private function includes() {
45 | include_once( appointments_plugin_dir() . 'includes/pro/includes/class-app-google-login.php' );
46 | }
47 |
48 | public function load_integrations() {
49 | // Integrations
50 | }
51 |
52 | /**
53 | * Loads extra addons from includes/pro/includes/addons
54 | *
55 | * @param $addons
56 | *
57 | * @return array
58 | */
59 | public function load_extra_addons( $addons ) {
60 | $all = glob( appointments_plugin_dir() . 'includes/pro/includes/addons/*.php' );
61 | foreach ( $all as $addon_file ) {
62 | $addon = new Appointments_Addon( $addon_file );
63 | if ( ! $addon->error ) {
64 | $addons[ $addon->slug ] = $addon;
65 | }
66 | }
67 | return $addons;
68 | }
69 | }
--------------------------------------------------------------------------------
/bower_components/sweetalert/dev/modules/injected-html.js:
--------------------------------------------------------------------------------
1 | var injectedHTML =
2 |
3 | // Dark overlay
4 | `
` +
5 |
6 | // Modal
7 | `` +
8 |
9 | // Error icon
10 | `
11 |
12 |
13 |
14 |
15 |
` +
16 |
17 | // Warning icon
18 | `
19 |
20 |
21 |
` +
22 |
23 | // Info icon
24 | `
` +
25 |
26 | // Success icon
27 | `
28 |
29 |
30 |
31 |
32 |
33 |
` +
34 |
35 | `
` +
36 |
37 | // Title, text and input
38 | `
Title
39 |
Text
40 |
41 |
42 |
43 | ` +
44 |
45 | // Input errors
46 | `
47 |
!
48 |
Not valid!
49 |
` +
50 |
51 | // Cancel and confirm buttons
52 | `
` +
65 |
66 | // End of modal
67 | `
`;
68 |
69 | export default injectedHTML;
70 |
--------------------------------------------------------------------------------
/admin/js/editor-shortcodes.js:
--------------------------------------------------------------------------------
1 | !function(e){function t(a){if(n[a])return n[a].exports;var o=n[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,a){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:a})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=4)}({4:function(e,t,n){"use strict";!function(){tinymce.PluginManager.add("appointments_shortcodes",function(e){function t(t){var o,r=[];for(var i in t.defaults)(o=n(i,t.defaults[i]))&&r.push(o);return{text:t.name,onclick:function(){e.windowManager.open({title:t.name,body:r,onsubmit:a(t)})}}}function n(e,t){var n={};switch(t.type){case"text":n={type:"textbox",name:e,label:t.name,value:t.value};break;case"datepicker":n={type:"textbox",name:e,label:t.name,value:t.value,onclick:function(){var e=this._id,t=jQuery("#"+e);if(i.indexOf(e)<0){if(i.push(e),!t.length||void 0===t.datepicker)return;t.datepicker(),t.datepicker("option","dateFormat","yy-mm-dd"),t.datepicker("option","firstDay",AppointmentsDateSettings.weekStart)}"function"==typeof t.datepicker&&t.datepicker("show")}};break;case"select":n={type:"listbox",name:e,label:t.name,values:t.options};break;case"checkbox":n={type:"checkbox",name:e,label:t.name,value:1},t.value&&(n.checked=!0)}return t.help&&(n.tooltip=t.help),n}function a(t){return function(n){var a,o="";for(var r in t.defaults)void 0!==n.data[r]&&t.defaults[r].value!=n.data[r]&&(a=n.data[r],"checkbox"===t.defaults[r].type&&(a=a?1:0),o+=" "+r+'="'+a+'"');e.insertContent("["+t.shortcode+o+"]")}}var o,r,i=[],c=tinymce.activeEditor,u=[];r=c.getLang("appointments_shortcodes.shortcodes");for(var s in r)o=r[s],u.push(function(e){return t(e)}(o));e.addButton("appointments_shortcodes",{text:c.getLang("appointments_shortcodes.label"),type:"menubutton",menu:u})})}()}});
2 | //# sourceMappingURL=editor-shortcodes.js.map
--------------------------------------------------------------------------------
/_src/admin/css/unslider.css:
--------------------------------------------------------------------------------
1 | /**.unslider{overflow:auto;margin:0;padding:0}.unslider-wrap{position:relative}.unslider-wrap.unslider-carousel>li{float:left}.unslider-vertical>ul{height:100%}.unslider-vertical li{float:none;width:100%}.unslider-fade{position:relative}.unslider-fade .unslider-wrap li{position:absolute;left:0;top:0;right:0;z-index:8}.unslider-fade .unslider-wrap li.unslider-active{z-index:10}.unslider li,.unslider ol,.unslider ul{list-style:none;margin:0;padding:0;border:none}.unslider-arrow{position:absolute;left:20px;z-index:2;cursor:pointer}.unslider-arrow.next{left:auto;right:20px}
2 |
3 | */
4 | .unslider {
5 | max-width: 700px;
6 | position: relative;
7 | overflow:visible;
8 | margin-bottom:50px;
9 | border:1px solid #ADADAD;
10 | }
11 |
12 | .unslider-wrap li p {
13 | padding:1em 20px 1em 20px;
14 | margin:0;
15 | background: #14485F;
16 | color: white;
17 | min-height: 45px;
18 | }
19 |
20 | .unslider-wrap li p a {
21 | color:white;
22 | font-weight: bold;
23 | }
24 |
25 | .unslider-arrow {
26 | display: block;
27 | width: 32px;
28 | height: 32px;
29 | top: 50%;
30 | right: -50px;
31 | left: auto;
32 | margin-top: -16px;
33 | overflow: hidden;
34 | background: rgba(0,0,0,.2) no-repeat 50% 50%;
35 | background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAQCAQAAABuQZ3IAAAAi0lEQVR4AU3OISBEQQBAwS0AACS9NxqQgCZpkiYBVddFvWhAAUABAPQCAGC4g/0vTnrBqCfDIZl70J+kMUBPpEwT4FNXxBxz4F1HxHyr4EVTxBLb4EFNxEon4CJSlVNw9AcV9sC16h8osgke1P1ArgXwouVvdQq86ww/GQefusNf7kBviBlxpT8k+gL/Wox4r1d4MwAAAABJRU5ErkJggg==');
36 | background-size: 7px 11px;
37 | border-radius: 32px;
38 | text-indent: -999em;
39 | opacity: 0.8;
40 | transition: opacity .2s;
41 | }
42 |
43 | .unslider-arrow:hover {
44 | opacity: 1;
45 | }
46 |
47 | .unslider-arrow.next {
48 | right:20px;
49 | }
50 |
51 | .unslider-arrow.prev {
52 | -ms-transform: rotate(-180deg);
53 | transform: rotate(-180deg);
54 | left:20px;
55 | }
--------------------------------------------------------------------------------
/admin/views/page-settings-tab-working_hours.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 | worker == $worker->ID ) {
15 | $s = " selected='selected'"; } else { $s = ''; }
16 | echo '' . appointments_get_worker_name( $worker->ID, false ) . ' ';
17 | }
18 | }
19 | ?>
20 |
21 |
22 |
30 |
45 |
--------------------------------------------------------------------------------
/bower_components/sweetalert/lib/modules/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | Object.defineProperty(exports, '__esModule', {
4 | value: true
5 | });
6 | /*
7 | * Allow user to pass their own params
8 | */
9 | var extend = function extend(a, b) {
10 | for (var key in b) {
11 | if (b.hasOwnProperty(key)) {
12 | a[key] = b[key];
13 | }
14 | }
15 | return a;
16 | };
17 |
18 | /*
19 | * Convert HEX codes to RGB values (#000000 -> rgb(0,0,0))
20 | */
21 | var hexToRgb = function hexToRgb(hex) {
22 | var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
23 | return result ? parseInt(result[1], 16) + ', ' + parseInt(result[2], 16) + ', ' + parseInt(result[3], 16) : null;
24 | };
25 |
26 | /*
27 | * Check if the user is using Internet Explorer 8 (for fallbacks)
28 | */
29 | var isIE8 = function isIE8() {
30 | return window.attachEvent && !window.addEventListener;
31 | };
32 |
33 | /*
34 | * IE compatible logging for developers
35 | */
36 | var logStr = function logStr(string) {
37 | if (window.console) {
38 | // IE...
39 | window.console.log('SweetAlert: ' + string);
40 | }
41 | };
42 |
43 | /*
44 | * Set hover, active and focus-states for buttons
45 | * (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)
46 | */
47 | var colorLuminance = function colorLuminance(hex, lum) {
48 | // Validate hex string
49 | hex = String(hex).replace(/[^0-9a-f]/gi, '');
50 | if (hex.length < 6) {
51 | hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];
52 | }
53 | lum = lum || 0;
54 |
55 | // Convert to decimal and change luminosity
56 | var rgb = '#';
57 | var c;
58 | var i;
59 |
60 | for (i = 0; i < 3; i++) {
61 | c = parseInt(hex.substr(i * 2, 2), 16);
62 | c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);
63 | rgb += ('00' + c).substr(c.length);
64 | }
65 |
66 | return rgb;
67 | };
68 |
69 | exports.extend = extend;
70 | exports.hexToRgb = hexToRgb;
71 | exports.isIE8 = isIE8;
72 | exports.logStr = logStr;
73 | exports.colorLuminance = colorLuminance;
--------------------------------------------------------------------------------
/js/layout.js:
--------------------------------------------------------------------------------
1 | (function($){
2 | var initLayout = function() {
3 | var hash = window.location.hash.replace('#', '');
4 | var currentTab = $('ul.navigationTabs a')
5 | .bind('click', showTab)
6 | .filter('a[rel=' + hash + ']');
7 | if (currentTab.size() == 0) {
8 | currentTab = $('ul.navigationTabs a:first');
9 | }
10 | showTab.apply(currentTab.get(0));
11 | $('#colorpickerHolder').ColorPicker({flat: true});
12 | $('#colorpickerHolder2').ColorPicker({
13 | flat: true,
14 | color: '#00ff00',
15 | onSubmit: function(hsb, hex, rgb) {
16 | $('#colorSelector2 div').css('backgroundColor', '#' + hex);
17 | }
18 | });
19 | $('#colorpickerHolder2>div').css('position', 'absolute');
20 | var widt = false;
21 | $('#colorSelector2').bind('click', function() {
22 | $('#colorpickerHolder2').stop().animate({height: widt ? 0 : 173}, 500);
23 | widt = !widt;
24 | });
25 | $('#colorpickerField1, #colorpickerField2, #colorpickerField3').ColorPicker({
26 | onSubmit: function(hsb, hex, rgb, el) {
27 | $(el).val(hex);
28 | $(el).ColorPickerHide();
29 | },
30 | onBeforeShow: function () {
31 | $(this).ColorPickerSetColor(this.value);
32 | }
33 | })
34 | .bind('keyup', function(){
35 | $(this).ColorPickerSetColor(this.value);
36 | });
37 | $('#colorSelector').ColorPicker({
38 | color: '#0000ff',
39 | onShow: function (colpkr) {
40 | $(colpkr).fadeIn(500);
41 | return false;
42 | },
43 | onHide: function (colpkr) {
44 | $(colpkr).fadeOut(500);
45 | return false;
46 | },
47 | onChange: function (hsb, hex, rgb) {
48 | $('#colorSelector div').css('backgroundColor', '#' + hex);
49 | }
50 | });
51 | };
52 |
53 | var showTab = function(e) {
54 | var tabIndex = $('ul.navigationTabs a')
55 | .removeClass('active')
56 | .index(this);
57 | $(this)
58 | .addClass('active')
59 | .blur();
60 | $('div.tab')
61 | .hide()
62 | .eq(tabIndex)
63 | .show();
64 | };
65 |
66 | EYE.register(initLayout, 'init');
67 | })(jQuery)
--------------------------------------------------------------------------------
/tests/addons/test-addon-additional-fields.php:
--------------------------------------------------------------------------------
1 | load_addon( 'app-users-additional_fields' );
13 | $this->__init_addon();
14 | }
15 |
16 | private function __init_addon() {
17 | $addon = App_Users_AdditionalFields::serve();
18 | $addon->initialize();
19 | $this->addon = $addon;
20 | }
21 |
22 | function test_init() {
23 | $this->assertTrue( class_exists( 'App_Users_AdditionalFields' ) );
24 | }
25 |
26 | /**
27 | * Admin edit option is an old retired option for this addon
28 | * The addon should keep the setting if it has been set before.
29 | * Otherwise it should be always true
30 | */
31 | function test_deprecated_unset_admin_edit_option() {
32 | $options = appointments_get_options();
33 | if ( isset( $options['additional_fields-admin_edit'] ) ) {
34 | unset( $options['additional_fields-admin_edit'] );
35 | appointments_update_options( $options );
36 | }
37 |
38 | $this->assertTrue( $this->addon->_are_editable() );
39 | }
40 |
41 | function test_deprecated_set_to_true_admin_edit_option() {
42 | $options = appointments_get_options();
43 | $options['additional_fields-admin_edit'] = 1;
44 | appointments_update_options( $options );
45 | $this->assertTrue( $this->addon->_are_editable() );
46 |
47 | $options['additional_fields-admin_edit'] = true;
48 | appointments_update_options( $options );
49 | $this->assertTrue( $this->addon->_are_editable() );
50 | }
51 |
52 | function test_deprecated_set_to_false_admin_edit_option() {
53 | $options = appointments_get_options();
54 | $options['additional_fields-admin_edit'] = 0;
55 | appointments_update_options( $options );
56 | $this->assertFalse( $this->addon->_are_editable() );
57 |
58 | $options['additional_fields-admin_edit'] = false;
59 | appointments_update_options( $options );
60 | $this->assertFalse( $this->addon->_are_editable() );
61 | }
62 | }
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/demos/enabledisable.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jQuery MultiSelect Widget Demo
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
25 |
26 |
27 |
28 | Enable/Disable Widget
29 | Programmatically calling the disable and enable methods.
30 |
31 | var $widget = $("select").multiselect(),
32 | state = true;
33 |
34 | $("#toggle-disabled").click(function(){
35 | state = !state;
36 | $widget.multiselect(state ? 'disable' : 'enable');
37 | });
38 |
39 |
40 |
41 |
42 | Option 1
43 | Option 2
44 | Option 3
45 | Option 4
46 | Option 5
47 |
48 |
49 | Toggle Disabled
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/bower_components/jquery-ui-multiselect-widget/demos/preselected.htm:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jQuery MultiSelect Widget Demo
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Pre-selected & pre-disabled options
18 | Options one, three, and four have the selected="selected" attribute and are checked by default. Options five and six have the disabled="disabled" attribute.
19 | When the widget is initialized on the select, both attribute types are honored.
20 |
21 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/includes/external/google/IO/Exception.php:
--------------------------------------------------------------------------------
1 | = 0) {
44 | parent::__construct($message, $code, $previous);
45 | } else {
46 | parent::__construct($message, $code);
47 | }
48 |
49 | if (is_array($retryMap)) {
50 | $this->retryMap = $retryMap;
51 | }
52 | }
53 |
54 | /**
55 | * Gets the number of times the associated task can be retried.
56 | *
57 | * NOTE: -1 is returned if the task can be retried indefinitely
58 | *
59 | * @return integer
60 | */
61 | public function allowedRetries()
62 | {
63 | if (isset($this->retryMap[$this->code])) {
64 | return $this->retryMap[$this->code];
65 | }
66 |
67 | return 0;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/includes/shortcodes/js/my-appointments.js:
--------------------------------------------------------------------------------
1 | !function(n){function t(a){if(e[a])return e[a].exports;var p=e[a]={i:a,l:!1,exports:{}};return n[a].call(p.exports,p,p.exports,t),p.l=!0,p.exports}var e={};t.m=n,t.c=e,t.i=function(n){return n},t.d=function(n,e,a){t.o(n,e)||Object.defineProperty(n,e,{configurable:!1,enumerable:!0,get:a})},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},t.p="",t(t.s=2)}({2:function(n,t){Appointments=window.Appointments||{},function(n,t,e){"use strict";function a(n){return e(".app-my-appointments-cancel").change(function(n){var a=e(n.target),p=this.cancelAppointment;a.is(":checked")&&swal({title:t.aysCancel,text:"",type:"warning",showCancelButton:!0,cancelButtonText:t.no,confirmButtonText:t.yes,closeOnConfirm:!0},function(n){n?p(a.data("app-id")):a.attr("checked",!1)})}.bind(this)),this}a.prototype.cancelAppointment=function(n){var a={action:"cancel_user_app",app_id:n,cancel_nonce:t.nonce};e.post(t.ajaxurl,a,function(a){var p=e("input#cancel-"+n);if(void 0===a.success)return p.attr("disabled",!0),void swal(t.connectionError,"","error");a.success?(swal(t.cancelled,"","success"),p.closest("tr").css("opacity","0.3"),p.attr("disabled",!0)):swal(a.data)},"json")},n.myAppointments=function(n){return new a(n)},e("body").on("click",".appointments-paid-button",function(){var n=e(this).data("appointment");if(!(n&&n.ID&&n.price&&n.service_name))return!1;var t={price:n.price,app_id:n.ID,service_name:n.service_name};e(".appointments-paypal").find(".app_amount").val(t.price),e(".appointments-paypal").find(".app_custom").val(t.app_id);var a=e(".appointments-paypal").find(".app_submit_btn").val();if(a){var p=a.replace("PRICE",t.price).replace("SERVICE",t.service_name);e(".appointments-paypal").find(".app_submit_btn").val(p);var i=e(".appointments-paypal").find(".app_item_name").val(),c=i.replace("SERVICE",t.service_name);e(".appointments-paypal").find(".app_item_name").val(c),e(".appointments-paypal .app_submit_btn").focus()}e(".appointments-paypal").find("form").submit()})}(Appointments,appMyAppointmentsStrings,jQuery)}});
2 | //# sourceMappingURL=my-appointments.js.map
--------------------------------------------------------------------------------
/admin/pages/class-admin-transactions-page.php:
--------------------------------------------------------------------------------
1 | page_id = add_submenu_page(
17 | 'appointments',
18 | __('Transactions','appointments'),
19 | __('Transactions','appointments'),
20 | App_Roles::get_capability('manage_options', App_Roles::CTX_PAGE_TRANSACTIONS),
21 | "app_transactions",
22 | array( $this, 'transactions' )
23 | );
24 | }
25 |
26 | public function transactions () {
27 | global $type;
28 |
29 | $appointments = appointments();
30 |
31 | wp_reset_vars( array( 'type' ) );
32 |
33 | if ( empty( $type ) ) {
34 | $type = 'past';
35 | }
36 |
37 | $paged = empty( $_GET['paged'] ) ? 1 : absint( $_GET['paged'] );
38 |
39 | $startat = ( $paged - 1 ) * 50;
40 |
41 | $transactions = appointments_get_transactions( array( 'type' => $type, 'offset' => $startat, 'per_page' => 50 ) );
42 | $total = appointments_get_transactions(
43 | array(
44 | 'type' => $type,
45 | 'offset' => $startat,
46 | 'per_page' => 50,
47 | 'count' => true
48 | )
49 | );
50 |
51 | $columns = array();
52 |
53 | $columns['subscription'] = __( 'App ID', 'appointments' );
54 | $columns['user'] = __( 'User', 'appointments' );
55 | $columns['date'] = __( 'Date/Time', 'appointments' );
56 | $columns['service'] = __( 'Service', 'appointments' );
57 | $columns['amount'] = __( 'Amount', 'appointments' );
58 | $columns['transid'] = __( 'Transaction id', 'appointments' );
59 | $columns['status'] = __( 'Status', 'appointments' );
60 |
61 | $trans_navigation = paginate_links( array(
62 | 'base' => add_query_arg( 'paged', '%#%' ),
63 | 'format' => '',
64 | 'total' => ceil( $total / 50 ),
65 | 'current' => $paged
66 | ) );
67 |
68 | $file = _appointments_get_view_path( 'page-transactions' );
69 | if ( $file ) {
70 | include( $file );
71 | }
72 | }
73 |
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/includes/external/google/Auth/LoginTicket.php:
--------------------------------------------------------------------------------
1 |
26 | */
27 | class Google_Auth_LoginTicket
28 | {
29 | const USER_ATTR = "sub";
30 |
31 | // Information from id token envelope.
32 | private $envelope;
33 |
34 | // Information from id token payload.
35 | private $payload;
36 |
37 | /**
38 | * Creates a user based on the supplied token.
39 | *
40 | * @param string $envelope Header from a verified authentication token.
41 | * @param string $payload Information from a verified authentication token.
42 | */
43 | public function __construct($envelope, $payload)
44 | {
45 | $this->envelope = $envelope;
46 | $this->payload = $payload;
47 | }
48 |
49 | /**
50 | * Returns the numeric identifier for the user.
51 | * @throws Google_Auth_Exception
52 | * @return
53 | */
54 | public function getUserId()
55 | {
56 | if (array_key_exists(self::USER_ATTR, $this->payload)) {
57 | return $this->payload[self::USER_ATTR];
58 | }
59 | throw new Google_Auth_Exception("No user_id in token");
60 | }
61 |
62 | /**
63 | * Returns attributes from the login ticket. This can contain
64 | * various information about the user session.
65 | * @return array
66 | */
67 | public function getAttributes()
68 | {
69 | return array("envelope" => $this->envelope, "payload" => $this->payload);
70 | }
71 | }
72 |
--------------------------------------------------------------------------------