diff --git a/.gitignore b/.gitignore index 4be5f798..d6d7e800 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,4 @@ /!storage/uploads/index.html /vendor/ /metafile -/**/.DS_Store +.DS_Store diff --git a/assets/js/general_functions.js b/assets/js/general_functions.js index fafb0635..6b46fb41 100755 --- a/assets/js/general_functions.js +++ b/assets/js/general_functions.js @@ -627,7 +627,7 @@ window.GeneralFunctions = window.GeneralFunctions || {}; * @returns {string} The rendered HTML. */ exports.renderMapIcon = function (user) { - const data = []; + var data = []; if (user.address) { data.push(user.address); diff --git a/composer.json b/composer.json index 67454580..01de6e86 100644 --- a/composer.json +++ b/composer.json @@ -1,17 +1,8 @@ { "name": "alextselegidis/easyappointments", "description": "Open Source Web Scheduler", - "keywords": [ - "calendar", - "scheduler", - "appointments", - "events", - "dates", - "google", - "services" - ], - "type": "project", "homepage": "https://easyappointments.org", + "type": "project", "license": "GPL-3.0", "authors": [ { @@ -25,6 +16,15 @@ "wiki": "https://easyappointments.org/docs", "source": "https://github.com/alextselegidis/easyappointments" }, + "keywords": [ + "calendar", + "scheduler", + "appointments", + "events", + "dates", + "google", + "services" + ], "minimum-stability": "stable", "autoload": { "psr-4": { @@ -36,6 +36,7 @@ "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", + "ext-gd": "*", "gregwar/captcha": "^1.1", "phpmailer/phpmailer": "^5.2", "codeigniter/framework": "^3.1.6", @@ -45,5 +46,8 @@ "require-dev": { "roave/security-advisories": "dev-master", "phpunit/phpunit": "^7.4" + }, + "scripts": { + "test": "php vendor/bin/phpunit tests" } } diff --git a/gulpfile.js b/gulpfile.js index d7fe94fa..dc9eee82 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -11,25 +11,142 @@ // Gulp instance and plugins. const gulp = require('gulp'); +const fs = require('fs-extra'); +const zip = require('zip-dir'); const plugins = require('gulp-load-plugins')(); +const {execSync} = require('child_process'); // Gulp error handling. const source = gulp.src; -gulp.src = function() { +gulp.src = function () { return source.apply(gulp, arguments) .pipe(plugins.plumber({ errorHandler: plugins.notify.onError('Error: <%= error.message %>') })); }; -// Define gulp tasks. -gulp.task('build', require('./tools/gulp/build')(gulp, plugins)); -gulp.task('clean', require('./tools/gulp/clean')(gulp, plugins)); -gulp.task('composer', require('./tools/gulp/composer')(gulp, plugins)); -gulp.task('dev', require('./tools/gulp/dev')(gulp, plugins)); -gulp.task('docs', require('./tools/gulp/docs')(gulp, plugins)); -gulp.task('scripts', require('./tools/gulp/scripts')(gulp, plugins)); -gulp.task('styles', require('./tools/gulp/styles')(gulp, plugins)); -gulp.task('tests', require('./tools/gulp/tests')(gulp, plugins)); -gulp.task('watch', require('./tools/gulp/watch')(gulp, plugins)); +gulp.task('build', (done) => { + const archive = 'easyappointments-0.0.0.zip'; + + fs.removeSync('build'); + fs.removeSync(archive); + + fs.mkdirsSync('build'); + + fs.copySync('application', 'build/application'); + fs.copySync('assets', 'build/assets'); + fs.copySync('engine', 'build/engine'); + fs.copySync('storage', 'build/storage'); + fs.copySync('index.php', 'build/index.php'); + fs.copySync('composer.json', 'build/composer.json'); + fs.copySync('composer.lock', 'build/composer.lock'); + fs.copySync('config-sample.php', 'build/config-sample.php'); + fs.copySync('CHANGELOG.md', 'build/CHANGELOG.md'); + fs.copySync('README.md', 'build/README.md'); + fs.copySync('LICENSE', 'build/LICENSE'); + + execSync('cd build && composer install --no-dev --no-interaction --no-scripts --optimize-autoloader', function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + }); + + fs.removeSync('build/composer.json'); + fs.removeSync('build/composer.lock'); + fs.removeSync('build/storage/uploads/*'); + fs.removeSync('!build/storage/uploads/index.html'); + fs.removeSync('build/storage/logs/*'); + fs.removeSync('!build/storage/logs/index.html'); + fs.removeSync('build/storage/sessions/*'); + fs.removeSync('!build/storage/sessions/.htaccess'); + fs.removeSync('!build/storage/sessions/index.html'); + fs.removeSync('build/storage/cache/*'); + fs.removeSync('!build/storage/cache/.htaccess'); + fs.removeSync('!build/storage/cache/index.html'); + + zip('build', {saveTo: archive}, function (err) { + if (err) + console.log('Zip Error', err); + + done(); + }); +}); + +gulp.task('clean', (done) => { + fs.removeSync('assets/js/**/*.min.js'); + fs.removeSync('assets/css/**/*.min.css'); + + done(); +}); + +gulp.task('docs', (done) => { + fs.removeSync('docs/apigen/html'); + fs.removeSync('docs/jsdoc/html'); + fs.removeSync('docs/plato/html'); + + fs.mkdirSync('docs/apigen/html'); + fs.mkdirSync('docs/jsdoc/html'); + fs.mkdirSync('docs/plato/html'); + + const commands = [ + 'php docs/apigen/apigen.phar generate ' + + '-s "application/controllers,application/models,application/libraries" ' + + '-d "docs/apigen/html" --exclude "*external*" --tree --todo --template-theme "bootstrap"', + + 'npx jsdoc "assets/js" -d "docs/jsdoc/html"', + + 'npx plato -r -d "docs/plato/html" "assets/js"' + ]; + + commands.forEach(function (command) { + execSync(command, function (err, stdout, stderr) { + console.log(stdout); + console.log(stderr); + }); + }); + + done(); +}); + +gulp.task('scripts', (done) => { + gulp.src([ + 'assets/js/**/*.js', + '!assets/js/**/*.min.js' + ]) + .pipe(plugins.changed('assets/js/**/*')) + .pipe(plugins.uglify().on('error', plugins.util.log)) + .pipe(plugins.rename({suffix: '.min'})) + .pipe(gulp.dest('assets/js')); + + done(); +}); + +gulp.task('styles', (done) => { + gulp.src([ + 'assets/css/**/*.css', + '!assets/css/**/*.min.css' + ]) + .pipe(plugins.changed('assets/css/**/*')) + .pipe(plugins.cleanCss()) + .pipe(plugins.rename({suffix: '.min'})) + .pipe(gulp.dest('assets/css')); + + done(); +}); + +gulp.task('watch', (done) => { + gulp.watch([ + 'assets/js/**/*.js', + '!assets/js/**/*.min.js' + ], gulp.parallel('scripts')); + + gulp.watch([ + 'assets/css/**/*.css', + '!assets/css/**/*.min.css' + ], gulp.parallel('styles')); + + done(); +}); + +gulp.task('dev', gulp.series('clean', 'scripts', 'styles', 'watch')); + gulp.task('default', gulp.parallel('dev')); diff --git a/package-lock.json b/package-lock.json index f5e7b7c8..567270f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -184,12 +184,6 @@ "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", "dev": true }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", @@ -418,12 +412,6 @@ } } }, - "beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", - "dev": true - }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -707,24 +695,12 @@ "wrap-ansi": "^2.0.0" } }, - "clone": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", - "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "dev": true - }, "clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, "cloneable-readable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", @@ -957,12 +933,6 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, "datejs": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/datejs/-/datejs-0.0.2.tgz", @@ -1176,15 +1146,6 @@ "domelementtype": "1" } }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", - "dev": true, - "requires": { - "readable-stream": "~1.1.9" - } - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -2960,73 +2921,6 @@ "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", "dev": true }, - "gulp-shell": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/gulp-shell/-/gulp-shell-0.6.5.tgz", - "integrity": "sha512-f3m1WcS0o2B72/PGj1Jbv9zYR9rynBh/EQJv64n01xQUo7j7anols0eww9GG/WtDTzGVQLrupVDYkifRFnj5Zg==", - "dev": true, - "requires": { - "async": "^2.1.5", - "chalk": "^2.3.0", - "fancy-log": "^1.3.2", - "lodash": "^4.17.4", - "lodash.template": "^4.4.0", - "plugin-error": "^0.1.2", - "through2": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "gulp-sync": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/gulp-sync/-/gulp-sync-0.1.4.tgz", - "integrity": "sha1-IuuVKPlXN9RxXAEnIYCgjyQTPbU=", - "dev": true - }, "gulp-uglify": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", @@ -3072,73 +2966,6 @@ } } }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - } - } - }, "gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", @@ -3959,98 +3786,12 @@ } } }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", - "dev": true - }, - "lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", - "dev": true - }, - "lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", - "dev": true - }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, - "lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", - "dev": true - }, - "lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", - "dev": true, - "requires": { - "lodash._root": "^3.0.0" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, - "lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", - "dev": true - }, "lodash.template": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", @@ -4276,12 +4017,6 @@ "sigmund": "~1.0.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "mixin-deep": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", @@ -4331,15 +4066,6 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", - "dev": true, - "requires": { - "duplexer2": "0.0.2" - } - }, "mute-stdout": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", @@ -6307,25 +6033,6 @@ "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - }, - "dependencies": { - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - } - } - }, "vinyl-fs": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", diff --git a/package.json b/package.json index 5e9dfcf6..a4c224f4 100644 --- a/package.json +++ b/package.json @@ -1,44 +1,27 @@ { "name": "easyappointments", "description": "Open Source Web Scheduler", + "homepage": "https://easyappointments.org", + "author": "A.Tselegidis ", + "license": "GPL-3.0", + "keywords": [ + "calendar", + "scheduler", + "appointments", + "events", + "dates", + "google", + "services" + ], "repository": { "type": "git", "url": "git+https://github.com/alextselegidis/easyappointments.git" }, - "keywords": [ - "php", - "javascript", - "mysql", - "html" - ], - "author": "A.Tselegidis ", - "license": "GPL-3.0", "bugs": { "url": "https://github.com/alextselegidis/easyappointments/issues" }, - "homepage": "http://easyappointments.org", - "devDependencies": { - "del": "^2.2.0", - "fs-extra": "^0.26.3", - "gulp": "^4.0.2", - "gulp-changed": "^3.2.0", - "gulp-clean-css": "^3.10.0", - "gulp-debug": "^4.0.0", - "gulp-load-plugins": "^1.6.0", - "gulp-notify": "^3.2.0", - "gulp-plumber": "^1.2.1", - "gulp-rename": "^1.4.0", - "gulp-shell": "^0.6.5", - "gulp-sync": "^0.1.4", - "gulp-uglify": "^3.0.2", - "gulp-util": "^3.0.8", - "jsdoc": "^3.6.2", - "node-notifier": "^5.4.0", - "plato": "^1.5.0", - "zip-dir": "^1.0.0" - }, "engines": { - "node": ">=0.12" + "node": ">=10" }, "dependencies": { "bootstrap": "^3.4.1", @@ -53,10 +36,25 @@ "sticky-table-headers": "^0.1.24", "trumbowyg": "^2.18.0" }, + "devDependencies": { + "fs-extra": "^0.26.3", + "gulp": "^4.0.2", + "gulp-changed": "^3.2.0", + "gulp-clean-css": "^3.10.0", + "gulp-debug": "^4.0.0", + "gulp-load-plugins": "^1.6.0", + "gulp-notify": "^3.2.0", + "gulp-plumber": "^1.2.1", + "gulp-rename": "^1.4.0", + "gulp-uglify": "^3.0.2", + "jsdoc": "^3.6.2", + "node-notifier": "^5.4.0", + "plato": "^1.5.0", + "zip-dir": "^1.0.0" + }, "scripts": { - "start": "gulp", - "build": "gulp build", - "docs": "gulp docs", - "tests": "gulp tests" + "start": "npx gulp", + "build": "npx gulp build", + "docs": "npx gulp docs" } } diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php index d3f63b67..93893f51 100644 --- a/tests/phpunit/bootstrap.php +++ b/tests/phpunit/bootstrap.php @@ -13,6 +13,5 @@ // Bootstrap Easy!Appointments PHPUnit Tests -require_once __DIR__ . '/../../src/config.php'; -require_once __DIR__ . '/../../src/autoload.php'; +require_once __DIR__ . '/../../config.php'; require_once __DIR__ . '/../../vendor/autoload.php'; diff --git a/tools/gulp/build.js b/tools/gulp/build.js deleted file mode 100644 index d57b8a21..00000000 --- a/tools/gulp/build.js +++ /dev/null @@ -1,58 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -const del = require('del'); -const fs = require('fs-extra'); -const zip = require('zip-dir'); - -module.exports = (gulp, plugins) => { - return (done) => { - del.sync([ - 'build', - 'easyappointments-0.0.0.zip' - ]); - - fs.copySync('src', 'build'); - fs.removeSync('build/config.php'); - fs.copySync('CHANGELOG.md', 'build/CHANGELOG.md'); - fs.copySync('README.md', 'build/README.md'); - fs.copySync('LICENSE', 'build/LICENSE'); - - del.sync([ - 'build/storage/uploads/*', - '!build/storage/uploads/index.html' - ]); - - del.sync([ - 'build/storage/logs/*', - '!build/storage/logs/index.html' - ]); - - del.sync([ - 'build/storage/sessions/*', - '!build/storage/sessions/.htaccess', - '!build/storage/sessions/index.html' - ]); - - del.sync([ - 'build/storage/cache/*', - '!build/storage/cache/.htaccess', - '!build/storage/cache/index.html' - ]); - - zip('build', {saveTo: 'easyappointments-0.0.0.zip'}, function (err, buffer) { - if (err) - console.log('Zip Error', err); - - done(); - }); - }; -}; diff --git a/tools/gulp/clean.js b/tools/gulp/clean.js deleted file mode 100644 index 6ab1f7bc..00000000 --- a/tools/gulp/clean.js +++ /dev/null @@ -1,21 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -const del = require('del'); - -module.exports = (gulp, plugins) => { - return () => { - del.sync([ - 'src/assets/js/**/*.min.js', - 'src/assets/css/**/*.min.css' - ]) - }; -}; diff --git a/tools/gulp/composer.js b/tools/gulp/composer.js deleted file mode 100644 index 731c086f..00000000 --- a/tools/gulp/composer.js +++ /dev/null @@ -1,45 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -const del = require('del'); - -/** - * Install and copy the required files from the "vendor" directory. - * - * Composer needs to be installed and configured in order for this command to - * work properly. - */ -module.exports = (gulp, plugins) => { - return () => { - del.sync([ - './src/vendor/**/*', - '!./src/vendor/index.html' - ]); - - return gulp.src([ - 'vendor/**/*', - '!vendor/**/{demo,docs,doc,fixtures,examples,test,tests,extras,language,license,LICENSE}{,/**}', - '!vendor/**/{composer.json,composer.lock,.gitignore}', - '!vendor/**/{*.yml,*.xml,*.md,*phpunit*,*.mdown}', - '!vendor/bin{,/**}', - '!vendor/codeigniter{,/**}', - '!vendor/doctrine{,/**}', - '!vendor/phpdocumentor{,/**}', - '!vendor/phpspec{,/**}', - '!vendor/phpunit{,/**}', - '!vendor/sebastian{,/**}', - '!vendor/symfony{,/**}', - '!vendor/phar-io{,/**}', - '!vendor/webmozart{,/**}' - ]) - .pipe(gulp.dest('./src/vendor/')); - }; -}; diff --git a/tools/gulp/dev.js b/tools/gulp/dev.js deleted file mode 100644 index bd1f7f71..00000000 --- a/tools/gulp/dev.js +++ /dev/null @@ -1,20 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - - - -module.exports = (gulp, plugins) => { - const task = require('gulp-sync')(gulp); - - return () => { - gulp.start(task.sync(['clean', 'scripts', 'styles', 'watch']), 'dev'); - }; -}; diff --git a/tools/gulp/docs.js b/tools/gulp/docs.js deleted file mode 100644 index 1440cd7d..00000000 --- a/tools/gulp/docs.js +++ /dev/null @@ -1,47 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -const exec = require('child_process').execSync; -const fs = require('fs-extra'); -const path = require('path'); - -/** - * Generate code documentation. - */ -module.exports = (gulp, plugins) => { - return (done) => { - fs.removeSync('docs/apigen/html'); - fs.mkdirSync('docs/apigen/html'); - fs.removeSync('docs/jsdoc/html'); - fs.mkdirSync('docs/jsdoc/html'); - fs.removeSync('docs/plato/html'); - fs.mkdirSync('docs/plato/html'); - - const commands = [ - 'php docs/apigen/apigen.phar generate ' + - '-s "src/application/controllers,src/application/models,src/application/libraries" ' + - '-d "docs/apigen/html" --exclude "*external*" --tree --todo --template-theme "bootstrap"', - - path.join('.', 'node_modules', '.bin', 'jsdoc') + ' "src/assets/js" -d "docs/jsdoc/html"', - - path.join('.', 'node_modules', '.bin', 'plato') + ' -r -d "docs/plato/html" "src/assets/js"' - ]; - - commands.forEach(function (command) { - exec(command, function (err, stdout, stderr) { - console.log(stdout); - console.log(stderr); - }); - }); - - done(); - }; -}; diff --git a/tools/gulp/scripts.js b/tools/gulp/scripts.js deleted file mode 100644 index e5f49ac7..00000000 --- a/tools/gulp/scripts.js +++ /dev/null @@ -1,24 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -module.exports = (gulp, plugins) => { - return () => { - gulp.src([ - 'src/assets/js/**/*.js', - '!src/assets/js/**/*.min.js' - ]) - .pipe(plugins.changed('src/assets/js/**/*')) - .pipe(plugins.uglify().on('error', plugins.util.log)) - .pipe(plugins.rename({suffix: '.min'})) - .pipe(gulp.dest('src/assets/js')); - }; -}; - diff --git a/tools/gulp/styles.js b/tools/gulp/styles.js deleted file mode 100644 index fc77c2e6..00000000 --- a/tools/gulp/styles.js +++ /dev/null @@ -1,23 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -module.exports = (gulp, plugins) => { - return () => { - gulp.src([ - 'src/assets/css/**/*.css', - '!src/assets/css/**/*.min.css' - ]) - .pipe(plugins.changed('src/assets/css/**/*')) - .pipe(plugins.cleanCss()) - .pipe(plugins.rename({suffix: '.min'})) - .pipe(gulp.dest('src/assets/css')); - }; -}; diff --git a/tools/gulp/tests.js b/tools/gulp/tests.js deleted file mode 100644 index 32c9ddc7..00000000 --- a/tools/gulp/tests.js +++ /dev/null @@ -1,16 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -module.exports = (gulp, plugins) => { - return () => { - plugins.util.log('Not implemented yet.'); - }; -}; diff --git a/tools/gulp/watch.js b/tools/gulp/watch.js deleted file mode 100644 index 0e0611a6..00000000 --- a/tools/gulp/watch.js +++ /dev/null @@ -1,24 +0,0 @@ -/* ---------------------------------------------------------------------------- - * Easy!Appointments - Open Source Web Scheduler - * - * @package EasyAppointments - * @author A.Tselegidis - * @copyright Copyright (c) 2013 - 2018, Alex Tselegidis - * @license http://opensource.org/licenses/GPL-3.0 - GPLv3 - * @link http://easyappointments.org - * @since v1.4.0 - * ---------------------------------------------------------------------------- */ - -module.exports = (gulp, plugins) => { - return () => { - gulp.watch([ - 'src/assets/js/**/*.js', - '!src/assets/js/**/*.min.js' - ], ['scripts']); - - gulp.watch([ - 'src/assets/css/**/*.css', - '!src/assets/css/**/*.min.css' - ], ['styles']); - }; -};