These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | define( 'YOURLS_ADMIN', true ); |
||
3 | require_once( dirname( __DIR__ ).'/includes/load-yourls.php' ); |
||
4 | yourls_maybe_require_auth(); |
||
5 | |||
6 | // Handle plugin administration pages |
||
7 | if( isset( $_GET['page'] ) && !empty( $_GET['page'] ) ) { |
||
8 | yourls_plugin_admin_page( $_GET['page'] ); |
||
9 | die(); |
||
10 | } |
||
11 | |||
12 | // Handle activation/deactivation of plugins |
||
13 | if( isset( $_GET['action'] ) ) { |
||
14 | |||
15 | // Check nonce |
||
16 | yourls_verify_nonce( 'manage_plugins', $_REQUEST['nonce'] ); |
||
17 | |||
18 | // Check plugin file is valid |
||
19 | if( isset( $_GET['plugin'] ) && yourls_validate_plugin_file( YOURLS_PLUGINDIR.'/'.$_GET['plugin'].'/plugin.php') ) { |
||
20 | |||
21 | global $ydb; |
||
22 | // Activate / Deactive |
||
23 | switch( $_GET['action'] ) { |
||
24 | View Code Duplication | case 'activate': |
|
0 ignored issues
–
show
|
|||
25 | $result = yourls_activate_plugin( $_GET['plugin'].'/plugin.php' ); |
||
26 | if( $result === true ) |
||
27 | yourls_redirect( yourls_admin_url( 'plugins.php?success=activated' ), 302 ); |
||
28 | |||
29 | break; |
||
30 | |||
31 | View Code Duplication | case 'deactivate': |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository.
Loading history...
|
|||
32 | $result = yourls_deactivate_plugin( $_GET['plugin'].'/plugin.php' ); |
||
33 | if( $result === true ) |
||
34 | yourls_redirect( yourls_admin_url( 'plugins.php?success=deactivated' ), 302 ); |
||
35 | |||
36 | break; |
||
37 | |||
38 | default: |
||
39 | $result = yourls__( 'Unsupported action' ); |
||
40 | break; |
||
41 | } |
||
42 | } else { |
||
43 | $result = yourls__( 'No plugin specified, or not a valid plugin' ); |
||
44 | } |
||
45 | |||
46 | yourls_add_notice( $result ); |
||
47 | } |
||
48 | |||
49 | // Handle message upon succesfull (de)activation |
||
50 | if( isset( $_GET['success'] ) && ( ( $_GET['success'] == 'activated' ) OR ( $_GET['success'] == 'deactivated' ) ) ) { |
||
51 | if( $_GET['success'] == 'activated' ) { |
||
52 | $message = yourls__( 'Plugin has been activated' ); |
||
53 | } elseif ( $_GET['success'] == 'deactivated' ) { |
||
54 | $message = yourls__( 'Plugin has been deactivated' ); |
||
55 | } |
||
56 | yourls_add_notice( $message ); |
||
57 | } |
||
58 | |||
59 | yourls_html_head( 'plugins', yourls__( 'Manage Plugins' ) ); |
||
60 | yourls_html_logo(); |
||
61 | yourls_html_menu(); |
||
62 | ?> |
||
63 | |||
64 | <main role="main"> |
||
65 | <h2><?php yourls_e( 'Plugins' ); ?></h2> |
||
66 | |||
67 | <?php |
||
68 | $plugins = (array)yourls_get_plugins(); |
||
69 | uasort( $plugins, 'yourls_plugins_sort_callback' ); |
||
70 | |||
71 | $count = count( $plugins ); |
||
72 | $plugins_count = sprintf( yourls_n( '%s plugin', '%s plugins', $count ), $count ); |
||
73 | $count_active = yourls_has_active_plugins(); |
||
74 | ?> |
||
75 | |||
76 | <p id="plugin_summary"><?php /* //translators: "you have '3 plugins' installed and '1' activated" */ yourls_se( 'You currently have <strong>%1$s</strong> installed, and <strong>%2$s</strong> activated', $plugins_count, $count_active ); ?></p> |
||
77 | |||
78 | <table id="main_table" class="tblSorter" cellpadding="0" cellspacing="1"> |
||
79 | <thead> |
||
80 | <tr> |
||
81 | <th><?php yourls_e( 'Plugin Name' ); ?></th> |
||
82 | <th><?php yourls_e( 'Version' ); ?></th> |
||
83 | <th><?php yourls_e( 'Description' ); ?></th> |
||
84 | <th><?php yourls_e( 'Author' ); ?></th> |
||
85 | <th><?php yourls_e( 'Action' ); ?></th> |
||
86 | </tr> |
||
87 | </thead> |
||
88 | <tbody> |
||
89 | <?php |
||
90 | |||
91 | $nonce = yourls_create_nonce( 'manage_plugins' ); |
||
92 | |||
93 | foreach( $plugins as $file=>$plugin ) { |
||
94 | |||
95 | // default fields to read from the plugin header |
||
96 | $fields = array( |
||
97 | 'name' => 'Plugin Name', |
||
98 | 'uri' => 'Plugin URI', |
||
99 | 'desc' => 'Description', |
||
100 | 'version' => 'Version', |
||
101 | 'author' => 'Author', |
||
102 | 'author_uri' => 'Author URI' |
||
103 | ); |
||
104 | |||
105 | // Loop through all default fields, get value if any and reset it |
||
106 | foreach( $fields as $field=>$value ) { |
||
107 | if( isset( $plugin[ $value ] ) ) { |
||
108 | $data[ $field ] = $plugin[ $value ]; |
||
109 | } else { |
||
110 | $data[ $field ] = '(no info)'; |
||
111 | } |
||
112 | unset( $plugin[$value] ); |
||
113 | } |
||
114 | |||
115 | $plugindir = trim( dirname( $file ), '/' ); |
||
116 | |||
117 | if( yourls_is_active_plugin( $file ) ) { |
||
118 | $class = 'active'; |
||
119 | $action_url = yourls_nonce_url( 'manage_plugins', yourls_add_query_arg( array('action' => 'deactivate', 'plugin' => $plugindir ) ) ); |
||
0 ignored issues
–
show
yourls_add_query_arg(arr...plugin' => $plugindir)) is of type string , but the function expects a boolean .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
Loading history...
|
|||
120 | $action_anchor = yourls__( 'Deactivate' ); |
||
121 | } else { |
||
122 | $class = 'inactive'; |
||
123 | $action_url = yourls_nonce_url( 'manage_plugins', yourls_add_query_arg( array('action' => 'activate', 'plugin' => $plugindir ) ) ); |
||
0 ignored issues
–
show
yourls_add_query_arg(arr...plugin' => $plugindir)) is of type string , but the function expects a boolean .
It seems like the type of the argument is not accepted by the function/method which you are calling. In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug. We suggest to add an explicit type cast like in the following example: function acceptsInteger($int) { }
$x = '123'; // string "123"
// Instead of
acceptsInteger($x);
// we recommend to use
acceptsInteger((integer) $x);
Loading history...
|
|||
124 | $action_anchor = yourls__( 'Activate' ); |
||
125 | } |
||
126 | |||
127 | // Other "Fields: Value" in the header? Get them too |
||
128 | if( $plugin ) { |
||
129 | foreach( $plugin as $extra_field=>$extra_value ) { |
||
130 | $data['desc'] .= "<br/>\n<em>$extra_field</em>: $extra_value"; |
||
131 | unset( $plugin[$extra_value] ); |
||
132 | } |
||
133 | } |
||
134 | |||
135 | $data['desc'] .= '<br/><small>' . yourls_s( 'plugin file location: %s', $file) . '</small>'; |
||
136 | |||
137 | printf( "<tr class='plugin %s'><td class='plugin_name'><a href='%s'>%s</a></td><td class='plugin_version'>%s</td><td class='plugin_desc'>%s</td><td class='plugin_author'><a href='%s'>%s</a></td><td class='plugin_actions actions'><a href='%s'>%s</a></td></tr>", |
||
138 | $class, $data['uri'], $data['name'], $data['version'], $data['desc'], $data['author_uri'], $data['author'], $action_url, $action_anchor |
||
139 | ); |
||
140 | |||
141 | } |
||
142 | ?> |
||
143 | </tbody> |
||
144 | </table> |
||
145 | |||
146 | <script type="text/javascript"> |
||
147 | yourls_defaultsort = 0; |
||
148 | yourls_defaultorder = 0; |
||
149 | <?php if ($count_active) { ?> |
||
150 | $('#plugin_summary').append('<span id="toggle_plugins">filter</span>'); |
||
151 | $('#toggle_plugins').css({'background':'transparent url("../images/filter.gif") top left no-repeat','display':'inline-block','text-indent':'-9999px','width':'16px','height':'16px','margin-left':'3px','cursor':'pointer'}) |
||
152 | .attr('title', '<?php echo yourls_esc_attr__( 'Toggle active/inactive plugins' ); ?>') |
||
153 | .click(function(){ |
||
154 | $('#main_table tr.inactive').toggle(); |
||
155 | }); |
||
156 | <?php } ?> |
||
157 | </script> |
||
158 | |||
159 | <p><?php yourls_e( 'If something goes wrong after you activate a plugin and you cannot use YOURLS or access this page, simply rename or delete its directory, or rename the plugin file to something different than <code>plugin.php</code>.' ); ?></p> |
||
160 | |||
161 | <h3><?php yourls_e( 'More plugins' ); ?></h3> |
||
162 | |||
163 | <p><?php yourls_e( 'For more plugins, head to the official <a href="http://yourls.org/pluginlist">Plugin list</a>.' ); ?></p> |
||
164 | </main> |
||
165 | |||
166 | <?php yourls_html_footer(); ?> |
||
167 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.