New User Approve - Version 2.4

Version Description

  • Tweak - Code improvement
Download this release

Release Info

Developer wpexpertsio
Plugin Icon 128x128 New User Approve
Version 2.4
Comparing to
See all releases

Code changes from version 2.3 to 2.4

admin/templates/approve.php CHANGED
@@ -3,12 +3,12 @@
3
 
4
  <?php
5
  if ( isset( $_GET['user'] ) && isset( $_GET['status'] ) ) {
6
- echo '<div id="message" class="updated fade"><p>' . __( 'User successfully updated.', 'new-user-approve' ) . '</p></div>';
7
  }
8
  ?>
9
 
10
  <div class="wrap">
11
- <h2><?php _e( 'User Registration Approval', 'new-user-approve' ); ?></h2>
12
 
13
  <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
14
  <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
3
 
4
  <?php
5
  if ( isset( $_GET['user'] ) && isset( $_GET['status'] ) ) {
6
+ echo wp_kses_post('<div id="message" class="updated fade"><p>' . __( 'User successfully updated.', 'new-user-approve' ) . '</p></div>');
7
  }
8
  ?>
9
 
10
  <div class="wrap">
11
+ <h2><?php esc_html_e( 'User Registration Approval', 'new-user-approve' ); ?></h2>
12
 
13
  <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
14
  <?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
