Skip to content

Commit

Permalink
Add legacy login links widget.
Browse files Browse the repository at this point in the history
  • Loading branch information
ve3 committed Nov 24, 2023
1 parent cb59f79 commit 72ca287
Show file tree
Hide file tree
Showing 7 changed files with 376 additions and 23 deletions.
5 changes: 5 additions & 0 deletions App/App.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ public function run()
$this->Loader = new \RundizOauth\App\Libraries\Loader();
$this->Loader->autoRegisterControllers();

// Register all widgets.
$WidgetAutoRegister = new Widgets\AutoRegisterWidgets();
$WidgetAutoRegister->registerAll();
unset($WidgetAutoRegister);

// The rest of controllers that is not able to register via loader's auto register.
// They must be manually write it down here, below this line.
// For example:
Expand Down
47 changes: 47 additions & 0 deletions App/Widgets/AutoRegisterWidgets.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php
/**
* Auto register all available widgets in this theme. To make it works, you have to call <code>registerAll()</code> method.
*
* @package rundiz-oauth
* @link https://wordpress.stackexchange.com/questions/396479/how-migrate-a-legacy-widget-to-block No need to convert/migrate widget to block.
* @link https://developer.wordpress.org/block-editor/how-to-guides/widgets/legacy-widget-block/ In case it is needed, this is migration guide.
*/


namespace RundizOauth\App\Widgets;


if (!class_exists('\\RundizOauth\\App\\Widgets\\AutoRegisterWidgets')) {
class AutoRegisterWidgets
{


/**
* Register all widgets that come with this theme.
*/
public function registerAll()
{
$widgets_folder = __DIR__;
$DirectoryIterator = new \DirectoryIterator($widgets_folder);

foreach ($DirectoryIterator as $fileinfo) {
if (!$fileinfo->isDot() && $fileinfo->isFile() && strtolower($fileinfo->getExtension()) === 'php') {
$file_name_only = $fileinfo->getBasename('.php');
$class_name = __NAMESPACE__ . '\\' . $file_name_only;

if (__CLASS__ !== $class_name && class_exists($class_name)) {
add_action('widgets_init', function() use ($class_name) {
return register_widget($class_name);
}, 11);
}

unset($class_name, $file_name_only);
}
}// endforeach;

unset($DirectoryIterator, $fileinfo, $widgets_folder);
}// registerAll


}
}
230 changes: 230 additions & 0 deletions App/Widgets/LoginLinksWidget.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,230 @@
<?php
/**
* @package rundiz-oauth
*/


namespace RundizOauth\App\Widgets;


