diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..4aa6cb451 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,72 @@ +sudo: false +language: php +php: +- 7.1 +- 7.2 +- 5.6 +matrix: + allow_failures: + fast_finish: true +addons: +- ssh_know_hosts: + - "$ssh_host" +apt: + sources: + - mysql-5.7-trusty + - phpunit-6.1 + packages: + - sshpass + - mysql-server + - mysql-client +services: +- mysql +before_install: +- sudo apt-get install sshpass +- sudo service mysql restart +- mysql -e 'CREATE DATABASE IF NOT EXISTS test;' +install: +- echo -e "Install" +- sudo mv ./tests/bootstrap-config-sample.php ./tests/bootstrap-config.php +- sudo ./tests/bin/install-wp-tests.sh test travis "" /tmp/wordpress localhost latest + true +- composer install +- sudo mkdir /tmp/wordpress/wordpress-test/wp-content/uploads +script: phpunit +before_deploy: +- echo "Seção executada antes do deploy!" +- openssl aes-256-cbc -K $encrypted_cb93ef43fcd2_key -iv $encrypted_cb93ef43fcd2_iv + -in deploy_rsa.enc -out /tmp/deploy_rsa -d +- eval "$(ssh-agent -s)" +- chmod 600 /tmp/deploy_rsa +- ssh-add /tmp/deploy_rsa +- echo -e "Host $ssh_host\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config +- ssh-add -l +deploy: +- provider: script + script: ssh $ssh_user@$ssh_host $script_deploy_tainacan + skip_cleanup: true + on: + branch: develop +cache: + directories: + - vendor + - composer +notifications: + slack: + rooms: + secure: WjgA4OIad0/Ai+x1TUd7KShXpaJco9E/MfI6DWJFnBUF5JLKOxymTGbR82wspmnEwzXGWn++co1wNJh20pWobaIToL/2OpBd7xo5MHglNobH4cidmSIDPOQM8ItqBneRjayhXtfShRqQDNCk1D3d5KDUacXXeCX+GLdRuwdc/YuG7Zh3y1KrF6l10cwD/5JOJECwwMbqeLOezvzGi8ITL6pqnEEeNTb0Zr+K2Ru91RBOars4TLK3f5CmX4XxA4oQSMsrHKzTO2OZLua5CRwcBwKmtSqr0Z/W+RrXu2TLxvHYJ39t9uwssI3HmGoB/uNcahBTcE0Vk/phi3nfFO8KUGNqp3xLgUsF/xlb+WiIip2xOf9jq+XNGWwIVB2vWqiQppm58h57LgDNTF21XJOtfVPEyf9Em+VSfNgACq47u4kktgqgZ47xNEBZuv1s3as8BcgdQH78hF+qguhhHJH6RgyHt+GYAq2uRLF8z3IM8hfKpb5mA9jD3UfW3pXEtKF9K+XqtNycX8KxJ2ldEJrMguaqW3sUHSLBo+r71OqldHeuwIfyIGIROTym11GWH56rIXxd51nJuVDWMvTg7bwcjN/d61LdfsaOAgqAYSUPlJjjp67GHZP/vson3uPr//NgnAJ/4gtjwReB7IX8oBLhB5s8lU6dnfnsLbY3Rt+THNA= + on_sucess: always + on_failure: always + email: + on_success: never + on_failure: always +env: + global: + - secure: LnUpxgHL/Qgpbg20mRErlnwb8tvNs6f7uPRe9c82UuMP69uDZeD3K5GNzL6u0Y+C/zNHk7tCnUszDC7FtQAij6qi72HHW2zz4zVJ+DFI3b+hx7+rSKsjtbnJChTbknSu3rW+yHYRTIUZJQ/Tg6thDLKzU0a4VRb+ickDpRYLyP+Cf4+xs7rwAhjiboMNIGXahrCpnbhctmOhRgZaHvfnPB9prRs5lOCCBQqSwMmjEo7OJeCCUjfpU5xq3EjUEzwjzzBlSf3240PS/LOBFr2iGF30VT9LDTb1iUZU1gTcaxaK+/EjKLG/wtcH8TOaLJpsksbnMkSTrG3ICblXl1G4Itu8IHzLgOmWoiWIVXZ4y17aYyj/y7YZtX+fjB6qs9RG5ZnSpHkSDEni8CCC8Ltf9jVSkLEust/bNLgkd02hJ4xtVxOaoBYEh3hcylJ/co8BTDdbNyT3BwrFc4f2jfRh5DYzyrKaTG5IJAT2BfyjD/BsxBE3EgIuJFja1zVJKMcuCmogDiHi6sb0zhF+LbLy0nXqvysTrMEYbDppVYQloz3BKb2v2m/jc89G7v8AjnvwTUgj64PUj+p10ngfIA+FHPILLtd/fNm0zRIRDqSfE7rpGZo9EoZ9jq0wVSmy0DK8kFTX+9RFW8xYmFnTgB3beKWqdK9CAqXEeeD3ABejXTc= + - secure: ZgQILlaSklEldQIISTfQC+0vhutWYs3nWzQP6bRluHmzb0PSz/7VqoFfzj7mi3AEtvsNIfDGv1AL8NUdqj9ZKBhgcFN178UcM87ObXIhpkZ43yIcNEHGQXBu0WN9Hn2kpj8sTWUFkzDUfLznShR8FDWwyxHHdH5TAMYJ8ZvLaDWZBAKJ0V+PYJASoI9CKVT16rx+K87MSavqvgLHsRticLgK/V/KVi5CMr/4J2WSeUpgzxKPLKP2yoTspJXbcUWuZcbXR+hp/MIvFJVYw7kK6wpixAzAuw6evrYwfOxLjZ5P2pNFrpMtBfONYKFpWxZyiPeUO8kBAV5R7XpzUUzfxRgu9Ca+6VYm8mNfHck4p7NLK+IjHLi1CrL3YYu8Ck1O01ah2i1ZIEaGL+NVRdrTHNOWZfWok3Wsv4UyLsgAeM4/K6dExauUqgVE/cwm/mwQ9ycoAoqfwVteHBmb7N+2nhlQwP1K1RAArS0ldm16aOD/eYcQ9kd5IQjRHr+QnMmhm7XRLJwxxL/Wpss7DNG4zWfEFNS9yYfDa8q0CRLT68sSjd5egnGyjYrW5dMSzFSu8G6CR/NvXTExlElxmilehDoLrGqRmLedW/jlbPQmNf6T+fVOE/r5vn//wMpk/e7rc0ivXh0YSDfyZ/3I052Uqingxl0ruLsoM6zIQW3b91U= + - secure: uUM5BXTWfh6jWqBdbu7sUrVVo4dUMNdorPaB6DNo0xOcjK/+b6lI41oQODmLKz48in0N0aWU+DH4gf3kkyhd/4ebPozHP5R/31ygYiNUzPFttZteV1rzCDaK/kwR8bH1p0hYibSeuqQgLt+VA7MD87x1/V1HrxZ+BPwYcrt8zNOb1ufqanu8t2URhyng5ZySOuBtXoDi9mR3KHX/V6DI1IybuAroV6LZm6d3PKpyD4GQtj48uw2IETQqMYXkHwYKPgIBLeXVDqMV8JP3MQ5WppheL7RBwHuClIAEPK47WEcnVqWkHssH3E3whzpIOo99R6EqRfVDAGwZAu2+SDuqFu5QGDfAF99ZSbh/m96lj9/drWK+0KOHOtEqhEq5FycOkLuHREIdLIg9uGqXLaGY+noAU7jXi70Uk3v4zrDxUocIdPrMaTutrE0pUPacCgnHtkTOkpJr7PHq2Zry8kMU39IRJQ3nIVcxSoUlWv9Xd+RjMw833RdZ1m5HVzUT+zE2jr8jhJgiNb/amQpH8pYcqI+NDqk8RFn9O0fhWYJmePtgDK0++9VAdBs8A4lmiFbkB+qotdZLemFhQObNOQsK/a3YoDgvjGfnvMXyGLdEFoT962mmnMteBq/mCcSEnRqLSA5gifzoJyeLRXKmVpoRAwrtjn5u8Qa+a8BQKCpDyno= + - secure: TxMSWrKRGiDamfCdmpfVJMG9fpXrlgGhS6Pbm7iO3eMMS6v+ZF5Qo7RyGYPsJvspKuncGpuRynoKff8jWsouYDqyMFZvtmG9EyJI2GYvy7K4E2HRRrZeNZHviP0tKq++0L5VLiY3pr9uUZYbmjKTk2k5V7ddd2EVK6AIqh/7dLmf9FPZ7HE+QuEQiaijBZ/mvBW+ntZHfZoyv/yWW5zPcA6vxAdtMa1iXhv6ByGFd+odCblq6HmBqDlaASDoXrrTSc0bkXeX44tqt+OMDhwsEqtzLlI5x1WYnYt5lkFuGjTn+WG/PLmrJxbq1c4MXU1cgcaiuRP8Y/Gq1XoffbFa9KZ/jfx0c9dxwRIedJrctrGC8jSSmlM1C+p9QFGWZUhF3b0WgRvP8NYUhQ0ToV3rE4XeApElHd27FYibDkWz72cpq6EiehJoQLFLyKpWcu7gtgjMUbGIllF2k6+oV7jzpgRNktzz5gWH2i1Vj5//Wyq1Md5NJ+sBspTmTcw9s09W2ghG/9bzksS5XtpOFfYVIqkeFbBK0lcGufDNoVSci4kTs12U/OMLcXaEUymHpKCS1UWCj/nRjxUosBBQ+WQzAJixEijTs8t0WKZZ2eDZhTOnpa50WV4DDO/EZHaQ7sgm98Y/V9gwvyLTOifjT2eXDNYXdH90RBGbDoUueyavqag= + - secure: ZZBechMeYwtzFe8dsMDQ3QPLUvZ2P5+abcTZbODMRmOomm5PixOr6EVJhVaUYnEtqgc4AaNnzVGmNrfoyEZC9Kza4hyEfABHPPcMDOUoC8v5HVpX08nLvWs6e5MdFCNeqWlJpTUR1ZVpYjXuIvaVVO9aT1N7ZAZBYPEaPotxPOt1+viJmWOUFpqhap/9VPkSn16DUiz9vQcJQe7PfxclxQkyhFlIhO0LRE//sR42ED1P3/efIRoAdfMSgISuLgQhZZYJ0wrh2aVz5YjRLfq80rQEynLFfCvSVEWhde3ZRGgX7oWo7LRfXF/0t4g/52QhfpWUvFw1fvljhzd/o1xUY6j2u3OS6Atx87QOvdj9a0D33UjWyOEXumUVupoSN5jnFnb41lKSoYwmx7rEEYGtYCBIzBkZfqOiKn0KYn1yIQbW0g6ptlC5C3o0wZchdCTaWnvNd2m6lj+a2j30b88F815qe0V7H9GxzUknccLfG/v/stBOFpYv1zd4bVgcmARHNwWORN6U3C+r9A3AoJkhLRedfsfmcftnxol55Okpz6Jn0z8/KVtuZ6FNlN3qfP5RLE6vP2y1s5fu/EWnsbNkP5JdCWKrRF9rryu3CURpci9f4zYcghuIRMfuZ9muQhdS7MYLJhwldy6lzPYg2l66laRgPkxeTHAamXHalhQXi60= + - secure: VMRxLl42yXCGRsmogIoYb31jzE9dyCpmlyB2fM+VsNNp/WWp1IB5QhhmH5klxw7KG16+Mhz7E9k99v+CmOyMVWmse3l9JXUoImdUNue5csgiMziHXU6A0zXv3EZVI0MfWilBoFOlc91c0n9h1jlUJ9VSBIaac+VqM8Icpw/w2ASha4XujJ02ahnYItmz9WVG2rG7mKYpc9DDHi2zbR+LyNLuX4tvi1CQtkpRiIFbs5eX+vIwQ2bFG1vpbbsiFkFPVGRlfh4DQaNo0Bam08BfsmK4TkYRiGxXZYTBM1QWJKdnzTZOnZ8uaiKCAGxC+5VsWuuqFfn9qPfx/7S43NGwG9aJSglkRZ9S4eKodMjCg+oGosq2dkGasll7owrk1vY1/rBjJodg+Y0q5uOXYfjT/Jmq0c/u0uQewUSdG6mSMEpmbSg43cAeA/9xruM0sVelBzH5zgvzQjUF6yTsN0E3XVwxmS6l1YesnfYXmGnJ1w5vQJMbLaN1FyPoRw0AsaGGqQooL4FEwb+vu299J9x61U4GxKJrJd16mRWItu0Rj4oZ79zdElTRcjvGQz4j1qelDDfxufst9hIqkSjIEzsBPZMIp/49FJfKwgsuB2fl8L3q4XnqPG4AXRRsb25JEMPQYEpvk31kVmtCGadhAKgLrjZ2Kd6amyZ37pt2oASilGA= + - secure: C+qQ9H2aTpZAjHBEW4LcRODxdozEwerA8CF1bQZ2sJCXY0wlP9tikaaNWrCBWGv9/v7X5qIwORXJwGyEAxg331FsJNvQ7i+rNSbna5NlHozWChUQvjPe+fWpCPdAEKeAF+JyDLKRbsWo2SqiaYDsnTXD5BaancOCGqkpEDZrm7HdUL091arG8CJVjUG2OaEo0aNsnuw7Z9NVTw5zD9lmGBlpKlTwXXfjzNg1Y5ThHkfxsCoYWa8rfL+wdec6ZghJFZ6ITZbYKBPbXYIUyJO1dboJi0+EhAnL9rD1NmcK2ERz8d99HqKhzEI/KoHCtOe+czOBhi5/OMe2lza1tL+z3uFF4TS86Qdk7JARegdHdxTPlztcagTd70wUwJ1POMBRnrVdFhnXvWDX87lk0RGvGUlCTsh+lMwZBM4UdMH96Eb+mwECe5qeWE8vGkPEtny6sTKhJvEhHmHmVNL/tYdqXsEdgfSOSHrhXfvesUMvr62/KlA9mFTtAzShom+4Jpx+1OlLdNDHyRmODoRhDJnuHRCOCjXzks8W12Hbg5ej7KnqLO0ymlGQumGoVjWzOHKwdNuItN1mEGRA/p0+nxS2tSAyg9rJF4spFRugGa1yapDzj7bqUfq8oCa4qzIbuiNU22Y8SQMdYJxvHBhq4wLcRX9g7u1uNEtKyykb5+nrKug= + - secure: YQEb1NAiHbgkiaHGJ6FHxMb7CYy44uszfqyC2Yj98ueuZDFJFIJqchUe9k2H3CdayU0i7MhCEk0LL4hSZpXRhyyFs6AxWh82ISPrBaraCyd5x51EoKPeVmTW1MTLjl467HX357Do41JsooMkGX8llpaAzJP5mY7fJmx91Cnpg5dQbAeSWhwSM16yfYHHpQXvoGmTlcj89hoJ7LLTMEg6o+CgGlYnx5LB/vvWxHNiMNVB+IJEMo7MopQUVkVqTEJ+k8x0i2tBdwLNCoMl79xrsYETsSRzn85zuD/wqfY0yfvEwYsKD1YtkjJW14/y4mFFHCyW+/igORknuBRF1qRZEOHeTMiDmNOsA2yi1RXjNIeUpOctCNV29KDAyqkOfQwlKMzezBGoVKRsxd3oWZpjNjnqgQ7lEx5CwQKN5pSxMmd1pWZTkY+Ci9b+VrBvshhdPwBKsjZjS8jDHlX0uT6OHPN17PFziCtKRfh+gukSLJJcxRz9H/4F6NLpFJzx4/UsFLW45XY5BXwucYgUyk+oXeQDlzSXVpAuE2KDOaHWg12jlnWptTq7rHfKE0N61JOgolThCun5i+0L6eydaPNswqUtbB/WlDdkbpDMaUFR/HFDFNkTiJyPpTeYHdsqwq57hqI/D2Otkc28wbVHodYZyxiaLe9gozmD5IYS8Sf9tdM= diff --git a/deploy_rsa.enc b/deploy_rsa.enc new file mode 100644 index 000000000..79323ba06 Binary files /dev/null and b/deploy_rsa.enc differ diff --git a/src/admin/class-tainacan-admin.php b/src/admin/class-tainacan-admin.php index 244e0cb92..c50ac03a8 100644 --- a/src/admin/class-tainacan-admin.php +++ b/src/admin/class-tainacan-admin.php @@ -23,7 +23,7 @@ class Admin { add_filter( 'admin_body_class', array( &$this, 'admin_body_class' ) ); add_action( 'init', array( &$this, 'register_user_meta' ) ); - add_action( 'after_setup_theme', array( &$this, 'load_icon_font')); + add_action( 'after_setup_theme', array( &$this, 'load_theme_files')); } @@ -58,14 +58,15 @@ class Admin { return $style; } - function load_icon_font() { - add_action( 'wp_enqueue_scripts', array(&$this, 'add_material_design_icon_css') ); + function load_theme_files() { + add_action( 'wp_enqueue_scripts', array(&$this, 'add_theme_files') ); } - function add_material_design_icon_css() { + function add_theme_files() { global $TAINACAN_BASE_URL; wp_enqueue_style( 'style', $TAINACAN_BASE_URL . '/assets/css/fonts/materialdesignicons.css' ); + wp_enqueue_script('underscore', includes_url('js') . '/underscore.min.js' ); } function add_admin_css() { diff --git a/src/admin/components/advanced-search/advanced-search.vue b/src/admin/components/advanced-search/advanced-search.vue new file mode 100644 index 000000000..660bd0cbc --- /dev/null +++ b/src/admin/components/advanced-search/advanced-search.vue @@ -0,0 +1,135 @@ + + + + + \ No newline at end of file diff --git a/src/admin/components/edition/category-edition-form.vue b/src/admin/components/edition/category-edition-form.vue index 0c50a64da..9cf10482a 100644 --- a/src/admin/components/edition/category-edition-form.vue +++ b/src/admin/components/edition/category-edition-form.vue @@ -140,6 +140,7 @@ import { mapActions, mapGetters } from 'vuex'; import TermsList from '../lists/terms-list.vue' import htmlToJSON from 'html-to-json'; + import CustomDialog from '../other/custom-dialog.vue'; export default { name: 'CategoryEditionForm', @@ -194,17 +195,20 @@ formNotSaved = true; if (formNotSaved) { - this.$dialog.confirm({ - message: this.$i18n.get('info_warning_category_not_saved'), + this.$modal.open({ + parent: this, + component: CustomDialog, + props: { + icon: 'alert', + title: this.$i18n.get('label_warning'), + message: this.$i18n.get('info_warning_category_not_saved'), onConfirm: () => { next(); - }, - cancelText: this.$i18n.get('cancel'), - confirmText: this.$i18n.get('continue'), - type: 'is-secondary' - }); + } + } + }); } else { - next() + next(); } }, methods: { diff --git a/src/admin/components/edition/collection-edition-form.vue b/src/admin/components/edition/collection-edition-form.vue index ec25a566b..d621d89c1 100644 --- a/src/admin/components/edition/collection-edition-form.vue +++ b/src/admin/components/edition/collection-edition-form.vue @@ -301,6 +301,7 @@ class="control" custom> {{ registeredViewModes[viewMode].label }} @@ -326,6 +327,7 @@ @focus="clearErrors('default_view_mode')"> diff --git a/src/admin/components/edition/item-edition-form.vue b/src/admin/components/edition/item-edition-form.vue index 921a2fe3e..9e2047c19 100644 --- a/src/admin/components/edition/item-edition-form.vue +++ b/src/admin/components/edition/item-edition-form.vue @@ -21,7 +21,7 @@ :title="$i18n.getHelperTitle('items', 'status')" :message="$i18n.getHelperMessage('items', 'status')"/> -
+
+
+
+ + +
+ +
+ + + + +
+
+ + +
+
+ + +
+ +
+ + + + + +
+ + + + + +
+ +
+
+ + + @@ -84,8 +226,6 @@ v-for="(column, index) in tableFields" v-if="column.display" :label="column.name" - :aria-label="(column.field != 'row_thumbnail' && column.field != 'row_creation' && column.field != 'row_author') - ? column.name + '' + (item.metadata ? item.metadata[column.slug].value_as_string : '') : ''" class="column-default-width" :class="{ 'thumbnail-cell': column.field == 'row_thumbnail', @@ -101,10 +241,10 @@ v-if="column.field !== 'row_thumbnail' && column.field !== 'row_actions' && column.field !== 'row_creation'" - :data="renderMetadata( item.metadata[column.slug] )"/> --> + :data="renderMetadata(item.metadata, column)"/> -->