admin/templates/upgrade.php CHANGED
@@ -846,9 +846,7 @@ a {
846
  </style>
847
 
848
 
849
- <script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
850
- <script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js" crossorigin="anonymous"></script>
851
- <script src="https://checkout.freemius.com/checkout.min.js"></script>
852
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
853
  new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
854
  j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
846
  </style>
847
 
848
 
849
+
 
 
850
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
851
  new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
852
  j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
assets/js/checkout.min.js ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function NoJQueryPostMessageMixin(e, t) {
2
+ var n, o, i, r, s, c = 1;
3
+ return window.postMessage ? (window.addEventListener ? (n = function(e) { window.addEventListener("message", e, !1) }, o = function(e) { window.removeEventListener("message", e, !1) }) : (n = function(e) { window.attachEvent("onmessage", e) }, o = function(e) { window.detachEvent("onmessage", e) }), this[e] = function(e, t, n) { t && n.postMessage(e, t.replace(/([^:]+:\/\/[^\/]+).*/, "$1")) }, this[t] = function(e, t, r) {
4
+ return i && (o(i), i = null), !!e && void(i = n(function(n) {
5
+ switch (Object.prototype.toString.call(t)) {
6
+ case "[object String]":
7
+ if (t !== n.origin) return !1;
8
+ break;
9
+ case "[object Function]":
10
+ if (t(n.origin)) return !1
11
+ }
12
+ e(n)
13
+ }))
14
+ }) : (this[e] = function(e, t, n) { t && (n.location = t.replace(/#.*$/, "") + "#" + +new Date + c++ + "&" + e) }, this[t] = function(e, t, n) {
15
+ r && (clearInterval(r), r = null), e && (n = "number" == typeof t ? t : "number" == typeof n ? n : 100, r = setInterval(function() {
16
+ var t = document.location.hash,
17
+ n = /^#?\d+&/;
18
+ t !== s && n.test(t) && (s = t, e({ data: t.replace(n, "") }))
19
+ }, n))
20
+ }), this
21
+ }! function(e) {
22
+ var t = this;
23
+ t.FS = t.FS || {}, e === t.FS.Logger && (t.FS.Logger = function() {
24
+ for (var t = {}, n = ["log", "debug", "error"], o = 0; o < n.length; o++) {
25
+ var i = n[o],
26
+ r = i.charAt(0).toUpperCase() + i.slice(1);
27
+ e === console[i] && (i = "log"),
28
+ function(e) { t[r] = function() { Function.prototype.apply.call(console[e], console, arguments) } }(i)
29
+ }
30
+ return t
31
+ }())
32
+ }(),
33
+ function(e, t) {
34
+ var n = this;
35
+ n.FS = n.FS || {}, null == n.FS.PostMessage && (n.FS.PostMessage = function() {
36
+ var n, o, i, r = !1,
37
+ s = !1,
38
+ c = new NoJQueryPostMessageMixin("postMessage", "receiveMessage"),
39
+ a = {},
40
+ u = function(e) { o = e, i = e.substring(0, e.indexOf("/", "https://" === e.substring(0, "https://".length) ? 8 : 7)), l = "" !== e },
41
+ g = function() {
42
+ c.receiveMessage(function(e) {
43
+ var t;
44
+ try {
45
+ if (null != e && e.origin && (e.origin.indexOf("js.stripe.com") > 0 || e.origin.indexOf("www.paypal.com") > 0)) return;
46
+ if (e && e.data && "string" == typeof e.data && "{" === e.data.charAt(0) && (t = JSON.parse(e.data), a[t.type]))
47
+ for (var n = 0; n < a[t.type].length; n++) a[t.type][n](t.data)
48
+ } catch (o) { FS.Logger.Error("FS.PostMessage.receiveMessage", o.message), FS.Logger.Log(e.data) }
49
+ }, n)
50
+ },
51
+ d = -1,
52
+ l = "" !== o,
53
+ f = e(window),
54
+ p = e("html"),
55
+ h = !0;
56
+ try { h = window.self !== window.top } catch (v) {}
57
+ return h && u(decodeURIComponent(document.location.hash.replace(/^#/, ""))), { init: function(e, t) { n = e, g(), FS.PostMessage.receiveOnce("forward", function(e) { window.location = e.url }), t = t || [], t.length > 0 && f.on("scroll", function() { for (var e = 0; e < t.length; e++) FS.PostMessage.postScroll(t[e]) }) }, init_child: function(t) { t && u(t), this.init(i), r = !0, s = !0, e(window).bind("load", function() { FS.PostMessage.postHeight(), FS.PostMessage.post("loaded") }), e(window).resize(function() { FS.PostMessage.postHeight(), FS.PostMessage.post("resize") }) }, hasParent: function() { return l }, postHeight: function(t, n) { t = t || 0, n = n || "#wrap_section"; var o = t + e(n).outerHeight(!0); return o != d && (this.post("height", { height: o }), d = o, !0) }, postScroll: function(e) { this.post("scroll", { top: f.scrollTop(), height: f.height() - parseFloat(p.css("paddingTop")) - parseFloat(p.css("marginTop")) }, e) }, post: function(e, t, n) { FS.Logger.Debug("PostMessage.post", e), n ? c.postMessage(JSON.stringify({ type: e, data: t }), n.src, n.contentWindow) : c.postMessage(JSON.stringify({ type: e, data: t }), o, window.parent) }, receive: function(e, t) { FS.Logger.Debug("PostMessage.receive", e), null == a[e] && (a[e] = []), a[e].push(t) }, receiveOnce: function(e, n, o) { o = t !== o && o, o && this.unset(e), this.is_set(e) || this.receive(e, n) }, is_set: function(e) { return null != a[e] }, unset: function(e) { a[e] = null }, parent_url: function() { return o }, parent_subdomain: function() { return i }, isChildInitialized: function() { return s } }
58
+ }())
59
+ }(jQuery),
60
+ function(e, t) {
61
+ var n = this;
62
+ n.FS = n.FS || {}, n.FS.Checkout = function() {
63
+ var o = !1,
64
+ i = navigator.userAgent.toLowerCase();
65
+ /edge\/|trident\/|msie /.test(i) ? (o = !0, FS.Logger.Log("browser", "ie")) : i.indexOf("safari") != -1 ? i.indexOf("chrome") > -1 ? FS.Logger.Log("browser", "chrome") : (o = !0, FS.Logger.Log("browser", "safari")) : FS.Logger.Log("browser", "other");
66
+ var r, s, c = !1,
67
+ a = function() { return null == location.port || "" === location.port || 80 == location.port },
68
+ u = function() {
69
+ for (var e = document.getElementsByTagName("script"), t = 0; t < e.length; t++)
70
+ if (-1 !== e[t].src.indexOf("//checkout.freemius")) {
71
+ var n = null,
72
+ o = e[t].src.substr("https://".length).indexOf("/");
73
+ return n = -1 === o ? e[t].src : e[t].src.substr(0, o + "https://".length), 0 === n.indexOf("http:") && a() && (n = n.replace("http:", "https:"), e[t].src = n), n
74
+ }
75
+ return "https://checkout.freemius.com"
76
+ },
77
+ g = u(),
78
+ d = function() { return Math.floor(65536 * (1 + Math.random())).toString(16).substring(1) },
79
+ l = function() { return d() + d() + "-" + d() + "-" + d() + "-" + d() + "-" + d() + d() + d() },
80
+ f = { mode: "dialog", guid: l() },
81
+ p = 2147483647,
82
+ h = function(t) { return t = e.extend({}, f, t), null == t.plugin_id && FS.Logger.Error("plugin_id must be configured."), null == t.public_key && FS.Logger.Error("public_key must be configured."), _(t, "timestamp", "s_ctx_ts"), _(t, "sandbox_token", "sandbox"), t },
83
+ v = function(t) {
84
+ var n = g + "/?" + y(t) + "#" + encodeURIComponent(document.location.href);
85
+ s = e('<iframe id="' + t.guid + '" src="' + n + '" width="100%" height="100%" allowtransparency="true" frameborder="0" style="z-index: ' + (p - 1) + "; background: rgba(0,0,0,0.003); border: 0 none transparent; visibility: " + (o ? "hidden" : "visible") + '; margin: 0; padding: 0; position: fixed; left: 0px; top: 0px; width: 100%; height: 100%; -webkit-tap-highlight-color: transparent; overflow: hidden;"></iframe>').appendTo("body"), e('<div id="exit_intent_' + t.guid + '" style="z-index: ' + p + '; border: 0; background: transparent; position: fixed; padding: 0; margin: 0; height: 10px; left: 0; right: 0; width: 100%; top: 0;"></div>').appendTo("body"), c || (FS.PostMessage.init(g), m(), c = !0)
86
+ },
87
+ m = function() {
88
+ var e, t = document.documentElement,
89
+ n = 300,
90
+ o = function(e) { return !(e.pageY > 20) },
91
+ i = function(t) { o(t) && (e = setTimeout(c, n)) },
92
+ r = function() { e && (clearTimeout(e), e = null) },
93
+ c = function() { s && FS.PostMessage.post("exit_intent", null, s[0]) };
94
+ t.addEventListener("mouseleave", i), t.addEventListener("mouseenter", r)
95
+ },
96
+ b = function(t) { if (e(document.body).css("overflowX", r.x), e(document.body).css("overflowY", r.y), e("#exit_intent_" + t.guid).remove(), e("#" + t.guid).remove(), s = null, t.afterClose) try { t.afterClose() } catch (n) { FS.Logger.Log(n) } },
97
+ w = function(t) {
98
+ e("#loader_" + t.guid).show(), r = { x: e(document.body).css("overflowX"), y: e(document.body).css("overflowY") }, e(document.body).css("overflow", "hidden"), v(t), FS.PostMessage.receiveOnce("upgraded", function(e) {
99
+ if (t.success) try { t.success(e) } catch (n) { FS.Logger.Log(n) }
100
+ b(t)
101
+ }, !0), FS.PostMessage.receiveOnce("purchaseCompleted", function(e) { if (t.purchaseCompleted) try { t.purchaseCompleted(e) } catch (n) { FS.Logger.Log(n) } }, !0), FS.PostMessage.receiveOnce("canceled", function(e) {
102
+ if (t.cancel) try { t.cancel(e) } catch (n) { FS.Logger.Log(n) }
103
+ b(t)
104
+ }, !0), FS.PostMessage.receiveOnce("track", function(e) { if (t.track) try { t.track(e.event, e) } catch (n) { FS.Logger.Log(n) } }, !0), FS.PostMessage.receiveOnce("loaded", function(n) { e("#loader_" + t.guid).hide(), o && e("#" + t.guid).ready(function() { e("#" + t.guid).css("visibility", "visible") }) }, !0)
105
+ },
106
+ y = function(e) { var t = ""; for (var n in e) !e.hasOwnProperty(n) || "function" == typeof e[n] || "object" == typeof e[n] && null !== e[n] || (t += "&" + n + "=" + S(e[n])); return t.length > 0 && (t = t.substr(1)), t },
107
+ S = function(e) { return null === e ? "null" : !0 === e ? "1" : !1 === e ? "0" : encodeURIComponent(e).replace(/!/g, "%21").replace(/'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/\*/g, "%2A").replace(/%20/g, "+") },
108
+ _ = function(e, n, o) { t !== e[n] && (e[o] = e[n], delete e[n]) },
109
+ F = function() { e(document.body).append('<div id="loader_' + f.guid + '" style=" display: none; position: fixed; z-index: ' + (p - 1) + '; width: 100%; height: 100%; top: 0; left: 0; right: 0; bottom: 0; text-align: left; background: rgba(0,0,0,0.6); "> <img src="' + g + '/assets/img/spinner.svg" alt="Loading animation" style=" position: absolute; top: 40%; left: 50%; width: auto; height: auto; margin-left: -25px; background: #fff; padding: 10px; border-radius: 50%; box-shadow: 2px 2px 2px rgba(0,0,0,0.1); "> </div>') },
110
+ x = function() {
111
+ var e = window.location.toString(),
112
+ t = e.indexOf("__fs_authorization="),
113
+ n = e.indexOf("?");
114
+ if (0 < n && n < t) {
115
+ var o = e.indexOf("#");
116
+ 0 < o && (e = e.substr(0, o));
117
+ var i, r = e.split("?")[1],
118
+ s = {},
119
+ c = 0,
120
+ a = new RegExp("\\+", "g");
121
+ r = r.split("&");
122
+ for (var u = 0; u < r.length; u++) i = r[u].split("="), i[0].length > 5 && "__fs_" == i[0].substr(0, 5) && (s[i[0]] = decodeURIComponent(i[1].replace(a, " ")), c++);
123
+ if (c > 1) return s
124
+ }
125
+ return !1
126
+ };
127
+ return { configure: function(e) { f = h(e || {}), F(); var o = x(); return !1 !== o && (t !== o.__fs_plugin_id && _(o, "__fs_plugin_id", "plugin_id"), t !== o.__fs_plugin_public_key && _(o, "__fs_plugin_public_key", "public_key"), this.open(o)), n.FS.Checkout }, open: function(e) { w(h(e)) }, close: function() { FS.PostMessage.post("close", null, s[0]) }, clearOptions: function() { f = { mode: f.mode, guid: f.guid } } }
128
+ }()
129
+ }(jQuery);
assets/js/modernizr.min.js ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ window.Modernizr = function(e, t, n) {
2
+ function r(e) { b.cssText = e }
3
+
4
+ function o(e, t) { return r(S.join(e + ";") + (t || "")) }
5
+
6
+ function a(e, t) { return typeof e === t }
7
+
8
+ function i(e, t) { return !!~("" + e).indexOf(t) }
9
+
10
+ function c(e, t) { for (var r in e) { var o = e[r]; if (!i(o, "-") && b[o] !== n) return "pfx" == t ? o : !0 } return !1 }
11
+
12
+ function s(e, t, r) { for (var o in e) { var i = t[e[o]]; if (i !== n) return r === !1 ? e[o] : a(i, "function") ? i.bind(r || t) : i } return !1 }
13
+
14
+ function u(e, t, n) {
15
+ var r = e.charAt(0).toUpperCase() + e.slice(1),
16
+ o = (e + " " + k.join(r + " ") + r).split(" ");
17
+ return a(t, "string") || a(t, "undefined") ? c(o, t) : (o = (e + " " + T.join(r + " ") + r).split(" "), s(o, t, n))
18
+ }
19
+
20
+ function l() { p.input = function(n) { for (var r = 0, o = n.length; o > r; r++) j[n[r]] = !!(n[r] in E); return j.list && (j.list = !(!t.createElement("datalist") || !e.HTMLDataListElement)), j }("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")), p.inputtypes = function(e) { for (var r, o, a, i = 0, c = e.length; c > i; i++) E.setAttribute("type", o = e[i]), r = "text" !== E.type, r && (E.value = x, E.style.cssText = "position:absolute;visibility:hidden;", /^range$/.test(o) && E.style.WebkitAppearance !== n ? (g.appendChild(E), a = t.defaultView, r = a.getComputedStyle && "textfield" !== a.getComputedStyle(E, null).WebkitAppearance && 0 !== E.offsetHeight, g.removeChild(E)) : /^(search|tel)$/.test(o) || (r = /^(url|email)$/.test(o) ? E.checkValidity && E.checkValidity() === !1 : E.value != x)), P[e[i]] = !!r; return P }("search tel url email datetime date month week time datetime-local number range color".split(" ")) }
21
+ var d, f, m = "2.8.3",
22
+ p = {},
23
+ h = !0,
24
+ g = t.documentElement,
25
+ v = "modernizr",
26
+ y = t.createElement(v),
27
+ b = y.style,
28
+ E = t.createElement("input"),
29
+ x = ":)",
30
+ w = {}.toString,
31
+ S = " -webkit- -moz- -o- -ms- ".split(" "),
32
+ C = "Webkit Moz O ms",
33
+ k = C.split(" "),
34
+ T = C.toLowerCase().split(" "),
35
+ N = { svg: "http://www.w3.org/2000/svg" },
36
+ M = {},
37
+ P = {},
38
+ j = {},
39
+ $ = [],
40
+ D = $.slice,
41
+ F = function(e, n, r, o) {
42
+ var a, i, c, s, u = t.createElement("div"),
43
+ l = t.body,
44
+ d = l || t.createElement("body");
45
+ if (parseInt(r, 10))
46
+ for (; r--;) c = t.createElement("div"), c.id = o ? o[r] : v + (r + 1), u.appendChild(c);
47
+ return a = ["&#173;", '<style id="s', v, '">', e, "</style>"].join(""), u.id = v, (l ? u : d).innerHTML += a, d.appendChild(u), l || (d.style.background = "", d.style.overflow = "hidden", s = g.style.overflow, g.style.overflow = "hidden", g.appendChild(d)), i = n(u, e), l ? u.parentNode.removeChild(u) : (d.parentNode.removeChild(d), g.style.overflow = s), !!i
48
+ },
49
+ z = function(t) { var n = e.matchMedia || e.msMatchMedia; if (n) return n(t) && n(t).matches || !1; var r; return F("@media " + t + " { #" + v + " { position: absolute; } }", function(t) { r = "absolute" == (e.getComputedStyle ? getComputedStyle(t, null) : t.currentStyle).position }), r },
50
+ A = function() {
51
+ function e(e, o) { o = o || t.createElement(r[e] || "div"), e = "on" + e; var i = e in o; return i || (o.setAttribute || (o = t.createElement("div")), o.setAttribute && o.removeAttribute && (o.setAttribute(e, ""), i = a(o[e], "function"), a(o[e], "undefined") || (o[e] = n), o.removeAttribute(e))), o = null, i }
52
+ var r = { select: "input", change: "input", submit: "form", reset: "form", error: "img", load: "img", abort: "img" };
53
+ return e
54
+ }(),
55
+ L = {}.hasOwnProperty;
56
+ f = a(L, "undefined") || a(L.call, "undefined") ? function(e, t) { return t in e && a(e.constructor.prototype[t], "undefined") } : function(e, t) { return L.call(e, t) }, Function.prototype.bind || (Function.prototype.bind = function(e) {
57
+ var t = this;
58
+ if ("function" != typeof t) throw new TypeError;
59
+ var n = D.call(arguments, 1),
60
+ r = function() {
61
+ if (this instanceof r) {
62
+ var o = function() {};
63
+ o.prototype = t.prototype;
64
+ var a = new o,
65
+ i = t.apply(a, n.concat(D.call(arguments)));
66
+ return Object(i) === i ? i : a
67
+ }
68
+ return t.apply(e, n.concat(D.call(arguments)))
69
+ };
70
+ return r
71
+ }), M.flexbox = function() { return u("flexWrap") }, M.flexboxlegacy = function() { return u("boxDirection") }, M.canvas = function() { var e = t.createElement("canvas"); return !(!e.getContext || !e.getContext("2d")) }, M.canvastext = function() { return !(!p.canvas || !a(t.createElement("canvas").getContext("2d").fillText, "function")) }, M.webgl = function() { return !!e.WebGLRenderingContext }, M.touch = function() { var n; return "ontouchstart" in e || e.DocumentTouch && t instanceof DocumentTouch ? n = !0 : F(["@media (", S.join("touch-enabled),("), v, ")", "{#modernizr{top:9px;position:absolute}}"].join(""), function(e) { n = 9 === e.offsetTop }), n }, M.geolocation = function() { return "geolocation" in navigator }, M.postmessage = function() { return !!e.postMessage }, M.websqldatabase = function() { return !!e.openDatabase }, M.indexedDB = function() { return !!u("indexedDB", e) }, M.hashchange = function() { return A("hashchange", e) && (t.documentMode === n || t.documentMode > 7) }, M.history = function() { return !(!e.history || !history.pushState) }, M.draganddrop = function() { var e = t.createElement("div"); return "draggable" in e || "ondragstart" in e && "ondrop" in e }, M.websockets = function() { return "WebSocket" in e || "MozWebSocket" in e }, M.rgba = function() { return r("background-color:rgba(150,255,150,.5)"), i(b.backgroundColor, "rgba") }, M.hsla = function() { return r("background-color:hsla(120,40%,100%,.5)"), i(b.backgroundColor, "rgba") || i(b.backgroundColor, "hsla") }, M.multiplebgs = function() { return r("background:url(https://),url(https://),red url(https://)"), /(url\s*\(.*?){3}/.test(b.background) }, M.backgroundsize = function() { return u("backgroundSize") }, M.borderimage = function() { return u("borderImage") }, M.borderradius = function() { return u("borderRadius") }, M.boxshadow = function() { return u("boxShadow") }, M.textshadow = function() { return "" === t.createElement("div").style.textShadow }, M.opacity = function() { return o("opacity:.55"), /^0.55$/.test(b.opacity) }, M.cssanimations = function() { return u("animationName") }, M.csscolumns = function() { return u("columnCount") }, M.cssgradients = function() {
72
+ var e = "background-image:",
73
+ t = "gradient(linear,left top,right bottom,from(#9f9),to(white));",
74
+ n = "linear-gradient(left top,#9f9, white);";
75
+ return r((e + "-webkit- ".split(" ").join(t + e) + S.join(n + e)).slice(0, -e.length)), i(b.backgroundImage, "gradient")
76
+ }, M.cssreflections = function() { return u("boxReflect") }, M.csstransforms = function() { return !!u("transform") }, M.csstransforms3d = function() { var e = !!u("perspective"); return e && "webkitPerspective" in g.style && F("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}", function(t) { e = 9 === t.offsetLeft && 3 === t.offsetHeight }), e }, M.csstransitions = function() { return u("transition") }, M.fontface = function() {
77
+ var e;
78
+ return F('@font-face {font-family:"font";src:url("https://")}', function(n, r) {
79
+ var o = t.getElementById("smodernizr"),
80
+ a = o.sheet || o.styleSheet,
81
+ i = a ? a.cssRules && a.cssRules[0] ? a.cssRules[0].cssText : a.cssText || "" : "";
82
+ e = /src/i.test(i) && 0 === i.indexOf(r.split(" ")[0])
83
+ }), e
84
+ }, M.generatedcontent = function() { var e; return F(["#", v, "{font:0/0 a}#", v, ':after{content:"', x, '";visibility:hidden;font:3px/1 a}'].join(""), function(t) { e = t.offsetHeight >= 3 }), e }, M.video = function() {
85
+ var e = t.createElement("video"),
86
+ n = !1;
87
+ try {
88
+ (n = !!e.canPlayType) && (n = new Boolean(n), n.ogg = e.canPlayType('video/ogg; codecs="theora"').replace(/^no$/, ""), n.h264 = e.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/, ""), n.webm = e.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/, ""))
89
+ } catch (r) {}
90
+ return n
91
+ }, M.audio = function() {
92
+ var e = t.createElement("audio"),
93
+ n = !1;
94
+ try {
95
+ (n = !!e.canPlayType) && (n = new Boolean(n), n.ogg = e.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/, ""), n.mp3 = e.canPlayType("audio/mpeg;").replace(/^no$/, ""), n.wav = e.canPlayType('audio/wav; codecs="1"').replace(/^no$/, ""), n.m4a = (e.canPlayType("audio/x-m4a;") || e.canPlayType("audio/aac;")).replace(/^no$/, ""))
96
+ } catch (r) {}
97
+ return n
98
+ }, M.localstorage = function() { try { return localStorage.setItem(v, v), localStorage.removeItem(v), !0 } catch (e) { return !1 } }, M.sessionstorage = function() { try { return sessionStorage.setItem(v, v), sessionStorage.removeItem(v), !0 } catch (e) { return !1 } }, M.webworkers = function() { return !!e.Worker }, M.applicationcache = function() { return !!e.applicationCache }, M.svg = function() { return !!t.createElementNS && !!t.createElementNS(N.svg, "svg").createSVGRect }, M.inlinesvg = function() { var e = t.createElement("div"); return e.innerHTML = "<svg/>", (e.firstChild && e.firstChild.namespaceURI) == N.svg }, M.smil = function() { return !!t.createElementNS && /SVGAnimate/.test(w.call(t.createElementNS(N.svg, "animate"))) }, M.svgclippaths = function() { return !!t.createElementNS && /SVGClipPath/.test(w.call(t.createElementNS(N.svg, "clipPath"))) };
99
+ for (var H in M) f(M, H) && (d = H.toLowerCase(), p[d] = M[H](), $.push((p[d] ? "" : "no-") + d));
100
+ return p.input || l(), p.addTest = function(e, t) {
101
+ if ("object" == typeof e)
102
+ for (var r in e) f(e, r) && p.addTest(r, e[r]);
103
+ else {
104
+ if (e = e.toLowerCase(), p[e] !== n) return p;
105
+ t = "function" == typeof t ? t() : t, "undefined" != typeof h && h && (g.className += " " + (t ? "" : "no-") + e), p[e] = t
106
+ }
107
+ return p
108
+ }, r(""), y = E = null,
109
+ function(e, t) {
110
+ function n(e, t) {
111
+ var n = e.createElement("p"),
112
+ r = e.getElementsByTagName("head")[0] || e.documentElement;
113
+ return n.innerHTML = "x<style>" + t + "</style>", r.insertBefore(n.lastChild, r.firstChild)
114
+ }
115
+
116
+ function r() { var e = y.elements; return "string" == typeof e ? e.split(" ") : e }
117
+
118
+ function o(e) { var t = v[e[h]]; return t || (t = {}, g++, e[h] = g, v[g] = t), t }
119
+
120
+ function a(e, n, r) {
121
+ if (n || (n = t), l) return n.createElement(e);
122
+ r || (r = o(n));
123
+ var a;
124
+ return a = r.cache[e] ? r.cache[e].cloneNode() : p.test(e) ? (r.cache[e] = r.createElem(e)).cloneNode() : r.createElem(e), !a.canHaveChildren || m.test(e) || a.tagUrn ? a : r.frag.appendChild(a)
125
+ }
126
+
127
+ function i(e, n) {
128
+ if (e || (e = t), l) return e.createDocumentFragment();
129
+ n = n || o(e);
130
+ for (var a = n.frag.cloneNode(), i = 0, c = r(), s = c.length; s > i; i++) a.createElement(c[i]);
131
+ return a
132
+ }
133
+
134
+ function c(e, t) { t.cache || (t.cache = {}, t.createElem = e.createElement, t.createFrag = e.createDocumentFragment, t.frag = t.createFrag()), e.createElement = function(n) { return y.shivMethods ? a(n, e, t) : t.createElem(n) }, e.createDocumentFragment = Function("h,f", "return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&(" + r().join().replace(/[\w\-]+/g, function(e) { return t.createElem(e), t.frag.createElement(e), 'c("' + e + '")' }) + ");return n}")(y, t.frag) }
135
+
136
+ function s(e) { e || (e = t); var r = o(e); return !y.shivCSS || u || r.hasCSS || (r.hasCSS = !!n(e, "article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")), l || c(e, r), e }
137
+ var u, l, d = "3.7.0",
138
+ f = e.html5 || {},
139
+ m = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,
140
+ p = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,
141
+ h = "_html5shiv",
142
+ g = 0,
143
+ v = {};
144
+ ! function() {
145
+ try {
146
+ var e = t.createElement("a");
147
+ e.innerHTML = "<xyz></xyz>", u = "hidden" in e, l = 1 == e.childNodes.length || function() { t.createElement("a"); var e = t.createDocumentFragment(); return "undefined" == typeof e.cloneNode || "undefined" == typeof e.createDocumentFragment || "undefined" == typeof e.createElement }()
148
+ } catch (n) { u = !0, l = !0 }
149
+ }();
150
+ var y = { elements: f.elements || "abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video", version: d, shivCSS: f.shivCSS !== !1, supportsUnknownElements: l, shivMethods: f.shivMethods !== !1, type: "default", shivDocument: s, createElement: a, createDocumentFragment: i };
151
+ e.html5 = y, s(t)
152
+ }(this, t), p._version = m, p._prefixes = S, p._domPrefixes = T, p._cssomPrefixes = k, p.mq = z, p.hasEvent = A, p.testProp = function(e) { return c([e]) }, p.testAllProps = u, p.testStyles = F, p.prefixed = function(e, t, n) { return t ? u(e, t, n) : u(e, "pfx") }, g.className = g.className.replace(/(^|\s)no-js(\s|$)/, "$1$2") + (h ? " js " + $.join(" ") : ""), p
153
+ }(this, this.document);
includes/admin-approve.php CHANGED
@@ -5,262 +5,294 @@
5
  * Admin must approve all new users
6
  */
7
 
8
- class pw_new_user_approve_admin_approve {
9
-
10
- var $_admin_page = 'new-user-approve-admin';
11
- var $_admin_upgrade_page = 'new-user-approve-upgrade';
12
-
13
- /**
14
- * The only instance of pw_new_user_approve_admin_approve.
15
- *
16
- * @var pw_new_user_approve_admin_approve
17
- */
18
- private static $instance;
19
-
20
- /**
21
- * Returns the main instance.
22
- *
23
- * @return pw_new_user_approve_admin_approve
24
- */
25
- public static function instance() {
26
- if ( !isset( self::$instance ) ) {
27
- self::$instance = new pw_new_user_approve_admin_approve();
28
- }
29
- return self::$instance;
30
- }
31
-
32
- /**
33
- * @since 1.0
34
- * @since 2.1 `admin_post_nua-save-api-key` added for zapier
35
- */
36
- private function __construct() {
37
- // Actions
38
- add_action( 'admin_menu', array( $this, 'admin_menu_link' ) );
39
- add_action( 'admin_init', array( $this, 'process_input' ) );
40
- add_action( 'admin_notices', array( $this, 'admin_notice' ) );
41
- add_action( 'admin_init', array( $this, 'notice_ignore' ) );
42
- add_action( 'admin_init', array( $this, '_add_meta_boxes' ) );
43
- add_action( 'admin_post_nua-save-api-key', array( $this, 'save_api_key' ) );
44
- add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_script'));
45
- }
46
-
47
- public function admin_enqueue_script() {
48
- wp_enqueue_script('hide-seek-search', pw_new_user_approve()->get_plugin_url() . '/assets/js/jquery.hideseek.min.js', array('jquery'));
49
- }
50
-
51
- /**
52
- * Add the new menu item to the users portion of the admin menu
53
- *
54
- * @uses admin_menu
55
- */
56
- function admin_menu_link() {
57
- $show_admin_page = apply_filters( 'new_user_approve_show_admin_page', true );
58
-
59
- if ( $show_admin_page ) {
60
- $cap = apply_filters( 'new_user_approve_minimum_cap', 'edit_users' );
61
- $hook = add_menu_page( __( 'Approve New Users', 'new-user-approve' ), __( 'Approve New Users', 'new-user-approve' ), $cap, $this->_admin_page, array( $this, 'approve_admin' ) );
62
- add_submenu_page($this->_admin_page,__( 'Upgrade', 'new-user-approve' ),__( 'Upgrade', 'new-user-approve' ),$cap,$this->_admin_upgrade_page,array( $this, 'new_user_approve_upgrade' ));
63
- add_action( 'load-' . $hook, array( $this, 'admin_enqueue_scripts' ) );
64
-
65
- }
66
- }
67
-
68
- /**
69
- * Create the upgrade to premium page
70
- */
71
- public function new_user_approve_upgrade() {
72
- require_once( pw_new_user_approve()->get_plugin_dir() . '/admin/templates/upgrade.php' );
73
- }
74
-
75
- /**
76
- * Create the view for the admin interface
77
- */
78
- public function approve_admin() {
79
- require_once( pw_new_user_approve()->get_plugin_dir() . '/admin/templates/approve.php' );
80
- }
81
-
82
- /**
83
- * Output the table that shows the registered users grouped by status
84
- *
85
- * @param string $status the filter to use for which the users will be queried. Possible values are pending, approved, or denied.
86
- */
87
- public function user_table( $status ) {
88
- global $current_user;
89
-
90
- $approve = ( 'denied' == $status || 'pending' == $status );
91
- $deny = ( 'approved' == $status || 'pending' == $status );
92
-
93
- $user_status = pw_new_user_approve()->get_user_statuses();
94
- $users = $user_status[$status];
95
-
96
- if ( count( $users ) > 0 ) {
97
- if ( 'denied' == $status ) {
98
- ?>
99
- <p class="status_heading"><?php _e( 'Denied Users', 'new-user-approve' ); ?></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  <?php
101
- } else if ( 'approved' == $status ) {
102
- ?>
103
- <p class="status_heading"><?php _e( 'Approved Users', 'new-user-approve' ); ?></p>
104
  <?php
105
- } else if ( 'pending' == $status ) {
106
- ?>
107
- <p class="status_heading"><?php _e( 'Pending Users', 'new-user-approve' ); ?></p>
108
- <?php
109
- }
110
- ?>
111
  <table class="widefat">
112
  <thead>
113
  <tr class="thead">
114
- <th><?php _e( 'Username', 'new-user-approve' ); ?></th>
115
- <th><?php _e( 'Name', 'new-user-approve' ); ?></th>
116
- <th><?php _e( 'E-mail', 'new-user-approve' ); ?></th>
117
- <?php if ( 'pending' == $status ) { ?>
118
- <th colspan="2"><?php _e( 'Action', 'new-user-approve' ); ?></th>
119
- <?php } else { ?>
120
- <th><?php _e( 'Action', 'new-user-approve' ); ?></th>
121
- <?php } ?>
122
  </tr>
123
  </thead>
124
  <tbody class="nua-user-list">
125
  <?php
126
- // show each of the users
127
- $row = 1;
128
- foreach ( $users as $user ) {
129
- $class = ( $row % 2 ) ? '' : ' class="alternate"';
130
- $avatar = get_avatar( $user->user_email, 32 );
131
-
132
- if ( $approve ) {
133
- $approve_link = get_option( 'siteurl' ) . '/wp-admin/admin.php?page=' . $this->_admin_page . '&user=' . $user->ID . '&status=approve';
134
- if ( isset( $_REQUEST['tab'] ) )
135
- $approve_link = add_query_arg( array( 'tab' => esc_attr( $_REQUEST['tab'] ) ), $approve_link );
136
-
137
- $approve_link = wp_nonce_url( $approve_link, 'pw_new_user_approve_action_' . get_class( $this ) );
138
-
139
- }
140
- if ( $deny ) {
141
- $deny_link = get_option( 'siteurl' ) . '/wp-admin/admin.php?page=' . $this->_admin_page . '&user=' . $user->ID . '&status=deny';
142
- if ( isset( $_REQUEST['tab'] ) )
143
- $deny_link = add_query_arg( 'tab', esc_attr( $_REQUEST['tab'] ), $deny_link );
144
- $deny_link = wp_nonce_url( $deny_link, 'pw_new_user_approve_action_' . get_class( $this ) );
145
- }
146
-
147
- if ( current_user_can( 'edit_user', $user->ID ) ) {
148
- if ( $current_user->ID == $user->ID ) {
149
- $edit_link = 'profile.php';
150
- } else {
151
- $edit_link = add_query_arg( 'wp_http_referer', urlencode( esc_url( stripslashes( $_SERVER['REQUEST_URI'] ) ) ), "user-edit.php?user_id=$user->ID" );
152
- }
153
- $edit = ($avatar == true)?('<strong style="position: relative; top: -17px; left: 6px;"><a href="' . esc_url( $edit_link ) . '">' . esc_html( $user->user_login ) . '</a></strong>'):('<strong style="top: -17px; left: 6px;"><a href="' . esc_url( $edit_link ) . '">' . esc_html( $user->user_login ) . '</a></strong>');
154
-
155
- } else {
156
- $edit = ($avatar == true)?('<strong style="position: relative; top: -17px; left: 6px;">' . esc_html( $user->user_login ) . '</strong>'):('<strong style="top: -17px; left: 6px;">' . esc_html( $user->user_login ) . '</strong>');
157
-
158
- }
159
-
160
- ?>
161
- <tr <?php echo $class; ?>>
162
- <td><?php echo $avatar . ' ' . $edit; ?></td>
163
- <td><?php echo get_user_meta( $user->ID, 'first_name', true ) . ' ' . get_user_meta( $user->ID, 'last_name', true ); ?></td>
164
- <td><a href="mailto:<?php echo $user->user_email; ?>"
165
- title="<?php _e( 'email:', 'new-user-approve' ) ?> <?php echo $user->user_email; ?>"><?php echo $user->user_email; ?></a>
 
 
 
 
 
166
  </td>
167
- <?php if ( $approve && $user->ID != get_current_user_id() ) { ?>
168
- <td><a class="button-primary" href="<?php echo esc_url( $approve_link ); ?>"
169
- title="<?php _e( 'Approve', 'new-user-approve' ); ?> <?php echo $user->user_login; ?>"><?php _e( 'Approve', 'new-user-approve' ); ?></a>
170
  </td>
171
- <?php } ?>
172
- <?php if ( $deny && $user->ID != get_current_user_id() ) { ?>
173
- <td><a class="button" href="<?php echo esc_url( $deny_link ); ?>"
174
- title="<?php _e( 'Deny', 'new-user-approve' ); ?> <?php echo $user->user_login; ?>"><?php _e( 'Deny', 'new-user-approve' ); ?></a>
175
  </td>
176
- <?php } ?>
177
- <?php if ( $user->ID == get_current_user_id() ) : ?>
178
  <td colspan="2">&nbsp;</td>
179
- <?php endif; ?>
180
  </tr><?php
181
- $row++;
182
- }
183
- ?>
184
  </tbody>
185
  </table>
186
  <?php
187
- } else {
188
- $status_i18n = $status;
189
- if ( $status == 'approved' ) {
190
- $status_i18n = __( 'approved', 'new-user-approve' );
191
- } else if ( $status == 'denied' ) {
192
- $status_i18n = __( 'denied', 'new-user-approve' );
193
- } else if ( $status == 'pending' ) {
194
- $status_i18n = __( 'pending', 'new-user-approve' );
195
- }
196
-
197
- echo '<p>' . sprintf( __( 'There are no users with a status of %s', 'new-user-approve' ), $status_i18n ) . '</p>';
198
- }
199
- }
200
-
201
- /**
202
- * Accept input from admin to modify a user
203
- *
204
- * @uses init
205
- */
206
- public function process_input() {
207
- if ( ( isset( $_GET['page'] ) && $_GET['page'] == $this->_admin_page ) && isset( $_GET['status'] ) ) {
208
- $valid_request = check_admin_referer( 'pw_new_user_approve_action_' . get_class( $this ) );
209
-
210
- if ( $valid_request ) {
211
- $status = sanitize_key( $_GET['status'] );
212
- $user_id = absint( $_GET['user'] );
213
-
214
- pw_new_user_approve()->update_user_status( $user_id, $status );
215
- }
216
- }
217
- }
218
-
219
- /**
220
- * Display a notice on the legacy page that notifies the user of the new interface.
221
- *
222
- * @uses admin_notices
223
- */
224
- public function admin_notice() {
225
- $screen = get_current_screen();
226
-
227
- if ( $screen->id == 'users_page_new-user-approve-admin' ) {
228
- $user_id = get_current_user_id();
229
-
230
- // Check that the user hasn't already clicked to ignore the message
231
- if ( !get_user_meta( $user_id, 'pw_new_user_approve_ignore_notice' ) ) {
232
- echo '<div class="updated"><p>';
233
- printf( __( 'You can now update user status on the <a href="%1$s">users admin page</a>. | <a href="%2$s">Hide Notice</a>', 'new-user-approve' ), admin_url( 'users.php' ), add_query_arg( array( 'new-user-approve-ignore-notice' => 1 ) ) );
234
- echo "</p></div>";
235
- }
236
- }
237
- }
238
-
239
- /**
240
- * If user clicks to ignore the notice, add that to their user meta
241
- *
242
- * @uses admin_init
243
- */
244
- public function notice_ignore() {
245
- if ( isset( $_GET['new-user-approve-ignore-notice'] ) && '1' == $_GET['new-user-approve-ignore-notice'] ) {
246
- $user_id = get_current_user_id();
247
- add_user_meta( $user_id, 'pw_new_user_approve_ignore_notice', '1', true );
248
- }
249
- }
250
-
251
- public function admin_enqueue_scripts() {
252
- wp_enqueue_script( 'post' );
253
- }
254
-
255
- public function _add_meta_boxes() {
256
- add_meta_box( 'nua-approve-admin', __( 'Approve Users', 'new-user-approve' ), array( $this, 'metabox_main' ), 'users_page_new-user-approve-admin', 'main', 'high' );
257
- add_meta_box( 'nua-support', __( 'Support', 'new-user-approve' ), array( $this, 'metabox_support' ), 'users_page_new-user-approve-admin', 'side', 'default' );
258
- add_meta_box( 'nua-feedback', __( 'Feedback', 'new-user-approve' ), array( $this, 'metabox_feedback' ), 'users_page_new-user-approve-admin', 'side', 'default' );
259
- }
260
-
261
- public function metabox_main() {
262
- $active_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'pending_users';
263
- ?>
 
 
 
 
 
 
 
 
 
 
 
264
  <h3 class="nav-tab-wrapper" style="padding-bottom: 0; border-bottom: none;">
265
  <script>
266
  jQuery(document).ready(function() {
@@ -270,46 +302,47 @@ class pw_new_user_approve_admin_approve {
270
  });
271
  </script>
272
  <input type="search" name="nua_search" placeholder="Search" style="float: right;" data-list=".nua-user-list">
273
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=new-user-approve-admin&tab=pending_users' ) ); ?>"
274
- class="nav-tab<?php echo $active_tab == 'pending_users' ? ' nav-tab-active' : ''; ?>"><span><?php _e( 'Pending Users', 'new-user-approve' ); ?></span></a>
275
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=new-user-approve-admin&tab=approved_users' ) ); ?>"
276
- class="nav-tab<?php echo $active_tab == 'approved_users' ? ' nav-tab-active' : ''; ?>"><span><?php _e( 'Approved Users', 'new-user-approve' ); ?></span></a>
277
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=new-user-approve-admin&tab=denied_users' ) ); ?>"
278
- class="nav-tab<?php echo $active_tab == 'denied_users' ? ' nav-tab-active' : ''; ?>"><span><?php _e( 'Denied Users', 'new-user-approve' ); ?></span></a>
279
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=new-user-approve-admin&tab=zapier' ) ); ?>"
280
- class="nav-tab<?php echo $active_tab == 'zapier' ? ' nav-tab-active' : ''; ?>"><span><?php _e( 'Zapier', 'new-user-approve' ); ?></span></a>
281
- <a href="<?php echo esc_url( admin_url( 'admin.php?page=new-user-approve-admin&tab=pro_features' ) ); ?>"
282
- class="nav-tab<?php echo $active_tab == 'pro_features' ? ' nav-tab-active' : ''; ?>"><span><?php _e( 'Pro Features', 'new-user-approve' ); ?></span></a>
283
  </h3>
284
 
285
- <?php if ( $active_tab == 'pending_users' ) : ?>
286
  <div id="pw_pending_users">
287
- <?php $this->user_table( 'pending' ); ?>
288
  </div>
289
- <?php elseif ( $active_tab == 'approved_users' ) : ?>
290
  <div id="pw_approved_users">
291
- <?php $this->user_table( 'approved' ); ?>
292
  </div>
293
  <?php
294
- elseif ( $active_tab == 'denied_users' ) : ?>
295
  <div id="pw_denied_users">
296
- <?php $this->user_table( 'denied' ); ?>
297
  </div>
298
  <?php
299
- elseif ( $active_tab == 'zapier' ) : ?>
300
  <div id="pw_denied_users">
301
- <?php $this->zapier(); ?>
302
  </div>
303
  <?php
304
- elseif ( $active_tab == 'pro_features' ) : ?>
305
  <div id="pw_pro_features">
306
- <?php $this->pro_features(); ?>
307
  </div>
308
  <?php endif;
309
- }
310
 
311
- public function pro_features(){
312
- ?>
 
313
  <h3>Premium Features</h3>
314
  <ul style="padding-left: 30px; list-style-type: disc;">
315
  <li>Provides Ability To remove plugin stats from admin dashboard.</li>
@@ -332,90 +365,99 @@ elseif ( $active_tab == 'pro_features' ) : ?>
332
 
333
  <p>Please Visit this link For <a class="button" href="https://newuserapprove.com/options-addon" target="_blank" >Premium Plugin </a> </p>
334
  <?php
335
- }
336
-
337
- /**
338
- * Renders Zapier Tab
339
- * @since 2.0
340
- * @version 1.0
341
- */
342
- public function zapier()
343
- {
344
- $content = '';
345
-
346
- $triggers = array(
347
- __( 'Triggers when a user is Approved.', 'new-user-approve' ),
348
- __( 'Triggers when a user is Denied.', 'new-user-approve' )
349
- );
350
-
351
- $api_key = ( \NewUserApproveZapier\RestRoutes::api_key() ) ? "value='".\NewUserApproveZapier\RestRoutes::api_key()."'" : '';
352
-
353
- $content .= '<p class="status_heading">' . __( 'Zapier Settings', 'new-user-approve' ) . '</p>';
354
-
355
- $content .= "
 
 
356
  <table cellpadding='10'>
357
  <tr>
358
- <td>" . __( 'Website URL: ', 'new-user-approve' ) . "</td>
359
- <td>" . get_site_url() . "</td>
360
  </tr>
361
  <tr>
362
- <td>" . __( 'API Key: ', 'new-user-approve' ) ." </td>
363
  <td>
364
- <form action='".esc_url( admin_url( 'admin-post.php' ) )."' method='POST'>
365
- <input type='text' name='nua_api_key' id='nua-api' $api_key />
 
366
  <button id='nua-generate-api' class='button'>Generate API Key</button>
 
367
  <input type='hidden' name='action' value='nua-save-api-key' />
368
  <input type='submit' value='Save' name='nua_save_api' class='button'/>
369
  </form>
370
  </td>
371
  </tr>
372
  </table>
373
- ";
374
-
375
- $content .= '<p class="status_heading">' . __( 'Triggers', 'new-user-approve' ) . '</p>';
376
-
377
- $content .= "<ul style='padding-left: 30px; list-style-type: disc;'>";
378
-
379
- foreach( $triggers as $trigger )
380
- {
381
- $content .= "<li>{$trigger}</li>";
382
- }
383
-
384
- $content .= "</ul>";
385
-
386
- echo $content;
387
- }
388
-
389
- public function save_api_key()
390
- {
391
- if( isset( $_POST['action'] ) && $_POST['action'] == 'nua-save-api-key' )
392
- {
393
- $api_key = sanitize_text_field( $_POST['nua_api_key'] );
394
-
395
- update_option( 'nua_api_key', $api_key );
396
-
397
- wp_redirect( admin_url( 'admin.php?page=new-user-approve-admin&tab=zapier' ) );
398
- }
399
- }
400
-
401
-
402
- public function metabox_support() {
403
- ?>
 
 
 
404
  <p>If you haven't already, check out the <a href="https://wordpress.org/plugins/new-user-approve/faq/" target="_blank">Frequently Asked Questions</a>.</p>
405
  <p>Still not fixed? Please <a href="https://wordpress.org/support/plugin/new-user-approve" target="_blank">start a support topic</a> and I or someone from the community will be able to assist you.</p>
406
  <?php
407
- }
408
 
409
- public function metabox_feedback() {
410
- ?>
 
411
  <p>Please show your appreciation for New User Approve by giving it a positive <a href="https://wordpress.org/support/view/plugin-reviews/new-user-approve#postform" target="_blank">review</a> in the plugin repository!</p>
412
  <?php
413
- }
414
 
415
  }
416
 
417
- function pw_new_user_approve_admin_approve() {
418
- return pw_new_user_approve_admin_approve::instance();
 
419
  }
420
 
421
  pw_new_user_approve_admin_approve();
5
  * Admin must approve all new users
6
  */
7
 
8
+ class pw_new_user_approve_admin_approve
9
+ {
10
+
11
+ public $_admin_page = 'new-user-approve-admin';
12
+ public $_admin_upgrade_page = 'new-user-approve-upgrade';
13
+
14
+ /**
15
+ * The only instance of pw_new_user_approve_admin_approve.
16
+ *
17
+ * @var pw_new_user_approve_admin_approve
18
+ */
19
+ private static $instance;
20
+
21
+ /**
22
+ * Returns the main instance.
23
+ *
24
+ * @return pw_new_user_approve_admin_approve
25
+ */
26
+ public static function instance()
27
+ {
28
+ if (!isset(self::$instance)) {
29
+ self::$instance = new pw_new_user_approve_admin_approve();
30
+ }
31
+ return self::$instance;
32
+ }
33
+
34
+ /**
35
+ * @since 1.0
36
+ * @since 2.1 `admin_post_nua-save-api-key` added for zapier
37
+ */
38
+ private function __construct()
39
+ {
40
+ // Actions
41
+ add_action('admin_menu', array($this, 'admin_menu_link'));
42
+ add_action('admin_init', array($this, 'process_input'));
43
+ add_action('admin_notices', array($this, 'admin_notice'));
44
+ add_action('admin_init', array($this, 'notice_ignore'));
45
+ add_action('admin_init', array($this, '_add_meta_boxes'));
46
+ add_action('admin_post_nua-save-api-key', array($this, 'save_api_key'));
47
+ add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_script'));
48
+ }
49
+
50
+ public function admin_enqueue_script()
51
+ {
52
+ wp_enqueue_script('hide-seek-search', pw_new_user_approve()->get_plugin_url() . '/assets/js/jquery.hideseek.min.js', array('jquery'), '3.1');
53
+ }
54
+
55
+ /**
56
+ * Add the new menu item to the users portion of the admin menu
57
+ *
58
+ * @uses admin_menu
59
+ */
60
+ public function admin_menu_link()
61
+ {
62
+ $show_admin_page = apply_filters('new_user_approve_show_admin_page', true);
63
+
64
+ if ($show_admin_page) {
65
+ $cap = apply_filters('new_user_approve_minimum_cap', 'edit_users');
66
+ $hook = add_menu_page(__('Approve New Users', 'new-user-approve'), __('Approve New Users', 'new-user-approve'), $cap, $this->_admin_page, array($this, 'approve_admin'));
67
+ $hook_upgrade = add_submenu_page($this->_admin_page, __('Upgrade', 'new-user-approve'), __('Upgrade', 'new-user-approve'), $cap, $this->_admin_upgrade_page, array($this, 'new_user_approve_upgrade'));
68
+ add_action('load-' . $hook, array($this, 'admin_enqueue_scripts'));
69
+
70
+ add_action('load-' . $hook_upgrade, array($this, 'admin_enqueue_upgrade_scripts'));
71
+
72
+ }
73
+
74
+ }
75
+
76
+ public function admin_enqueue_upgrade_scripts() {
77
+
78
+ wp_enqueue_script('upgrade-script', pw_new_user_approve()->get_plugin_url() . '/assets/js/modernizr.min.js', array('jquery'), NUA_VERSION);
79
+ wp_enqueue_script('upgrade-freemius-script', pw_new_user_approve()->get_plugin_url() . '/assets/js/checkout.min.js',array('jquery'), NUA_VERSION);
80
+
81
+ }
82
+
83
+ /**
84
+ * Create the upgrade to premium page
85
+ */
86
+ public function new_user_approve_upgrade()
87
+ {
88
+ require_once pw_new_user_approve()->get_plugin_dir() . '/admin/templates/upgrade.php';
89
+ }
90
+
91
+ /**
92
+ * Create the view for the admin interface
93
+ */
94
+ public function approve_admin()
95
+ {
96
+ require_once pw_new_user_approve()->get_plugin_dir() . '/admin/templates/approve.php';
97
+ }
98
+
99
+ /**
100
+ * Output the table that shows the registered users grouped by status
101
+ *
102
+ * @param string $status the filter to use for which the users will be queried. Possible values are pending, approved, or denied.
103
+ */
104
+ public function user_table($status)
105
+ {
106
+ global $current_user;
107
+
108
+ $approve = ('denied' == $status || 'pending' == $status);
109
+ $deny = ('approved' == $status || 'pending' == $status);
110
+
111
+ $user_status = pw_new_user_approve()->get_user_statuses();
112
+ $users = $user_status[$status];
113
+
114
+ if (count($users) > 0) {
115
+ if ('denied' == $status) {
116
+ ?>
117
+ <p class="status_heading"><?php esc_html_e('Denied Users', 'new-user-approve');?></p>
118
  <?php
119
+ } else if ('approved' == $status) {
120
+ ?>
121
+ <p class="status_heading"><?php esc_html_e('Approved Users', 'new-user-approve');?></p>
122
  <?php
123
+ } else if ('pending' == $status) {
124
+ ?>
125
+ <p class="status_heading"><?php esc_html_e('Pending Users', 'new-user-approve');?></p>
126
+ <?php
127
+ }
128
+ ?>
129
  <table class="widefat">
130
  <thead>
131
  <tr class="thead">
132
+ <th><?php esc_html_e('Username', 'new-user-approve');?></th>
133
+ <th><?php esc_html_e('Name', 'new-user-approve');?></th>
134
+ <th><?php esc_html_e('E-mail', 'new-user-approve');?></th>
135
+ <?php if ('pending' == $status) {?>
136
+ <th colspan="2"><?php esc_html_e('Action', 'new-user-approve');?></th>
137
+ <?php } else {?>
138
+ <th><?php esc_html_e('Action', 'new-user-approve');?></th>
139
+ <?php }?>
140
  </tr>
141
  </thead>
142
  <tbody class="nua-user-list">
143
  <?php
144
+ // show each of the users
145
+ $row = 1;
146
+ foreach ($users as $user) {
147
+ $class = ($row % 2) ? '' : ' class="alternate"';
148
+ $avatar = get_avatar($user->user_email, 32);
149
+
150
+ if ($approve) {
151
+ $approve_link = get_option('siteurl') . '/wp-admin/admin.php?page=' . $this->_admin_page . '&user=' . $user->ID . '&status=approve';
152
+ if (isset($_REQUEST['tab'])) {
153
+ $approve_link = add_query_arg(array('tab' => sanitize_text_field(wp_unslash($_REQUEST['tab']))), $approve_link);
154
+ }
155
+
156
+ $approve_link = wp_nonce_url($approve_link, 'pw_new_user_approve_action_' . get_class($this));
157
+
158
+ }
159
+ if ($deny) {
160
+ $deny_link = get_option('siteurl') . '/wp-admin/admin.php?page=' . $this->_admin_page . '&user=' . $user->ID . '&status=deny';
161
+ if (isset($_REQUEST['tab'])) {
162
+ $deny_link = add_query_arg('tab', sanitize_text_field(wp_unslash($_REQUEST['tab'])), $deny_link);
163
+ }
164
+
165
+ $deny_link = wp_nonce_url($deny_link, 'pw_new_user_approve_action_' . get_class($this));
166
+ }
167
+
168
+ if (current_user_can('edit_user', $user->ID)) {
169
+ if ($current_user->ID == $user->ID) {
170
+ $edit_link = 'profile.php';
171
+ } else {
172
+ $SERVER_URI = get_admin_url();
173
+ if (isset($_SERVER['REQUEST_URI'])) { $SERVER_URI = sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI'])); }
174
+ $edit_link = add_query_arg('wp_http_referer', urlencode(esc_url($SERVER_URI)), "user-edit.php?user_id=$user->ID");
175
+ }
176
+ $edit = ($avatar == true) ? ('<strong style="position: relative; top: -17px; left: 6px;"><a href="' . esc_url($edit_link) . '">' . esc_html($user->user_login) . '</a></strong>') : ('<strong style="top: -17px; left: 6px;"><a href="' . esc_url($edit_link) . '">' . esc_html($user->user_login) . '</a></strong>');
177
+
178
+ } else {
179
+ $edit = ($avatar == true) ? ('<strong style="position: relative; top: -17px; left: 6px;">' . esc_html($user->user_login) . '</strong>') : ('<strong style="top: -17px; left: 6px;">' . esc_html($user->user_login) . '</strong>');
180
+
181
+ }
182
+
183
+ ?>
184
+ <tr <?php echo esc_attr($class); ?>>
185
+ <td><?php echo wp_kses_post($avatar . ' ' . $edit); ?></td>
186
+ <td><?php echo (esc_attr(get_user_meta($user->ID, 'first_name', true)) . ' ' . esc_attr(get_user_meta($user->ID, 'last_name', true))); ?></td>
187
+ <td><a href="mailto:<?php esc_attr_e($user->user_email);?>"
188
+ title="<?php esc_attr_e('email:', 'new-user-approve')?> <?php esc_attr_e($user->user_email);?>"><?php esc_html_e($user->user_email);?></a>
189
  </td>
190
+ <?php if ($approve && $user->ID != get_current_user_id()) {?>
191
+ <td><a class="button" href= "<?php echo esc_url($approve_link) ?>" title="<?php esc_attr_e('Approve', 'new-user-approve');?> <?php esc_attr_e($user->user_login);?>"><?php esc_html_e('Approve', 'new-user-approve');?></a>
 
192
  </td>
193
+ <?php }?>
194
+ <?php if ($deny && $user->ID != get_current_user_id()) {?>
195
+ <td><a class="button" href="<?php echo esc_url($deny_link); ?>" title="<?php esc_attr_e('Deny', 'new-user-approve');?> <?php esc_attr_e($user->user_login);?>"><?php echo esc_html('Deny', 'new-user-approve'); ?></a>
 
196
  </td>
197
+ <?php }?>
198
+ <?php if ($user->ID == get_current_user_id()): ?>
199
  <td colspan="2">&nbsp;</td>
200
+ <?php endif;?>
201
  </tr><?php
202
+ $row++;
203
+ }
204
+ ?>
205
  </tbody>
206
  </table>
207
  <?php
208
+ } else {
209
+ $status_i18n = $status;
210
+ if ($status == 'approved') {
211
+ $status_i18n = __('approved', 'new-user-approve');
212
+ } else if ($status == 'denied') {
213
+ $status_i18n = __('denied', 'new-user-approve');
214
+ } else if ($status == 'pending') {
215
+ $status_i18n = __('pending', 'new-user-approve');
216
+ }
217
+
218
+ ?>
219
+
220
+ <p> <?php sprintf(__('There are no users with a status of %s', 'new-user-approve'), $status_i18n);?> </p>
221
+ <?php
222
+ }
223
+ }
224
+
225
+ /**
226
+ * Accept input from admin to modify a user
227
+ *
228
+ * @uses init
229
+ */
230
+ public function process_input()
231
+ {
232
+ if ((isset($_GET['page']) && $_GET['page'] == $this->_admin_page) && isset($_GET['status'])&& isset($_GET['user'])) {
233
+ $valid_request = check_admin_referer('pw_new_user_approve_action_' . get_class($this));
234
+
235
+ if ($valid_request) {
236
+ $status = sanitize_key($_GET['status']);
237
+ $user_id = absint(sanitize_user(wp_unslash($_GET['user'])));
238
+
239
+ pw_new_user_approve()->update_user_status($user_id, $status);
240
+ }
241
+ }
242
+ }
243
+
244
+ /**
245
+ * Display a notice on the legacy page that notifies the user of the new interface.
246
+ *
247
+ * @uses admin_notices
248
+ */
249
+ public function admin_notice()
250
+ {
251
+ $screen = get_current_screen();
252
+
253
+ if ($screen->id == 'users_page_new-user-approve-admin') {
254
+ $user_id = get_current_user_id();
255
+
256
+ // Check that the user hasn't already clicked to ignore the message
257
+ if (!get_user_meta($user_id, 'pw_new_user_approve_ignore_notice')) {
258
+ ?>
259
+ <div class="updated"><p>
260
+ <?php printf(wp_kses_post(__('You can now update user status on the <a href="%1$s">users admin page</a>. | <a href="%2$s">Hide Notice</a>', 'new-user-approve'), admin_url('users.php'), add_query_arg(array('new-user-approve-ignore-notice' => 1))));?>
261
+ </p></div>
262
+ <?php
263
+ }
264
+ }
265
+ }
266
+
267
+ /**
268
+ * If user clicks to ignore the notice, add that to their user meta
269
+ *
270
+ * @uses admin_init
271
+ */
272
+ public function notice_ignore()
273
+ {
274
+ if (isset($_GET['new-user-approve-ignore-notice']) && '1' == $_GET['new-user-approve-ignore-notice']) {
275
+ $user_id = get_current_user_id();
276
+ add_user_meta($user_id, 'pw_new_user_approve_ignore_notice', '1', true);
277
+ }
278
+ }
279
+
280
+ public function admin_enqueue_scripts()
281
+ {
282
+ wp_enqueue_script('post');
283
+ }
284
+
285
+ public function _add_meta_boxes()
286
+ {
287
+ add_meta_box('nua-approve-admin', __('Approve Users', 'new-user-approve'), array($this, 'metabox_main'), 'users_page_new-user-approve-admin', 'main', 'high');
288
+ add_meta_box('nua-support', __('Support', 'new-user-approve'), array($this, 'metabox_support'), 'users_page_new-user-approve-admin', 'side', 'default');
289
+ add_meta_box('nua-feedback', __('Feedback', 'new-user-approve'), array($this, 'metabox_feedback'), 'users_page_new-user-approve-admin', 'side', 'default');
290
+ }
291
+
292
+ public function metabox_main()
293
+ {
294
+ $active_tab = isset($_GET['tab']) ? sanitize_text_field(wp_unslash($_GET['tab'])) : 'pending_users';
295
+ ?>
296
  <h3 class="nav-tab-wrapper" style="padding-bottom: 0; border-bottom: none;">
297
  <script>
298
  jQuery(document).ready(function() {
302
  });
303
  </script>
304
  <input type="search" name="nua_search" placeholder="Search" style="float: right;" data-list=".nua-user-list">
305
+ <a href="<?php echo esc_url(admin_url('admin.php?page=new-user-approve-admin&tab=pending_users')); ?>"
306
+ class="nav-tab<?php echo $active_tab == 'pending_users' ? ' nav-tab-active' : ''; ?>"><span><?php esc_html_e('Pending Users', 'new-user-approve');?></span></a>
307
+ <a href="<?php echo esc_url(admin_url('admin.php?page=new-user-approve-admin&tab=approved_users')); ?>"
308
+ class="nav-tab<?php echo $active_tab == 'approved_users' ? ' nav-tab-active' : ''; ?>"><span><?php esc_html_e('Approved Users', 'new-user-approve');?></span></a>
309
+ <a href="<?php echo esc_url(admin_url('admin.php?page=new-user-approve-admin&tab=denied_users')); ?>"
310
+ class="nav-tab<?php echo $active_tab == 'denied_users' ? ' nav-tab-active' : ''; ?>"><span><?php esc_html_e('Denied Users', 'new-user-approve');?></span></a>
311
+ <a href="<?php echo esc_url(admin_url('admin.php?page=new-user-approve-admin&tab=zapier')); ?>"
312
+ class="nav-tab<?php echo $active_tab == 'zapier' ? ' nav-tab-active' : ''; ?>"><span><?php esc_html_e('Zapier', 'new-user-approve');?></span></a>
313
+ <a href="<?php echo esc_url(admin_url('admin.php?page=new-user-approve-admin&tab=pro_features')); ?>"
314
+ class="nav-tab<?php echo $active_tab == 'pro_features' ? ' nav-tab-active' : ''; ?>"><span><?php esc_html_e('Pro Features', 'new-user-approve');?></span></a>
315
  </h3>
316
 
317
+ <?php if ($active_tab == 'pending_users'): ?>
318
  <div id="pw_pending_users">
319
+ <?php $this->user_table('pending');?>
320
  </div>
321
+ <?php elseif ($active_tab == 'approved_users'): ?>
322
  <div id="pw_approved_users">
323
+ <?php $this->user_table('approved');?>
324
  </div>
325
  <?php
326
+ elseif ($active_tab == 'denied_users'): ?>
327
  <div id="pw_denied_users">
328
+ <?php $this->user_table('denied');?>
329
  </div>
330
  <?php
331
+ elseif ($active_tab == 'zapier'): ?>
332
  <div id="pw_denied_users">
333
+ <?php $this->zapier();?>
334
  </div>
335
  <?php
336
+ elseif ($active_tab == 'pro_features'): ?>
337
  <div id="pw_pro_features">
338
+ <?php $this->pro_features();?>
339
  </div>
340
  <?php endif;
341
+ }
342
 
343
+ public function pro_features()
344
+ {
345
+ ?>
346
  <h3>Premium Features</h3>
347
  <ul style="padding-left: 30px; list-style-type: disc;">
348
  <li>Provides Ability To remove plugin stats from admin dashboard.</li>
365
 
366
  <p>Please Visit this link For <a class="button" href="https://newuserapprove.com/options-addon" target="_blank" >Premium Plugin </a> </p>
367
  <?php
368
+ }
369
+
370
+ /**
371
+ * Renders Zapier Tab
372
+ * @since 2.0
373
+ * @version 1.0
374
+ */
375
+ public function zapier()
376
+ {
377
+
378
+ $triggers = array(
379
+ __('Triggers when a user is Approved.', 'new-user-approve'),
380
+ __('Triggers when a user is Denied.', 'new-user-approve'),
381
+ );
382
+
383
+ $api_key = (\NewUserApproveZapier\RestRoutes::api_key()) ? "value='" . \NewUserApproveZapier\RestRoutes::api_key() . "'" : '';
384
+
385
+ ?>
386
+ <?php $get_api_key = get_option('nua_api_key', $api_key);?>
387
+ <html>
388
+
389
+ <p class="status_heading"> <?php esc_html_e('Zapier Settings', 'new-user-approve');?> </p>
390
+
391
  <table cellpadding='10'>
392
  <tr>
393
+ <td> <?php esc_html_e('Website URL: ', 'new-user-approve')?> </td>
394
+ <td> <?php echo esc_url(get_site_url()); ?> </td>
395
  </tr>
396
  <tr>
397
+ <td> <?php esc_html_e('API Key: ', 'new-user-approve');?> </td>
398
  <td>
399
+ <form action=<?php echo esc_url(admin_url('admin-post.php')); ?> method="POST">
400
+ <?php $nonce = wp_create_nonce('api-generate-nonce');?>
401
+ <input type='text' name='nua_api_key' id='nua-api' value = "<?php $get_api_key ? esc_attr_e($get_api_key) : ''?>" />
402
  <button id='nua-generate-api' class='button'>Generate API Key</button>
403
+ <input type='hidden' name='wp-api-generate-nonce' value='<?php esc_attr_e($nonce)?>' />
404
  <input type='hidden' name='action' value='nua-save-api-key' />
405
  <input type='submit' value='Save' name='nua_save_api' class='button'/>
406
  </form>
407
  </td>
408
  </tr>
409
  </table>
410
+
411
+ <p class="status_heading"> <?php esc_html_e('Triggers', 'new-user-approve')?> </p>
412
+ <ul style='padding-left: 30px; list-style-type: disc;'>
413
+ <?php foreach ($triggers as $trigger): ?>
414
+
415
+ <li> <?php esc_html_e($trigger);?> </li>
416
+
417
+ <?php endforeach;?>
418
+ </ul>
419
+ </html>
420
+ <?php
421
+ }
422
+
423
+ public function save_api_key()
424
+ {
425
+
426
+
427
+
428
+ if (isset($_REQUEST['wp-api-generate-nonce']) && isset($_POST['action']) && $_POST['action'] == 'nua-save-api-key') {
429
+ $nonce = sanitize_text_field(wp_unslash($_REQUEST['wp-api-generate-nonce']));
430
+ if (wp_verify_nonce($nonce, 'api-generate-nonce') && isset($_POST['nua_api_key'])) {
431
+
432
+ $api_key = sanitize_text_field(wp_unslash($_POST['nua_api_key']));
433
+
434
+ update_option('nua_api_key', $api_key);
435
+
436
+ wp_redirect(admin_url('admin.php?page=new-user-approve-admin&tab=zapier'));
437
+ }
438
+ }
439
+ }
440
+
441
+ public function metabox_support()
442
+ {
443
+ ?>
444
  <p>If you haven't already, check out the <a href="https://wordpress.org/plugins/new-user-approve/faq/" target="_blank">Frequently Asked Questions</a>.</p>
445
  <p>Still not fixed? Please <a href="https://wordpress.org/support/plugin/new-user-approve" target="_blank">start a support topic</a> and I or someone from the community will be able to assist you.</p>
446
  <?php
447
+ }
448
 
449
+ public function metabox_feedback()
450
+ {
451
+ ?>
452
  <p>Please show your appreciation for New User Approve by giving it a positive <a href="https://wordpress.org/support/view/plugin-reviews/new-user-approve#postform" target="_blank">review</a> in the plugin repository!</p>
453
  <?php
454
+ }
455
 
456
  }
457
 
458
+ function pw_new_user_approve_admin_approve()
459
+ {
460
+ return pw_new_user_approve_admin_approve::instance();
461
  }
462
 
463
  pw_new_user_approve_admin_approve();
includes/invitation-code.php CHANGED
@@ -17,8 +17,7 @@
17
  */
18
 
19
 
20
- class nua_invitation_code
21
- {
22
 
23
  private static $instance;
24
 
@@ -37,16 +36,14 @@ class nua_invitation_code
37
  *
38
  * @return nua_invitation_code
39
  */
40
- public static function instance()
41
- {
42
  if (!isset(self::$instance)) {
43
  self::$instance = new nua_invitation_code();
44
  }
45
  return self::$instance;
46
  }
47
 
48
- private function __construct()
49
- {
50
  //Action
51
  add_action('admin_menu', array($this, 'admin_menu_link'), 30);
52
  add_action('admin_init', array($this, 'nua_deactivate_code'));
@@ -71,8 +68,7 @@ class nua_invitation_code
71
  }
72
  }
73
 
74
- public function nua_deactivate_code()
75
- {
76
 
77
  if (isset($_GET['post_type']) && $_GET['post_type'] == $this->code_post_type && is_admin()) {
78
  if (isset($_GET['post_id']) && check_admin_referer('nua_deactivate-' . absint($_GET['post_id']), 'nonce')) {
@@ -81,8 +77,7 @@ class nua_invitation_code
81
  }
82
  }
83
 
84
- public function invitation_code_edit_page_css()
85
- {
86
  if (isset($_GET['post_type']) && $_GET['post_type'] == $this->code_post_type) {
87
  ?>
88
  <style>
@@ -96,8 +91,7 @@ class nua_invitation_code
96
  }
97
  }
98
 
99
- public function remove_row_actions_from_table($actions, $post)
100
- {
101
  if ($post->post_type == $this->code_post_type) {
102
 
103
  return array();
@@ -108,22 +102,20 @@ class nua_invitation_code
108
  /**
109
  * Add the link to the admin menu for the settings page
110
  */
111
- public function admin_menu_link()
112
- {
113
  // don't show the link in the admin menu if the parent plugin is inactive
114
  if (!function_exists('pw_new_user_approve')) {
115
  return;
116
  }
117
 
118
- $hook = add_submenu_page('new-user-approve-admin', __('Invitation Code', 'new-user-approve-options'), __('Invitation Code', 'new-user-approve-options'), 'manage_options', $this->screen_name, array($this, 'invitation_code_settings'), 2);
119
 
120
- add_submenu_page('new-user-approve-admin', __('All Codes', 'woosl'), __('All Codes', 'woosl'), 'manage_options', 'edit.php?post_type=' . $this->code_post_type);
121
 
122
  add_action('admin_print_scripts-' . $hook, array($this, 'admin_scripts'));
123
  }
124
 
125
- public function admin_scripts()
126
- {
127
  wp_enqueue_script('nua-options');
128
  }
129
 
@@ -131,20 +123,19 @@ class nua_invitation_code
131
  /**
132
  * Post Registration
133
  */
134
- public function nua_invitation()
135
- {
136
 
137
  $labels = array(
138
- 'name' => __('Invitation Code', 'new-user-approve-options'),
139
- 'singular_name' => __('Invitation Code', 'new-user-approve-options'),
140
- 'menu_name' => __('All Codes', 'new-user-approve-options'),
141
- 'name_admin_bar' => __('All Codes', 'new-user-approve-options'),
142
- 'add_new' => __('Add New', 'new-user-approve-options'),
143
- 'add_new_item' => __('Add New Invitation Code', 'new-user-approve-options'),
144
- 'new_item' => __('New Invitation Code', 'new-user-approve-options'),
145
- 'edit_item' => __('Edit Invitation Code', 'new-user-approve-options'),
146
- 'view_item' => __('View Invitation Code', 'new-user-approve-options'),
147
- 'all_items' => __('All Invitation Code', 'new-user-approve-options'),
148
  );
149
 
150
  $args = array(
@@ -169,33 +160,35 @@ class nua_invitation_code
169
  /**
170
  * Output the settings
171
  */
172
- public function invitation_code_settings()
173
- {
174
- $action = (isset($_GET['action'])) ? $_GET['action'] : 'add-codes';
 
175
 
176
  ?>
177
  <div class="wrap">
178
  <div id="icon-options-general" class="icon32"><br /></div>
179
- <h2 class="nua-settings-heading"><?php _e('Invitation Code Settings', 'new-user-approve-options'); ?></h2>
180
 
181
  <h2 class="nav-tab-wrapper">
182
 
183
- <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('add-codes' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Add Codes', 'new-user-approve-options'); ?> </a>
184
 
185
- <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'action' => 'Settings'), admin_url('admin.php'))); ?>" class="nav-tab <?php if ('Settings' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Settings', 'new-user-approve-options'); ?></a>
186
- <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'action' => 'import-codes'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('import-codes' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Import Codes', 'new-user-approve-options'); ?> <span class="invite-code-btn-label">Pro</span> </a>
187
- <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'action' => 'email'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('email' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Email', 'new-user-approve-options'); ?> <span class="invite-code-btn-label">Pro</span> </a>
188
 
189
  </h2>
190
  <?php
191
- $tab = (isset($_GET['tab'])) ? $_GET['tab'] : '';
 
192
  $tab = (empty($tab) && !isset($_GET['action'])) ? 'manual' : $tab;
193
  ?>
194
  <?php if (!isset($_GET['action'])) : ?>
195
  <h2 class="nav-subtab-wrapper">
196
 
197
- <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'tab' => 'manual'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('manual' == $tab) echo ' nav-tab-active'; ?>"><?php esc_html_e('Manual Generate', 'new-user-approve-options'); ?></a>
198
- <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'tab' => 'auto'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('auto' == $tab) echo ' nav-tab-active'; ?>"><?php esc_html_e('Auto Generate', 'new-user-approve-options'); ?> <span class="invite-code-btn-label">Pro</span> </a>
199
 
200
 
201
  </h2>
@@ -207,8 +200,7 @@ class nua_invitation_code
207
  $this->get_the_required_tab($action, $tab);
208
  }
209
 
210
- public function get_the_required_tab($action, $tab)
211
- {
212
 
213
  if ('add-codes' == $action) {
214
 
@@ -227,19 +219,20 @@ class nua_invitation_code
227
  }
228
  }
229
 
230
- public function manual_add_codes()
231
- {
232
  $count = 0;
233
  if (isset($_POST['nua_manual_add'])) {
234
-
235
- $limit = empty($_POST['nua_manual_add']['usage_limit']) ? 1 : absint($_POST['nua_manual_add']['usage_limit']);
236
- $expiry = sanitize_text_field($_POST['nua_manual_add']['expiry_date']);
 
 
237
  $Status = 'Active';
238
  //$dateTime = new DateTime(str_replace('/','-',$expiry));
239
  //$expiry_timestamp = $dateTime->format('U');
240
  $expiry_timestamp = strtotime("$expiry 23:59:59");
241
 
242
- $code = $_POST['nua_manual_add']['codes'];
243
  $code = explode("\n", $code);
244
 
245
  foreach ($code as $in_code) {
@@ -266,41 +259,43 @@ class nua_invitation_code
266
  }
267
  }
268
  if (!empty($count)) {
269
-
270
- '<p class="nua-success" >';
271
- echo __(sprintf("Post Successfully Added.", $count), 'new-user-approve-options');
272
- '</p>';
273
  } else {
274
 
275
- '<p class="nua-fail" >';
276
- echo __(sprintf("Post Not Added.", $count), 'new-user-approve-options');
277
- '</p>';
278
  }
 
279
  }
280
 
281
 
282
  ?>
283
  <form method="post" action=''>
284
-
285
  <table class="form-table" role="presentation">
286
  <tbody>
287
  <tr>
288
- <th><?php _e('Add Codes', 'new-user-approve-options'); ?></th>
289
  <td>
290
  <div style="max-width: 600px;">
291
  <textarea id="nua_manual_add_add_codes" name="nua_manual_add[codes]" required class="nua-textarea"></textarea>
292
  </div>
293
- <p class="description"><?php _e('Enter one code per line.', 'new-user-approve-options'); ?></p>
294
  </td>
295
  </tr>
296
  <tr>
297
- <th><?php _e('Usage Limit', 'new-user-approve-options'); ?></th>
298
  <td>
299
  <input id="nua_manual_add_usage_limit" name="nua_manual_add[usage_limit]" placeholder="1" size="40" type="text" class="nua-text-field">
 
 
300
  </td>
301
  </tr>
302
  <tr>
303
- <th><?php _e('Expiry Date', 'new-user-approve-options'); ?></th>
304
  <td>
305
  <input id="nua_manual_add_expiry_date" name="nua_manual_add[expiry_date]" size="40" type="date" class="nua-text-field">
306
 
@@ -320,26 +315,27 @@ class nua_invitation_code
320
 
321
  }
322
 
323
- public function auto_add_codes()
324
- {
325
- echo '<h2>Get pro version to avail these feature<br></h2>';
326
- echo "<h3><a href='https://newuserapprove.com/options-addon' target = _blank>Click here to get the Pro Version</a></h3>";
 
327
  }
328
- public function import_codes()
329
- {
330
-
331
- echo '<h2>Get pro version to avail these feature<br></h2>';
332
- echo "<h3><a href='https://newuserapprove.com/options-addon' target = _blank>Click here to get the Pro Version</a></h3>";
333
  }
334
- public function email()
335
- {
336
- echo '<h2>Get pro version to avail these feature<br></h2>';
337
- echo "<h3><a href='https://newuserapprove.com/options-addon' target = _blank>Click here to get the Pro Version</a></h3>";
 
338
  }
339
 
340
 
341
- public function get_available_invitation_codes()
342
- {
343
 
344
  $args = array(
345
  'numberposts' => -1,
@@ -380,12 +376,10 @@ class nua_invitation_code
380
  /**
381
  * Output the Meta Value
382
  */
383
- public function add_invitation_meta()
384
- {
385
- add_meta_box('nua_invitation', __('Invitation code for new user', 'new-user-approve-options'), array($this, 'funct_nua_invitation'), $this->code_post_type);
386
  }
387
- public function funct_nua_invitation()
388
- {
389
 
390
  $code = get_post_meta(get_the_ID(), $this->code_key, true);
391
  $useage = get_post_meta(get_the_ID(), $this->usage_limit_key, true);
@@ -397,38 +391,42 @@ class nua_invitation_code
397
 
398
  ?>
399
  <form method="post" action=''>
 
400
  <table class="form-table" role="presentation">
 
401
  <tbody>
402
  <tr>
403
- <th scope="row"><?php _e("Invitation Code", "new-user-approve-options") ?></th>
404
- <td><input type="text" name="codes" required value="<?php echo $code ?>" class="nua_codetxt" /><br>
 
 
405
  </tr>
406
  <tr>
407
- <th scope="row"><?php _e("Uses left", "new-user-approve-options") ?></th>
408
- <td><input type="text" name="usage_limit" required value="<?php echo $useage ?>" class="nua_codetxt" /><br>
409
  </tr>
410
  <tr>
411
- <th scope="row"><?php _e("Usage Limit", "new-user-approve-options") ?></th>
412
- <td><input type="text" name="total_code" required value="<?php echo $total_code_key ?>" class="nua_codetxt" /><br>
413
  </tr>
414
  <tr>
415
- <th scope="row"><?php _e("Date", "new-user-approve-options") ?></th>
416
- <td><input type="date" name="expiry_date" required value="<?php echo $convert_date ?>" class="nua_codetxt" /><br>
417
  </tr>
418
  <tr>
419
- <th scope="row"><?php _e("Status", "new-user-approve-options") ?></th>
420
  <td>
421
  <select name="code_status" required class="nua_codetxt">
422
- <option value='Active' <?php echo ('Active' == $Status ? 'selected' : '') ?>>Active</option>
423
- <option value='InActive' <?php echo ('InActive' == $Status ? 'selected' : '') ?>> InActive</option>
424
- <option value='Expire' <?php echo ('Expire' == $Status ? 'selected' : '') ?>> Expire</option>
425
  </select>
426
  </td>
427
  </tr>
428
  <tr>
429
  <td colspan="2">
430
  <table>
431
- <p><?php _e('Users that have registered by using this invitation code', 'new-user-approve-options') ?></p>
432
  <thead>
433
  <tr>
434
  <th>USER-ID</th>
@@ -442,21 +440,29 @@ class nua_invitation_code
442
  if (!empty($registered_user)) {
443
 
444
  foreach ($registered_user as $userid) {
445
- echo '<tr><td>' . $userid . '</td>';
 
 
446
 
447
  $the_user = get_user_by('id', $userid);
448
 
449
  if (!empty($the_user)) {
450
  $link = get_edit_user_link($userid);
451
- echo '<td>' . $the_user->user_email . '</td>';
452
- echo '<td><a href=' . $link . '>' . $the_user->user_login . '</a></td>';
 
 
453
  } else {
454
- echo '<td>' . __("User Not Found", "new-user-approve-options") . '</td>';
 
 
455
  }
456
- echo '</tr> ';
457
  }
458
  } else {
459
- echo '<tr colspan="3"><td>' . __("No User Found", "new-user-approve-options") . '</td></tr>';
 
 
460
  }
461
  ?>
462
  </tbody>
@@ -470,16 +476,16 @@ class nua_invitation_code
470
 
471
  }
472
 
473
- public function save_nua_invitation()
474
- {
475
 
476
- if (isset($_POST['post_type']) && $this->code_post_type == $_POST['post_type']) {
477
-
478
- $code = sanitize_text_field($_POST['codes']);
479
- $usage = absint($_POST['usage_limit']);
480
- $use_limit = absint($_POST['total_code']);
481
- $expiry = sanitize_text_field($_POST['expiry_date']);
482
- $Status = sanitize_text_field($_POST['code_status']);
 
483
  //$dateTime = new DateTime(str_replace('/','-',$Expiry));
484
  //$expiry_timestamp = $dateTime->format('U');
485
  $expiry_timestamp = strtotime("$expiry 23:59:59");
@@ -492,19 +498,20 @@ class nua_invitation_code
492
  }
493
  }
494
 
495
- public function nua_invitation_code_field()
496
- {
497
- ?>
498
  <p>
499
- <label> <?php _e('Invitation Code', 'new-user-approve-options'); ?></label>
 
500
  <input type="text" class="nua_invitation_code" name="nua_invitation_code" />
501
  </p>
502
  <?php
503
  }
504
 
505
- public function nua_invitation_status_code($status, $user_id)
506
- {
507
-
 
508
  if (isset($_POST['nua_invitation_code']) && !empty($_POST['nua_invitation_code'])) {
509
  $args = array(
510
  'numberposts' => -1,
@@ -516,7 +523,7 @@ class nua_invitation_code
516
  array(
517
  array(
518
  'key' => $this->code_key,
519
- 'value' => sanitize_text_field($_POST['nua_invitation_code']),
520
  'compare' => '=',
521
  ),
522
  array(
@@ -541,13 +548,12 @@ class nua_invitation_code
541
  );
542
 
543
  $posts = get_posts($args);
544
-
545
-
546
  foreach ($posts as $post_inv) {
547
-
548
  $code_inv = get_post_meta($post_inv->ID, $this->code_key, true);
549
 
550
- if (sanitize_text_field($_POST['nua_invitation_code']) == $code_inv) {
551
  $register_user = get_post_meta($post_inv->ID, $this->registered_users, true);
552
 
553
  if (empty($register_user)) {
@@ -570,78 +576,80 @@ class nua_invitation_code
570
  }
571
  return $status;
572
  }
573
- public function invitation_code_columns($columns)
574
- {
575
  unset($columns['date']);
576
  unset($columns['title']);
577
- $columns['inv_code'] = __('Invitation Code', 'new-user-approve-options');
578
- $columns['usage'] = __('Uses Remaining', 'new-user-approve-options');
579
- $columns['expiry'] = __('Expiry', 'new-user-approve-options');
580
- $columns['status'] = __('Status', 'new-user-approve-options');
581
- $columns['actions'] = __('Actions', 'new-user-approve-options');
582
 
583
  return $columns;
584
  }
585
 
586
- public function invitation_code_columns_content($column, $post_id)
587
- {
588
 
589
  switch ($column) {
590
 
591
  case 'usage':
592
- echo get_post_meta($post_id, $this->usage_limit_key, true) . '/' . get_post_meta($post_id, $this->total_code_key, true);
593
  break;
594
 
595
  case 'expiry':
596
  $exp_date = get_post_meta($post_id, $this->expiry_date_key, true);
597
  if (!empty($exp_date)) {
598
- echo date('Y-m-d', $exp_date);
599
  }
600
  break;
601
  case 'status':
602
- echo get_post_meta($post_id, $this->status_key, true);
603
  break;
604
  case 'inv_code':
605
- echo get_post_meta($post_id, $this->code_key, true);
606
  break;
607
  case 'actions':
608
  if ('trash' != get_post_status($post_id)) {
609
  $deactivate_link = admin_url('edit.php?post_type=' . $this->code_post_type);
610
  $deactivate_link .= '&nua_action=deactivate&post_id=' . $post_id . '&nonce=' . wp_create_nonce('nua_deactivate-' . $post_id);
611
  ?>
612
- <a href="<?php echo $deactivate_link; ?>"><?php _e('Deactivate', 'new-user-approve-options'); ?></a> | <a href="<?php echo get_edit_post_link($post_id); ?>"><?php _e('Edit', 'new-user-approve-options'); ?></a> | <a href="<?php echo get_delete_post_link($post_id); ?>"><?php _e('Delete', 'new-user-approve-options'); ?></a>
613
  <?php
614
  }
615
 
616
  break;
617
  }
618
  }
619
- public function option_invitation_code()
620
- {
621
-
622
- if (isset($_POST['nua_free_invitation']) && $_POST['nua_free_invitation'] == 'enable') {
623
- update_option('nua_free_invitation', sanitize_text_field($_POST['nua_free_invitation']));
624
- } else if (isset($_POST['nua_inv_code_submit'])) {
625
- update_option('nua_free_invitation', '');
626
  }
 
627
  $options = get_option('nua_free_invitation');
628
  $invitation_code_invite = ($options == 'enable') ? $options : false;
 
 
 
 
 
 
 
 
 
 
 
 
 
629
 
630
- echo '<form method="post" action="">';
631
-
632
- echo ' <div class = "nua-switch-text-checkbox"> <h4 class="nua-switch-text"> Enable/Disable: </h4> <label class="nua_switch" for="nua_free_invitation" > <input id="nua_free_invitation" name="nua_free_invitation" type="checkbox" value="enable" ' . checked($invitation_code_invite, 'enable', false) . '/><span class="nua_slider round"></span></label> </div>';
633
- echo '<p class="description">' . __('Invitation Code for user to register without hesitation', 'new-user-approve-options') . '</p>';
634
- echo '<tr>
635
- <th colspan="2">
636
- <p class="submit nua-submit"><input type="submit" name="nua_inv_code_submit" id="submit" class="button button-primary" value="Save Changes"></p>
637
- </th>
638
- </tr>
639
- </form>';
640
  }
641
  } // End Class
642
 
643
- function nua_invitation_code()
644
- {
645
 
646
 
647
  return nua_invitation_code::instance();
17
  */
18
 
19
 
20
+ class nua_invitation_code {
 
21
 
22
  private static $instance;
23
 
36
  *
37
  * @return nua_invitation_code
38
  */
39
+ public static function instance() {
 
40
  if (!isset(self::$instance)) {
41
  self::$instance = new nua_invitation_code();
42
  }
43
  return self::$instance;
44
  }
45
 
46
+ private function __construct() {
 
47
  //Action
48
  add_action('admin_menu', array($this, 'admin_menu_link'), 30);
49
  add_action('admin_init', array($this, 'nua_deactivate_code'));
68
  }
69
  }
70
 
71
+ public function nua_deactivate_code() {
 
72
 
73
  if (isset($_GET['post_type']) && $_GET['post_type'] == $this->code_post_type && is_admin()) {
74
  if (isset($_GET['post_id']) && check_admin_referer('nua_deactivate-' . absint($_GET['post_id']), 'nonce')) {
77
  }
78
  }
79
 
80
+ public function invitation_code_edit_page_css() {
 
81
  if (isset($_GET['post_type']) && $_GET['post_type'] == $this->code_post_type) {
82
  ?>
83
  <style>
91
  }
92
  }
93
 
94
+ public function remove_row_actions_from_table($actions, $post) {
 
95
  if ($post->post_type == $this->code_post_type) {
96
 
97
  return array();
102
  /**
103
  * Add the link to the admin menu for the settings page
104
  */
105
+ public function admin_menu_link() {
 
106
  // don't show the link in the admin menu if the parent plugin is inactive
107
  if (!function_exists('pw_new_user_approve')) {
108
  return;
109
  }
110
 
111
+ $hook = add_submenu_page('new-user-approve-admin', __('Invitation Code', 'new-user-approve'), __('Invitation Code', 'new-user-approve'), 'manage_options', $this->screen_name, array($this, 'invitation_code_settings'), 2);
112
 
113
+ add_submenu_page('new-user-approve-admin', __('All Codes', 'new-user-approve'), __('All Codes', 'new-user-approve'), 'manage_options', 'edit.php?post_type=' . $this->code_post_type);
114
 
115
  add_action('admin_print_scripts-' . $hook, array($this, 'admin_scripts'));
116
  }
117
 
118
+ public function admin_scripts() {
 
119
  wp_enqueue_script('nua-options');
120
  }
121
 
123
  /**
124
  * Post Registration
125
  */
126
+ public function nua_invitation() {
 
127
 
128
  $labels = array(
129
+ 'name' => __('Invitation Code', 'new-user-approve'),
130
+ 'singular_name' => __('Invitation Code', 'new-user-approve'),
131
+ 'menu_name' => __('All Codes', 'new-user-approve'),
132
+ 'name_admin_bar' => __('All Codes', 'new-user-approve'),
133
+ 'add_new' => __('Add New', 'new-user-approve'),
134
+ 'add_new_item' => __('Add New Invitation Code', 'new-user-approve'),
135
+ 'new_item' => __('New Invitation Code', 'new-user-approve'),
136
+ 'edit_item' => __('Edit Invitation Code', 'new-user-approve'),
137
+ 'view_item' => __('View Invitation Code', 'new-user-approve'),
138
+ 'all_items' => __('All Invitation Code', 'new-user-approve'),
139
  );
140
 
141
  $args = array(
160
  /**
161
  * Output the settings
162
  */
163
+ public function invitation_code_settings() {
164
+ $action = (isset($_GET['action'])) ? sanitize_text_field(wp_unslash($_GET['action'])) : 'add-codes';
165
+
166
+
167
 
168
  ?>
169
  <div class="wrap">
170
  <div id="icon-options-general" class="icon32"><br /></div>
171
+ <h2 class="nua-settings-heading"><?php esc_html_e('Invitation Code Settings', 'new-user-approve'); ?></h2>
172
 
173
  <h2 class="nav-tab-wrapper">
174
 
175
+ <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('add-codes' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Add Codes', 'new-user-approve'); ?> </a>
176
 
177
+ <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'action' => 'Settings'), admin_url('admin.php'))); ?>" class="nav-tab <?php if ('Settings' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Settings', 'new-user-approve'); ?></a>
178
+ <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'action' => 'import-codes'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('import-codes' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Import Codes', 'new-user-approve'); ?> <span class="invite-code-btn-label">Pro</span> </a>
179
+ <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'action' => 'email'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('email' == $action) echo ' nav-tab-active'; ?>"><?php esc_html_e('Email', 'new-user-approve'); ?> <span class="invite-code-btn-label">Pro</span> </a>
180
 
181
  </h2>
182
  <?php
183
+ $tab = (isset($_GET['tab'])) ? sanitize_text_field(wp_unslash($_GET['tab'])) : '';
184
+
185
  $tab = (empty($tab) && !isset($_GET['action'])) ? 'manual' : $tab;
186
  ?>
187
  <?php if (!isset($_GET['action'])) : ?>
188
  <h2 class="nav-subtab-wrapper">
189
 
190
+ <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'tab' => 'manual'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('manual' == $tab) echo ' nav-tab-active'; ?>"><?php esc_html_e('Manual Generate', 'new-user-approve'); ?></a>
191
+ <a href="<?php echo esc_url(add_query_arg(array('page' => $this->screen_name, 'tab' => 'auto'), admin_url('admin.php'))); ?>" class="nav-tab<?php if ('auto' == $tab) echo ' nav-tab-active'; ?>"><?php esc_html_e('Auto Generate', 'new-user-approve'); ?> <span class="invite-code-btn-label">Pro</span> </a>
192
 
193
 
194
  </h2>
200
  $this->get_the_required_tab($action, $tab);
201
  }
202
 
203
+ public function get_the_required_tab($action, $tab) {
 
204
 
205
  if ('add-codes' == $action) {
206
 
219
  }
220
  }
221
 
222
+ public function manual_add_codes() {
 
223
  $count = 0;
224
  if (isset($_POST['nua_manual_add'])) {
225
+ if (!empty($_POST['nua-manual-add-nonce-field'])) {$nonce = sanitize_text_field(wp_unslash($_POST['nua-manual-add-nonce-field']));}
226
+ if (!wp_verify_nonce($nonce, 'nua-manual-add-nonce')) return;
227
+
228
+ $limit = empty( $_POST['nua_manual_add']['usage_limit'] ) ? 1 : absint($_POST['nua_manual_add']['usage_limit']);
229
+ $expiry = !empty( $_POST['nua_manual_add']['expiry_date']) ? sanitize_text_field( wp_unslash($_POST['nua_manual_add']['expiry_date']) ):'';
230
  $Status = 'Active';
231
  //$dateTime = new DateTime(str_replace('/','-',$expiry));
232
  //$expiry_timestamp = $dateTime->format('U');
233
  $expiry_timestamp = strtotime("$expiry 23:59:59");
234
 
235
+ $code = !empty($_POST['nua_manual_add']['codes']) ? sanitize_textarea_field(wp_unslash($_POST['nua_manual_add']['codes'])) :'' ;
236
  $code = explode("\n", $code);
237
 
238
  foreach ($code as $in_code) {
259
  }
260
  }
261
  if (!empty($count)) {
262
+ ?> <p class="nua-success" > <?php
263
+ echo esc_html(sprintf("Post Successfully Added %s.", $count), 'new-user-approve');
264
+ ?> </p> <?php
 
265
  } else {
266
 
267
+ ?> <p class="nua-fail" > <?php
268
+ echo esc_html(sprintf("Post Not Added %s.", $count), 'new-user-approve');
269
+ ?> </p> <?php
270
  }
271
+
272
  }
273
 
274
 
275
  ?>
276
  <form method="post" action=''>
277
+ <?php $nonce = wp_create_nonce('nua-manual-add-nonce'); ?>
278
  <table class="form-table" role="presentation">
279
  <tbody>
280
  <tr>
281
+ <th><?php esc_html_e('Add Codes', 'new-user-approve'); ?></th>
282
  <td>
283
  <div style="max-width: 600px;">
284
  <textarea id="nua_manual_add_add_codes" name="nua_manual_add[codes]" required class="nua-textarea"></textarea>
285
  </div>
286
+ <p class="description"><?php esc_html_e('Enter one code per line.', 'new-user-approve'); ?></p>
287
  </td>
288
  </tr>
289
  <tr>
290
+ <th><?php esc_html_e('Usage Limit', 'new-user-approve'); ?></th>
291
  <td>
292
  <input id="nua_manual_add_usage_limit" name="nua_manual_add[usage_limit]" placeholder="1" size="40" type="text" class="nua-text-field">
293
+ <input type = "hidden" name="nua-manual-add-nonce-field" value = "<?php esc_attr_e($nonce); ?>">
294
+
295
  </td>
296
  </tr>
297
  <tr>
298
+ <th><?php esc_html_e('Expiry Date', 'new-user-approve'); ?></th>
299
  <td>
300
  <input id="nua_manual_add_expiry_date" name="nua_manual_add[expiry_date]" size="40" type="date" class="nua-text-field">
301
 
315
 
316
  }
317
 
318
+ public function auto_add_codes() {
319
+ ?>
320
+ <h2>Get pro version to avail these feature<br></h2>
321
+ <h3><a href='https://newuserapprove.com/options-addon' target = _blank>Click here to get the Pro Version</a></h3>
322
+ <?php
323
  }
324
+ public function import_codes() {
325
+ ?>
326
+ <h2>Get pro version to avail these feature<br></h2>
327
+ <h3><a href='https://newuserapprove.com/options-addon' target = _blank>Click here to get the Pro Version</a></h3>
328
+ <?php
329
  }
330
+ public function email() {
331
+ ?>
332
+ <h2>Get pro version to avail these feature<br></h2>
333
+ <h3><a href='https://newuserapprove.com/options-addon' target = _blank>Click here to get the Pro Version</a></h3>
334
+ <?php
335
  }
336
 
337
 
338
+ public function get_available_invitation_codes() {
 
339
 
340
  $args = array(
341
  'numberposts' => -1,
376
  /**
377
  * Output the Meta Value
378
  */
379
+ public function add_invitation_meta() {
380
+ add_meta_box('nua_invitation', __('Invitation code for new user', 'new-user-approve'), array($this, 'funct_nua_invitation'), $this->code_post_type);
 
381
  }
382
+ public function funct_nua_invitation() {
 
383
 
384
  $code = get_post_meta(get_the_ID(), $this->code_key, true);
385
  $useage = get_post_meta(get_the_ID(), $this->usage_limit_key, true);
391
 
392
  ?>
393
  <form method="post" action=''>
394
+ <?php $nonce = wp_create_nonce('user-reg-by-invite-code-nonce'); ?>
395
  <table class="form-table" role="presentation">
396
+
397
  <tbody>
398
  <tr>
399
+
400
+ <th scope="row"><?php esc_html_e("Invitation Code", "new-user-approve") ?></th>
401
+ <td><input type="text" name="codes" required value="<?php echo esc_attr($code); ?>" class="nua_codetxt" /><br>
402
+ <input type="hidden" name="user_reg_by_invite_code_nonce_field" value ="<?php esc_attr_e($nonce) ?>"> </input>
403
  </tr>
404
  <tr>
405
+ <th scope="row"><?php esc_html_e("Uses left", "new-user-approve") ?></th>
406
+ <td><input type="text" name="usage_limit" required value="<?php echo esc_attr( $useage) ; ?>" class="nua_codetxt" /><br>
407
  </tr>
408
  <tr>
409
+ <th scope="row"><?php esc_html_e("Usage Limit", "new-user-approve") ?></th>
410
+ <td><input type="text" name="total_code" required value="<?php echo esc_attr( $total_code_key );?>" class="nua_codetxt" /><br>
411
  </tr>
412
  <tr>
413
+ <th scope="row"><?php esc_html_e("Date", "new-user-approve") ?></th>
414
+ <td><input type="date" name="expiry_date" required value="<?php echo esc_attr( $convert_date );?>" class="nua_codetxt" /><br>
415
  </tr>
416
  <tr>
417
+ <th scope="row"><?php esc_html_e("Status", "new-user-approve") ?></th>
418
  <td>
419
  <select name="code_status" required class="nua_codetxt">
420
+ <option value='Active' <?php echo esc_attr ('Active' == $Status ? 'selected' : ''); ?>>Active</option>
421
+ <option value='InActive' <?php echo esc_attr('InActive' == $Status ? 'selected' : ''); ?>> InActive</option>
422
+ <option value='Expire' <?php echo esc_attr('Expire' == $Status ? 'selected' : ''); ?>> Expire</option>
423
  </select>
424
  </td>
425
  </tr>
426
  <tr>
427
  <td colspan="2">
428
  <table>
429
+ <p><?php esc_html_e('Users that have registered by using this invitation code', 'new-user-approve') ?></p>
430
  <thead>
431
  <tr>
432
  <th>USER-ID</th>
440
  if (!empty($registered_user)) {
441
 
442
  foreach ($registered_user as $userid) {
443
+ ?>
444
+ <tr><td> <?php echo esc_html($userid); ?></td>
445
+ <?php
446
 
447
  $the_user = get_user_by('id', $userid);
448
 
449
  if (!empty($the_user)) {
450
  $link = get_edit_user_link($userid);
451
+ ?>
452
+ <td><?php echo esc_html($the_user->user_email); ?></td>
453
+ <td><a href='<?php echo esc_url($link); ?>'><?php echo esc_html($the_user->user_email); ?></a></td>
454
+ <?php
455
  } else {
456
+ ?>
457
+ <td><?php esc_html_e("User Not Found", "new-user-approve"); ?></td>
458
+ <?php
459
  }
460
+ ?> </tr> <?php
461
  }
462
  } else {
463
+ ?>
464
+ <tr colspan="3"><td><?php esc_html_e("No User Found", "new-user-approve"); ?></td></tr>
465
+ <?php
466
  }
467
  ?>
468
  </tbody>
476
 
477
  }
478
 
479
+ public function save_nua_invitation() {
 
480
 
481
+ if (isset($_POST['post_type']) && $this->code_post_type == sanitize_text_field( wp_unslash( $_POST['post_type'] ) ) ) {
482
+ $nonce = isset($_POST['user_reg_by_invite_code_nonce_field']) ? sanitize_text_field(wp_unslash($_POST['user_reg_by_invite_code_nonce_field'])):'';
483
+ if(!wp_verify_nonce($nonce, 'user-reg-by-invite-code-nonce') ) {return;}
484
+ $code = isset($_POST['codes']) ? sanitize_text_field(wp_unslash($_POST['codes'])):'';
485
+ $usage = isset($_POST['usage_limit']) ? absint($_POST['usage_limit']):'';
486
+ $use_limit = isset($_POST['total_code']) ? absint( $_POST['total_code']):'';
487
+ $expiry = isset($_POST['expiry_date']) ? sanitize_text_field( wp_unslash( $_POST['expiry_date'] ) ):'';
488
+ $Status = isset($_POST['code_status']) ? sanitize_text_field( wp_unslash( $_POST['code_status'] ) ):'';
489
  //$dateTime = new DateTime(str_replace('/','-',$Expiry));
490
  //$expiry_timestamp = $dateTime->format('U');
491
  $expiry_timestamp = strtotime("$expiry 23:59:59");
498
  }
499
  }
500
 
501
+ public function nua_invitation_code_field() {
502
+ ?> <?php $nonce = wp_create_nonce('nua-invitation-code-nonce'); ?>
 
503
  <p>
504
+ <label> <?php esc_html_e('Invitation Code', 'new-user-approve'); ?></label>
505
+ <input type="hidden" name="nua_invitation_code_nonce_field" value = <?php esc_attr_e($nonce) ?>/>
506
  <input type="text" class="nua_invitation_code" name="nua_invitation_code" />
507
  </p>
508
  <?php
509
  }
510
 
511
+ public function nua_invitation_status_code($status, $user_id) {
512
+ $nonce = isset($_POST['nua_invitation_code_nonce_field']) ? sanitize_text_field(wp_unslash($_POST['nua_invitation_code_nonce_field'])):'';
513
+ if(!wp_verify_nonce($nonce, 'nua-invitation-code-nonce') ) {$nonce='';}
514
+
515
  if (isset($_POST['nua_invitation_code']) && !empty($_POST['nua_invitation_code'])) {
516
  $args = array(
517
  'numberposts' => -1,
523
  array(
524
  array(
525
  'key' => $this->code_key,
526
+ 'value' => sanitize_text_field(wp_unslash($_POST['nua_invitation_code'])),
527
  'compare' => '=',
528
  ),
529
  array(
548
  );
549
 
550
  $posts = get_posts($args);
551
+
 
552
  foreach ($posts as $post_inv) {
553
+
554
  $code_inv = get_post_meta($post_inv->ID, $this->code_key, true);
555
 
556
+ if (sanitize_text_field(wp_unslash($_POST['nua_invitation_code'])) == $code_inv) {
557
  $register_user = get_post_meta($post_inv->ID, $this->registered_users, true);
558
 
559
  if (empty($register_user)) {
576
  }
577
  return $status;
578
  }
579
+ public function invitation_code_columns($columns) {
 
580
  unset($columns['date']);
581
  unset($columns['title']);
582
+ $columns['inv_code'] = __('Invitation Code', 'new-user-approve');
583
+ $columns['usage'] = __('Uses Remaining', 'new-user-approve');
584
+ $columns['expiry'] = __('Expiry', 'new-user-approve');
585
+ $columns['status'] = __('Status', 'new-user-approve');
586
+ $columns['actions'] = __('Actions', 'new-user-approve');
587
 
588
  return $columns;
589
  }
590
 
591
+ public function invitation_code_columns_content($column, $post_id) {
 
592
 
593
  switch ($column) {
594
 
595
  case 'usage':
596
+ echo esc_attr ( get_post_meta($post_id, $this->usage_limit_key, true) . '/' . get_post_meta($post_id, $this->total_code_key, true));
597
  break;
598
 
599
  case 'expiry':
600
  $exp_date = get_post_meta($post_id, $this->expiry_date_key, true);
601
  if (!empty($exp_date)) {
602
+ echo esc_attr(date('Y-m-d', $exp_date));
603
  }
604
  break;
605
  case 'status':
606
+ echo esc_attr( get_post_meta($post_id, $this->status_key, true));
607
  break;
608
  case 'inv_code':
609
+ echo esc_attr( get_post_meta($post_id, $this->code_key, true));
610
  break;
611
  case 'actions':
612
  if ('trash' != get_post_status($post_id)) {
613
  $deactivate_link = admin_url('edit.php?post_type=' . $this->code_post_type);
614
  $deactivate_link .= '&nua_action=deactivate&post_id=' . $post_id . '&nonce=' . wp_create_nonce('nua_deactivate-' . $post_id);
615
  ?>
616
+ <a href="<?php echo esc_url( $deactivate_link); ?>"><?php esc_html_e('Deactivate', 'new-user-approve'); ?></a> | <a href="<?php echo esc_url( get_edit_post_link($post_id) ); ?>"><?php esc_html_e('Edit', 'new-user-approve'); ?></a> | <a href="<?php echo esc_url( get_delete_post_link($post_id)); ?>"><?php esc_html_e('Delete', 'new-user-approve'); ?></a>
617
  <?php
618
  }
619
 
620
  break;
621
  }
622
  }
623
+ public function option_invitation_code() {
624
+ if (isset($_POST['nua-free-invite-nonce-field']) && wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['nua-free-invite-nonce-field'])), 'nua-free-invite-nonce') ) {
625
+ if (isset($_POST['nua_free_invitation']) && sanitize_text_field(wp_unslash( $_POST['nua_free_invitation'])) == 'enable') {
626
+ update_option('nua_free_invitation', sanitize_text_field(wp_unslash($_POST['nua_free_invitation'])));
627
+ } else if (isset($_POST['nua_inv_code_submit'])) {
628
+ update_option('nua_free_invitation', '');
629
+ }
630
  }
631
+
632
  $options = get_option('nua_free_invitation');
633
  $invitation_code_invite = ($options == 'enable') ? $options : false;
634
+ $nonce = wp_create_nonce('nua-free-invite-nonce');
635
+ ?>
636
+ <form method="post" action="">
637
+
638
+ <input type ="hidden" name="nua-free-invite-nonce-field" value ="<?php echo esc_attr($nonce); ?>" />
639
+ <div class = "nua-switch-text-checkbox"> <h4 class="nua-switch-text"> Enable/Disable: </h4> <label class="nua_switch" for="nua_free_invitation" > <input id="nua_free_invitation" name="nua_free_invitation" type="checkbox" value="enable" <?php checked($invitation_code_invite, 'enable'); ?> /> <span class="nua_slider round"></span></label> </div>
640
+ <p class="description"><?php esc_html_e('Invitation Code for user to register', 'new-user-approve'); ?></p>
641
+ <tr>
642
+ <th colspan="2">
643
+ <p class="submit nua-submit"><input type="submit" name="nua_inv_code_submit" id="submit" class="button button-primary" value="Save Changes"></p>
644
+ </th>
645
+ </tr>
646
+ </form>
647
 
648
+ <?php
 
 
 
 
 
 
 
 
 
649
  }
650
  } // End Class
651
 
652
+ function nua_invitation_code() {
 
653
 
654
 
655
  return nua_invitation_code::instance();
includes/user-list.php CHANGED
@@ -58,8 +58,8 @@ class pw_new_user_approve_user_list {
58
  $pagenum = $wp_list_table->get_pagenum();
59
  $sendback = add_query_arg( 'paged', $pagenum, $sendback );
60
 
61
- $status = sanitize_key( $_GET['action'] );
62
- $user = absint( $_GET['user'] );
63
 
64
  pw_new_user_approve()->update_user_status( $user, $status );
65
 
@@ -174,14 +174,14 @@ class pw_new_user_approve_user_list {
174
  $filtered_status = $this->selected_status();
175
 
176
  ?>
177
- <label class="screen-reader-text" for="<?php echo $id ?>"><?php _e( 'View all users', 'new-user-approve' ); ?></label>
178
- <select id="<?php echo $id ?>" name="<?php echo $id ?>" style="float: none; margin: 0 0 0 15px;">
179
- <option value="view_all"><?php _e( 'View all users', 'new-user-approve' ); ?></option>
180
  <?php foreach ( pw_new_user_approve()->get_valid_statuses() as $status ) : ?>
181
  <option value="<?php echo esc_attr( $status ); ?>"<?php selected( $status, $filtered_status ); ?>><?php echo esc_html( $status ); ?></option>
182
  <?php endforeach; ?>
183
  </select>
184
- <?php echo apply_filters( 'new_user_approve_filter_button', $filter_button ); ?>
185
  <style>
186
  #pw-status-query-submit {
187
  float: right;
@@ -236,7 +236,7 @@ class pw_new_user_approve_user_list {
236
 
237
  private function selected_status() {
238
  if ( ! empty( $_REQUEST['new_user_approve_filter-top'] ) || ! empty( $_REQUEST['new_user_approve_filter-bottom'] ) ) {
239
- return esc_attr( ( ! empty( $_REQUEST['new_user_approve_filter-top'] ) ) ? $_REQUEST['new_user_approve_filter-top'] : $_REQUEST['new_user_approve_filter-bottom'] );
240
  }
241
 
242
  return null;
@@ -253,11 +253,12 @@ class pw_new_user_approve_user_list {
253
  if ( $screen->id == 'users' ) : ?>
254
  <script type="text/javascript">
255
  jQuery(document).ready(function ($) {
256
- $('<option>').val('approve').text('<?php _e( 'Approve', 'new-user-approve' )?>').appendTo("select[name='action']");
257
- $('<option>').val('approve').text('<?php _e( 'Approve', 'new-user-approve' )?>').appendTo("select[name='action2']");
 
258
 
259
- $('<option>').val('deny').text('<?php _e( 'Deny', 'new-user-approve' )?>').appendTo("select[name='action']");
260
- $('<option>').val('deny').text('<?php _e( 'Deny', 'new-user-approve' )?>').appendTo("select[name='action2']");
261
  });
262
  </script>
263
  <?php endif;
@@ -349,17 +350,17 @@ class pw_new_user_approve_user_list {
349
  $message = null;
350
 
351
  if ( isset( $_REQUEST['denied'] ) && (int) $_REQUEST['denied'] ) {
352
- $denied = esc_attr( $_REQUEST['denied'] );
353
  $message = sprintf( _n( 'User denied.', '%s users denied.', $denied, 'new-user-approve' ), number_format_i18n( $denied ) );
354
  }
355
 
356
  if ( isset( $_REQUEST['approved'] ) && (int) $_REQUEST['approved'] ) {
357
- $approved = esc_attr( $_REQUEST['approved'] );
358
  $message = sprintf( _n( 'User approved.', '%s users approved.', $approved, 'new-user-approve' ), number_format_i18n( $approved ) );
359
  }
360
 
361
  if ( !empty( $message ) ) {
362
- echo '<div class="updated"><p>' . $message . '</p></div>';
363
  }
364
  }
365
 
@@ -379,12 +380,12 @@ class pw_new_user_approve_user_list {
379
  ?>
380
  <table class="form-table">
381
  <tr>
382
- <th><label for="new_user_approve_status"><?php _e( 'Access Status', 'new-user-approve' ); ?></label>
383
  </th>
384
  <td>
385
  <select id="new_user_approve_status" name="new_user_approve_status">
386
  <?php if ( $user_status == 'pending' ) : ?>
387
- <option value=""><?php _e( '-- Status --', 'new-user-approve' ); ?></option>
388
  <?php endif; ?>
389
  <?php foreach ( array( 'approved', 'denied' ) as $status ) : ?>
390
  <option
@@ -392,10 +393,10 @@ class pw_new_user_approve_user_list {
392
  <?php endforeach; ?>
393
  </select>
394
  <span
395
- class="description"><?php _e( 'If user has access to sign in or not.', 'new-user-approve' ); ?></span>
396
  <?php if ( $user_status == 'pending' ) : ?>
397
  <br/><span
398
- class="description"><?php _e( 'Current user status is <strong>pending</strong>.', 'new-user-approve' ); ?></span>
399
  <?php endif; ?>
400
  </td>
401
  </tr>
@@ -411,12 +412,14 @@ class pw_new_user_approve_user_list {
411
  * @return bool
412
  */
413
  public function save_profile_status_field( $user_id ) {
 
414
  if ( !current_user_can( 'edit_user', $user_id ) ) {
415
  return false;
416
  }
417
-
 
418
  if ( !empty( $_POST['new_user_approve_status'] ) ) {
419
- $new_status = esc_attr( $_POST['new_user_approve_status'] );
420
 
421
  if ( $new_status == 'approved' )
422
  $new_status = 'approve'; else if ( $new_status == 'denied' )
58
  $pagenum = $wp_list_table->get_pagenum();
59
  $sendback = add_query_arg( 'paged', $pagenum, $sendback );
60
 
61
+ $status = ( !empty( $_GET['action']) ) ? sanitize_key( $_GET['action'] ): '';
62
+ $user = ( !empty( $_GET['user'] ) ) ? absint( wp_unslash($_GET['user'] ) ) :'';
63
 
64
  pw_new_user_approve()->update_user_status( $user, $status );
65
 
174
  $filtered_status = $this->selected_status();
175
 
176
  ?>
177
+ <label class="screen-reader-text" for="<?php echo esc_attr( $id) ?>"><?php esc_html_e( 'View all users', 'new-user-approve' ); ?></label>
178
+ <select id="<?php echo esc_attr($id) ?>" name="<?php echo esc_attr( $id )?>" style="float: none; margin: 0 0 0 15px;">
179
+ <option value="view_all"><?php esc_html_e( 'View all users', 'new-user-approve' ); ?></option>
180
  <?php foreach ( pw_new_user_approve()->get_valid_statuses() as $status ) : ?>
181
  <option value="<?php echo esc_attr( $status ); ?>"<?php selected( $status, $filtered_status ); ?>><?php echo esc_html( $status ); ?></option>
182
  <?php endforeach; ?>
183
  </select>
184
+ <?php echo wp_kses_post( apply_filters( 'new_user_approve_filter_button', $filter_button )); ?>
185
  <style>
186
  #pw-status-query-submit {
187
  float: right;
236
 
237
  private function selected_status() {
238
  if ( ! empty( $_REQUEST['new_user_approve_filter-top'] ) || ! empty( $_REQUEST['new_user_approve_filter-bottom'] ) ) {
239
+ return esc_attr( ( ! empty( $_REQUEST['new_user_approve_filter-top'] ) ) ? sanitize_text_field( wp_unslash( $_REQUEST['new_user_approve_filter-top'])) : sanitize_text_field( wp_unslash( $_REQUEST['new_user_approve_filter-bottom'])) );
240
  }
241
 
242
  return null;
253
  if ( $screen->id == 'users' ) : ?>
254
  <script type="text/javascript">
255
  jQuery(document).ready(function ($) {
256
+
257
+ $('<option>').val('approve').text('<?php esc_attr_e( 'Approve', 'new-user-approve' )?>').appendTo("select[name='action']");
258
+ $('<option>').val('approve').text('<?php esc_attr_e( 'Approve', 'new-user-approve' )?>').appendTo("select[name='action2']");
259
 
260
+ $('<option>').val('deny').text('<?php esc_attr_e( 'Deny', 'new-user-approve' )?>').appendTo("select[name='action']");
261
+ $('<option>').val('deny').text('<?php esc_attr_e( 'Deny', 'new-user-approve' )?>').appendTo("select[name='action2']");
262
  });
263
  </script>
264
  <?php endif;
350
  $message = null;
351
 
352
  if ( isset( $_REQUEST['denied'] ) && (int) $_REQUEST['denied'] ) {
353
+ $denied = sanitize_text_field(wp_unslash( $_REQUEST['denied'] ) );
354
  $message = sprintf( _n( 'User denied.', '%s users denied.', $denied, 'new-user-approve' ), number_format_i18n( $denied ) );
355
  }
356
 
357
  if ( isset( $_REQUEST['approved'] ) && (int) $_REQUEST['approved'] ) {
358
+ $approved = sanitize_text_field( wp_unslash( $_REQUEST['approved'] ) );
359
  $message = sprintf( _n( 'User approved.', '%s users approved.', $approved, 'new-user-approve' ), number_format_i18n( $approved ) );
360
  }
361
 
362
  if ( !empty( $message ) ) {
363
+ echo ( wp_kses_post( '<div class="updated"><p>' . $message . '</p></div>'));
364
  }
365
  }
366
 
380
  ?>
381
  <table class="form-table">
382
  <tr>
383
+ <th><label for="new_user_approve_status"><?php esc_html_e( 'Access Status', 'new-user-approve' ); ?></label>
384
  </th>
385
  <td>
386
  <select id="new_user_approve_status" name="new_user_approve_status">
387
  <?php if ( $user_status == 'pending' ) : ?>
388
+ <option value=""><?php esc_html_e( '-- Status --', 'new-user-approve' ); ?></option>
389
  <?php endif; ?>
390
  <?php foreach ( array( 'approved', 'denied' ) as $status ) : ?>
391
  <option
393
  <?php endforeach; ?>
394
  </select>
395
  <span
396
+ class="description"><?php esc_html_e( 'If user has access to sign in or not.', 'new-user-approve' ); ?></span>
397
  <?php if ( $user_status == 'pending' ) : ?>
398
  <br/><span
399
+ class="description"><?php esc_html_e( 'Current user status is <strong>pending</strong>.', 'new-user-approve' ); ?></span>
400
  <?php endif; ?>
401
  </td>
402
  </tr>
412
  * @return bool
413
  */
414
  public function save_profile_status_field( $user_id ) {
415
+
416
  if ( !current_user_can( 'edit_user', $user_id ) ) {
417
  return false;
418
  }
419
+ $nonce = '';
420
+ if ( wp_verify_nonce($nonce) ) {return;}
421
  if ( !empty( $_POST['new_user_approve_status'] ) ) {
422
+ $new_status = sanitize_text_field( wp_unslash( $_POST['new_user_approve_status'] ) );
423
 
424
  if ( $new_status == 'approved' )
425
  $new_status = 'approve'; else if ( $new_status == 'denied' )
new-user-approve.php CHANGED
@@ -5,11 +5,16 @@
5
  Plugin URI: http://newuserapprove.com/
6
  Description: Allow administrators to approve users once they register. Only approved users will be allowed to access the site. For support, please go to the <a href="http://wordpress.org/support/plugin/new-user-approve">support forums</a> on wordpress.org.
7
  Author: NewUserApprove
8
- Version: 2.3
9
  Author URI: https://newuserapprove.com/
10
  Text Domain: new-user-approve
11
  */
12
 
 
 
 
 
 
13
  if ( !function_exists( 'nua_fs' ) ) {
14
  // Create a helper function for easy SDK access.
15
  function nua_fs()
@@ -163,7 +168,7 @@ class pw_new_user_approve
163
  $min_wp_version = '3.5.1';
164
  $exit_msg = sprintf( __( 'New User Approve requires WordPress %s or newer.', 'new-user-approve' ), $min_wp_version );
165
  if ( version_compare( $wp_version, $min_wp_version, '<' ) ) {
166
- exit( $exit_msg );
167
  }
168
  // since the right version of WordPress is being used, run a hook
169
  do_action( 'new_user_approve_activate' );
@@ -216,9 +221,9 @@ class pw_new_user_approve
216
 
217
  if ( !$show_notice ) {
218
  echo '<div class="error"><p>' ;
219
- printf( __( 'The Membership setting must be turned on in order for the New User Approve to work correctly. <a href="%1$s">Update in settings</a>. | <a href="%2$s">Hide Notice</a>', 'new-user-approve' ), admin_url( 'options-general.php' ), add_query_arg( array(
220
  'new-user-approve-settings-notice' => 1,
221
- ) ) );
222
  echo "</p></div>" ;
223
  }
224
 
@@ -490,12 +495,12 @@ class pw_new_user_approve
490
  $pages = array('new-user-approve-auto-approve', 'nua-invitation-code', 'new-user-approve', 'new-user-approve-admin');
491
 
492
  if (isset($_GET['page']) && in_array($_GET['page'], $pages)) {
493
- wp_enqueue_style( 'nua-admin-style', plugins_url( '/assets/css/nua-admin-style.css', __FILE__ ), array());
494
 
495
  $current_user = wp_get_current_user();
496
 
497
- wp_enqueue_script( 'nua-admin', plugins_url( '/assets/js/admin.js', __FILE__ ), array( 'jquery' ) );
498
- wp_localize_script(
499
  'nua-admin',
500
  'nuaAdmin',
501
  array(
@@ -508,18 +513,18 @@ class pw_new_user_approve
508
  {
509
  $user_status = $this->get_count_of_user_statuses();
510
  ?>
511
- <div>
512
  <p>
513
  <span style="font-weight:bold;">
514
  <a href="<?php
515
- echo apply_filters( 'new_user_approve_dashboard_link', 'users.php' ) ;
516
  ?>"><?php
517
- _e( 'Users', 'new-user-approve' );
518
  ?></a>
519
  </span>:
520
  <?php
521
  foreach ( $user_status as $status => $count ) {
522
- print __( ucwords( $status ), 'new-user-approve' ) . "(" . $count . ")&nbsp;&nbsp;&nbsp;";
523
  }
524
  ?>
525
  </p>
@@ -744,8 +749,8 @@ class pw_new_user_approve
744
  public function email_message_headers()
745
  {
746
  $admin_email = get_option( 'admin_email' );
747
- if ( empty($admin_email) ) {
748
- $admin_email = 'support@' . $_SERVER['SERVER_NAME'];
749
  }
750
  $from_name = get_option( 'blogname' );
751
  $headers = array( "From: \"{$from_name}\" <{$admin_email}>\n" );
@@ -760,10 +765,12 @@ class pw_new_user_approve
760
  */
761
  public function show_user_pending_message( $errors )
762
  {
 
 
763
 
764
  if ( !empty($_POST['redirect_to']) ) {
765
  // if a redirect_to is set, honor it
766
- wp_safe_redirect( $_POST['redirect_to'] );
767
  exit;
768
  }
769
 
@@ -799,14 +806,15 @@ class pw_new_user_approve
799
  * @uses lostpassword_post
800
  */
801
  public function lost_password( $errors )
802
- {
803
- $is_email = strpos( $_POST['user_login'], '@' );
 
804
 
805
  if ( $is_email === false ) {
806
- $username = sanitize_user( $_POST['user_login'] );
807
  $user_data = get_user_by( 'login', trim( $username ) );
808
  } else {
809
- $email = is_email( $_POST['user_login'] );
810
  $user_data = get_user_by( 'email', $email );
811
  }
812
 
@@ -837,7 +845,8 @@ class pw_new_user_approve
837
  }
838
  }
839
 
840
-
 
841
  if ( isset( $_GET['action'] ) && $_GET['action'] == 'register' && !$_POST ) {
842
  $instructions = nua_default_registration_message();
843
  $instructions = nua_do_email_tags( $instructions, array(
@@ -945,12 +954,12 @@ if ( nua_fs()->is__premium_only() && nua_fs()->can_use_premium_code() ) {
945
  } else {
946
  $class = 'notice notice-error';
947
  $message = __( ' To start using New User Approve Options, please <a href="https://users.freemius.com" target="_blank"> login to your freemius account</a> in order to download the premium version <br /> For more details <a target="_blank" href="https://newuserapprove.com/">Click here</a>!', 'new-user-approve' );
948
- printf(
949
  '<br><div class="%1$s"><p>%2$s</p> <a href=' . admin_url() . '>%3$s</a></div>',
950
  esc_attr( $class ),
951
  $message,
952
  esc_html( 'Back!' )
953
- );
954
  include_once ABSPATH . 'wp-includes/pluggable.php';
955
  deactivate_plugins( 'new-user-approve/new-user-approve.php' );
956
  wp_die();
5
  Plugin URI: http://newuserapprove.com/
6
  Description: Allow administrators to approve users once they register. Only approved users will be allowed to access the site. For support, please go to the <a href="http://wordpress.org/support/plugin/new-user-approve">support forums</a> on wordpress.org.
7
  Author: NewUserApprove
8
+ Version: 2.4
9
  Author URI: https://newuserapprove.com/
10
  Text Domain: new-user-approve
11
  */
12
 
13
+
14
+ if ( !defined( 'NUA_VERSION' ) ) {
15
+ define( 'NUA_VERSION', '2.4' );
16
+ }
17
+
18
  if ( !function_exists( 'nua_fs' ) ) {
19
  // Create a helper function for easy SDK access.
20
  function nua_fs()
168
  $min_wp_version = '3.5.1';
169
  $exit_msg = sprintf( __( 'New User Approve requires WordPress %s or newer.', 'new-user-approve' ), $min_wp_version );
170
  if ( version_compare( $wp_version, $min_wp_version, '<' ) ) {
171
+ exit( esc_html( $exit_msg )) ;
172
  }
173
  // since the right version of WordPress is being used, run a hook
174
  do_action( 'new_user_approve_activate' );
221
 
222
  if ( !$show_notice ) {
223
  echo '<div class="error"><p>' ;
224
+ printf( wp_kses_post( 'The Membership setting must be turned on in order for the New User Approve to work correctly. <a href="%1$s">Update in settings</a>. | <a href="%2$s">Hide Notice</a>') , esc_url( admin_url( 'options-general.php' ) ), esc_url(add_query_arg( array(
225
  'new-user-approve-settings-notice' => 1,
226
+ )) ) );
227
  echo "</p></div>" ;
228
  }
229
 
495
  $pages = array('new-user-approve-auto-approve', 'nua-invitation-code', 'new-user-approve', 'new-user-approve-admin');
496
 
497
  if (isset($_GET['page']) && in_array($_GET['page'], $pages)) {
498
+ wp_enqueue_style( 'nua-admin-style', plugins_url( '/assets/css/nua-admin-style.css', __FILE__ ), array(), NUA_VERSION);
499
 
500
  $current_user = wp_get_current_user();
501
 
502
+ wp_enqueue_script( 'nua-admin', plugins_url( '/assets/js/admin.js', __FILE__ ), array( 'jquery' ), NUA_VERSION );
503
+ wp_localize_script(
504
  'nua-admin',
505
  'nuaAdmin',
506
  array(
513
  {
514
  $user_status = $this->get_count_of_user_statuses();
515
  ?>
516
+ <div>
517
  <p>
518
  <span style="font-weight:bold;">
519
  <a href="<?php
520
+ echo wp_kses_post (apply_filters( 'new_user_approve_dashboard_link', 'users.php' )) ;
521
  ?>"><?php
522
+ esc_html_e( 'Users', 'new-user-approve' );
523
  ?></a>
524
  </span>:
525
  <?php
526
  foreach ( $user_status as $status => $count ) {
527
+ print esc_html_e( ucwords( $status ), 'new-user-approve' ) . "(" . esc_attr($count) . ")&nbsp;&nbsp;&nbsp;";
528
  }
529
  ?>
530
  </p>
749
  public function email_message_headers()
750
  {
751
  $admin_email = get_option( 'admin_email' );
752
+ if ( isset($_SERVER['SERVER_NAME']) && empty($admin_email) ) {
753
+ $admin_email = 'support@' . sanitize_text_field(wp_unslash($_SERVER['SERVER_NAME']));
754
  }
755
  $from_name = get_option( 'blogname' );
756
  $headers = array( "From: \"{$from_name}\" <{$admin_email}>\n" );
765
  */
766
  public function show_user_pending_message( $errors )
767
  {
768
+ $nonce = '';
769
+ if ( wp_verify_nonce($nonce) ) {return;}
770
 
771
  if ( !empty($_POST['redirect_to']) ) {
772
  // if a redirect_to is set, honor it
773
+ wp_safe_redirect( wp_unslash($_POST['redirect_to'] ));
774
  exit;
775
  }
776
 
806
  * @uses lostpassword_post
807
  */
808
  public function lost_password( $errors )
809
+ { $nonce = '';
810
+ if (isset($_POST['user_login']) && wp_verify_nonce($nonce) ) {return;}
811
+ $is_email = strpos( sanitize_text_field(wp_unslash($_POST['user_login'])), '@' );
812
 
813
  if ( $is_email === false ) {
814
+ $username = sanitize_user( wp_unslash($_POST['user_login'] ));
815
  $user_data = get_user_by( 'login', trim( $username ) );
816
  } else {
817
+ $email = is_email( wp_unslash($_POST['user_login']) );
818
  $user_data = get_user_by( 'email', $email );
819
  }
820
 
845
  }
846
  }
847
 
848
+ $nonce = '';
849
+ if ( wp_verify_nonce($nonce) ) {return;}
850
  if ( isset( $_GET['action'] ) && $_GET['action'] == 'register' && !$_POST ) {
851
  $instructions = nua_default_registration_message();
852
  $instructions = nua_do_email_tags( $instructions, array(
954
  } else {
955
  $class = 'notice notice-error';
956
  $message = __( ' To start using New User Approve Options, please <a href="https://users.freemius.com" target="_blank"> login to your freemius account</a> in order to download the premium version <br /> For more details <a target="_blank" href="https://newuserapprove.com/">Click here</a>!', 'new-user-approve' );
957
+ printf( wp_kses_post(
958
  '<br><div class="%1$s"><p>%2$s</p> <a href=' . admin_url() . '>%3$s</a></div>',
959
  esc_attr( $class ),
960
  $message,
961
  esc_html( 'Back!' )
962
+ ));
963
  include_once ABSPATH . 'wp-includes/pluggable.php';
964
  deactivate_plugins( 'new-user-approve/new-user-approve.php' );
965
  wp_die();
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://newuserapprove.com
4
  Tags: users, registration, sign up, user management, login, user approval
5
  Requires at least: 4.0
6
  Tested up to: 6.0
7
- Stable tag: 2.3
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -193,6 +193,9 @@ We are aware of a few issues with multisite
193
 
194
  == Changelog ==
195
 
 
 
 
196
  = 2.3 =
197
  * Added - Zapier Integration
198
  * Added - Filter Hook to Filter password before user creation.
4
  Tags: users, registration, sign up, user management, login, user approval
5
  Requires at least: 4.0
6
  Tested up to: 6.0
7
+ Stable tag: 2.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
193
 
194
  == Changelog ==
195
 
196
+ = 2.4 =
197
+ * Tweak - Code improvement
198
+
199
  = 2.3 =
200
  * Added - Zapier Integration
201
  * Added - Filter Hook to Filter password before user creation.