Commit c57ec982 authored by Simon's avatar Simon

In progress

parent c3c833fb
This diff is collapsed.
jQuery((function(n){var o=wp.i18n.__,a=document.querySelector("#rollback-plugin"),e=n(a).find("button"),i=e.find("span"),r=function(n){GLSR.notices.error(GLSR.text.rollback_error),e.removeClass("is-busy").prop("disabled",0),console.error(n)},s=function(n){var a;_.isObject(n)&&!_.isFunction(n.always)?a=n.errorMessage:_.isString(n)&&"-1"===n?a=o("An error has occurred. Please reload the page and try again."):_.isString(n)?a=n:void 0!==n.readyState&&0===n.readyState?a=o("Connection lost or the server is busy. Please try again later."):_.isString(n.responseText)&&""!==n.responseText?a=n.responseText:_.isString(n.statusText)&&(a=n.statusText),a=a.replace(/<[\/a-z][^<>]*>/gi,""),GLSR.notices.error(GLSR.text.rollback_error+": "+a)},t=function(n){wp.ajax.send({data:n.data,error:s,success:function(){return window.location=n.url}}).always((function(n){e.removeClass("is-busy").prop("disabled",0),void 0!==n.debug&&_.map(n.debug,(function(n){return console.info(n)}))}))};n(a).on("submit",(function(n){n.preventDefault();var o={_ajax_request:!0,action:GLSR.action},s={_action:a.action.value,_nonce:a._wpnonce.value,version:a.version.value};o[GLSR.nameprefix]=s,i.attr("data-loading",i.data("loading").replace("%s","v"+s.version)),e.addClass("is-busy").prop("disabled",1),wp.ajax.send({data:o,error:r,success:t})}))}));
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -26,6 +26,8 @@ require_once __DIR__.'/vendors/woocommerce/action-scheduler/action-scheduler.php ...@@ -26,6 +26,8 @@ require_once __DIR__.'/vendors/woocommerce/action-scheduler/action-scheduler.php
spl_autoload_register(function ($className) { spl_autoload_register(function ($className) {
$classMap = [ $classMap = [
'Plugin_Upgrader' => ABSPATH.'wp-admin/includes/class-plugin-upgrader.php',
'Plugin_Upgrader_Skin' => ABSPATH.'wp-admin/includes/class-plugin-upgrader-skin.php',
'WP_Debug_Data' => ABSPATH.'wp-admin/includes/class-wp-debug-data.php', 'WP_Debug_Data' => ABSPATH.'wp-admin/includes/class-wp-debug-data.php',
'WP_List_Table' => ABSPATH.'wp-admin/includes/class-wp-list-table.php', 'WP_List_Table' => ABSPATH.'wp-admin/includes/class-wp-list-table.php',
'WP_Posts_List_Table' => ABSPATH.'wp-admin/includes/class-wp-posts-list-table.php', 'WP_Posts_List_Table' => ABSPATH.'wp-admin/includes/class-wp-posts-list-table.php',
......
...@@ -22,45 +22,24 @@ add_filter('classic_editor_enabled_editors_for_post_type', function ($editors, $ ...@@ -22,45 +22,24 @@ add_filter('classic_editor_enabled_editors_for_post_type', function ($editors, $
* @see https://wordpress.org/plugins/members/ * @see https://wordpress.org/plugins/members/
*/ */
add_action('members_register_caps', function () { add_action('members_register_caps', function () {
members_register_cap('create_site-reviews', [ $labels = [
'label' => _x('Create Reviews', 'admin-text', 'site-reviews'), 'create_site-reviews' => _x('Create Reviews', 'admin-text', 'site-reviews'),
]); 'delete_others_site-reviews' => _x("Delete Others' Reviews", 'admin-text', 'site-reviews'),
members_register_cap('delete_others_site-reviews', [ 'delete_site-reviews' => _x('Delete Reviews', 'admin-text', 'site-reviews'),
'label' => _x("Delete Others' Reviews", 'admin-text', 'site-reviews'), 'delete_private_site-reviews' => _x('Delete Private Reviews', 'admin-text', 'site-reviews'),
]); 'delete_published_site-reviews' => _x('Delete Approved Reviews', 'admin-text', 'site-reviews'),
members_register_cap('delete_site-reviews', [ 'edit_others_site-reviews' => _x("Edit Others' Reviews", 'admin-text', 'site-reviews'),
'label' => _x('Delete Reviews', 'admin-text', 'site-reviews'), 'edit_site-reviews' => _x('Edit Reviews', 'admin-text', 'site-reviews'),
]); 'edit_private_site-reviews' => _x('Edit Private Reviews', 'admin-text', 'site-reviews'),
members_register_cap('delete_private_site-reviews', [ 'edit_published_site-reviews' => _x('Edit Approved Reviews', 'admin-text', 'site-reviews'),
'label' => _x('Delete Private Reviews', 'admin-text', 'site-reviews'), 'publish_site-reviews' => _x('Approve Reviews', 'admin-text', 'site-reviews'),
]); 'read_private_site-reviews' => _x('Read Private Reviews', 'admin-text', 'site-reviews'),
members_register_cap('delete_published_site-reviews', [ 'respond_to_site-reviews' => _x('Respond To Reviews', 'admin-text', 'site-reviews'),
'label' => _x('Delete Approved Reviews', 'admin-text', 'site-reviews'), 'respond_to_others_site-reviews' => _x("Respond To Others' Reviews", 'admin-text', 'site-reviews'),
]); ];
members_register_cap('edit_others_site-reviews', [ array_walk($labels, function ($label, $capability) {
'label' => _x("Edit Others' Reviews", 'admin-text', 'site-reviews'), members_register_cap($capability, ['label' => $label]);
]); });
members_register_cap('edit_site-reviews', [
'label' => _x('Edit Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('edit_private_site-reviews', [
'label' => _x('Edit Private Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('edit_published_site-reviews', [
'label' => _x('Edit Approved Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('publish_site-reviews', [
'label' => _x('Approve Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('read_private_site-reviews', [
'label' => _x('Read Private Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('respond_to_site-reviews', [
'label' => _x('Respond To Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('respond_to_others_site-reviews', [
'label' => _x("Respond To Others' Reviews", 'admin-text', 'site-reviews'),
]);
}); });
/** /**
...@@ -213,6 +192,17 @@ add_action('site-reviews/review/created', function ($review, $command) { ...@@ -213,6 +192,17 @@ add_action('site-reviews/review/created', function ($review, $command) {
} }
}, 10, 2); }, 10, 2);
/**
* Purge the WP Fastest Cache page cache after a review has been created.
* @param \GeminiLabs\SiteReviews\Review $review
* @param \GeminiLabs\SiteReviews\Commands\CreateReview $command
* @return void
* @see https://www.wpfastestcache.com/
*/
add_action('site-reviews/review/created', function ($review, $command) {
do_action('wpfc_clear_post_cache_by_id', false, $command->post_id);
}, 10, 2);
/** /**
* Purge the WP-Optimize page cache after a review has been created. * Purge the WP-Optimize page cache after a review has been created.
* @param \GeminiLabs\SiteReviews\Review $review * @param \GeminiLabs\SiteReviews\Review $review
...@@ -234,6 +224,7 @@ add_action('site-reviews/review/created', function ($review, $command) { ...@@ -234,6 +224,7 @@ add_action('site-reviews/review/created', function ($review, $command) {
*/ */
add_filter('site-reviews/build/template/reviews-form', function ($template) { add_filter('site-reviews/build/template/reviews-form', function ($template) {
if ('wpforms' === glsr_get_option('general.style')) { if ('wpforms' === glsr_get_option('general.style')) {
add_filter('wpforms_frontend_missing_assets_error_js_disable', '__return_true', PHP_INT_MAX);
add_filter('wpforms_global_assets', '__return_true'); add_filter('wpforms_global_assets', '__return_true');
} }
return $template; return $template;
......
...@@ -23,10 +23,10 @@ return [ ...@@ -23,10 +23,10 @@ return [
'bootstrap_4_custom' => _x('CSS Framework: Bootstrap 4 (Custom Forms)', 'admin-text', 'site-reviews'), 'bootstrap_4_custom' => _x('CSS Framework: Bootstrap 4 (Custom Forms)', 'admin-text', 'site-reviews'),
'contact_form_7' => _x('Plugin: Contact Form 7 (v5)', 'admin-text', 'site-reviews'), 'contact_form_7' => _x('Plugin: Contact Form 7 (v5)', 'admin-text', 'site-reviews'),
'ninja_forms' => _x('Plugin: Ninja Forms (v3)', 'admin-text', 'site-reviews'), 'ninja_forms' => _x('Plugin: Ninja Forms (v3)', 'admin-text', 'site-reviews'),
'wpforms' => _x('Plugin: WPForms Lite (v1)', 'admin-text', 'site-reviews'), 'wpforms' => _x('Plugin: WPForms (v1)', 'admin-text', 'site-reviews'),
'default' => _x('Site Reviews (default)', 'admin-text', 'site-reviews'), 'default' => _x('Site Reviews (default)', 'admin-text', 'site-reviews'),
'minimal' => _x('Site Reviews (minimal)', 'admin-text', 'site-reviews'), 'minimal' => _x('Site Reviews (minimal)', 'admin-text', 'site-reviews'),
'divi' => _x('Theme: Divi (v3)', 'admin-text', 'site-reviews'), 'divi' => _x('Theme: Divi (v4)', 'admin-text', 'site-reviews'),
'twentyfifteen' => _x('Theme: Twenty Fifteen', 'admin-text', 'site-reviews'), 'twentyfifteen' => _x('Theme: Twenty Fifteen', 'admin-text', 'site-reviews'),
'twentysixteen' => _x('Theme: Twenty Sixteen', 'admin-text', 'site-reviews'), 'twentysixteen' => _x('Theme: Twenty Sixteen', 'admin-text', 'site-reviews'),
'twentyseventeen' => _x('Theme: Twenty Seventeen', 'admin-text', 'site-reviews'), 'twentyseventeen' => _x('Theme: Twenty Seventeen', 'admin-text', 'site-reviews'),
...@@ -330,7 +330,7 @@ return [ ...@@ -330,7 +330,7 @@ return [
), ),
'label' => _x('Enable Fallback Text', 'admin-text', 'site-reviews'), 'label' => _x('Enable Fallback Text', 'admin-text', 'site-reviews'),
'tooltip' => sprintf(_x('Display the fallback text when there are no reviews to display. This can be changed on the %s page. You may also override this by using the "fallback" option on the shortcode.', 'admin-text', 'site-reviews'), 'tooltip' => sprintf(_x('Display the fallback text when there are no reviews to display. This can be changed on the %s page. You may also override this by using the "fallback" option on the shortcode.', 'admin-text', 'site-reviews'),
'<a href="'.glsr_admin_url('settings', 'translations').'">'._x('Translations', 'admin-text', 'site-reviews').'</a>' '<a href="'.esc_url(glsr_admin_url('settings', 'translations')).'">'._x('Translations', 'admin-text', 'site-reviews').'</a>'
), ),
'type' => 'yes_no', 'type' => 'yes_no',
], ],
......
This diff is collapsed.
...@@ -99,8 +99,11 @@ abstract class Controller extends BaseController ...@@ -99,8 +99,11 @@ abstract class Controller extends BaseController
*/ */
public function filterDocumentation(array $documentation) public function filterDocumentation(array $documentation)
{ {
$notice = glsr(Template::class)->build('/views/partials/addons/support-notice'); $notice = glsr()->build('views/partials/addons/support-notice', [
$documentation[$this->addon->id] = $notice.glsr(Template::class)->build($this->addon->id.'/views/documentation'); 'addon_id' => $this->addon->id,
]);
$support = $this->addon->build('views/documentation');
$documentation[$this->addon->id] = $notice.$support;
return $documentation; return $documentation;
} }
......
...@@ -52,7 +52,7 @@ class SiteReviewsBlock extends Block ...@@ -52,7 +52,7 @@ class SiteReviewsBlock extends Block
'default' => '', 'default' => '',
'type' => 'string', 'type' => 'string',
], ],
'post_id' => [ 'post_id' => [ // This is used to store the Post Id of the page that we get with jQuery.
'default' => '', 'default' => '',
'type' => 'string', 'type' => 'string',
], ],
......
...@@ -3,6 +3,9 @@ ...@@ -3,6 +3,9 @@
namespace GeminiLabs\SiteReviews\Commands; namespace GeminiLabs\SiteReviews\Commands;
use GeminiLabs\SiteReviews\Contracts\CommandContract as Contract; use GeminiLabs\SiteReviews\Contracts\CommandContract as Contract;
use GeminiLabs\SiteReviews\Controllers\ListTableColumns\ColumnFilterAssignedPost;
use GeminiLabs\SiteReviews\Controllers\ListTableColumns\ColumnFilterAssignedUser;
use GeminiLabs\SiteReviews\Controllers\ListTableColumns\ColumnFilterAuthor;
use GeminiLabs\SiteReviews\Helper; use GeminiLabs\SiteReviews\Helper;
use GeminiLabs\SiteReviews\Helpers\Arr; use GeminiLabs\SiteReviews\Helpers\Arr;
use GeminiLabs\SiteReviews\Helpers\Str; use GeminiLabs\SiteReviews\Helpers\Str;
...@@ -79,6 +82,18 @@ class EnqueueAdminAssets implements Contract ...@@ -79,6 +82,18 @@ class EnqueueAdminAssets implements Contract
'addons' => [], 'addons' => [],
'addonsurl' => glsr_admin_url('addons'), 'addonsurl' => glsr_admin_url('addons'),
'ajaxurl' => admin_url('admin-ajax.php'), 'ajaxurl' => admin_url('admin-ajax.php'),
'filters' => [
'assigned_post' => glsr(ColumnFilterAssignedPost::class)->options(),
'assigned_user' => glsr(ColumnFilterAssignedUser::class)->options(),
'author' => glsr(ColumnFilterAuthor::class)->options(),
'post_author' => (object) [
'' => sprintf('&mdash; %s &mdash;', _x('No Change', 'admin-text', 'site-reviews')),
0 => _x('No Author', 'admin-text', 'site-reviews'),
],
'post_author_override' => (object) [
0 => _x('Author Unknown', 'admin-text', 'site-reviews'),
],
],
'hideoptions' => [ 'hideoptions' => [
'site_reviews' => glsr(SiteReviewsShortcode::class)->getHideOptions(), 'site_reviews' => glsr(SiteReviewsShortcode::class)->getHideOptions(),
'site_reviews_form' => glsr(SiteReviewsFormShortcode::class)->getHideOptions(), 'site_reviews_form' => glsr(SiteReviewsFormShortcode::class)->getHideOptions(),
...@@ -92,6 +107,9 @@ class EnqueueAdminAssets implements Contract ...@@ -92,6 +107,9 @@ class EnqueueAdminAssets implements Contract
'clear-console' => wp_create_nonce('clear-console'), 'clear-console' => wp_create_nonce('clear-console'),
'console-level' => wp_create_nonce('console-level'), 'console-level' => wp_create_nonce('console-level'),
'fetch-console' => wp_create_nonce('fetch-console'), 'fetch-console' => wp_create_nonce('fetch-console'),
'filter-assigned_post' => wp_create_nonce('filter-assigned_post'),
'filter-assigned_user' => wp_create_nonce('filter-assigned_user'),
'filter-author' => wp_create_nonce('filter-author'),
'mce-shortcode' => wp_create_nonce('mce-shortcode'), 'mce-shortcode' => wp_create_nonce('mce-shortcode'),
'search-posts' => wp_create_nonce('search-posts'), 'search-posts' => wp_create_nonce('search-posts'),
'search-translations' => wp_create_nonce('search-translations'), 'search-translations' => wp_create_nonce('search-translations'),
...@@ -107,6 +125,8 @@ class EnqueueAdminAssets implements Contract ...@@ -107,6 +125,8 @@ class EnqueueAdminAssets implements Contract
'text' => [ 'text' => [
'premium' => _x('Try Premium', 'admin-text', 'site-reviews'), 'premium' => _x('Try Premium', 'admin-text', 'site-reviews'),
'rate' => _x('Please rate %s on %s and help us spread the word. Thank you so much!', 'admin-text', 'site-reviews'), 'rate' => _x('Please rate %s on %s and help us spread the word. Thank you so much!', 'admin-text', 'site-reviews'),
'rollback_error' => _x('Rollback failed', 'admin-text', 'site-reviews'),
'searching' => _x('Searching...', 'admin-text', 'site-reviews'),
], ],
'tinymce' => [ 'tinymce' => [
'glsr_shortcode' => glsr()->url('assets/scripts/mce-plugin.js'), 'glsr_shortcode' => glsr()->url('assets/scripts/mce-plugin.js'),
......
...@@ -149,17 +149,6 @@ class EditorController extends Controller ...@@ -149,17 +149,6 @@ class EditorController extends Controller
} }
} }
/**
* @return bool
*/
protected function isReviewEditor()
{
$screen = glsr_current_screen();
return ('post' == $screen->base)
&& glsr()->post_type == $screen->id
&& glsr()->post_type == $screen->post_type;
}
/** /**
* @param int $postId * @param int $postId
* @param int $messageIndex * @param int $messageIndex
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace GeminiLabs\SiteReviews\Controllers; namespace GeminiLabs\SiteReviews\Controllers;
use GeminiLabs\SiteReviews\Database\Cache;
use GeminiLabs\SiteReviews\Database\SqlSchema; use GeminiLabs\SiteReviews\Database\SqlSchema;
use GeminiLabs\SiteReviews\Helper; use GeminiLabs\SiteReviews\Helper;
use GeminiLabs\SiteReviews\Helpers\Arr; use GeminiLabs\SiteReviews\Helpers\Arr;
...@@ -180,6 +181,8 @@ class MenuController extends Controller ...@@ -180,6 +181,8 @@ class MenuController extends Controller
'system' => glsr(SystemInfo::class)->get(), 'system' => glsr(SystemInfo::class)->get(),
], ],
'myisam_tables' => Arr::get(glsr(SqlSchema::class)->tableEngines(), 'MyISAM', []), 'myisam_tables' => Arr::get(glsr(SqlSchema::class)->tableEngines(), 'MyISAM', []),
'rollback_script' => file_get_contents(glsr()->path('assets/scripts/rollback.js')),
'rollback_versions' => glsr(Cache::class)->getPluginVersions(),
'services' => glsr()->filterArray('addon/sync/services', []), 'services' => glsr()->filterArray('addon/sync/services', []),
], ],
'tabs' => $tabs, 'tabs' => $tabs,
......
...@@ -88,7 +88,7 @@ class Query ...@@ -88,7 +88,7 @@ class Query
return glsr(Cache::class)->get($reviewId, 'reviews'); return glsr(Cache::class)->get($reviewId, 'reviews');
}); });
if (!$review instanceof Review) { if (!$review instanceof Review) {
$result = glsr(Database::class)->dbGetRow($this->queryReviews($reviewId), OBJECT); $result = glsr(Database::class)->dbGetRow($this->queryReviews($reviewId), ARRAY_A);
$review = new Review($result); $review = new Review($result);
if ($review->isValid()) { if ($review->isValid()) {
glsr(Cache::class)->store($review->ID, 'reviews', $review); glsr(Cache::class)->store($review->ID, 'reviews', $review);
...@@ -110,7 +110,7 @@ class Query ...@@ -110,7 +110,7 @@ class Query
} }
$reviewIds = implode(',', Arr::uniqueInt(Cast::toArray($postIds))); $reviewIds = implode(',', Arr::uniqueInt(Cast::toArray($postIds)));
$reviewIds = Str::fallback($reviewIds, '0'); // if there are no review IDs, default to 0 $reviewIds = Str::fallback($reviewIds, '0'); // if there are no review IDs, default to 0
$results = glsr(Database::class)->dbGetResults($this->queryReviews($reviewIds), OBJECT); $results = glsr(Database::class)->dbGetResults($this->queryReviews($reviewIds), ARRAY_A);
foreach ($results as &$result) { foreach ($results as &$result) {
$result = new Review($result); $result = new Review($result);
glsr(Cache::class)->store($result->ID, 'reviews', $result); glsr(Cache::class)->store($result->ID, 'reviews', $result);
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
namespace GeminiLabs\SiteReviews\Defaults; namespace GeminiLabs\SiteReviews\Defaults;
use GeminiLabs\SiteReviews\Controllers\Api\Version1\RestCategoryController; use GeminiLabs\SiteReviews\Controllers\Api\Version1\RestCategoryController;
use GeminiLabs\SiteReviews\Controllers\MetaboxController;
use GeminiLabs\SiteReviews\Defaults\DefaultsAbstract as Defaults; use GeminiLabs\SiteReviews\Defaults\DefaultsAbstract as Defaults;
use GeminiLabs\SiteReviews\Metaboxes\TaxonomyMetabox;
class TaxonomyDefaults extends Defaults class TaxonomyDefaults extends Defaults
{ {
...@@ -15,7 +15,7 @@ class TaxonomyDefaults extends Defaults ...@@ -15,7 +15,7 @@ class TaxonomyDefaults extends Defaults
{ {
return [ return [
'hierarchical' => true, 'hierarchical' => true,
'meta_box_cb' => [glsr(MetaboxController::class), 'renderTaxonomyMetabox'], 'meta_box_cb' => [glsr(TaxonomyMetabox::class), 'render'],
'public' => false, 'public' => false,
'rest_controller_class' => RestCategoryController::class, 'rest_controller_class' => RestCategoryController::class,
'show_admin_column' => true, 'show_admin_column' => true,
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
<?php
namespace GeminiLabs\SiteReviews\Hooks;
use GeminiLabs\SiteReviews\Controllers\Api\Version1\RestController;
class RestHooks extends AbstractHooks
{
/**
* @return void
*/
public function run()
{
$this->hook(RestController::class, [
['registerRoutes', 'rest_api_init'],
]);
}
}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment