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
spl_autoload_register(function ($className) {
$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_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',
......
......@@ -22,45 +22,24 @@ add_filter('classic_editor_enabled_editors_for_post_type', function ($editors, $
* @see https://wordpress.org/plugins/members/
*/
add_action('members_register_caps', function () {
members_register_cap('create_site-reviews', [
'label' => _x('Create Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('delete_others_site-reviews', [
'label' => _x("Delete Others' Reviews", 'admin-text', 'site-reviews'),
]);
members_register_cap('delete_site-reviews', [
'label' => _x('Delete Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('delete_private_site-reviews', [
'label' => _x('Delete Private Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('delete_published_site-reviews', [
'label' => _x('Delete Approved Reviews', 'admin-text', 'site-reviews'),
]);
members_register_cap('edit_others_site-reviews', [
'label' => _x("Edit Others' Reviews", 'admin-text', 'site-reviews'),
]);
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'),
]);
$labels = [
'create_site-reviews' => _x('Create Reviews', 'admin-text', 'site-reviews'),
'delete_others_site-reviews' => _x("Delete Others' Reviews", 'admin-text', 'site-reviews'),
'delete_site-reviews' => _x('Delete 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'),
'edit_others_site-reviews' => _x("Edit Others' 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'),
'edit_published_site-reviews' => _x('Edit Approved 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'),
'respond_to_site-reviews' => _x('Respond To Reviews', 'admin-text', 'site-reviews'),
'respond_to_others_site-reviews' => _x("Respond To Others' Reviews", 'admin-text', 'site-reviews'),
];
array_walk($labels, function ($label, $capability) {
members_register_cap($capability, ['label' => $label]);
});
});
/**
......@@ -213,6 +192,17 @@ add_action('site-reviews/review/created', function ($review, $command) {
}
}, 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.
* @param \GeminiLabs\SiteReviews\Review $review
......@@ -234,6 +224,7 @@ add_action('site-reviews/review/created', function ($review, $command) {
*/
add_filter('site-reviews/build/template/reviews-form', function ($template) {
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');
}
return $template;
......
......@@ -23,10 +23,10 @@ return [
'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'),
'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'),
'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'),
'twentysixteen' => _x('Theme: Twenty Sixteen', 'admin-text', 'site-reviews'),
'twentyseventeen' => _x('Theme: Twenty Seventeen', 'admin-text', 'site-reviews'),
......@@ -330,7 +330,7 @@ return [
),
'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'),
'<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',
],
......
This diff is collapsed.
......@@ -99,8 +99,11 @@ abstract class Controller extends BaseController
*/
public function filterDocumentation(array $documentation)
{
$notice = glsr(Template::class)->build('/views/partials/addons/support-notice');
$documentation[$this->addon->id] = $notice.glsr(Template::class)->build($this->addon->id.'/views/documentation');
$notice = glsr()->build('views/partials/addons/support-notice', [
'addon_id' => $this->addon->id,
]);
$support = $this->addon->build('views/documentation');
$documentation[$this->addon->id] = $notice.$support;
return $documentation;
}
......
......@@ -52,7 +52,7 @@ class SiteReviewsBlock extends Block
'default' => '',
'type' => 'string',
],
'post_id' => [
'post_id' => [ // This is used to store the Post Id of the page that we get with jQuery.
'default' => '',
'type' => 'string',
],
......
......@@ -3,6 +3,9 @@
namespace GeminiLabs\SiteReviews\Commands;
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\Helpers\Arr;
use GeminiLabs\SiteReviews\Helpers\Str;
......@@ -79,6 +82,18 @@ class EnqueueAdminAssets implements Contract
'addons' => [],
'addonsurl' => glsr_admin_url('addons'),
'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' => [
'site_reviews' => glsr(SiteReviewsShortcode::class)->getHideOptions(),
'site_reviews_form' => glsr(SiteReviewsFormShortcode::class)->getHideOptions(),
......@@ -92,6 +107,9 @@ class EnqueueAdminAssets implements Contract
'clear-console' => wp_create_nonce('clear-console'),
'console-level' => wp_create_nonce('console-level'),
'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'),
'search-posts' => wp_create_nonce('search-posts'),
'search-translations' => wp_create_nonce('search-translations'),
......@@ -107,6 +125,8 @@ class EnqueueAdminAssets implements Contract
'text' => [
'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'),
'rollback_error' => _x('Rollback failed', 'admin-text', 'site-reviews'),
'searching' => _x('Searching...', 'admin-text', 'site-reviews'),
],
'tinymce' => [
'glsr_shortcode' => glsr()->url('assets/scripts/mce-plugin.js'),
......
......@@ -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 $messageIndex
......
......@@ -2,6 +2,7 @@
namespace GeminiLabs\SiteReviews\Controllers;
use GeminiLabs\SiteReviews\Database\Cache;
use GeminiLabs\SiteReviews\Database\SqlSchema;
use GeminiLabs\SiteReviews\Helper;
use GeminiLabs\SiteReviews\Helpers\Arr;
......@@ -180,6 +181,8 @@ class MenuController extends Controller
'system' => glsr(SystemInfo::class)->get(),
],
'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', []),
],
'tabs' => $tabs,
......
......@@ -88,7 +88,7 @@ class Query
return glsr(Cache::class)->get($reviewId, 'reviews');
});
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);
if ($review->isValid()) {
glsr(Cache::class)->store($review->ID, 'reviews', $review);
......@@ -110,7 +110,7 @@ class Query
}
$reviewIds = implode(',', Arr::uniqueInt(Cast::toArray($postIds)));
$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) {
$result = new Review($result);
glsr(Cache::class)->store($result->ID, 'reviews', $result);
......
......@@ -3,8 +3,8 @@
namespace GeminiLabs\SiteReviews\Defaults;
use GeminiLabs\SiteReviews\Controllers\Api\Version1\RestCategoryController;
use GeminiLabs\SiteReviews\Controllers\MetaboxController;
use GeminiLabs\SiteReviews\Defaults\DefaultsAbstract as Defaults;
use GeminiLabs\SiteReviews\Metaboxes\TaxonomyMetabox;
class TaxonomyDefaults extends Defaults
{
......@@ -15,7 +15,7 @@ class TaxonomyDefaults extends Defaults
{
return [
'hierarchical' => true,
'meta_box_cb' => [glsr(MetaboxController::class), 'renderTaxonomyMetabox'],
'meta_box_cb' => [glsr(TaxonomyMetabox::class), 'render'],
'public' => false,
'rest_controller_class' => RestCategoryController::class,
'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