+ v-html="renderMetadata(item.metadata, column)"/> + :src="item['thumbnail'].thumb ? item['thumbnail'].thumb : thumbPlaceholderPath">

@import "../../scss/_variables.scss"; + @import "../../scss/_view-mode-grid.scss"; + @import "../../scss/_view-mode-cards.scss"; .selection-control { diff --git a/src/admin/components/lists/terms-list.vue b/src/admin/components/lists/terms-list.vue index 918ff369a..770dd48ea 100644 --- a/src/admin/components/lists/terms-list.vue +++ b/src/admin/components/lists/terms-list.vue @@ -85,7 +85,8 @@ diff --git a/src/admin/components/other/alert-icon.vue b/src/admin/components/other/alert-icon.vue new file mode 100644 index 000000000..df4ac4d3b --- /dev/null +++ b/src/admin/components/other/alert-icon.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/src/admin/components/other/check-icon.vue b/src/admin/components/other/check-icon.vue new file mode 100644 index 000000000..5e1054c8d --- /dev/null +++ b/src/admin/components/other/check-icon.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/src/admin/components/other/custom-dialog.vue b/src/admin/components/other/custom-dialog.vue new file mode 100644 index 000000000..6b44849e2 --- /dev/null +++ b/src/admin/components/other/custom-dialog.vue @@ -0,0 +1,57 @@ + + \ No newline at end of file diff --git a/src/admin/components/other/question-icon.vue b/src/admin/components/other/question-icon.vue new file mode 100644 index 000000000..eaac32147 --- /dev/null +++ b/src/admin/components/other/question-icon.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/src/admin/js/main.js b/src/admin/js/main.js index 6ade346be..4f0409f44 100644 --- a/src/admin/js/main.js +++ b/src/admin/js/main.js @@ -41,7 +41,7 @@ import draggable from 'vuedraggable' import store from '../../js/store/store' import router from './router' import eventBusSearch from '../../js/event-bus-search'; -import { I18NPlugin, UserPrefsPlugin, RouterHelperPlugin, ConsolePlugin } from './utilities'; +import { I18NPlugin, UserPrefsPlugin, RouterHelperPlugin, ConsolePlugin, UserCapabilitiesPlugin } from './utilities'; import VueMask from 'v-mask'; // Configure and Register Plugins @@ -50,6 +50,7 @@ Vue.use(VTooltip) Vue.use(I18NPlugin); Vue.use(UserPrefsPlugin); Vue.use(RouterHelperPlugin); +Vue.use(UserCapabilitiesPlugin); Vue.use(ConsolePlugin, {visual: false}); Vue.use(VueMask); diff --git a/src/admin/js/utilities.js b/src/admin/js/utilities.js index 553cc3a61..40deae979 100644 --- a/src/admin/js/utilities.js +++ b/src/admin/js/utilities.js @@ -257,8 +257,20 @@ RouterHelperPlugin.install = function (Vue, options = {}) { }, getEventEditPath(id) { return '/events/' + id + '/edit'; - } - + } } +} +// USER CAPABILITIES PLUGIN - Allows easy checking of user capabilities. +export const UserCapabilitiesPlugin = {}; +UserCapabilitiesPlugin.install = function (Vue, options = {}) { + + Vue.prototype.$userCaps = { + hasCapability(key) { + for (let i = 0; i < tainacan_plugin.user_caps.length; i++) + if (tainacan_plugin.user_caps[i] == key) + return true; + return false; + } + } } \ No newline at end of file diff --git a/src/admin/pages/lists/categories-page.vue b/src/admin/pages/lists/categories-page.vue index e21085fca..49f1c2dba 100644 --- a/src/admin/pages/lists/categories-page.vue +++ b/src/admin/pages/lists/categories-page.vue @@ -4,7 +4,7 @@

+ v-if="$userCaps.hasCapability('edit_tainacan-taxonomies')">
+ v-if="$userCaps.hasCapability('edit_tainacan-collections')">
-