Completed
Push — master ( 06a075...7c1142 )
by Dennis
01:09
created

MslsMenu.php (7 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 34 and the first side effect is on line 170.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
3
/*
4
Plugin Name: MslsMenu
5
Plugin URI: https://github.com/lloc/MslsMenu
6
Description: Adds the Multisite Language Switcher to the primary-nav-menu
7
Version: 1.4
8
Author: Dennis Ploetner
9
Author URI: http://lloc.de/
10
Text Domain: mslsmenu
11
*/
12
13
/*
14
Copyright 2014  Dennis Ploetner  (email : [email protected])
15
16
This program is free software; you can redistribute it and/or modify
17
it under the terms of the GNU General Public License, version 2, as
18
published by the Free Software Foundation.
19
20
This program is distributed in the hope that it will be useful,
21
but WITHOUT ANY WARRANTY; without even the implied warranty of
22
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23
GNU General Public License for more details.
24
25
You should have received a copy of the GNU General Public License
26
along with this program; if not, write to the Free Software
27
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
28
*/
29
30
/**
31
 * MslsMenu Class
32
 * @package mslsmenu
33
 */
34
class MslsMenu {
0 ignored issues
show
Coding Style Compatibility introduced by
PSR1 recommends that each class must be in a namespace of at least one level to avoid collisions.

You can fix this by adding a namespace to your class:

namespace YourVendor;

class YourClass { }

When choosing a vendor namespace, try to pick something that is not too generic to avoid conflicts with other libraries.

Loading history...
35
36
	/**
37
	 * MslsMenu constructor.
38
	 */
39
	public function __construct() {
40
		load_plugin_textdomain( 'mslsmenu', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
41
	}
42
43
	/**
44
	 * Plugin init
45
	 *
46
	 * @return MslsMenu
47
	 */
48
	public static function init() {
49
		$obj = new self;
50
51
		add_filter( 'wp_nav_menu_items', array( $obj, 'nav_item' ), 10, 2 );
52
		add_action( 'msls_admin_register', array( $obj, 'admin_register' ) );
53
54
		return $obj;
55
	}
56
57
	/**
58
	 * Callback for wp_nav_menu_items
59
	 *
60
	 * @param string $items
61
	 * @param StdClass $args
62
	 *
63
	 * @return string
64
	 */
65
	function nav_item( $items, $args ) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
66
		if ( function_exists( 'the_msls' ) ) {
67
			$options   = MslsOptions::instance();
68
			$locations = (array) $options->mslsmenu_theme_location;
69
70
			if ( in_array( $args->theme_location, $locations ) ) {
71
				$mslsmenu = '';
72
73
				$obj = new MslsOutput;
74
				foreach ( $obj->get( (int) $options->mslsmenu_display, false, (int) $options->only_with_translation ) as $item ) {
75
					$mslsmenu .= $options->mslsmenu_before_item . $item . $options->mslsmenu_after_item;
76
				}
77
78
				$items .= $options->mslsmenu_before_output . $mslsmenu . $options->mslsmenu_after_output;
79
			}
80
		}
81
82
		return $items;
83
	}
84
85
	/**
86
	 * Callback for msls_admin_register
87
	 *
88
	 * @param string $page
89
	 */
90
	function admin_register( $page ) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
91
		$sid   = 'mslsmenu_section';
92
		$label = __( 'Menu Settings', 'mslsmenu' );
93
		add_settings_section( $sid, $label, null, $page );
94
95
		$args = array( 'msls_admin' => new MslsAdmin() );
96
97
		$label    = __( 'Theme Location', 'mslsmenu' );
98
		$callback = array( $this, 'theme_location' );
99
		add_settings_field( 'mslsmenu_theme_location', $label, $callback, $page, $sid, $args );
100
101
		$label    = __( 'Display', 'mslsmenu' );
102
		$callback = array( $this, 'display' );
103
		add_settings_field( 'mslsmenu_display', $label, $callback, $page, $sid, $args );
104
105
		$fields   = array(
106
			'mslsmenu_before_output' => __( 'Text/HTML before the list', 'mslsmenu' ),
107
			'mslsmenu_after_output'  => __( 'Text/HTML after the list', 'mslsmenu' ),
108
			'mslsmenu_before_item'   => __( 'Text/HTML before each item', 'mslsmenu' ),
109
			'mslsmenu_after_item'    => __( 'Text/HTML after each item', 'mslsmenu' ),
110
		);
111
		$callback = array( $this, 'input' );
112
		foreach ( $fields as $id => $label ) {
113
			$args['mslsmenu_input'] = $id;
114
			add_settings_field( $id, $label, $callback, $page, $sid, $args );
115
		}
116
	}
117
118
	/**
119
	 * Callback for mslsmenu_theme_location
120
	 *
121
	 * @param array $args
122
	 */
123
	function theme_location( $args ) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
124
		$locations = array();
125
		foreach ( get_nav_menu_locations() as $key => $value ) {
126
			$locations[ $key ] = $key;
127
		}
128
129
		$selected = (array) MslsOptions::instance()->mslsmenu_theme_location;
130
131
		$options = array(
132
			sprintf(
133
				'<option value="" %s>%s</option>',
134
				selected( true, ( in_array( '', $selected ) ), false ),
135
				__( '-- empty --', 'mslsmenu' )
136
			)
137
		);
138
		foreach ( $locations as $value => $description ) {
139
			$options[] = sprintf(
140
				'<option value="%s" %s>%s</option>',
141
				$value,
142
				selected( true, ( in_array( $value, $selected ) ), false ),
143
				$description
144
			);
145
		}
146
147
		printf( '<select id="%1$s" name="msls[%1$s][]" multiple="multiple">%2$s</select>', 'mslsmenu_theme_location', implode( '', $options ) );
148
	}
149
150
	/**
151
	 * Callback for mslsmenu_display
152
	 *
153
	 * @param array $args
154
	 */
155
	function display( $args ) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
156
		echo $args['msls_admin']->render_select( 'mslsmenu_display', MslsLink::get_types_description(), MslsOptions::instance()->mslsmenu_display );
157
	}
158
159
	/**
160
	 * Callback for mslsmenu text-inputs
161
	 *
162
	 * @param array $args
163
	 */
164
	function input( $args ) {
0 ignored issues
show
It is generally recommended to explicitly declare the visibility for methods.

Adding explicit visibility (private, protected, or public) is generally recommend to communicate to other developers how, and from where this method is intended to be used.

Loading history...
165
		echo $args['msls_admin']->render_input( $args['mslsmenu_input'] );
166
	}
167
168
}
169
170
add_action( 'plugins_loaded', array( 'MslsMenu', 'init' ) );
171