2027 lines
111 KiB
PHP
2027 lines
111 KiB
PHP
<?php
|
|
|
|
namespace wpdFormAttr;
|
|
|
|
use wpdFormAttr\FormConst\wpdFormConst;
|
|
use wpdFormAttr\Field\DefaultField\Captcha;
|
|
|
|
class Form {
|
|
|
|
public $wpdOptions;
|
|
private $generalOptions = [];
|
|
private $formeStructure;
|
|
private $formPostTypes;
|
|
private $formFields;
|
|
private $formCustomFields;
|
|
private $defaultsFieldsNames;
|
|
private $formID;
|
|
private $row;
|
|
private $captchaFied;
|
|
private $fieldsBeforeSave = [];
|
|
private $ratings;
|
|
private $ratingsExists = false;
|
|
private $ratingsFieldsKey = [];
|
|
public $isUserCanSeeComments = true;
|
|
public $isUserCanComment = true;
|
|
public $hasIcon = false;
|
|
|
|
public function __construct($options, $formID = 0) {
|
|
$this->defaultsFieldsNames = [
|
|
wpdFormConst::WPDISCUZ_FORMS_NAME_FIELD,
|
|
wpdFormConst::WPDISCUZ_FORMS_EMAIL_FIELD,
|
|
wpdFormConst::WPDISCUZ_FORMS_WEBSITE_FIELD,
|
|
wpdFormConst::WPDISCUZ_FORMS_CAPTCHA_FIELD,
|
|
wpdFormConst::WPDISCUZ_FORMS_SUBMIT_FIELD
|
|
];
|
|
$this->wpdOptions = $options;
|
|
$this->setFormID($formID);
|
|
$this->row = new Row();
|
|
$this->captchaFied = Captcha::getInstance();
|
|
}
|
|
|
|
public function initFormMeta() {
|
|
if ((int)$this->formID) {
|
|
if (!$this->generalOptions) {
|
|
$goptions = get_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, true);
|
|
$this->generalOptions = $goptions ? $goptions : [];
|
|
}
|
|
if (!$this->formeStructure) {
|
|
$this->formeStructure = get_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_STRUCTURE, true);
|
|
}
|
|
}
|
|
if (!$this->formPostTypes) {
|
|
$this->formPostTypes = isset($this->generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES]) ? $this->generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES] : [];
|
|
}
|
|
}
|
|
|
|
public function initFormFields() {
|
|
if (!$this->formFields) {
|
|
$this->formCustomFields = [];
|
|
$this->formFields = get_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_FIELDS, true);
|
|
if (is_array($this->formFields)) {
|
|
foreach ($this->formFields as $key => $field) {
|
|
if (is_callable($field["type"] . "::getInstance") && !in_array($key, $this->defaultsFieldsNames)) {
|
|
if (!empty($field["icon"])) {
|
|
$this->hasIcon = true;
|
|
}
|
|
$this->formCustomFields[$key] = $field;
|
|
if ($field["type"] === "wpdFormAttr\Field\RatingField") {
|
|
$this->ratingsFieldsKey[] = $key;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (count($this->ratingsFieldsKey)) {
|
|
$this->ratingsExists = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getFormCustomFields() {
|
|
return $this->formCustomFields;
|
|
}
|
|
|
|
public function setFormID($formID) {
|
|
if ($formID == 0) {
|
|
$this->formID = $formID;
|
|
|
|
return;
|
|
}
|
|
$form = get_post($formID);
|
|
if ($form && $form->post_type === wpdFormConst::WPDISCUZ_FORMS_CONTENT_TYPE) {
|
|
$this->formID = $formID;
|
|
do_action("wpdiscuz_form_init", $this);
|
|
} else {
|
|
$postRel = $this->wpdOptions->formPostRel;
|
|
$contentRel = $this->wpdOptions->formContentTypeRel;
|
|
foreach ($postRel as $pid => $fid) {
|
|
if ($formID == $fid) {
|
|
unset($postRel[$pid]);
|
|
}
|
|
}
|
|
foreach ($contentRel as $postType => $postTypeData) {
|
|
foreach ($postTypeData as $lang => $fid) {
|
|
if ($formID == $fid) {
|
|
unset($contentRel[$postType][$lang]);
|
|
}
|
|
}
|
|
}
|
|
update_option(wpdFormConst::WPDISCUZ_FORMS_CONTENT_TYPE_REL, $contentRel);
|
|
update_option(wpdFormConst::WPDISCUZ_FORMS_POST_REL, $postRel);
|
|
$this->formID = 0;
|
|
}
|
|
}
|
|
|
|
public function getFormID() {
|
|
return $this->formID;
|
|
}
|
|
|
|
public function getGeneralOptions() {
|
|
return $this->generalOptions;
|
|
}
|
|
|
|
public function getHeaderTextSingle() {
|
|
$this->initFormMeta();
|
|
if (!isset($this->generalOptions["header_text_single"])) {
|
|
$this->generalOptions["header_text_single"] = esc_html__("Comment", "wpdiscuz");
|
|
}
|
|
|
|
return $this->generalOptions["header_text_single"];
|
|
}
|
|
|
|
public function getHeaderTextPlural() {
|
|
$this->initFormMeta();
|
|
if (empty($this->generalOptions["header_text_plural"])) {
|
|
$this->generalOptions["header_text_plural"] = esc_html__("Comments", "wpdiscuz");
|
|
}
|
|
|
|
return $this->generalOptions["header_text_plural"];
|
|
}
|
|
|
|
public function getTheme() {
|
|
$this->initFormMeta();
|
|
if (empty($this->generalOptions["theme"])) {
|
|
$this->generalOptions["theme"] = $this->getDefaultTheme();
|
|
} else {
|
|
if (!is_dir($this->generalOptions["theme"])) {
|
|
$themeName = wp_basename($this->generalOptions["theme"]);
|
|
if (strpos($this->generalOptions["theme"], "plugins") === false) {
|
|
$uplDir = wp_upload_dir();
|
|
$themesDir = str_replace("\\", "/", $uplDir["basedir"]) . wpdFormConst::THEMES_DIR;
|
|
if (is_dir($themesDir . $themeName)) {
|
|
$this->generalOptions["theme"] = $themesDir . $themeName;
|
|
} else {
|
|
$this->generalOptions["theme"] = $this->getDefaultTheme();
|
|
}
|
|
} else {
|
|
$themeDir = str_replace("\\", "/", WPDISCUZ_DIR_PATH) . "/themes/" . $themeName;
|
|
if (is_dir($themeDir)) {
|
|
$this->generalOptions["theme"] = $themeDir;
|
|
} else {
|
|
$this->generalOptions["theme"] = $this->getDefaultTheme();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->generalOptions["theme"];
|
|
}
|
|
|
|
public function getLayout() {
|
|
$this->initFormMeta();
|
|
if (empty($this->generalOptions["layout"])) {
|
|
$this->generalOptions["layout"] = 1;
|
|
}
|
|
|
|
return $this->generalOptions["layout"];
|
|
}
|
|
|
|
public function getEnableRateOnPost() {
|
|
$this->initFormMeta();
|
|
if (!array_key_exists("enable_post_rating", $this->generalOptions)) {
|
|
$this->generalOptions["enable_post_rating"] = 1;
|
|
}
|
|
|
|
return (int)$this->generalOptions["enable_post_rating"];
|
|
}
|
|
|
|
public function getPostRatingTitle() {
|
|
$this->initFormMeta();
|
|
if (!isset($this->generalOptions["post_rating_title"])) {
|
|
$this->generalOptions["post_rating_title"] = esc_html__("Article Rating", "wpdiscuz");
|
|
}
|
|
|
|
return $this->generalOptions["post_rating_title"];
|
|
}
|
|
|
|
public function getRatingsExists() {
|
|
$this->initFormMeta();
|
|
$this->initFormFields();
|
|
|
|
return $this->ratingsExists;
|
|
}
|
|
|
|
public function getUserCanRateOnPost() {
|
|
$this->initFormMeta();
|
|
if (!isset($this->generalOptions["allow_guests_rate_on_post"])) {
|
|
$this->generalOptions["allow_guests_rate_on_post"] = 1;
|
|
}
|
|
|
|
return $this->generalOptions["allow_guests_rate_on_post"];
|
|
}
|
|
|
|
public function getCaptchaFied() {
|
|
return $this->captchaFied;
|
|
}
|
|
|
|
public function isShowSubscriptionBar() {
|
|
// default enabled if the setting does not exist in the db
|
|
$isSubscriptionBarEnabled = isset($this->generalOptions["show_subscription_bar"]) ? (int)$this->generalOptions["show_subscription_bar"] : 1;
|
|
if (!$isSubscriptionBarEnabled) {
|
|
return false;
|
|
}
|
|
// default enabled if the setting does not exist in the db
|
|
$guestCanSubscribe = isset($this->generalOptions["guest_can_subscribe"]) ? (int)$this->generalOptions["guest_can_subscribe"] : 1;
|
|
// default roles if the setting does not exist in the db
|
|
$rolesCanSubscribe = isset($this->generalOptions["roles_can_subscribe"]) ? array_values(array_filter(array_map('trim', $this->generalOptions["roles_can_subscribe"]))) : $this->getDefaultRoles();
|
|
$currentUser = \WpdiscuzHelper::getCurrentUser();
|
|
$canUserSubscribe = false;
|
|
if (empty($currentUser->ID) && $guestCanSubscribe) {
|
|
$canUserSubscribe = true;
|
|
} else if (!empty($currentUser->roles) && is_array($currentUser->roles)) {
|
|
// if current user is administrator - enable
|
|
if (in_array("administrator", $currentUser->roles)) {
|
|
$canUserSubscribe = true;
|
|
} else if (!empty($rolesCanSubscribe) && is_array($rolesCanSubscribe)) {
|
|
foreach ($currentUser->roles as $role) {
|
|
if (in_array($role, $rolesCanSubscribe)) {
|
|
$canUserSubscribe = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $canUserSubscribe;
|
|
}
|
|
|
|
public function isShowSubscriptionBarAgreement() {
|
|
$this->initFormMeta();
|
|
|
|
return isset($this->generalOptions["show_subscription_agreement"]) ? $this->generalOptions["show_subscription_agreement"] : 0;
|
|
}
|
|
|
|
public function subscriptionBarAgreementLabel() {
|
|
return isset($this->generalOptions["subscription_agreement_label"]) ? $this->generalOptions["subscription_agreement_label"] : esc_html__("I allow to use my email address and send notification about new comments and replies (you can unsubscribe at any time).", "wpdiscuz");
|
|
}
|
|
|
|
public function getCustomCSS() {
|
|
return get_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_CSS, true);
|
|
}
|
|
|
|
public function getFormPostTypes() {
|
|
return $this->formPostTypes;
|
|
}
|
|
|
|
public function getFormFields() {
|
|
return $this->formFields;
|
|
}
|
|
|
|
public function theFormListData($column, $formID) {
|
|
$this->setFormID($formID);
|
|
$this->generalOptions = get_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, true);
|
|
if ($column === "form_post_types") {
|
|
$postTypes = isset($this->generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES]) ? $this->generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES] : "";
|
|
echo $postTypes ? htmlentities(implode(", ", $this->generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES])) : "";
|
|
} else if ($column === "form_post_ids") {
|
|
echo isset($this->generalOptions["postid"]) ? htmlentities($this->generalOptions["postid"]) : "";
|
|
} else if ($column === "form_lang") {
|
|
echo isset($this->generalOptions["lang"]) ? htmlentities($this->generalOptions["lang"]) : "";
|
|
}
|
|
}
|
|
|
|
public function saveFormData($formID) {
|
|
$this->setFormID($formID);
|
|
$this->initFormMeta();
|
|
if (isset($_REQUEST[wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS])) {
|
|
$generalOptions = $this->validateGeneralOptions($_REQUEST[wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS]);
|
|
$this->saveFormContentTypeRel($generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES], $generalOptions["lang"]);
|
|
$this->saveFormPostRel($generalOptions["postidsArray"]);
|
|
update_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, $generalOptions);
|
|
}
|
|
if (isset($_REQUEST[wpdFormConst::WPDISCUZ_META_FORMS_STRUCTURE])) {
|
|
$formeStructure = $this->validateFormStructure($_REQUEST[wpdFormConst::WPDISCUZ_META_FORMS_STRUCTURE]);
|
|
update_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_STRUCTURE, $formeStructure);
|
|
update_post_meta($this->formID, wpdFormConst::WPDISCUZ_META_FORMS_FIELDS, $this->formFields);
|
|
}
|
|
}
|
|
|
|
public function saveCommentMeta($commentID) {
|
|
$comment = get_comment($commentID);
|
|
$commentApproved = $comment->comment_approved;
|
|
do_action("wpdiscuz_before_save_commentmeta", $comment, $this->fieldsBeforeSave);
|
|
foreach ($this->fieldsBeforeSave as $mettaKey => $data) {
|
|
if ($this->ratingsExists && $this->formCustomFields[$mettaKey]["type"] === "wpdFormAttr\Field\RatingField") {
|
|
$oldCommentRating = get_comment_meta($commentID, $mettaKey, true);
|
|
$postID = $comment->comment_post_ID;
|
|
if (!(class_exists("WooCommerce") && get_post_type($postID) === "product") && $oldCommentRating && $commentApproved === "1") {
|
|
$postRatingMeta = get_post_meta($postID, wpdFormConst::WPDISCUZ_RATING_COUNT, true);
|
|
$postRatingMeta = is_array($postRatingMeta) ? $postRatingMeta : [];
|
|
$oldCommentRatingCount = $postRatingMeta[$mettaKey][$oldCommentRating] - 1;
|
|
if ($oldCommentRatingCount > 0) {
|
|
$postRatingMeta[$mettaKey][$oldCommentRating] = $oldCommentRatingCount;
|
|
} else {
|
|
unset($postRatingMeta[$mettaKey][$oldCommentRating]);
|
|
}
|
|
update_post_meta($postID, wpdFormConst::WPDISCUZ_RATING_COUNT, $postRatingMeta);
|
|
$this->updateSeparateRatingMeta($postRatingMeta, $postID);
|
|
}
|
|
$this->ratings[] = ["metakey" => $mettaKey, "value" => $data];
|
|
}
|
|
update_comment_meta($commentID, $mettaKey, $data);
|
|
}
|
|
if ($this->ratingsExists && $this->ratings) {
|
|
$ratingSum = 0;
|
|
foreach ($this->ratings as $k => $rating) {
|
|
$ratingSum += (int)$rating["value"];
|
|
}
|
|
$gRating = round($ratingSum / count($this->ratings));
|
|
update_comment_meta($commentID, "rating", $gRating);
|
|
if ($commentApproved === "1") {
|
|
$this->savePostRatingMeta($comment, $gRating);
|
|
}
|
|
}
|
|
}
|
|
|
|
private function savePostRatingMeta($comment, $rating) {
|
|
$postID = $comment->comment_post_ID;
|
|
if (class_exists("WooCommerce") && get_post_type($postID) === "product") {
|
|
$ratingCount = get_post_meta($postID, "_wc_rating_count", true);
|
|
$ratingCount = is_string($ratingCount) ? [] : $ratingCount;
|
|
$oldRatingMeta = get_comment_meta($comment->comment_ID, "rating", true);
|
|
$oldRating = $oldRatingMeta ? $oldRatingMeta : 0;
|
|
if (isset($ratingCount[$oldRating])) {
|
|
$oldRatingCount = $ratingCount[$oldRating] - 1;
|
|
if ($oldRatingCount > 0) {
|
|
$ratingCount[$oldRating] = $oldRatingCount;
|
|
} else {
|
|
unset($ratingCount[$oldRating]);
|
|
}
|
|
}
|
|
if (isset($ratingCount[$rating])) {
|
|
$ratingCount[$rating] = $ratingCount[$rating] + 1;
|
|
} else if ($rating) {
|
|
$ratingCount[$rating] = 1;
|
|
}
|
|
$allRatingSum = 0;
|
|
$allCount = 0;
|
|
foreach ($ratingCount as $star => $count) {
|
|
$allRatingSum += $star * $count;
|
|
$allCount += $count;
|
|
}
|
|
if ($allCount) {
|
|
$averageRating = round($allRatingSum / $allCount, 2);
|
|
update_post_meta($postID, "_wc_average_rating", $averageRating);
|
|
update_post_meta($postID, "_wc_rating_count", $ratingCount);
|
|
}
|
|
} else {
|
|
$wpdiscuzRatingCountMeta = get_post_meta($postID, wpdFormConst::WPDISCUZ_RATING_COUNT, true);
|
|
$wpdiscuzRatingCount = $wpdiscuzRatingCountMeta && is_array($wpdiscuzRatingCountMeta) ? $wpdiscuzRatingCountMeta : [];
|
|
$wpdiscuzRatingCount = $this->cleanUnusedData($wpdiscuzRatingCount, $this->ratings);
|
|
foreach ($this->ratings as $key => $value) {
|
|
if (isset($wpdiscuzRatingCount[$value["metakey"]][$value["value"]])) {
|
|
$wpdiscuzRatingCount[$value["metakey"]][$value["value"]] = $wpdiscuzRatingCount[$value["metakey"]][$value["value"]] + 1;
|
|
} else if ($value["value"]) {
|
|
$wpdiscuzRatingCount[$value["metakey"]][$value["value"]] = 1;
|
|
}
|
|
}
|
|
update_post_meta($postID, wpdFormConst::WPDISCUZ_RATING_COUNT, $wpdiscuzRatingCount);
|
|
$this->updateSeparateRatingMeta($wpdiscuzRatingCount, $postID);
|
|
}
|
|
}
|
|
|
|
private function cleanUnusedData($ratingMeta, $ratings) {
|
|
$ratingMetaKeys = array_keys($ratingMeta);
|
|
foreach ($ratingMetaKeys as $key => $ratingMetaKey) {
|
|
$exists = false;
|
|
foreach ($ratings as $k => $rating) {
|
|
if ($rating["metakey"] === $ratingMetaKey) {
|
|
$exists = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!$exists) {
|
|
unset($ratingMeta[$ratingMetaKey]);
|
|
}
|
|
}
|
|
|
|
return $ratingMeta;
|
|
}
|
|
|
|
public function displayRatingMeta($content) {
|
|
global $post;
|
|
if (!(class_exists("WooCommerce") && get_post_type($post) === "product")) {
|
|
$this->initFormFields();
|
|
if (in_array("before", $this->wpdOptions->rating["displayRatingOnPost"])) {
|
|
if ($this->ratingsExists) {
|
|
$content = $this->getRatingMetaHtml() . $content;
|
|
} else if ($this->getEnableRateOnPost()) {
|
|
$content = $this->getPostRatingHtml() . $content;
|
|
}
|
|
}
|
|
if (in_array("after", $this->wpdOptions->rating["displayRatingOnPost"])) {
|
|
if ($this->ratingsExists) {
|
|
$content .= $this->getRatingMetaHtml();
|
|
} else if ($this->getEnableRateOnPost()) {
|
|
$content .= $this->getPostRatingHtml();
|
|
}
|
|
}
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
|
|
public function displayRatingMetaBeforeCommentForm($post, $currentUser, $commentsCount) {
|
|
$content = "";
|
|
if (!(class_exists("WooCommerce") && get_post_type($post) === "product")) {
|
|
if (in_array("before_comment_form", $this->wpdOptions->rating["displayRatingOnPost"])) {
|
|
if ($this->ratingsExists) {
|
|
$content = $this->getRatingMetaHtml();
|
|
} else if ($this->getEnableRateOnPost()) {
|
|
$content = $this->getPostRatingHtml();
|
|
}
|
|
}
|
|
}
|
|
echo $content;
|
|
}
|
|
|
|
public function getPostRatingHtml($can_rate = true) {
|
|
$html = "";
|
|
$wpdiscuz = wpDiscuz();
|
|
if ($wpdiscuz->isWpdiscuzLoaded && $this->getEnableRateOnPost() && (($this->wpdOptions->rating["ratingCssOnNoneSingular"] && !is_singular()) || is_singular())) {
|
|
global $post;
|
|
$currentUserId = get_current_user_id();
|
|
$class = "";
|
|
$isRateEditable = empty($this->generalOptions["is_rate_editable"]) ? 0 : (int)$this->generalOptions["is_rate_editable"];
|
|
if ($can_rate && is_singular()) {
|
|
if (!empty($currentUserId)) {
|
|
$class = wpDiscuz()->dbManager->isUserRated($currentUserId, "", $post->ID) && !$isRateEditable ? "" : " class='wpd-not-rated'";
|
|
} else if ($this->getUserCanRateOnPost()) {
|
|
$class = wpDiscuz()->dbManager->isUserRated(0, md5(wpDiscuz()->helper->getRealIPAddr()), $post->ID) && !$isRateEditable ? "" : " class='wpd-not-rated'";
|
|
}
|
|
}
|
|
$rating = (float)get_post_meta($post->ID, wpdFormConst::POSTMETA_POST_RATING, true);
|
|
$count = (int)get_post_meta($post->ID, wpdFormConst::POSTMETA_POST_RATING_COUNT, true);
|
|
$prefix = (int)$rating;
|
|
$suffix = $rating - $prefix;
|
|
$fullStarSVG = apply_filters("wpdiscuz_full_star_svg", "<svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg>", "post", "fas fa-star");
|
|
$halfStarSVG = apply_filters("wpdiscuz_half_star_svg", "<svg xmlns='https://www.w3.org/2000/svg' xmlns:xlink='https://www.w3.org/1999/xlink' viewBox='0 0 24 24'><defs><path id='a' d='M0 0h24v24H0V0z'/></defs><clipPath id='b'><use xlink:href='#a' overflow='visible'/></clipPath><path class='wpd-star wpd-active' clip-path='url(#b)' d='M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z'/></svg>", "post", "fas fa-star");
|
|
$html .= "<div id='wpd-post-rating'{$class}>
|
|
<div class='wpd-rating-wrap'>
|
|
<div class='wpd-rating-left'></div>
|
|
<div class='wpd-rating-data'>
|
|
<div class='wpd-rating-value'>
|
|
<span class='wpdrv'>" . esc_html($rating) . "</span>
|
|
<span class='wpdrc'>" . esc_html($count) . "</span>
|
|
<span class='wpdrt'>" . ((int)$count === 1 ? esc_html($this->wpdOptions->getPhrase("wc_vote_phrase")) : esc_html($this->wpdOptions->getPhrase("wc_votes_phrase"))) . "</span>";
|
|
$html .= "</div>
|
|
<div class='wpd-rating-title'>" . esc_html($this->getPostRatingTitle()) . "</div>
|
|
<div class='wpd-rating-stars'>";
|
|
if ($prefix) {
|
|
for ($i = 1; $i < 6; $i++) {
|
|
if ($i <= $prefix) {
|
|
$html .= str_replace("wpd-star", "wpd-star wpd-active", $fullStarSVG);
|
|
} else if ($suffix && $i - $prefix === 1) {
|
|
$html .= $halfStarSVG;
|
|
} else {
|
|
$html .= $fullStarSVG;
|
|
}
|
|
}
|
|
} else if ($suffix) {
|
|
$html .= $halfStarSVG . str_repeat($fullStarSVG, 4);
|
|
} else {
|
|
$html .= str_repeat($fullStarSVG, 5);
|
|
}
|
|
$html .= "</div>";
|
|
if ($class) {
|
|
$html .= "<div class='wpd-rate-starts'>" . str_repeat($fullStarSVG, 5) . "</div>";
|
|
}
|
|
$html .= "</div>
|
|
<div class='wpd-rating-right'></div></div></div>";
|
|
if ($this->wpdOptions->rating["enablePostRatingSchema"] && $count) {
|
|
$html .= apply_filters("wpdiscuz_rating_schema", "<div style='display: none;' itemscope itemtype='https://schema.org/Product'><meta itemprop='name' content='" . esc_html($this->getPostRatingTitle()) . "'><div style='display: none;' itemprop='aggregateRating' itemscope itemtype='https://schema.org/AggregateRating'><meta itemprop='bestRating' content='5'><meta itemprop='worstRating' content='1'><meta itemprop='ratingValue' content='" . esc_html($rating) . "'><meta itemprop='ratingCount' content='" . esc_attr($count) . "'></div></div>", "post", $post->ID);
|
|
}
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
public function getRatingMetaHtml($atts = []) {
|
|
$html = "";
|
|
$atts = shortcode_atts([
|
|
"metakey" => "all",
|
|
"show-label" => true,
|
|
"show-lable" => true,
|
|
"show-average" => true,
|
|
"itemprop" => !!$this->wpdOptions->rating["enablePostRatingSchema"],
|
|
"post_id" => null,
|
|
"postid" => null,
|
|
], $atts);
|
|
if (!$atts["postid"]) {
|
|
if ($atts["post_id"]) {
|
|
$post = get_post($atts["post_id"]);
|
|
unset($atts["post_id"]);
|
|
} else {
|
|
global $post;
|
|
}
|
|
if (!empty($post->ID)) {
|
|
$atts["postid"] = $post->ID;
|
|
$this->resetData();
|
|
$wpdiscuz = wpDiscuz();
|
|
$form = $wpdiscuz->wpdiscuzForm->getForm($post->ID);
|
|
if (is_rtl()) {
|
|
wp_enqueue_style("wpdiscuz-ratings-rtl");
|
|
} else {
|
|
wp_enqueue_style("wpdiscuz-ratings");
|
|
}
|
|
$html = $form->getRatingMetaHtml($atts);
|
|
$form->resetData();
|
|
global $post;
|
|
$form = $wpdiscuz->wpdiscuzForm->getForm($post->ID);
|
|
|
|
return $html;
|
|
}
|
|
} else {
|
|
$post = get_post($atts["postid"]);
|
|
$this->initFormFields();
|
|
if ($this->ratingsExists && (($this->wpdOptions->rating["ratingCssOnNoneSingular"] && !is_singular()) || is_singular())) {
|
|
$ratingList = [];
|
|
foreach (array_unique($this->ratingsFieldsKey) as $key => $field) {
|
|
$avg = floatval(get_post_meta($post->ID, wpdFormConst::WPDISCUZ_RATING_SEPARATE_AVG . $field, true));
|
|
$c = intval(get_post_meta($post->ID, wpdFormConst::WPDISCUZ_RATING_SEPARATE_COUNT . $field, true));
|
|
$ratingList[$field]["average"] = $avg ? $avg : 0;
|
|
$ratingList[$field]["count"] = $c ? $c : 0;
|
|
}
|
|
if ($ratingList) {
|
|
$atts["show-label"] = filter_var($atts['show-label'], FILTER_VALIDATE_BOOLEAN);
|
|
if (!filter_var($atts['show-lable'], FILTER_VALIDATE_BOOLEAN)) {
|
|
$atts["show-label"] = false;
|
|
}
|
|
$html .= "<div class='wpdiscuz-post-rating-wrap wpd-custom-field'>";
|
|
if (!isset($atts["metakey"]) || $atts["metakey"] === "" || $atts["metakey"] === "all") {
|
|
foreach ($ratingList as $key => $value) {
|
|
$html .= $this->getSingleRatingHtml($key, $value, $atts);
|
|
}
|
|
if ($atts["itemprop"]) {
|
|
$html .= $this->getRatingSchema($atts["metakey"], $ratingList, $atts["postid"]);
|
|
}
|
|
} else {
|
|
$html .= $this->getSingleRatingHtml($atts["metakey"], $ratingList[$atts["metakey"]], $atts);
|
|
if ($atts["itemprop"] && $ratingList[$atts["metakey"]]["count"]) {
|
|
$html .= $this->getRatingSchema($atts["metakey"], $ratingList, $atts["postid"]);
|
|
}
|
|
}
|
|
$html .= "</div>";
|
|
}
|
|
}
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
private function getSingleRatingHtml($metakey, $ratingData, $args) {
|
|
global $post;
|
|
$html = "";
|
|
if (key_exists($metakey, $this->formCustomFields)) {
|
|
$title = !empty($this->formCustomFields[$metakey]["nameForTotal"]) ? $this->formCustomFields[$metakey]["nameForTotal"] : $this->formCustomFields[$metakey]["name"];
|
|
$icon = $this->formCustomFields[$metakey]['icon'];
|
|
$icon = strpos(trim($icon), ' ') ? $icon : 'fas ' . $icon;
|
|
$fullStarSVG = apply_filters("wpdiscuz_full_star_svg", "<svg xmlns='https://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M0 0h24v24H0z' fill='none'/><path class='wpd-star' d='M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z'/><path d='M0 0h24v24H0z' fill='none'/></svg>", "custom_field", $icon);
|
|
$halfStarSVG = apply_filters("wpdiscuz_half_star_svg", "<svg xmlns='https://www.w3.org/2000/svg' xmlns:xlink='https://www.w3.org/1999/xlink' viewBox='0 0 24 24'><defs><path id='a' d='M0 0h24v24H0V0z'/></defs><clipPath id='b'><use xlink:href='#a' overflow='visible'/></clipPath><path class='wpd-star wpd-active' clip-path='url(#b)' d='M22 9.24l-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03L22 9.24zM12 15.4V6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28L12 15.4z'/></svg>", "custom_field", $icon);
|
|
$html = "<div class='wpd-rating' title='" . esc_attr($title) . "'>
|
|
<div class='wpd-rating-wrap'>
|
|
<div class='wpd-rating-left'></div>
|
|
<div class='wpd-rating-data'>
|
|
<div class='wpd-rating-value'>
|
|
<span class='wpdrv'>" . esc_html($ratingData["average"]) . "</span>
|
|
<span class='wpdrc'>" . esc_html($ratingData["count"]) . "</span>
|
|
<span class='wpdrt'>" . ((int)$ratingData["count"] === 1 ? esc_html($this->wpdOptions->getPhrase("wc_vote_phrase")) : esc_html($this->wpdOptions->getPhrase("wc_votes_phrase"))) . "</span>";
|
|
$html .= "</div>";
|
|
if ($args["show-label"]) {
|
|
$html .= "<div class='wpd-rating-title'>" . esc_html($title) . "</div>";
|
|
}
|
|
$html .= "<div class='wpd-rating-stars'>";
|
|
$prefix = (int)$ratingData['average'];
|
|
$suffix = $ratingData['average'] - $prefix;
|
|
if ($prefix) {
|
|
for ($i = 1; $i < 6; $i++) {
|
|
if ($i <= $prefix) {
|
|
$html .= str_replace("wpd-star", "wpd-star wpd-active", $fullStarSVG);
|
|
} else if ($suffix && $i - $prefix === 1) {
|
|
$html .= $halfStarSVG;
|
|
} else {
|
|
$html .= $fullStarSVG;
|
|
}
|
|
}
|
|
} else if ($suffix) {
|
|
$html .= $halfStarSVG . str_repeat($fullStarSVG, 4);
|
|
} else {
|
|
$html .= str_repeat($fullStarSVG, 5);
|
|
}
|
|
$html .= "</div>
|
|
</div>
|
|
<div class='wpd-rating-right'></div></div></div>";
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
private function getRatingSchema($key, $ratingList, $postId) {
|
|
$average = 0;
|
|
$count = 0;
|
|
if ($key === "" || $key === "all") {
|
|
foreach ($ratingList as $k => $value) {
|
|
if (isset($this->formCustomFields[$k]) && $ratingList[$k]["count"]) {
|
|
$average += $ratingList[$k]["average"];
|
|
$count++;
|
|
}
|
|
}
|
|
if ($count) {
|
|
$average = round($average / $count, 1);
|
|
}
|
|
} else if (isset($this->formCustomFields[$key]) && $ratingList[$key]["count"]) {
|
|
$average = $ratingList[$key]["average"];
|
|
$count = $ratingList[$key]["count"];
|
|
}
|
|
$schema = "";
|
|
if ($average) {
|
|
$schema = apply_filters("wpdiscuz_rating_schema", "<div style='display: none;' itemscope itemtype='https://schema.org/Product'><meta itemprop='name' content='" . esc_attr__("Average Rating", "wpdiscuz") . "'><div style='display: none;' itemprop='aggregateRating' itemscope itemtype='https://schema.org/AggregateRating'><meta itemprop='bestRating' content='5'><meta itemprop='worstRating' content='1'><meta itemprop='ratingValue' content='" . esc_attr($average) . "'><meta itemprop='ratingCount' content='" . esc_attr($count) . "'></div></div>", $key, $postId);
|
|
}
|
|
|
|
return $schema;
|
|
}
|
|
|
|
private function validateGeneralOptions($options) {
|
|
$validData = [
|
|
"lang" => get_user_locale(),
|
|
"roles_cannot_see_comments" => [],
|
|
"guest_can_see_comments" => 1,
|
|
"roles_cannot_comment" => [],
|
|
"guest_can_comment" => 1,
|
|
"show_subscription_bar" => 1,
|
|
"guest_can_subscribe" => 0,
|
|
"roles_can_subscribe" => [],
|
|
"header_text_single" => "",
|
|
"header_text_plural" => "",
|
|
wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES => [],
|
|
"postid" => "",
|
|
"postidsArray" => [],
|
|
"show_subscription_agreement" => 0,
|
|
"subscription_agreement_label" => esc_html__("I allow to use my email address and send notification about new comments and replies (you can unsubscribe at any time).", "wpdiscuz"),
|
|
"theme" => $this->getDefaultTheme(),
|
|
"layout" => 1,
|
|
"enable_post_rating" => 1,
|
|
"post_rating_title" => esc_html__("Article Rating", "wpdiscuz"),
|
|
"allow_guests_rate_on_post" => 1,
|
|
"is_rate_editable" => 0,
|
|
];
|
|
if (isset($options["roles_cannot_see_comments"])) {
|
|
$validData["roles_cannot_see_comments"] = array_map("trim", $options["roles_cannot_see_comments"]);
|
|
}
|
|
if (isset($options["guest_can_see_comments"])) {
|
|
$validData["guest_can_see_comments"] = intval($options["guest_can_see_comments"]);
|
|
}
|
|
if (isset($options["roles_cannot_comment"])) {
|
|
$validData["roles_cannot_comment"] = array_map("trim", $options["roles_cannot_comment"]);
|
|
}
|
|
if (isset($options["guest_can_comment"])) {
|
|
$validData["guest_can_comment"] = intval($options["guest_can_comment"]);
|
|
}
|
|
if (isset($options["header_text_single"])) {
|
|
$validData["header_text_single"] = sanitize_text_field($options["header_text_single"]);
|
|
}
|
|
if (isset($options["header_text_plural"])) {
|
|
$validData["header_text_plural"] = sanitize_text_field($options["header_text_plural"]);
|
|
}
|
|
if (isset($options["lang"])) {
|
|
$validData["lang"] = sanitize_text_field($options["lang"]);
|
|
}
|
|
if (isset($options["show_subscription_bar"])) {
|
|
$validData["show_subscription_bar"] = intval($options["show_subscription_bar"]);
|
|
}
|
|
if (isset($options["guest_can_subscribe"])) {
|
|
$validData["guest_can_subscribe"] = (int)$options["guest_can_subscribe"];
|
|
}
|
|
if (isset($options["roles_can_subscribe"])) {
|
|
$validData["roles_can_subscribe"] = array_values(array_filter(array_map('trim', $options["roles_can_subscribe"])));
|
|
}
|
|
if (isset($options["show_subscription_agreement"])) {
|
|
$validData["show_subscription_agreement"] = intval($options["show_subscription_agreement"]);
|
|
}
|
|
if (isset($options["subscription_agreement_label"]) && trim($options["subscription_agreement_label"])) {
|
|
$validData["subscription_agreement_label"] = wp_kses_post($options["subscription_agreement_label"]);
|
|
}
|
|
$themes = $this->getThemes();
|
|
if (isset($options["theme"]) && isset($themes[$options["theme"]])) {
|
|
$validData["theme"] = sanitize_text_field($options["theme"]);
|
|
}
|
|
$layouts = $this->getLayouts($validData["theme"]);
|
|
if (isset($options["layout"]) && ($layout = intval($options["layout"])) && in_array($layout, $layouts)) {
|
|
$validData["layout"] = $layout;
|
|
} else if (!empty($layouts[0])) {
|
|
$validData["layout"] = $layouts[0];
|
|
}
|
|
if (array_key_exists("enable_post_rating", $options)) {
|
|
$validData["enable_post_rating"] = intval($options["enable_post_rating"]);
|
|
}
|
|
if (!empty($options["post_rating_title"])) {
|
|
$validData["post_rating_title"] = sanitize_text_field($options["post_rating_title"]);
|
|
}
|
|
if (isset($options["allow_guests_rate_on_post"])) {
|
|
$validData["allow_guests_rate_on_post"] = intval($options["allow_guests_rate_on_post"]);
|
|
}
|
|
if (isset($options["is_rate_editable"])) {
|
|
$validData["is_rate_editable"] = intval($options["is_rate_editable"]);
|
|
}
|
|
|
|
if (isset($options[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES])) {
|
|
$validData[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES] = $options[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES];
|
|
}
|
|
if (isset($options["postid"])) {
|
|
$postIds = trim(strip_tags($options["postid"]));
|
|
if ($postIds) {
|
|
$postIdsArray = [];
|
|
$postIdsExplode = explode(",", $postIds);
|
|
foreach ($postIdsExplode as $k => $postId) {
|
|
$postId = intval($postId);
|
|
if ($postId) {
|
|
$postIdsArray[] = $postId;
|
|
}
|
|
}
|
|
$postIdsArray = array_unique($postIdsArray);
|
|
sort($postIdsArray);
|
|
$validData["postidsArray"] = $postIdsArray;
|
|
$postIds = implode(", ", $postIdsArray);
|
|
}
|
|
$validData["postid"] = $postIds;
|
|
}
|
|
|
|
return $validData;
|
|
}
|
|
|
|
private function validateFormStructure($formStructure) {
|
|
$this->formFields = [];
|
|
foreach ($formStructure as $rowID => $rowData) {
|
|
$sanitizeData = $this->row->sanitizeRowData($rowData, $this->formFields);
|
|
if ($sanitizeData) {
|
|
$formStructure[$rowID] = $sanitizeData;
|
|
} else {
|
|
unset($formStructure[$rowID]);
|
|
}
|
|
}
|
|
|
|
return $formStructure;
|
|
}
|
|
|
|
public function validateFields($currentUser) {
|
|
$allowedFieldsType = $this->row->allowedFieldsType();
|
|
foreach ($this->formCustomFields as $fieldName => $fieldArgs) {
|
|
$fieldType = $fieldArgs["type"];
|
|
if (!in_array($fieldType, $allowedFieldsType, true)) {
|
|
continue;
|
|
}
|
|
$field = call_user_func($fieldType . "::getInstance");
|
|
if (isset($fieldArgs["no_insert_meta"])) {
|
|
$field->validateFieldData($fieldName, $fieldArgs, $this->wpdOptions, $currentUser);
|
|
} else {
|
|
$this->fieldsBeforeSave[$fieldName] = $field->validateFieldData($fieldName, $fieldArgs, $this->wpdOptions, $currentUser);
|
|
}
|
|
}
|
|
}
|
|
|
|
public function validateDefaultCaptcha($currentUser) {
|
|
$args = $this->formFields[wpdFormConst::WPDISCUZ_FORMS_CAPTCHA_FIELD];
|
|
$this->captchaFied->validateFieldData(wpdFormConst::WPDISCUZ_FORMS_CAPTCHA_FIELD, $args, $this->wpdOptions, $currentUser);
|
|
}
|
|
|
|
public function validateSubscribtionCaptcha($addSubscription) {
|
|
if (!is_user_logged_in() && $this->wpdOptions->recaptcha["isShowOnSubscribeForm"]) {
|
|
$addSubscription = $this->captchaFied->reCaptchaValidate($this->wpdOptions);
|
|
}
|
|
|
|
return $addSubscription;
|
|
}
|
|
|
|
public function validateDefaultEmail($currentUser, &$isAnonymous) {
|
|
$emailField = Field\DefaultField\Email::getInstance();
|
|
$args = $this->formFields[wpdFormConst::WPDISCUZ_FORMS_EMAIL_FIELD];
|
|
$email = $emailField->validateFieldData(wpdFormConst::WPDISCUZ_FORMS_EMAIL_FIELD, $args, $this->wpdOptions, $currentUser);
|
|
$isAnonymous = $emailField->isAnonymous();
|
|
|
|
return $email;
|
|
}
|
|
|
|
public function validateDefaultName($currentUser) {
|
|
$nameField = Field\DefaultField\Name::getInstance();
|
|
$args = $this->formFields[wpdFormConst::WPDISCUZ_FORMS_NAME_FIELD];
|
|
|
|
return $nameField->validateFieldData(wpdFormConst::WPDISCUZ_FORMS_NAME_FIELD, $args, $this->wpdOptions, $currentUser);
|
|
}
|
|
|
|
public function validateDefaultWebsite($currentUser) {
|
|
$webSiteField = Field\DefaultField\Website::getInstance();
|
|
$args = $this->formFields[wpdFormConst::WPDISCUZ_FORMS_WEBSITE_FIELD];
|
|
|
|
return $webSiteField->validateFieldData(wpdFormConst::WPDISCUZ_FORMS_WEBSITE_FIELD, $args, $this->wpdOptions, $currentUser);
|
|
}
|
|
|
|
public function renderFrontCommentMetaHtml($commentID, &$output) {
|
|
$htmlExists = false;
|
|
if ($this->formCustomFields) {
|
|
$meta = get_comment_meta($commentID);
|
|
$top = $this->_renderFrontCommentMetaHtml($meta, $this->formCustomFields, "top");
|
|
$bottom = $this->_renderFrontCommentMetaHtml($meta, $this->formCustomFields, "bottom");
|
|
if ($top || $bottom) {
|
|
$htmlExists = true;
|
|
}
|
|
$top = ($top) ? "<div class='wpd-top-custom-fields'>" . $top . "</div>" : "";
|
|
$bottom = ($bottom) ? "<div class='wpd-bottom-custom-fields'>" . $bottom . "</div>" : "";
|
|
$output = $top . $output . $bottom;
|
|
}
|
|
|
|
return $htmlExists;
|
|
}
|
|
|
|
private function _renderFrontCommentMetaHtml($meta, $formCustomFields, $loc) {
|
|
$html = "";
|
|
$allowedFieldsType = $this->row->allowedFieldsType();
|
|
$currentUser = \WpdiscuzHelper::getCurrentUser();
|
|
|
|
if (!apply_filters("wpdiscuz_user_can_view_fields", true, $currentUser)) {
|
|
return $html;
|
|
}
|
|
|
|
foreach ($formCustomFields as $key => $value) {
|
|
if (isset($value["loc"]) && $value["loc"] == $loc) {
|
|
$fieldType = $value["type"];
|
|
$metaValuen = isset($meta[$key][0]) ? maybe_unserialize($meta[$key][0]) : "";
|
|
if (in_array($fieldType, $allowedFieldsType, true) && is_callable($fieldType . "::getInstance") && $metaValuen) {
|
|
$field = call_user_func($fieldType . "::getInstance");
|
|
if (apply_filters("wpdiscuz_user_can_view_field", true, $currentUser, $value, $metaValuen)) {
|
|
$html .= $field->drawContent($metaValuen, $value);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
|
|
public function renderFrontForm($isMain, $uniqueId, $commentsCount, $currentUser, $postID) {
|
|
$message = "";
|
|
?>
|
|
<div
|
|
class="wpd-form wpd-form-wrapper <?php echo !$isMain ? "wpd-secondary-form-wrapper" : "wpd-main-form-wrapper"; ?>" <?php echo !$isMain ? "id='wpd-secondary-form-wrapper-" . esc_attr($uniqueId) . "' style='display: none;'" : "id='wpd-main-form-wrapper-" . esc_attr($uniqueId) . "'"; ?>>
|
|
<?php if (!$isMain) { ?>
|
|
<div class="wpd-secondary-forms-social-content"><?php do_action("comment_reply_form_bar_top", $this); ?></div>
|
|
<div class="clearfix"></div>
|
|
<?php } ?>
|
|
<?php
|
|
if ($this->isUserCanComment($currentUser, $message)) {
|
|
$wpdDefaultFormArgs = [
|
|
"method" => "post",
|
|
"enctype" => "multipart/form-data",
|
|
"data_uploading" => "false",
|
|
"class_form" => ["wpd_comm_form"]
|
|
];
|
|
$wpdDefaultFormArgs["class_form"][] = $isMain ? "wpd_main_comm_form" : "wpd-secondary-form-wrapper";
|
|
$wpdFormArgs = apply_filters('wpdiscuz_comment_form_args', $wpdDefaultFormArgs, $isMain, $postID);
|
|
?>
|
|
<form <?php
|
|
printf(' method="%s" enctype="%s" data-uploading="%s" class="%s"',
|
|
esc_attr($wpdFormArgs['method']),
|
|
esc_attr($wpdFormArgs['enctype']),
|
|
esc_attr($wpdFormArgs['data_uploading']),
|
|
esc_attr(implode(" ", $wpdFormArgs['class_form']))
|
|
);
|
|
?>
|
|
>
|
|
<?php do_action("comment_form_top", $postID, $currentUser, $isMain, $uniqueId, $commentsCount); ?>
|
|
<div class="wpd-field-comment">
|
|
<div class="wpdiscuz-item wc-field-textarea">
|
|
<div class="wpdiscuz-textarea-wrap <?php echo $this->wpdOptions->form["richEditor"] === "both" || (!wp_is_mobile() && $this->wpdOptions->form["richEditor"] === "desktop") ? "" : "wpd-txt"; ?>">
|
|
<?php if ($this->wpdOptions->thread_layouts["showAvatars"] && $this->wpdOptions->wp["showAvatars"]) { ?>
|
|
<?php
|
|
$authorName = $currentUser->ID ? $currentUser->display_name : "guest";
|
|
$authorEmail = $currentUser->ID ? $currentUser->user_email : "unknown@example.com";
|
|
?>
|
|
<div class="wpd-avatar">
|
|
<?php
|
|
echo get_avatar($currentUser->ID ? $currentUser->ID : uniqid() . '@example.com', 56, "", $authorName, [
|
|
"wpdiscuz_current_user" => $this->filterUser($currentUser),
|
|
"wpdiscuz_gravatar_user_email" => $authorEmail
|
|
]);
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
$this->renderTextEditor($uniqueId, $commentsCount);
|
|
?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="wpd-form-foot" <?php echo $this->wpdOptions->form["commentFormView"] === "collapsed" ? "style='display:none;'" : ""; ?>>
|
|
<div class="wpdiscuz-textarea-foot">
|
|
<?php do_action("wpdiscuz_button", $uniqueId, $currentUser, $this); ?>
|
|
<div class="wpdiscuz-button-actions"><?php do_action("wpdiscuz_button_actions", $uniqueId, $currentUser, $this); ?></div>
|
|
</div>
|
|
<?php
|
|
foreach ($this->formeStructure as $k => $row) {
|
|
$this->row->renderFrontFormRow($row, $this->wpdOptions, $currentUser, $uniqueId, $isMain);
|
|
}
|
|
?>
|
|
</div>
|
|
<?php
|
|
if ($this->wpdOptions->isGoodbyeCaptchaActive) {
|
|
echo $this->wpdOptions->goodbyeCaptchaTocken;
|
|
}
|
|
?>
|
|
<input type="hidden" class="wpdiscuz_unique_id" value="<?php echo esc_attr($uniqueId); ?>"
|
|
name="wpdiscuz_unique_id">
|
|
<?php do_action('comment_form', $postID, $currentUser, $isMain, $uniqueId, $commentsCount); ?>
|
|
</form>
|
|
<?php
|
|
}
|
|
do_action("wpdiscuz_form_bottom", $isMain, $this, $currentUser, $commentsCount, $uniqueId);
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
private function renderTextEditor($uniqueId, $commentsCount) {
|
|
if ($this->wpdOptions->form["richEditor"] === "both" || (!wp_is_mobile() && $this->wpdOptions->form["richEditor"] === "desktop")) {
|
|
?>
|
|
<div id="wpd-editor-wraper-<?php echo esc_attr($uniqueId); ?>" style="display: none;">
|
|
<div id="wpd-editor-char-counter-<?php echo esc_attr($uniqueId); ?>"
|
|
class="wpd-editor-char-counter"></div>
|
|
<label style="display: none;" for="wc-textarea-<?php echo esc_attr($uniqueId); ?>">Label</label>
|
|
<textarea id="wc-textarea-<?php echo esc_attr($uniqueId); ?>" name="wc_comment"
|
|
class="wc_comment wpd-field"></textarea>
|
|
<div id="wpd-editor-<?php echo esc_attr($uniqueId); ?>"></div>
|
|
<?php $this->renderTextEditorButtons($uniqueId); ?>
|
|
</div>
|
|
<?php
|
|
} else {
|
|
if ($uniqueId !== "0_0" || $commentsCount) {
|
|
$textarea_placeholder = $this->wpdOptions->getPhrase("wc_comment_join_text", ["unique_id" => $uniqueId]);
|
|
} else {
|
|
$textarea_placeholder = $this->wpdOptions->getPhrase("wc_be_the_first_text", ["unique_id" => $uniqueId]);
|
|
}
|
|
if (strrchr($uniqueId, "_") === "_0") {
|
|
$commentTextMinLength = intval($this->wpdOptions->content["commentTextMinLength"]);
|
|
$commentTextMaxLength = intval($this->wpdOptions->content["commentTextMaxLength"]);
|
|
} else {
|
|
$commentTextMinLength = intval($this->wpdOptions->content["replyTextMinLength"]);
|
|
$commentTextMaxLength = intval($this->wpdOptions->content["replyTextMaxLength"]);
|
|
}
|
|
$commentTextLengthRange = ($commentTextMinLength && $commentTextMaxLength) ? 'pattern=".{' . $commentTextMinLength . ',' . $commentTextMaxLength . '}"' : '';
|
|
$textareaMaxLength = $commentTextMaxLength ? "maxlength=$commentTextMaxLength" : '';
|
|
?>
|
|
<div class="wpd-textarea-wrap">
|
|
<div id="wpd-editor-char-counter-<?php echo esc_attr($uniqueId); ?>"
|
|
class="wpd-editor-char-counter"></div>
|
|
<label style="display: none;" for="wc-textarea-<?php echo esc_attr($uniqueId); ?>">Label</label>
|
|
<textarea
|
|
id="wc-textarea-<?php echo esc_attr($uniqueId); ?>" <?php echo $commentTextLengthRange . ' ' . $textareaMaxLength; ?> placeholder="<?php echo esc_attr($textarea_placeholder); ?>"
|
|
aria-label="<?php echo esc_attr($textarea_placeholder); ?>" name="wc_comment"
|
|
class="wc_comment wpd-field"></textarea>
|
|
</div>
|
|
<div class="wpd-editor-buttons-right">
|
|
<?php
|
|
echo apply_filters("wpdiscuz_editor_buttons_html", "", $uniqueId);
|
|
?>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
private function renderTextEditorButtons($uniqueId) {
|
|
$editorButtons = [];
|
|
if ($this->wpdOptions->form["boldButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-bold",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Bold", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["italicButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-italic",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Italic", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["underlineButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-underline",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Underline", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["strikeButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-strike",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Strike", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["olButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-list",
|
|
"value" => "ordered",
|
|
"name" => "",
|
|
"title" => __("Ordered List", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["ulButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-list",
|
|
"value" => "bullet",
|
|
"name" => "",
|
|
"title" => __("Unordered List", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["blockquoteButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-blockquote",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Blockquote", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["codeblockButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-code-block",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Code Block", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["linkButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-link",
|
|
"value" => "",
|
|
"name" => "",
|
|
"title" => __("Link", "wpdiscuz"),
|
|
"svg" => ""
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["sourcecodeButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-sourcecode",
|
|
"value" => "",
|
|
"name" => "sourcecode",
|
|
"title" => __("Source Code", "wpdiscuz"),
|
|
"svg" => "{}"
|
|
];
|
|
}
|
|
if ($this->wpdOptions->form["spoilerButton"]) {
|
|
$editorButtons[] = [
|
|
"class" => "ql-spoiler",
|
|
"value" => "",
|
|
"name" => "spoiler",
|
|
"title" => __("Spoiler", "wpdiscuz"),
|
|
"svg" => "[+]"
|
|
];
|
|
}
|
|
$editorButtons = apply_filters("wpdiscuz_editor_buttons", $editorButtons, $uniqueId);
|
|
$editorButtonsHtml = apply_filters("wpdiscuz_editor_buttons_html", "", $uniqueId);
|
|
?>
|
|
<div id="wpd-editor-toolbar-<?php echo esc_attr($uniqueId); ?>"<?php echo $editorButtons || $editorButtonsHtml ? "" : " class='wpd-toolbar-hidden'"; ?>>
|
|
<?php
|
|
foreach ($editorButtons as $k => $editorButton) {
|
|
$value = $editorButton["value"] ? "value='" . esc_attr($editorButton["value"]) . "'" : "";
|
|
$dataName = $editorButton["name"] ? "data-wpde_button_name='" . esc_attr($editorButton["name"]) . "'" : "";
|
|
?>
|
|
<button title="<?php esc_attr_e($editorButton["title"], "wpdiscuz"); ?>"
|
|
class="<?php echo esc_attr($editorButton["class"]); ?>" <?php echo $value; ?> <?php echo $dataName; ?>><?php echo $editorButton["svg"]; ?></button>
|
|
<?php
|
|
}
|
|
?>
|
|
<div class="wpd-editor-buttons-right">
|
|
<?php
|
|
echo $editorButtonsHtml;
|
|
?>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public function renderEditFrontCommentForm($comment) {
|
|
$uniqueId = $comment->comment_ID . "_" . $comment->comment_parent;
|
|
$html = "<div class='wpdiscuz-edit-form-wrap'><form id='wpdiscuz-edit-form'>";
|
|
$html .= "<div class='wpdiscuz-item wpdiscuz-textarea-wrap'>";
|
|
$content = str_replace(["<code>", "</code>"], [
|
|
"`",
|
|
"`"
|
|
], ($this->wpdOptions->form["richEditor"] === "both" || (!wp_is_mobile() && $this->wpdOptions->form["richEditor"] === "desktop") ? str_replace([
|
|
"</p>\n",
|
|
"<br />\n"
|
|
], ["</p><br>", "<br />"], wpautop($comment->comment_content)) : $comment->comment_content));
|
|
ob_start();
|
|
$this->renderTextEditor("edit_" . $uniqueId, 1);
|
|
$html .= ob_get_clean();
|
|
$html .= "</div>";
|
|
if ($this->formCustomFields) {
|
|
$html .= "<table class='form-table editcomment wpd-form-row'><tbody>";
|
|
$allowedFieldsType = $this->row->allowedFieldsType();
|
|
foreach ($this->formCustomFields as $key => $data) {
|
|
$fieldType = $data["type"];
|
|
if (in_array($fieldType, $allowedFieldsType, true)) {
|
|
$field = call_user_func($fieldType . "::getInstance");
|
|
$value = get_comment_meta($comment->comment_ID, $key, true);
|
|
$html .= $field->editCommentHtml($key, $value, $data, $comment);
|
|
}
|
|
}
|
|
$html .= "</tbody></table>";
|
|
}
|
|
$html .= "<input type='hidden' name='wpdiscuz_unique_id' value='" . esc_attr($uniqueId) . "'>";
|
|
$html .= "<div class='wc_save_wrap'><input class='wc_cancel_edit wpd-second-button' type='button' value='" . esc_attr($this->wpdOptions->getPhrase("wc_comment_edit_cancel_button", ["comment" => $comment])) . "'><input id='wpd-field-submit-edit_" . esc_attr($uniqueId) . "' class='wc_save_edited_comment wpd-prim-button' type='submit' value='" . esc_attr($this->wpdOptions->getPhrase("wc_comment_edit_save_button", ["comment" => $comment])) . "'></div>";
|
|
ob_start();
|
|
do_action("comment_form", $comment->comment_post_ID);
|
|
$html .= ob_get_clean();
|
|
$html .= "</form></div>";
|
|
|
|
return wp_send_json_success(['html' => $html, 'content' => $content]);
|
|
}
|
|
|
|
public function renderEditAdminCommentForm($comment) {
|
|
if ($this->formCustomFields) {
|
|
?>
|
|
<div class="stuffbox">
|
|
<div class="inside">
|
|
<fieldset>
|
|
<legend class="edit-comment-author"><?php esc_html_e("Custom Fields", "wpdiscuz"); ?></legend>
|
|
<table class="form-table editcomment">
|
|
<tbody>
|
|
<?php
|
|
$allowedFieldsType = $this->row->allowedFieldsType();
|
|
foreach ($this->formCustomFields as $key => $data) {
|
|
$fieldType = $data["type"];
|
|
if (in_array($fieldType, $allowedFieldsType, true)) {
|
|
$field = call_user_func($fieldType . "::getInstance");
|
|
$value = get_comment_meta($comment->comment_ID, $key, true);
|
|
echo $field->editCommentHtml($key, $value, $data, $comment);
|
|
}
|
|
}
|
|
?>
|
|
</tbody>
|
|
</table>
|
|
<input type="hidden" name="wpdiscuz_unique_id"
|
|
value="<?php echo esc_attr($comment->comment_ID . "_" . $comment->comment_parent); ?>">
|
|
</fieldset>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
|
|
public function renderFormStructure() {
|
|
$this->initFormMeta();
|
|
$blogRoles = get_editable_roles();
|
|
?>
|
|
<style>
|
|
.wpd-form-table td {
|
|
position: relative;
|
|
}
|
|
|
|
.wpd-form-table td i.fa-question-circle {
|
|
font-size: 16px;
|
|
right: 15px;
|
|
top: 15px;
|
|
position: absolute;
|
|
}
|
|
|
|
.wpdiscuz-form-builder-help {
|
|
text-align: right;
|
|
padding: 5px;
|
|
font-size: 16px;
|
|
margin-top: -15px;
|
|
}
|
|
|
|
.wpdiscuz-form-userrole-block {
|
|
float: left;
|
|
padding: 3px 5px 3px 0px;
|
|
min-width: 25%;
|
|
}
|
|
</style>
|
|
<style>
|
|
[dir=rtl] .wpd-form-table td {
|
|
position: relative;
|
|
padding-left: 25px;
|
|
}
|
|
|
|
[dir=rtl] .wpd-form-table td i.fa-question-circle {
|
|
font-size: 16px;
|
|
right: auto;
|
|
left: 0px;
|
|
top: 15px;
|
|
position: absolute;
|
|
}
|
|
|
|
[dir=rtl] .wpdiscuz-form-builder-help {
|
|
text-align: left;
|
|
padding: 5px;
|
|
font-size: 16px;
|
|
margin-top: -15px;
|
|
}
|
|
|
|
[dir=rtl] .wpdiscuz-form-userrole-block {
|
|
float: left;
|
|
padding: 3px 5px 3px 0px;
|
|
min-width: 25%;
|
|
}
|
|
</style>
|
|
<div class="wpdiscuz-wrapper">
|
|
<div class="wpd-form-options" style="width:100%;">
|
|
<table class="wpd-form-table" width="100%" border="0" cellspacing="0" cellpadding="0"
|
|
style="margin:10px 0px 20px 0px;">
|
|
<tbody>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Language", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $lang = isset($this->generalOptions["lang"]) ? $this->generalOptions["lang"] : get_user_locale(); ?>
|
|
<input required="" type="text"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[lang]"
|
|
value="<?php echo htmlentities($lang, ENT_QUOTES); ?>">
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#language"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Disable commenting for roles", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php
|
|
$rolesCannotComment = isset($this->generalOptions["roles_cannot_comment"]) ? $this->generalOptions["roles_cannot_comment"] : [];
|
|
foreach ($blogRoles as $role => $info) {
|
|
if ($role !== "administrator") {
|
|
?>
|
|
<div class="wpdiscuz-form-userrole-block">
|
|
<input type="checkbox" <?php checked(in_array($role, $rolesCannotComment)); ?>
|
|
value="<?php echo esc_attr($role); ?>"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[roles_cannot_comment][]"
|
|
id="wpd-<?php echo esc_attr($role); ?>"
|
|
style="margin:0px; vertical-align: middle;"/>
|
|
<label for="wpd-<?php echo esc_attr($role); ?>"
|
|
style="white-space:nowrap; font-size:13px;"><?php echo esc_html($info["name"]); ?></label>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#disable_commenting_for_roles"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Allow guests to comment", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $guestCanComment = isset($this->generalOptions["guest_can_comment"]) ? $this->generalOptions["guest_can_comment"] : 1; ?>
|
|
<input <?php checked($guestCanComment, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[guest_can_comment]"
|
|
value="1" id="wpd_cf_guest_yes">
|
|
<label
|
|
for="wpd_cf_guest_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($guestCanComment, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[guest_can_comment]"
|
|
value="0" id="wpd_cf_guest_no"> <label
|
|
for="wpd_cf_guest_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#only-loggedin"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th style="max-width: 350px;">
|
|
<?php esc_html_e("Hide comment section for roles", "wpdiscuz"); ?>
|
|
<p class="wpd-info"><?php esc_html_e("This option hides the entire section of comments. Neither the comment form nor the comment list will be visible for selected user roles.", "wpdiscuz"); ?></p>
|
|
</th>
|
|
<td>
|
|
<?php
|
|
$rolesCannotSeeComments = isset($this->generalOptions["roles_cannot_see_comments"]) ? $this->generalOptions["roles_cannot_see_comments"] : [];
|
|
foreach ($blogRoles as $role => $info) {
|
|
if ($role !== "administrator") {
|
|
?>
|
|
<div class="wpdiscuz-form-userrole-block">
|
|
<input type="checkbox" <?php checked(in_array($role, $rolesCannotSeeComments)); ?>
|
|
value="<?php echo esc_attr($role); ?>"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[roles_cannot_see_comments][]"
|
|
id="wpd-cannot-see-comments-<?php echo esc_attr($role); ?>"
|
|
style="margin:0px; vertical-align: middle;"/>
|
|
<label for="wpd-cannot-see-comments-<?php echo esc_attr($role); ?>"
|
|
style="white-space:nowrap; font-size:13px;"><?php echo esc_html($info["name"]); ?></label>
|
|
</div>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th style="max-width: 350px;">
|
|
<?php esc_html_e("Allow guests to view comments", "wpdiscuz"); ?>
|
|
<p class="wpd-info"><?php esc_html_e("If you disable this option, it'll hide the entire section of comments. Neither the comment form nor the comment list will be visible for guests.", "wpdiscuz"); ?></p>
|
|
</th>
|
|
<td>
|
|
<?php $guestCanComment = isset($this->generalOptions["guest_can_see_comments"]) ? $this->generalOptions["guest_can_see_comments"] : 1; ?>
|
|
<input <?php checked($guestCanComment, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[guest_can_see_comments]"
|
|
value="1" id="wpd_csc_guest_yes">
|
|
<label
|
|
for="wpd_csc_guest_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($guestCanComment, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[guest_can_see_comments]"
|
|
value="0" id="wpd_csc_guest_no">
|
|
<label
|
|
for="wpd_csc_guest_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Enable subscription bar", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $showSubscriptionBar = isset($this->generalOptions["show_subscription_bar"]) ? $this->generalOptions["show_subscription_bar"] : 1; ?>
|
|
<input <?php checked($showSubscriptionBar, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[show_subscription_bar]"
|
|
value="1" id="wpd_cf_sbbar_yes">
|
|
<label for="wpd_cf_sbbar_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($showSubscriptionBar, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[show_subscription_bar]"
|
|
value="0" id="wpd_cf_sbbar_no">
|
|
<label for="wpd_cf_sbbar_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#subscription-bar"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>"
|
|
target="_blank"> <i class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Enable subscription bar for guests", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $guestCanSubscribe = isset($this->generalOptions["guest_can_subscribe"]) ? $this->generalOptions["guest_can_subscribe"] : 1; ?>
|
|
<input <?php checked($guestCanSubscribe, 1, true); ?>
|
|
type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[guest_can_subscribe]"
|
|
value="1" id="wpd_cf_gcs_yes">
|
|
<label for="wpd_cf_gcs_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($guestCanSubscribe, 0, true); ?>
|
|
type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[guest_can_subscribe]"
|
|
value="0" id="wpd_cf_gcs_no">
|
|
<label for="wpd_cf_gcs_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#subscription-bar"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>"
|
|
target="_blank"> <i class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th><?php esc_html_e("Enable subscription bar for roles", "wpdiscuz"); ?></th>
|
|
<td>
|
|
<?php
|
|
$rolesCanSubscribe = isset($this->generalOptions["roles_can_subscribe"]) ? $this->generalOptions["roles_can_subscribe"] : $this->getDefaultRoles();
|
|
foreach ($blogRoles as $role => $info) {
|
|
if ($role === "administrator") {
|
|
continue;
|
|
}
|
|
?>
|
|
<div class="wpdiscuz-form-userrole-block">
|
|
<input type="checkbox" <?php checked(in_array($role, $rolesCanSubscribe)); ?>
|
|
value="<?php echo esc_attr($role); ?>"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[roles_can_subscribe][]"
|
|
id="wpd-can-subscribe-<?php echo esc_attr($role); ?>"
|
|
style="margin:0px; vertical-align: middle;"/>
|
|
<label for="wpd-can-subscribe-<?php echo esc_attr($role); ?>"
|
|
style="white-space:nowrap; font-size:13px;"><?php echo esc_html($info["name"]); ?></label>
|
|
</div>
|
|
<?php
|
|
}
|
|
?>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Display agreement checkbox in comment Subscription Bar", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $showSubscriptionAgreement = isset($this->generalOptions["show_subscription_agreement"]) ? $this->generalOptions["show_subscription_agreement"] : 0; ?>
|
|
<input <?php checked($showSubscriptionAgreement, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[show_subscription_agreement]"
|
|
value="1"
|
|
id="wpd_cf_sbbar_agreement_yes">
|
|
<label for="wpd_cf_sbbar_agreement_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($showSubscriptionAgreement, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[show_subscription_agreement]"
|
|
value="0"
|
|
id="wpd_cf_sbbar_agreement_no">
|
|
<label for="wpd_cf_sbbar_agreement_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#sb-checkbox"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Comment Subscription Bar agreement checkbox label", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $subscriptionAgreementLabel = isset($this->generalOptions["subscription_agreement_label"]) && $this->generalOptions["subscription_agreement_label"] ? $this->generalOptions["subscription_agreement_label"] : esc_html__("I allow to use my email address and send notification about new comments and replies (you can unsubscribe at any time).", "wpdiscuz"); ?>
|
|
<textarea
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[subscription_agreement_label]"
|
|
style="width:80%;"><?php echo wp_kses_post($subscriptionAgreementLabel); ?></textarea>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Comment form header text (singular)", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<div>
|
|
<input type="text"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[header_text_single]"
|
|
placeholder="<?php esc_attr_e("Comment", "wpdiscuz"); ?>"
|
|
value="<?php echo isset($this->generalOptions["header_text_single"]) ? htmlentities($this->generalOptions["header_text_single"], ENT_QUOTES) : esc_html__("Comment", "wpdiscuz"); ?>"
|
|
style="width:80%;">
|
|
</div>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#comment_form_header_text"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Comment form header text (plural)", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<div>
|
|
<input type="text"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[header_text_plural]"
|
|
placeholder="<?php esc_attr_e("Comments", "wpdiscuz"); ?>"
|
|
value="<?php echo isset($this->generalOptions["header_text_plural"]) ? htmlentities($this->generalOptions["header_text_plural"], ENT_QUOTES) : esc_html__("Comments", "wpdiscuz"); ?>"
|
|
style="width:80%;">
|
|
</div>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#comment_form_header_text"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th> <?php esc_html_e("Display comment form for post types", "wpdiscuz"); ?></th>
|
|
<td class="wpd-ct">
|
|
<?php
|
|
$this->formPostTypes = $this->formPostTypes ? $this->formPostTypes : [];
|
|
$registeredPostTypes = get_post_types(["public" => true]);
|
|
$formContentTypeRel = $this->wpdOptions->formContentTypeRel;
|
|
$hasForm = false;
|
|
$formRelExistsInfo = "<p class='wpd-info' style='padding-top:3px;'>" . esc_html__("The red marked post types are already attached to other comment form. If you set this form too, the old forms will not be used for them.", "wpdiscuz") . "</p>";
|
|
foreach ($registeredPostTypes as $typeKey => $typeValue) {
|
|
if (!post_type_supports($typeKey, "comments")) {
|
|
continue;
|
|
}
|
|
$checked = array_key_exists($typeKey, $this->formPostTypes) ? "checked" : "";
|
|
$formRelExistsClass = "";
|
|
if (!$checked && !empty($formContentTypeRel[$typeKey][$lang])) {
|
|
$formRelExistsClass = "wpd-form-rel-exixts";
|
|
$hasForm = true;
|
|
}
|
|
?>
|
|
<label class="<?php echo esc_attr($formRelExistsClass); ?>"
|
|
for="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES . "-" . $typeKey); ?>">
|
|
<input value="<?php echo esc_attr($typeKey); ?>"
|
|
id="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES . "-" . $typeKey); ?>"
|
|
type="checkbox"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES) . "][" . esc_attr($typeKey) . "]"; ?>" <?php echo $checked; ?>/>
|
|
<span><?php echo esc_html($typeValue); ?></span>
|
|
</label>
|
|
<?php } ?>
|
|
<?php
|
|
if ($hasForm) {
|
|
echo $formRelExistsInfo;
|
|
}
|
|
?>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#post-types"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Display comment form for post IDs", "wpdiscuz"); ?>
|
|
<p class="wpd-info"> <?php esc_html_e("You can use this form for certain posts/pages specified by comma separated IDs.", "wpdiscuz"); ?></p>
|
|
</th>
|
|
<td>
|
|
<input type="text"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[postid]"
|
|
placeholder="5,26,30..."
|
|
value="<?php echo isset($this->generalOptions["postid"]) ? htmlentities($this->generalOptions["postid"], ENT_QUOTES) : ""; ?>"
|
|
style="width:80%;">
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#comment_form_for_post_id"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
if ($themes = $this->getThemes()) {
|
|
$theme = !empty($this->generalOptions["theme"]) && isset($themes[$this->generalOptions["theme"]]) ? $this->generalOptions["theme"] : $this->getDefaultTheme();
|
|
if (count($themes) > 1) {
|
|
?>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Theme", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php
|
|
foreach ($themes as $k => $val) {
|
|
?>
|
|
<input <?php checked($theme, $k, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[theme]"
|
|
value="<?php echo esc_attr($k); ?>"
|
|
id="wpd_cf_theme_<?php echo esc_attr($val["name"]); ?>">
|
|
<label for="wpd_cf_theme_<?php echo esc_attr($val["name"]); ?>"><?php echo esc_html($val["name"]); ?></label>
|
|
|
|
<?php
|
|
}
|
|
?>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
if (($layouts = $this->getLayouts($theme)) && count($layouts) > 1) {
|
|
?>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Comment List Layout", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<div id="wpd_comment_layouts" style="width: 290px; margin: 15px 0 0 0">
|
|
<?php
|
|
$layout = !empty($this->generalOptions["layout"]) ? $this->generalOptions["layout"] : $layouts[0];
|
|
foreach ($layouts as $k => $value) {
|
|
?>
|
|
<div class="wpd-box-layout">
|
|
<a href="#img<?php echo esc_attr($value); ?>"><img
|
|
src="<?php echo plugins_url(WPDISCUZ_DIR_NAME . "/assets/img/dashboard/layout-" . $value . "s.png"); ?>"
|
|
class="wpd-com-layout-<?php echo esc_attr($value); ?>"
|
|
style="height: 85px;"/></a>
|
|
<a href="#_" class="wpd-lightbox"
|
|
id="img<?php echo esc_attr($value); ?>"><img
|
|
src="<?php echo plugins_url(WPDISCUZ_DIR_NAME . "/assets/img/dashboard/layout-" . $value . ".png"); ?>"/></a>
|
|
<h4><input <?php checked($layout, $value, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[layout]"
|
|
value="<?php echo esc_attr($value); ?>"
|
|
id="wpd_cf_layout_<?php echo esc_attr($value); ?>">
|
|
<label for="wpd_cf_layout_<?php echo esc_attr($value); ?>"><?php esc_html_e("Layout", "wpdiscuz") ?>
|
|
#<?php echo esc_html($value); ?></label></h4>
|
|
</div>
|
|
<?php
|
|
}
|
|
?>
|
|
</div>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#comment-thread-layout"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>"
|
|
target="_blank"><i class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<?php
|
|
}
|
|
}
|
|
?>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Enable Post Rating", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $enablePostRating = array_key_exists("enable_post_rating", $this->generalOptions) ? $this->generalOptions["enable_post_rating"] : 1; ?>
|
|
<input <?php checked($enablePostRating, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[enable_post_rating]"
|
|
value="1"
|
|
id="wpd_enable_post_rating_yes">
|
|
<label
|
|
for="wpd_enable_post_rating_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($enablePostRating, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[enable_post_rating]"
|
|
value="0"
|
|
id="wpd_enable_post_rating_no">
|
|
<label
|
|
for="wpd_enable_post_rating_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#enable-post-rating"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Post Rating Title", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<div>
|
|
<input type="text"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[post_rating_title]"
|
|
placeholder="<?php esc_attr_e("Article Rating", "wpdiscuz"); ?>"
|
|
value="<?php echo isset($this->generalOptions["post_rating_title"]) ? htmlentities($this->generalOptions["post_rating_title"], ENT_QUOTES) : esc_html__("Article Rating", "wpdiscuz"); ?>"
|
|
style="width:80%;">
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Allow Guests to Rate", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $allowGuestsRateOnPost = isset($this->generalOptions["allow_guests_rate_on_post"]) ? $this->generalOptions["allow_guests_rate_on_post"] : 1; ?>
|
|
<input <?php checked($allowGuestsRateOnPost, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[allow_guests_rate_on_post]"
|
|
value="1"
|
|
id="wpd_allow_guests_rate_on_post_yes">
|
|
<label for="wpd_allow_guests_rate_on_post_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($allowGuestsRateOnPost, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[allow_guests_rate_on_post]"
|
|
value="0"
|
|
id="wpd_allow_guests_rate_on_post_no">
|
|
<label for="wpd_allow_guests_rate_on_post_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#enable-post-rating"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
<?php esc_html_e("Enable rate editing", "wpdiscuz"); ?>
|
|
</th>
|
|
<td>
|
|
<?php $is_rate_editable = isset($this->generalOptions["is_rate_editable"]) ? $this->generalOptions["is_rate_editable"] : 0; ?>
|
|
<input <?php checked($is_rate_editable, 1, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[is_rate_editable]"
|
|
value="1"
|
|
id="wpd_is_rate_editable_yes">
|
|
<label for="wpd_is_rate_editable_yes"><?php esc_html_e("Yes", "wpdiscuz"); ?></label>
|
|
|
|
<input <?php checked($is_rate_editable, 0, true); ?> type="radio"
|
|
name="<?php echo esc_attr(wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS); ?>[is_rate_editable]"
|
|
value="0"
|
|
id="wpd_is_rate_editable_no">
|
|
<label for="wpd_is_rate_editable_no"><?php esc_html_e("No", "wpdiscuz"); ?></label>
|
|
<a href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-settings/#enable-rate-editing"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="wpdiscuz-wrapper">
|
|
<div class="wpdiscuz-form-builder-help"><a
|
|
href="https://wpdiscuz.com/docs/wpdiscuz-7/getting-started/manage-comment-forms/comment-form-builder/"
|
|
title="<?php esc_attr_e("Read the documentation", "wpdiscuz") ?>" target="_blank"><i
|
|
class="far fa-question-circle"></i></a></div>
|
|
<div class="wpd-form">
|
|
<div class="wpd-col-wrap">
|
|
<div class="wpd-field">
|
|
<div class="wpd-field-head-textarea"><?php esc_html_e("Comment Text Field", "wpdiscuz"); ?></div>
|
|
</div>
|
|
</div>
|
|
<div id="wpd-form-sortable-rows">
|
|
<?php
|
|
if ($this->formeStructure) {
|
|
foreach ($this->formeStructure as $id => $rowData) {
|
|
$this->row->dashboardForm($id, $rowData);
|
|
}
|
|
} else {
|
|
$this->row->dashboardForm("wpd_form_row_wrap_0", $this->defaultFieldsData());
|
|
}
|
|
?>
|
|
</div>
|
|
<div id="wpdiscuz_form_add_row" class="wpd-field wpd-field-add"
|
|
style="width:100%; padding:20px; margin:20px 0px; cursor:pointer;"
|
|
title="Add new custom field">
|
|
<div class="wpd-field-head-new"><i
|
|
class="fas fa-plus-circle"></i> <?php esc_html_e("ADD ROW", "wpdiscuz"); ?></div>
|
|
</div>
|
|
<div style="clear:both;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public function isUserCanSeeComments($currentUser, $postId = 0) {
|
|
global $post;
|
|
if (!$post) {
|
|
$post = get_post($postId);
|
|
}
|
|
$this->initFormMeta();
|
|
$this->isUserCanSeeComments = true;
|
|
if ($currentUser && $currentUser->ID) {
|
|
if ($post->post_author && $post->post_author != $currentUser->ID && $currentUser->roles && is_array($currentUser->roles)) {
|
|
$this->generalOptions["roles_cannot_see_comments"] = isset($this->generalOptions["roles_cannot_see_comments"]) ? $this->generalOptions["roles_cannot_see_comments"] : [];
|
|
foreach ($currentUser->roles as $k => $role) {
|
|
if (in_array($role, $this->generalOptions["roles_cannot_see_comments"])) {
|
|
//Filter hook to add extra conditions in user role dependent restriction.
|
|
$this->isUserCanSeeComments = apply_filters("wpdiscuz_user_role_can_see_comments", false, $role);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$this->isUserCanSeeComments = $this->generalOptions["guest_can_see_comments"] = isset($this->generalOptions["guest_can_see_comments"]) ? $this->generalOptions["guest_can_see_comments"] : 1;
|
|
}
|
|
|
|
return $this->isUserCanSeeComments;
|
|
}
|
|
|
|
public function isUserCanComment($currentUser, $postId = 0, &$message = "") {
|
|
global $post;
|
|
if (!$post) {
|
|
$post = get_post($postId);
|
|
}
|
|
$postId = $post && isset($post->ID) ? $post->ID : $postId;
|
|
$user_can_comment = true;
|
|
$this->initFormMeta();
|
|
if ($currentUser && $currentUser->ID) {
|
|
if ($post->post_author && $post->post_author != $currentUser->ID && $currentUser->roles && is_array($currentUser->roles)) {
|
|
$this->generalOptions["roles_cannot_comment"] = isset($this->generalOptions["roles_cannot_comment"]) ? $this->generalOptions["roles_cannot_comment"] : [];
|
|
$this->generalOptions["roles_cannot_see_comments"] = isset($this->generalOptions["roles_cannot_see_comments"]) ? $this->generalOptions["roles_cannot_see_comments"] : [];
|
|
foreach ($currentUser->roles as $k => $role) {
|
|
if (in_array($role, $this->generalOptions["roles_cannot_see_comments"]) || in_array($role, $this->generalOptions["roles_cannot_comment"])) {
|
|
//Filter hook to add extra conditions in user role dependent restriction.
|
|
$user_can_comment = apply_filters("wpdiscuz_user_role_can_comment", false, $role);
|
|
$message = $this->wpdOptions->getPhrase("wc_roles_cannot_comment_message");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$this->generalOptions["guest_can_see_comments"] = isset($this->generalOptions["guest_can_see_comments"]) ? $this->generalOptions["guest_can_see_comments"] : 1;
|
|
$this->generalOptions["guest_can_comment"] = isset($this->generalOptions["guest_can_comment"]) ? $this->generalOptions["guest_can_comment"] : 1;
|
|
$user_can_comment = $this->generalOptions["guest_can_see_comments"] && $this->generalOptions["guest_can_comment"];
|
|
}
|
|
|
|
if ($user_can_comment && class_exists("WooCommerce") && get_post_type($postId) === "product") {
|
|
if (get_option("woocommerce_review_rating_verification_required") === "no" || wc_customer_bought_product("", get_current_user_id(), $postId)) {
|
|
$user_can_comment = true;
|
|
} else {
|
|
$user_can_comment = false;
|
|
$message = "<p class='woocommerce-verification-required'>" . esc_html__("Only logged in customers who have purchased this product may leave a review.", "woocommerce") . "</p>";
|
|
}
|
|
}
|
|
$this->isUserCanComment = $user_can_comment;
|
|
|
|
return $user_can_comment;
|
|
}
|
|
|
|
public function defaultFieldsData() {
|
|
return [
|
|
"column_type" => "two",
|
|
"row_order" => 0,
|
|
"default" => 1,
|
|
"left" => [
|
|
wpdFormConst::WPDISCUZ_FORMS_NAME_FIELD => [
|
|
"type" => "wpdFormAttr\Field\DefaultField\Name",
|
|
"name" => esc_html__("Name", "wpdiscuz"),
|
|
"desc" => "",
|
|
"icon" => "fas fa-user",
|
|
"required" => "1"
|
|
],
|
|
wpdFormConst::WPDISCUZ_FORMS_EMAIL_FIELD => [
|
|
"type" => "wpdFormAttr\Field\DefaultField\Email",
|
|
"name" => esc_html__("Email", "wpdiscuz"),
|
|
"desc" => "",
|
|
"icon" => "fas fa-at",
|
|
"required" => "1"
|
|
],
|
|
wpdFormConst::WPDISCUZ_FORMS_WEBSITE_FIELD => [
|
|
"type" => "wpdFormAttr\Field\DefaultField\Website",
|
|
"name" => esc_html__("Website", "wpdiscuz"),
|
|
"desc" => "",
|
|
"icon" => "fas fa-link",
|
|
"enable" => "1"
|
|
],
|
|
],
|
|
"right" => [
|
|
wpdFormConst::WPDISCUZ_FORMS_CAPTCHA_FIELD => [
|
|
"type" => "wpdFormAttr\Field\DefaultField\Captcha",
|
|
"name" => "",
|
|
"desc" => "",
|
|
"show_for_guests" => "0",
|
|
"show_for_users" => "0"
|
|
],
|
|
wpdFormConst::WPDISCUZ_FORMS_SUBMIT_FIELD => [
|
|
"type" => "wpdFormAttr\Field\DefaultField\Submit",
|
|
"name" => esc_html__("Post Comment", "wpdiscuz")
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
private function saveFormContentTypeRel($data, $lang) {
|
|
$contentType = get_option(wpdFormConst::WPDISCUZ_FORMS_CONTENT_TYPE_REL, []);
|
|
foreach ($this->formPostTypes as $k => $formPostType) {
|
|
if (!in_array($formPostType, $data)) {
|
|
unset($contentType[$formPostType][$lang]);
|
|
}
|
|
}
|
|
foreach ($data as $type => $lable) {
|
|
if (isset($contentType[$type][$lang]) && $contentType[$type][$lang]) {
|
|
$existsFormID = $contentType[$type][$lang];
|
|
$generalOptions = get_post_meta($existsFormID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, true);
|
|
if (!empty($generalOptions)) {
|
|
unset($generalOptions[wpdFormConst::WPDISCUZ_META_FORMS_POSTE_TYPES][$type]);
|
|
}
|
|
update_post_meta($existsFormID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, $generalOptions);
|
|
}
|
|
$contentType[$type][$lang] = $this->formID;
|
|
}
|
|
update_option(wpdFormConst::WPDISCUZ_FORMS_CONTENT_TYPE_REL, $contentType);
|
|
}
|
|
|
|
private function saveFormPostRel($data) {
|
|
$formPostIds = isset($this->generalOptions["postidsArray"]) ? $this->generalOptions["postidsArray"] : [];
|
|
$ids = get_option(wpdFormConst::WPDISCUZ_FORMS_POST_REL, []);
|
|
foreach ($formPostIds as $k => $formPostId) {
|
|
if (!in_array($formPostId, $data)) {
|
|
unset($ids[$formPostId]);
|
|
}
|
|
}
|
|
foreach ($data as $k1 => $id) {
|
|
if (isset($ids[$id]) && $ids[$id]) {
|
|
$existsFormID = $ids[$id];
|
|
$generalOptions = get_post_meta($existsFormID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, true);
|
|
if (!$generalOptions) {
|
|
$generalOptions = ["postidsArray" => []];
|
|
}
|
|
foreach ($generalOptions["postidsArray"] as $key => $pid) {
|
|
if ($pid == $id) {
|
|
unset($generalOptions["postidsArray"][$key]);
|
|
}
|
|
}
|
|
$generalOptions["postid"] = sanitize_text_field(implode(", ", $generalOptions["postidsArray"]));
|
|
update_post_meta($existsFormID, wpdFormConst::WPDISCUZ_META_FORMS_GENERAL_OPTIONS, $generalOptions);
|
|
}
|
|
$ids[$id] = $this->formID;
|
|
}
|
|
update_option(wpdFormConst::WPDISCUZ_FORMS_POST_REL, $ids);
|
|
}
|
|
|
|
public function transferJSData($data) {
|
|
$this->initFormFields();
|
|
$data["is_email_field_required"] = empty($this->formFields[wpdFormConst::WPDISCUZ_FORMS_EMAIL_FIELD]["required"]) ? 0 : $this->formFields[wpdFormConst::WPDISCUZ_FORMS_EMAIL_FIELD]["required"];
|
|
|
|
return $data;
|
|
}
|
|
|
|
public function showRecaptcha() {
|
|
return ($this->wpdOptions->recaptcha["showForGuests"] && !is_user_logged_in()) || ($this->wpdOptions->recaptcha["showForUsers"] && is_user_logged_in()) || ($this->wpdOptions->recaptcha["isShowOnSubscribeForm"] && !is_user_logged_in());
|
|
}
|
|
|
|
public function customFieldsExists() {
|
|
$this->initFormFields();
|
|
|
|
return $this->formCustomFields ? true : false;
|
|
}
|
|
|
|
public function resetData() {
|
|
$this->formID = 0;
|
|
$this->generalOptions = [];
|
|
$this->formCustomFields = [];
|
|
$this->formFields = [];
|
|
}
|
|
|
|
public function getLayouts($theme = '') {
|
|
$theme = $theme ? $theme : $this->generalOptions["theme"];
|
|
$layouts = [];
|
|
$path = $theme . "/layouts/";
|
|
$scannedLayouts = scandir($path);
|
|
unset($scannedLayouts[0]);
|
|
unset($scannedLayouts[1]);
|
|
foreach ($scannedLayouts as $k => $scannedLayout) {
|
|
if (is_dir($path . $scannedLayout)) {
|
|
$layouts[] = $scannedLayout;
|
|
}
|
|
}
|
|
|
|
return $layouts;
|
|
}
|
|
|
|
public function getThemes() {
|
|
$themes = [];
|
|
$path = str_replace("\\", "/", WPDISCUZ_DIR_PATH) . "/themes/";
|
|
if (is_dir($path) && is_readable($path)) {
|
|
$scannedThemes = scandir($path);
|
|
if ($scannedThemes && is_array($scannedThemes)) {
|
|
unset($scannedThemes[0]);
|
|
unset($scannedThemes[1]);
|
|
foreach ($scannedThemes as $k => $scannedTheme) {
|
|
if (is_dir($path . $scannedTheme)) {
|
|
$theme = wp_get_theme($scannedTheme, $path);
|
|
if ($theme->exists()) {
|
|
$themes[$path . $scannedTheme] = [
|
|
"name" => $theme->get("Name"),
|
|
"desc" => $theme->get("Description"),
|
|
"url" => plugins_url(WPDISCUZ_DIR_NAME . "/themes/$scannedTheme"),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$uplDir = wp_upload_dir();
|
|
$themesDir = str_replace("\\", "/", $uplDir["basedir"]) . wpdFormConst::THEMES_DIR;
|
|
if (is_dir($themesDir) && is_readable($themesDir)) {
|
|
$scannedThemes = scandir($themesDir);
|
|
if ($scannedThemes && is_array($scannedThemes)) {
|
|
unset($scannedThemes[0]);
|
|
unset($scannedThemes[1]);
|
|
foreach ($scannedThemes as $k => $scannedTheme) {
|
|
if (is_dir($themesDir . $scannedTheme)) {
|
|
$theme = wp_get_theme($scannedTheme, $themesDir);
|
|
if ($theme->exists()) {
|
|
$themes[$themesDir . $scannedTheme] = [
|
|
"name" => $theme->get("Name"),
|
|
"desc" => $theme->get("Description"),
|
|
"url" => $uplDir["baseurl"] . wpdFormConst::THEMES_DIR . $scannedTheme,
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $themes;
|
|
}
|
|
|
|
public function getDefaultTheme() {
|
|
$path = str_replace("\\", "/", WPDISCUZ_DIR_PATH) . "/themes/";
|
|
$scannedThemes = scandir($path);
|
|
unset($scannedThemes[0]);
|
|
unset($scannedThemes[1]);
|
|
foreach ($scannedThemes as $k => $scannedTheme) {
|
|
if (is_dir($path . $scannedTheme)) {
|
|
$theme = wp_get_theme($scannedTheme, $path);
|
|
if ($theme->exists()) {
|
|
return $path . $scannedTheme;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getAllowedFieldsType() {
|
|
return $this->row->allowedFieldsType();
|
|
}
|
|
|
|
public function updateSeparateRatingMeta($ratings, $post_id) {
|
|
foreach ($ratings as $key => $values) {
|
|
$avg = 0;
|
|
$c = 0;
|
|
foreach ($values as $rating => $count) {
|
|
$avg += $rating * $count;
|
|
$c += $count;
|
|
}
|
|
update_post_meta($post_id, wpdFormConst::WPDISCUZ_RATING_SEPARATE_AVG . $key, ($c === 0 ? 0 : round($avg / $c, 1)));
|
|
update_post_meta($post_id, wpdFormConst::WPDISCUZ_RATING_SEPARATE_COUNT . $key, $c);
|
|
}
|
|
}
|
|
|
|
private function getDefaultRoles() {
|
|
global $wp_roles;
|
|
$blogRoles = $wp_roles->roles;
|
|
$defaultRoles = [];
|
|
foreach ($blogRoles as $role => $info) {
|
|
if ($role == "administrator") {
|
|
continue;
|
|
}
|
|
$defaultRoles[] = $role;
|
|
}
|
|
return $defaultRoles;
|
|
}
|
|
|
|
/**
|
|
* @param $user WP_User
|
|
* @return WP_User
|
|
*/
|
|
public function filterUser($user) {
|
|
if (isset($user->data->user_pass)) {
|
|
unset($user->data->user_pass);
|
|
}
|
|
return $user;
|
|
}
|
|
|
|
}
|