if (!class_exists('\\RundizOauth\\App\\Widgets\\LoginLinksWidget')) {
class LoginLinksWidget extends \WP_Widget
{


/**
* @var string Widget title.
*/
private $widgetTitle;


/**
* Class constructor.
*/
public function __construct()
{
parent::__construct(
'rdoauth_loginlinks_widget', // base ID
__('Login links widget', 'okv-oauth'),
[
'description' => __('Display links to login, logout, and other (depend on settings).', 'okv-oauth'),
]
);
}// __construct


/**
* Admin widget form
*
* @see WP_Widget::form()
* @param array $instance Previously saved values from database.
*/
public function form($instance)
{
if (isset($instance['rdoauth-loginlinks-widget-title'])) {
$this->widgetTitle = $instance['rdoauth-loginlinks-widget-title'];
}

// output form
$output = '<p>';
$output .= '<label for="' . $this->get_field_id('rdoauth-loginlinks-widget-title') . '">' . __('Title', 'okv-oauth') . ':</label>';
$output .= '<input id="' . $this->get_field_id('rdoauth-loginlinks-widget-title') . '" class="widefat" type="text" name="' . $this->get_field_name('rdoauth-loginlinks-widget-title') . '" value="' . esc_attr($this->widgetTitle) . '">';
$output .= '</p>';

$output .= '<p>';
$output .= '<input id="' . $this->get_field_id('rdoauth-loginlinks-displaylink-admin') . '" class="input-checkbox" type="checkbox" name="' . $this->get_field_name('rdoauth-loginlinks-displaylink-admin') . '" value="1"' .
(isset($instance['rdoauth-loginlinks-displaylink-admin']) ? checked($instance['rdoauth-loginlinks-displaylink-admin'], '1', false) : '') .
'> ';
$output .= '<label for="' . $this->get_field_id('rdoauth-loginlinks-displaylink-admin') . '">' . __('Display link to admin dashboard', 'okv-oauth') . ':</label>';
$output .= '</p>';

$output .= '<p>';
$output .= '<input id="' . $this->get_field_id('rdoauth-loginlinks-displaylink-editprofile') . '" class="input-checkbox" type="checkbox" name="' . $this->get_field_name('rdoauth-loginlinks-displaylink-editprofile') . '" value="1"' .
(isset($instance['rdoauth-loginlinks-displaylink-editprofile']) ? checked($instance['rdoauth-loginlinks-displaylink-editprofile'], '1', false) : '') .
'> ';
$output .= '<label for="' . $this->get_field_id('rdoauth-loginlinks-displaylink-editprofile') . '">' . __('Display link to edit profile', 'okv-oauth') . ':</label>';
$output .= '</p>';

$output .= '<p>';
$output .= '<label for="' . $this->get_field_id('rdoauth-loginlinks-useelement') . '">' . __('Use HTML element', 'okv-oauth') . ':</label>';
$output .= '<select id="' . $this->get_field_id('rdoauth-loginlinks-useelement') . '" name="' . $this->get_field_name('rdoauth-loginlinks-useelement') . '">';
/* translators: %1$s: HTML element that will be use. */
$output .= '<option value=""' . (isset($instance['rdoauth-loginlinks-useelement']) ? selected($instance['rdoauth-loginlinks-useelement'], '', false) : ' selected') . '>' . esc_html(sprintf(__('Use %1$s', 'okv-oauth'), 'ul & li')) . '</option>';
/* translators: %1$s: HTML element that will be use. */
$output .= '<option value="div_p"' . (isset($instance['rdoauth-loginlinks-useelement']) ? selected($instance['rdoauth-loginlinks-useelement'], 'div_p', false) : ' ') . '>' . esc_html(sprintf(__('Use %1$s', 'okv-oauth'), 'div & p')) . '</option>';
/* translators: %1$s: HTML element that will be use. */
$output .= '<option value="div_div"' . (isset($instance['rdoauth-loginlinks-useelement']) ? selected($instance['rdoauth-loginlinks-useelement'], 'div_div', false) : ' ') . '>' . esc_html(sprintf(__('Use %1$s', 'okv-oauth'), 'div & div')) . '</option>';
$output .= '</select>';
$output .= '</p>';

$output .= '<p>';
$output .= '<label for="' . $this->get_field_id('rdoauth-loginlinks-wrapper-classes') . '">' . __('List wrapper classes', 'okv-oauth') . ':</label>';
$output .= '<input id="' . $this->get_field_id('rdoauth-loginlinks-wrapper-classes') . '" class="widefat" type="text" name="' . $this->get_field_name('rdoauth-loginlinks-wrapper-classes') . '" value="' . esc_attr($instance['rdoauth-loginlinks-wrapper-classes']) . '">';
$output .= '</p>';

$output .= '<p>';
$output .= '<label for="' . $this->get_field_id('rdoauth-loginlinks-listitem-classes') . '">' . __('List item classes', 'okv-oauth') . ':</label>';
$output .= '<input id="' . $this->get_field_id('rdoauth-loginlinks-listitem-classes') . '" class="widefat" type="text" name="' . $this->get_field_name('rdoauth-loginlinks-listitem-classes') . '" value="' . esc_attr($instance['rdoauth-loginlinks-listitem-classes']) . '">';
$output .= '</p>';

echo $output;

unset($output);
}// form


/**
* Generate open, close for line and wrapper.
*
* @param string $useElement The use element option.
* @param string $wrapperClasses The wrapper classes.
* @param string $lineClasses The list item line classes.
* @return array Return indexed array of these values by order:<br>
* [open wrapper, close wrapper, open line, close line]
*/
private function generateOpenCloseLineAndWrapper($useElement, $wrapperClasses = '', $lineClasses = '')
{
if (!empty($lineClasses)) {
$lineClasses = ' ' . $lineClasses;
}

if ('div_p' === $useElement) {
$openWrapper = '<div class="' . esc_attr($wrapperClasses) . '">' . "\n";
$closeWrapper = '</div>' . "\n";
$openLine = '<p class="rd-oauth-loginlinks-widget-list-item' . $lineClasses . '">';
$closeLine = '</p>';
} elseif ('div_div' === $useElement) {
$openWrapper = '<div class="' . esc_attr($wrapperClasses) . '">' . "\n";
$closeWrapper = '</div>' . "\n";
$openLine = '<div class="rd-oauth-loginlinks-widget-list-item' . $lineClasses . '">';
$closeLine = '</div>';
} else {
$openWrapper = '<ul class="' . esc_attr($wrapperClasses) . '">' . "\n";
$closeWrapper = '</ul>' . "\n";
$openLine = '<li class="rd-oauth-loginlinks-widget-list-item' . $lineClasses . '">';
$closeLine = '</li>';
}

return [$openWrapper, $closeWrapper, $openLine, $closeLine];
}// generateOpenCloseLineAndWrapper


/**
* Sanitize widget form values as they are saved.
*
* @see WP_Widget::update()
* @param array $new_instance Values just sent to be saved.
* @param array $old_instance Previously saved values from database.
* @return array Updated safe values to be saved.
*/
public function update($new_instance, $old_instance)
{
$instance = $old_instance;

if (isset($new_instance['rdoauth-loginlinks-widget-title'])) {
$instance['rdoauth-loginlinks-widget-title'] = sanitize_text_field($new_instance['rdoauth-loginlinks-widget-title']);
}
$instance['rdoauth-loginlinks-displaylink-admin'] = (isset($new_instance['rdoauth-loginlinks-displaylink-admin']) && '1' === $new_instance['rdoauth-loginlinks-displaylink-admin'] ? '1' : '');
$instance['rdoauth-loginlinks-displaylink-editprofile'] = (isset($new_instance['rdoauth-loginlinks-displaylink-editprofile']) && '1' === $new_instance['rdoauth-loginlinks-displaylink-editprofile'] ? '1' : '');
$instance['rdoauth-loginlinks-useelement'] = (isset($new_instance['rdoauth-loginlinks-useelement']) ? sanitize_text_field($new_instance['rdoauth-loginlinks-useelement']) : '');
if (isset($new_instance['rdoauth-loginlinks-wrapper-classes'])) {
$instance['rdoauth-loginlinks-wrapper-classes'] = sanitize_text_field($new_instance['rdoauth-loginlinks-wrapper-classes']);
}
if (isset($new_instance['rdoauth-loginlinks-listitem-classes'])) {
$instance['rdoauth-loginlinks-listitem-classes'] = sanitize_text_field($new_instance['rdoauth-loginlinks-listitem-classes']);
}

return $instance;
}// update


/**
* Front-end display of widget
*
* @see WP_Widget::widget()
* @param array $args Widget arguments.
* @param array $instance Saved values from database.
*/
public function widget($args, $instance)
{
$widget_title = $this->widgetTitle;
if (isset($instance['rdoauth-loginlinks-widget-title'])) {
$widget_title = $instance['rdoauth-loginlinks-widget-title'];
}

// set output front-end widget ---------------------------------
$output = $args['before_widget'] . "\n";

if (isset($instance['rdoauth-loginlinks-widget-title']) && !empty($instance['rdoauth-loginlinks-widget-title'])) {
$output .= $args['before_title'] . apply_filters('widget_title', $instance['rdoauth-loginlinks-widget-title']) . $args['after_title'] . "\n";
}

$currentUrl = ( is_ssl() ? 'https://' : 'http://' ) .
(isset($_SERVER['HTTP_HOST']) ? sanitize_text_field(wp_unslash($_SERVER['HTTP_HOST'])) : '') .
(isset($_SERVER['REQUEST_URI']) ? sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI'])) : '');
$isUserLoggedIn = is_user_logged_in();
$wrapperClasses = ($isUserLoggedIn ? 'logged-in' : 'logged-out');
if (!empty($instance['rdoauth-loginlinks-wrapper-classes'])) {
$wrapperClasses .= ' ' . $instance['rdoauth-loginlinks-wrapper-classes'];
}
$lineClasses = (isset($instance['rdoauth-loginlinks-listitem-classes']) ? $instance['rdoauth-loginlinks-listitem-classes'] : '');
$useElement = (isset($instance['rdoauth-loginlinks-useelement']) ? $instance['rdoauth-loginlinks-useelement'] : '');

list($openWrapper, $closeWrapper, $openLine, $closeLine) = $this->generateOpenCloseLineAndWrapper($useElement, $wrapperClasses, $lineClasses);
unset($lineClasses, $useElement, $wrapperClasses);

// list site-admin/register/login/edit profile/logout links
$output .= $openWrapper;
if ($isUserLoggedIn) {
// if logged in.
if (isset($instance['rdoauth-loginlinks-displaylink-admin']) && '1' === $instance['rdoauth-loginlinks-displaylink-admin']) {
// if setting to allowed link to admin.
$output .= $openLine . '<a href="' . admin_url() . '">' . __('Site Admin') . '</a>' . $closeLine . "\n";
}
if (isset($instance['rdoauth-loginlinks-displaylink-editprofile']) && '1' === $instance['rdoauth-loginlinks-displaylink-editprofile']) {
// if setting to allowed link to edit profile.
$output .= $openLine . '<a href="' . get_edit_user_link() . '">' . __('Edit Profile') . '</a>' . $closeLine . "\n";
}
} else {
// if NOT logged in.
if (get_option('users_can_register')) {
// if setting is allowed user register.
$output .= $openLine . '<a href="' . wp_registration_url() . '">' . __('Register', 'okv-oauth') . '</a>' . $closeLine . "\n";
}
}// endif;
$output .= $openLine . wp_loginout($currentUrl, false) . $closeLine . "\n";
unset($currentUrl, $isUserLoggedIn);
$output .= $closeWrapper;
unset($closeLine, $closeWrapper, $openLine, $openWrapper);

$output .= $args['after_widget'] . "\n";

echo $output;

// clear unused variables
unset($output);
}// widget


}
}
6 changes: 3 additions & 3 deletions languages/okv-oauth-th-rd-oauth-loginlinks-block-script.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
{
"translation-revision-date": "2023-11-24 03:13+0700",
"translation-revision-date": "2023-11-24 14:11+0700",
"generator": "WP-CLI\/2.8.0-alpha-9dfa966",
"source": "blocks\/loginlinks\/block.js",
"domain": "okv-oauth",
"domain": "messages",
"locale_data": {
"messages": {
"": {
"domain": "okv-oauth",
"domain": "messages",
"lang": "th",
"plural-forms": "nplurals=1; plural=0;"
},
Expand Down
Binary file modified languages/okv-oauth-th.mo
Binary file not shown.
56 changes: 45 additions & 11 deletions languages/okv-oauth-th.po
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: okv-oauth 1.0\n"
"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/okv-oauth\n"
"POT-Creation-Date: 2023-11-24T03:13:17+07:00\n"
"PO-Revision-Date: 2023-11-24 03:13+0700\n"
"POT-Creation-Date: 2023-11-24T14:11:14+07:00\n"
"PO-Revision-Date: 2023-11-24 14:11+0700\n"
"Last-Translator: Vee W.\n"
"Language-Team: <>\n"
"Language: th\n"
Expand Down Expand Up @@ -416,6 +416,49 @@ msgstr "เปลี่ยนอีเมล"
msgid "OR"
msgstr "หรือ"

#: App/Widgets/LoginLinksWidget.php:28
msgid "Login links widget"
msgstr "วิดเจ็ตลิ้งค์เข้าสู่ระบบ"

#: App/Widgets/LoginLinksWidget.php:30
msgid "Display links to login, logout, and other (depend on settings)."
msgstr "แสดงลิ้งค์ไปยังหน้าเข้าสู่ระบบ, ออกจากระบบ, และอื่นๆ (ขึ้นอยู่กับการตั้งค่า)."

#: App/Widgets/LoginLinksWidget.php:50
msgid "Title"
msgstr "หัวข้อ"

#: App/Widgets/LoginLinksWidget.php:58 blocks/loginlinks/block.js:1
msgid "Display link to admin dashboard"
msgstr "แสดงลิ้งค์ไปยังหน้าผู้ดูแล"

#: App/Widgets/LoginLinksWidget.php:65
msgid "Display link to edit profile"
msgstr "แสดงลิ้งค์ไปยังหน้าแก้ไขโปรไฟล์"

#: App/Widgets/LoginLinksWidget.php:69
msgid "Use HTML element"
msgstr "ใช้แท็ก HTML"

#. translators: %1$s: HTML element that will be use.
#: App/Widgets/LoginLinksWidget.php:72 App/Widgets/LoginLinksWidget.php:74
#: App/Widgets/LoginLinksWidget.php:76
msgid "Use %1$s"
msgstr "ใช้ %1$s"

#: App/Widgets/LoginLinksWidget.php:81
msgid "List wrapper classes"
msgstr "คลาสตัวหุ้มรายการ"

#: App/Widgets/LoginLinksWidget.php:86
msgid "List item classes"
msgstr "คลาสแต่ละรายการ"

#: App/Widgets/LoginLinksWidget.php:212 templates/okv-oauth/partials/registerForm_v.php:22
#: templates/okv-oauth/partials/registerForm_v.php:34
msgid "Register"
msgstr "ลงทะเบียน"

#: templates/okv-oauth/partials/editAccountChangeEmailButton_v.php:17
msgid ""
"Change an email by click on the OAuth button and login to OAuth provider with the email you want."
Expand All @@ -425,15 +468,6 @@ msgstr "เปลี่ยนอีเมลโดยคลิกบนปุ่
msgid "Login"
msgstr "เข้าสู่ระบบ"

#: templates/okv-oauth/partials/registerForm_v.php:22
#: templates/okv-oauth/partials/registerForm_v.php:34
msgid "Register"
msgstr "ลงทะเบียน"

#: blocks/loginlinks/block.js:1
msgid "Display link to admin dashboard"
msgstr "แสดงลิ้งค์ไปยังหน้าผู้ดูแล"

#: blocks/loginlinks/block.json
msgctxt "block description"
msgid "Display login, register, logout links."
Expand Down
Loading

0 comments on commit 72ca287

Please sign in to comment.