Activity Log - Version 1.0.1

Version Description

  • Added translate: German (de_DE) - Thanks to Robert Harm
  • Added translate: Hebrew (he_IL)
  • Plugin name instead of file name on activation/deactivation
  • New Hooks:
  • A widget is being deleted from a sidebar
  • A plugin is being changed
  • Theme Customizer (Thanks to Ohad Raz)
Download this release

Release Info

Developer KingYes
Plugin Icon 128x128 Activity Log
Version 1.0.1
Comparing to
See all releases

Version 1.0.1

README.md ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [WordPress ARYO Activity Log](http://wordpress.org/plugins/aryo-activity-log/)
2
+ ===============
3
+
4
+ Get aware of the activities that are taking place on your dashboard! Weather a post was deleted or a plugin was activated, it’s all there for you to see.
5
+
6
+
7
+ We all know that it’s relatively easy to analyze what your visitors are looking for while browsing your site. But there is really no easy way to know what registered users (say, with an Administrator account or even Editors) are doing on the dashboard of your site. How can you know if a post was deleted? or if a plugin was activated/deactivated? or if the active theme was changed?
8
+ If you have tens of users or more, you really can’t know who did it. This plugin tries to solve this issue by tracking what users do on the dashboard of your WordPress site.
9
+
10
+ __As of this moment, the plugin logs things when:__
11
+
12
+
13
+ Users
14
+ * A user logs in
15
+ * A user logs out
16
+ * A login has failed due to incorrect credentials
17
+ * A user updates their profile
18
+ * A new user account is being registered
19
+ * An existing user account is being deleted
20
+
21
+ Plugins
22
+ * A plugin is being activated
23
+ * A plugin is being deactivated
24
+ * A plugin is being changed
25
+
26
+ Themes
27
+ * A theme is being changed (Editor and Customizer)
28
+
29
+ Content
30
+ * A new post is being created
31
+ * A post is being updated
32
+ * A post changes status (draft, pending review, publish)
33
+ * A post is being deleted
34
+
35
+ Media
36
+ * An attachment is being uploaded
37
+ * An attachment is being edited
38
+ * An attachment is being deleted
39
+
40
+ Widgets
41
+ * A widget is being added to a sidebar
42
+ * A widget is being deleted from a sidebar
43
+
44
+
45
+ __Translators:__
46
+
47
+ * German (de_DE) - [Robert Harm](http://www.mapsmarker.com/)
48
+ * Hebrew (he_IL) - [ARYO Digital](http://www.aryodigital.com/)
49
+
50
+
51
+
52
+ The plugin does not require any kind of setup. It works out of the box (and that’s why we love it too).
53
+
54
+ We’re planning to add a lot more features in the upcoming releases. If you think we’re missing something big time, please post your suggestions in the plugin’s forum.
55
+
56
+
57
+
58
+ Developed by [Yakir Sitbon](http://www.yakirs.net/) and [Ariel Klikstein](http://www.arielk.net/) and [Maor Chasen](http://maorchasen.com/).
59
+
60
+ Brought to you by [ARYO Digital](http://www.aryodigital.com/).
61
+
62
+
63
+ ## Screenshots
64
+
65
+ Here are some screenshots of this awesome plugin.
66
+
67
+ ![Main Panel](https://raw.github.com/KingYes/wordpress-aryo-activity-log/master/screenshot-1.jpg)
68
+ ![Settings Page](https://raw.github.com/KingYes/wordpress-aryo-activity-log/master/screenshot-2.jpg)
69
+ ![Settings Page](https://raw.github.com/KingYes/wordpress-aryo-activity-log/master/screenshot-3.jpg)
aryo-activity-log.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ Plugin Name: ARYO Activity Log
4
+ Plugin URI: http://wordpress.org/extend/plugins/activity-log
5
+ Description: Get aware of the activities that are taking place on your dashboard! Weather a post was deleted or a plugin was activated, it’s all these for you to see.
6
+ Author: Yakir Sitbon, Maor Chasen, Ariel Klikstein
7
+ Version: 1.0.1
8
+ Author URI: http://www.aryodigital.com
9
+ License: GPLv2 or later
10
+
11
+
12
+ This program is free software; you can redistribute it and/or
13
+ modify it under the terms of the GNU General Public License
14
+ as published by the Free Software Foundation; either version 2
15
+ of the License, or (at your option) any later version.
16
+
17
+ This program is distributed in the hope that it will be useful,
18
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
19
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20
+ GNU General Public License for more details.
21
+
22
+ You should have received a copy of the GNU General Public License
23
+ along with this program; if not, write to the Free Software
24
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
25
+ */
26
+
27
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
28
+
29
+ define( 'ACTIVITY_LOG_BASE', plugin_basename( __FILE__ ) );
30
+
31
+ include( 'classes/class-maintenance.php' );
32
+ include( 'classes/class-aal-activity-log-list-table.php' );
33
+ include( 'classes/class-settings.php' );
34
+ include( 'classes/class-admin-ui.php' );
35
+ include( 'classes/class-api.php' );
36
+ include( 'classes/class-hooks.php' );
37
+
38
+ // Probably we should put this in a separate file
39
+ class AAL_Main {
40
+
41
+ /**
42
+ * @var AAL_Admin_Ui
43
+ */
44
+ public $ui;
45
+
46
+ /**
47
+ * @var AAL_Hooks
48
+ */
49
+ public $hooks;
50
+
51
+ /**
52
+ * @var AAL_Settings
53
+ */
54
+ public $settings;
55
+
56
+ public function load_textdomain() {
57
+ load_plugin_textdomain( 'aryo-aal', false, basename( dirname( __FILE__ ) ) . '/language' );
58
+ }
59
+
60
+ public function __construct() {
61
+ global $wpdb;
62
+
63
+ $this->ui = new AAL_Admin_Ui();
64
+ $this->hooks = new AAL_Hooks();
65
+ $this->settings = new AAL_Settings();
66
+
67
+ // set up our DB name
68
+ $wpdb->activity_log = $wpdb->prefix . 'aryo_activity_log';
69
+
70
+ add_action( 'plugins_loaded', array( &$this, 'load_textdomain' ) );
71
+ }
72
+
73
+ }
74
+ global $aal_main_class;
75
+ $aal_main_class = new AAL_Main();
76
+
77
+ // EOF
classes/class-aal-activity-log-list-table.php ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
+
5
+ if ( ! class_exists( 'WP_List_Table' ) )
6
+ require_once( ABSPATH . 'wp-admin/includes/class-wp-list-table.php' );
7
+
8
+
9
+ class AAL_Activity_Log_List_Table extends WP_List_Table {
10
+
11
+ protected $_roles = array();
12
+
13
+ protected $_caps = array();
14
+
15
+ protected function _get_where_by_role() {
16
+ $allow_modules = array();
17
+
18
+ $user = get_user_by( 'id', get_current_user_id() );
19
+ if ( ! $user )
20
+ wp_die( 'No allowed here.' );
21
+
22
+ foreach ( $this->_roles as $key => $role ) {
23
+ if ( current_user_can( $key ) ) {
24
+ $allow_modules = array_merge( $allow_modules, $role );
25
+ }
26
+ }
27
+
28
+ if ( empty( $allow_modules ) )
29
+ wp_die( 'No allowed here.' );
30
+
31
+ $allow_modules = array_unique( $allow_modules );
32
+
33
+ $where = array();
34
+ foreach ( $allow_modules as $type )
35
+ $where[] .= '`object_type` = \'' . $type . '\'';
36
+
37
+ $user_cap = strtolower( key( $user->caps ) );
38
+ $allow_caps = $where_caps = array();
39
+
40
+ foreach ( $this->_caps as $key => $cap_allow ) {
41
+ if ( $key === $user_cap ) {
42
+ $allow_caps = array_merge( $allow_caps, $cap_allow );
43
+ break;
44
+ }
45
+ }
46
+
47
+ if ( empty( $allow_caps ) )
48
+ wp_die( 'No allowed here.' );
49
+
50
+ $allow_caps = array_unique( $allow_caps );
51
+ foreach ( $allow_caps as $cap )
52
+ $where_caps[] .= '`user_caps` = \'' . $cap . '\'';
53
+
54
+ return 'AND (' . implode( ' OR ', $where ) . ') AND (' . implode( ' OR ', $where_caps ) . ')';
55
+ }
56
+
57
+ public function __construct() {
58
+ $this->_roles = array(
59
+ // admin
60
+ 'manage_options' => array( 'Post', 'User', 'Options', 'Attachment', 'Plugin', 'Widget', 'Theme' ),
61
+ // editor
62
+ 'edit_pages' => array( 'Post', 'Attachment' ),
63
+ );
64
+
65
+ $this->_caps = array(
66
+ 'administrator' => array( 'administrator', 'editor', 'author', 'guest' ),
67
+ 'editor' => array( 'editor', 'author', 'guest' ),
68
+ 'author' => array( 'author', 'guest' ),
69
+ );
70
+
71
+ parent::__construct( array(
72
+ 'singular' => 'activity',
73
+ ) );
74
+ }
75
+
76
+ public function get_columns() {
77
+ $columns = array(
78
+ 'type' => _x( 'Type', 'main table', 'aryo-aal' ),
79
+ 'name' => _x( 'Name', 'main table', 'aryo-aal' ),
80
+ 'action' => _x( 'Action', 'main table', 'aryo-aal' ),
81
+ 'date' => _x( 'Date', 'main table', 'aryo-aal' ),
82
+ );
83
+
84
+ return $columns;
85
+ }
86
+
87
+ public function column_default( $item, $column_name ) {
88
+ $return = '';
89
+
90
+ switch ( $column_name ) {
91
+ case 'action' :
92
+ $return = __( $item->action, 'aryo-aal' );
93
+ break;
94
+ case 'date' :
95
+ $return = sprintf( '<strong>' . __( '%s ago', 'aryo-aal' ) . '</strong>', human_time_diff( $item->hist_time, current_time( 'timestamp' ) ) );
96
+ $return .= '<br />' . date( 'd/m/Y H:i', $item->hist_time );
97
+ break;
98
+ default :
99
+ if ( isset( $item->$column_name ) )
100
+ $return = $item->$column_name;
101
+ }
102
+
103
+ return $return;
104
+ }
105
+
106
+ public function column_type( $item ) {
107
+ $return = __( $item->object_type, 'aryo-aal' );
108
+
109
+ if ( ! empty( $item->object_subtype ) ) {
110
+ $pt = get_post_type_object( $item->object_subtype );
111
+ $label = ! empty( $pt->label ) ? $pt->label : $item->object_subtype;
112
+ $return .= sprintf( '<span class="aal-pt" title="%s">%s</span>', $label, $item->object_subtype );
113
+ }
114
+
115
+ $user = false;
116
+ $return .= '<br />' . __( 'by ', 'aryo-aal' );
117
+ if ( ! empty( $item->user_id ) )
118
+ $user = get_user_by( 'id', $item->user_id );
119
+
120
+ if ( $user )
121
+ $return .= '<a href="user-edit.php?user_id=' . absint( $user->ID ) . '">' . esc_html( $user->user_login ) . '</a>';
122
+ else
123
+ $return .= __( 'Guest', 'aryo-aal' );
124
+
125
+ $return .= ' (<code>' . $item->hist_ip . '</code>)';
126
+
127
+ return $return;
128
+ }
129
+
130
+ public function column_name( $item ) {
131
+ switch ( $item->object_type ) {
132
+ case 'Post' :
133
+ $return = '<a href="post.php?post=' . $item->object_id . '&action=edit">' . $item->object_name . '</a>';
134
+ break;
135
+
136
+ default :
137
+ $return = $item->object_name;
138
+ }
139
+
140
+ return $return;
141
+ }
142
+
143
+ public function extra_tablenav( $which ) {
144
+ global $wpdb;
145
+
146
+ if ( 'top' !== $which )
147
+ return;
148
+
149
+ echo '<div class="alignleft actions">';
150
+
151
+ $users = $wpdb->get_results( $wpdb->prepare(
152
+ 'SELECT * FROM `%1$s`
153
+ WHERE 1 = 1
154
+ ' . $this->_get_where_by_role() . '
155
+ GROUP BY `user_id`
156
+ ORDER BY `user_id`
157
+ ;',
158
+ $wpdb->activity_log
159
+ ) );
160
+
161
+ if ( $users ) {
162
+ if ( ! isset( $_REQUEST['usershow'] ) )
163
+ $_REQUEST['usershow'] = '';
164
+
165
+ $output = array();
166
+ foreach ( $users as $_user ) {
167
+ if ( 0 === (int) $_user->user_id ) {
168
+ $output[0] = __( 'Guest', 'aryo-aal' );
169
+ continue;
170
+ }
171
+
172
+ $user = get_user_by( 'id', $_user->user_id );
173
+ if ( $user )
174
+ $output[ $user->ID ] = $user->user_nicename;
175
+ }
176
+
177
+ if ( ! empty( $output ) ) {
178
+ echo '<select name="usershow" id="hs-filter-usershow">';
179
+ printf( '<option value="">%s</option>', __( 'All Users', 'aryo-aal' ) );
180
+ foreach ( $output as $key => $value ) {
181
+ printf( '<option value="%s"%s>%s</option>', $key, selected( $_REQUEST['usershow'], $key, false ), $value );
182
+ }
183
+ echo '</select>';
184
+ }
185
+ }
186
+
187
+ $types = $wpdb->get_results( $wpdb->prepare(
188
+ 'SELECT * FROM `%1$s`
189
+ WHERE 1 = 1
190
+ ' . $this->_get_where_by_role() . '
191
+ GROUP BY `object_type`
192
+ ORDER BY `object_type`
193
+ ;',
194
+ $wpdb->activity_log
195
+ ) );
196
+
197
+ if ( $types ) {
198
+ if ( ! isset( $_REQUEST['typeshow'] ) )
199
+ $_REQUEST['typeshow'] = '';
200
+
201
+ $output = array();
202
+ foreach ( $types as $type )
203
+ $output[] = sprintf( '<option value="%1$s"%2$s>%1$s</option>', $type->object_type, selected( $_REQUEST['typeshow'], $type->object_type, false ) );
204
+
205
+ echo '<select name="typeshow" id="hs-filter-typeshow">';
206
+ printf( '<option value="">%s</option>', __( 'All Types', 'aryo-aal' ) );
207
+ echo implode( '', $output );
208
+ echo '</select>';
209
+ }
210
+
211
+ if ( $users || $types )
212
+ submit_button( __( 'Filter', 'aryo-aal' ), 'button', false, false, array( 'id' => 'activity-query-submit' ) );
213
+
214
+ echo '</div>';
215
+ }
216
+
217
+ public function prepare_items() {
218
+ global $wpdb;
219
+
220
+ /** @todo: add setting page with this value. */
221
+ $items_per_page = 20;
222
+ $this->_column_headers = array( $this->get_columns(), array(), $this->get_sortable_columns() );
223
+ $where = ' WHERE 1=1';
224
+
225
+ if ( ! empty( $_REQUEST['typeshow'] ) ) {
226
+ $where .= $wpdb->prepare( ' AND `object_type` = \'%s\'', $_REQUEST['typeshow'] );
227
+ }
228
+
229
+ if ( isset( $_REQUEST['usershow'] ) && '' !== $_REQUEST['usershow'] ) {
230
+ $where .= $wpdb->prepare( ' AND `user_id` = %d', $_REQUEST['usershow'] );
231
+ }
232
+
233
+ $offset = ( $this->get_pagenum() - 1 ) * $items_per_page;
234
+
235
+ $total_items = $wpdb->get_var( $wpdb->prepare(
236
+ 'SELECT COUNT(`histid`) FROM `%1$s`
237
+ ' . $where . '
238
+ ' . $this->_get_where_by_role(),
239
+ $wpdb->activity_log,
240
+ $offset,
241
+ $items_per_page
242
+ ) );
243
+
244
+ $this->items = $wpdb->get_results( $wpdb->prepare(
245
+ 'SELECT * FROM `%1$s`
246
+ ' . $where . '
247
+ ' . $this->_get_where_by_role() . '
248
+ ORDER BY `hist_time` DESC
249
+ LIMIT %2$d, %3$d;',
250
+ $wpdb->activity_log,
251
+ $offset,
252
+ $items_per_page
253
+ ) );
254
+
255
+ $this->set_pagination_args( array(
256
+ 'total_items' => $total_items,
257
+ 'per_page' => $items_per_page,
258
+ 'total_pages' => ceil( $total_items / $items_per_page )
259
+ ) );
260
+ }
261
+
262
+ }
classes/class-admin-ui.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
+
5
+ class AAL_Admin_Ui {
6
+
7
+ public function create_admin_menu() {
8
+ add_dashboard_page( __( 'Activity Log', 'aryo-aal' ), __( 'Activity Log', 'aryo-aal' ), 'edit_pages', 'activity_log_page', array( &$this, 'activity_log_page_func' ) );
9
+ }
10
+
11
+ public function activity_log_page_func() {
12
+ $activity_table = new AAL_Activity_Log_List_Table();
13
+ $activity_table->prepare_items();
14
+
15
+ ?>
16
+ <div class="wrap">
17
+ <?php screen_icon(); ?>
18
+ <h2><?php _e( 'Activity Log', 'aryo-aal' ); ?></h2>
19
+
20
+ <form id="activity-filter" method="get">
21
+ <input type="hidden" name="page" value="<?php echo $_REQUEST['page'] ?>" />
22
+ <?php $activity_table->display(); ?>
23
+ </form>
24
+ </div>
25
+
26
+ <?php /* @todo move to a separate file */ ?>
27
+ <style>
28
+
29
+ .aal-pt {
30
+ color: white;
31
+ padding: 1px 5px;
32
+ margin-left: 5px;
33
+ font-size: 0.8em;
34
+ border-radius: 3px;
35
+ background: #1e5799;
36
+ font-family: Consolas,Monaco,monospace;
37
+ background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 100%);
38
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8));
39
+ background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
40
+ background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
41
+ background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
42
+ background: linear-gradient(to bottom, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%);
43
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );
44
+ }
45
+
46
+ </style>
47
+ <?php
48
+ }
49
+
50
+ public function __construct() {
51
+ add_action( 'admin_menu', array( &$this, 'create_admin_menu' ) );
52
+ }
53
+ }
classes/class-api.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
+
5
+ class AAL_API {
6
+
7
+ protected function _delete_old_items() {
8
+ global $wpdb;
9
+
10
+ $logs_lifespan = absint( AAL_Settings::get_option( 'logs_lifespan' ) );
11
+ if ( empty( $logs_lifespan ) )
12
+ return;
13
+
14
+ $wpdb->query( $wpdb->prepare(
15
+ 'DELETE FROM `%1$s`
16
+ WHERE `hist_time` < %2$d',
17
+ $wpdb->activity_log,
18
+ strtotime( '-' . $logs_lifespan . ' days', current_time( 'timestamp' ) )
19
+ ) );
20
+ }
21
+
22
+ public static function insert( $args ) {
23
+ global $wpdb;
24
+
25
+ $args = wp_parse_args( $args, array(
26
+ 'action' => '',
27
+ 'object_type' => '',
28
+ 'object_subtype' => '',
29
+ 'object_name' => '',
30
+ 'object_id' => '',
31
+ 'hist_ip' => $_SERVER['REMOTE_ADDR'],
32
+ 'hist_time' => current_time( 'timestamp' ),
33
+ ) );
34
+
35
+ $user = get_user_by( 'id', get_current_user_id() );
36
+ if ( $user ) {
37
+ $args['user_caps'] = strtolower( key( $user->caps ) );
38
+ if ( empty( $args['user_id'] ) )
39
+ $args['user_id'] = $user->ID;
40
+ } else {
41
+ $args['user_caps'] = 'guest';
42
+ if ( empty( $args['user_id'] ) )
43
+ $args['user_id'] = 0;
44
+ }
45
+
46
+ $wpdb->insert( $wpdb->activity_log,
47
+ array(
48
+ 'action' => $args['action'],
49
+ 'object_type' => $args['object_type'],
50
+ 'object_subtype' => $args['object_subtype'],
51
+ 'object_name' => $args['object_name'],
52
+ 'object_id' => $args['object_id'],
53
+ 'user_id' => $args['user_id'],
54
+ 'user_caps' => $args['user_caps'],
55
+ 'hist_ip' => $args['hist_ip'],
56
+ 'hist_time' => $args['hist_time'],
57
+ ),
58
+ array( "%s", "%s", "%s", "%s", "%d", "%d", "%s", "%s", "%d" )
59
+ );
60
+
61
+ // Remove old items.
62
+ self::_delete_old_items();
63
+ do_action( 'aal_insert_log', $args );
64
+ }
65
+
66
+ }
67
+
68
+ function aal_insert_log( $args = array() ) {
69
+ AAL_API::insert( $args );
70
+ }
classes/class-hooks.php ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
+
5
+ class AAL_Hooks {
6
+
7
+ protected function _add_log_attachment( $action, $attachment_id ) {
8
+ $post = get_post( $attachment_id );
9
+
10
+ aal_insert_log( array(
11
+ 'action' => $action,
12
+ 'object_type' => 'Attachment',
13
+ 'object_subtype' => $post->post_type,
14
+ 'object_id' => $attachment_id,
15
+ 'object_name' => get_the_title( $post->ID ),
16
+ ) );
17
+ }
18
+
19
+ protected function _add_log_plugin( $action, $plugin_name ) {
20
+ // Get plugin name if is a path
21
+ if ( false !== strpos( $plugin_name, '/' ) ) {
22
+ $plugin_dir = explode( '/', $plugin_name );
23
+ $plugin_data = array_shift( array_values( get_plugins( '/' . $plugin_dir[0] ) ) );
24
+ $plugin_name = $plugin_data['Name'];
25
+ }
26
+
27
+ aal_insert_log( array(
28
+ 'action' => $action,
29
+ 'object_type' => 'Plugin',
30
+ 'object_id' => 0,
31
+ 'object_name' => $plugin_name,
32
+ ) );
33
+ }
34
+
35
+ public function init() {
36
+ // User
37
+ add_filter( 'wp_login_failed', array( &$this, 'hooks_wrong_password' ) );
38
+ add_action( 'wp_login', array( &$this, 'hooks_wp_login' ), 10, 2 );
39
+ add_action( 'wp_logout', array( &$this, 'hooks_wp_logout' ) );
40
+ add_action( 'delete_user', array( &$this, 'hooks_delete_user' ) );
41
+ add_action( 'user_register', array( &$this, 'hooks_user_register' ) );
42
+ add_action( 'profile_update', array( &$this, 'hooks_profile_update' ) );
43
+
44
+ // Plugins
45
+ add_action( 'activated_plugin', array( &$this, 'hooks_activated_plugin' ) );
46
+ add_action( 'deactivated_plugin', array( &$this, 'hooks_deactivated_plugin' ) );
47
+ add_filter( 'wp_redirect', array( &$this, 'hooks_plugin_modify' ), 10, 2 );
48
+
49
+ // Theme
50
+ add_filter( 'wp_redirect', array( &$this, 'hooks_theme_modify' ), 10, 2 );
51
+
52
+ // Theme customizer
53
+ add_action( 'customize_save', array( &$this, 'hooks_theme_customizer_modified' ) );
54
+ //add_action( 'customize_preview_init', array( &$this, 'hooks_theme_customizer_modified' ) );
55
+
56
+ // Options
57
+ add_action( 'updated_option', array( &$this, 'hooks_updated_option' ), 10, 3 );
58
+
59
+ }
60
+
61
+ public function admin_init() {
62
+ // Posts
63
+ add_action( 'transition_post_status', array( &$this, 'hooks_transition_post_status' ), 10, 3 );
64
+ add_action( 'delete_post', array( &$this, 'hooks_delete_post' ) );
65
+
66
+ // Attachments
67
+ add_action( 'add_attachment', array( &$this, 'hooks_add_attachment' ) );
68
+ add_action( 'edit_attachment', array( &$this, 'hooks_edit_attachment' ) );
69
+ add_action( 'delete_attachment', array( &$this, 'hooks_delete_attachment' ) );
70
+
71
+ // Widgets
72
+ add_filter( 'widget_update_callback', array( &$this, 'hooks_widget_update_callback' ), 9999, 4 );
73
+ add_filter( 'sidebar_admin_setup', array( &$this, 'hooks_widget_delete' ) ); // Widget delete.
74
+ }
75
+
76
+ public function hooks_delete_attachment( $attachment_id ) {
77
+ $this->_add_log_attachment( 'deleted', $attachment_id );
78
+ }
79
+
80
+ public function hooks_edit_attachment( $attachment_id ) {
81
+ $this->_add_log_attachment( 'updated', $attachment_id );
82
+ }
83
+
84
+ public function hooks_add_attachment( $attachment_id ) {
85
+ $this->_add_log_attachment( 'added', $attachment_id );
86
+ }
87
+
88
+ public function hooks_deactivated_plugin( $plugin_name ) {
89
+ $this->_add_log_plugin( 'deactivated', $plugin_name );
90
+ }
91
+
92
+ public function hooks_activated_plugin( $plugin_name ) {
93
+ $this->_add_log_plugin( 'activated', $plugin_name );
94
+ }
95
+
96
+ public function hooks_profile_update( $user_id ) {
97
+ $user = get_user_by( 'id', $user_id );
98
+
99
+ aal_insert_log( array(
100
+ 'action' => 'updated',
101
+ 'object_type' => 'User',
102
+ 'object_id' => $user->ID,
103
+ 'object_name' => $user->user_nicename,
104
+ ) );
105
+ }
106
+
107
+ public function hooks_user_register( $user_id ) {
108
+ $user = get_user_by( 'id', $user_id );
109
+
110
+ aal_insert_log( array(
111
+ 'action' => 'created',
112
+ 'object_type' => 'User',
113
+ 'object_id' => $user->ID,
114
+ 'object_name' => $user->user_nicename,
115
+ ) );
116
+ }
117
+
118
+ public function hooks_delete_user( $user_id ) {
119
+ $user = get_user_by( 'id', $user_id );
120
+
121
+ aal_insert_log( array(
122
+ 'action' => 'deleted',
123
+ 'object_type' => 'User',
124
+ 'object_id' => $user->ID,
125
+ 'object_name' => $user->user_nicename,
126
+ ) );
127
+ }
128
+
129
+ public function hooks_wrong_password( $username ) {
130
+ aal_insert_log( array(
131
+ 'action' => 'wrong_password',
132
+ 'object_type' => 'User',
133
+ 'user_id' => 0,
134
+ 'object_id' => 0,
135
+ 'object_name' => $username,
136
+ ) );
137
+ }
138
+
139
+ public function hooks_wp_login( $user_login, $user ) {
140
+ aal_insert_log( array(
141
+ 'action' => 'logged_in',
142
+ 'object_type' => 'User',
143
+ 'user_id' => $user->ID,
144
+ 'object_id' => $user->ID,
145
+ 'object_name' => $user->user_nicename,
146
+ ) );
147
+ }
148
+
149
+ public function hooks_wp_logout() {
150
+ $user = wp_get_current_user();
151
+
152
+ aal_insert_log( array(
153
+ 'action' => 'logged_out',
154
+ 'object_type' => 'User',
155
+ 'user_id' => $user->ID,
156
+ 'object_id' => $user->ID,
157
+ 'object_name' => $user->user_nicename,
158
+ ) );
159
+ }
160
+
161
+ public function hooks_transition_post_status( $new_status, $old_status, $post ) {
162
+ $action = '';
163
+
164
+ if ( 'auto-draft' === $old_status && ( 'auto-draft' !== $new_status && 'inherit' !== $new_status ) ) {
165
+ // page created
166
+ $action = 'created';
167
+ }
168
+ elseif ( 'auto-draft' === $new_status || ( 'new' === $old_status && 'inherit' === $new_status ) ) {
169
+ // nvm.. ignore it.
170
+ return;
171
+ }
172
+ elseif ( 'trash' === $new_status ) {
173
+ // page was deleted.
174
+ $action = 'deleted';
175
+ }
176
+ else {
177
+ // page updated. i guess.
178
+ $action = 'updated';
179
+ }
180
+
181
+ if ( wp_is_post_revision( $post->ID ) )
182
+ return;
183
+
184
+ aal_insert_log( array(
185
+ 'action' => $action,
186
+ 'object_type' => 'Post',
187
+ 'object_subtype' => $post->post_type,
188
+ 'object_id' => $post->ID,
189
+ 'object_name' => _draft_or_post_title( $post->ID ),
190
+ ) );
191
+ }
192
+
193
+ public function hooks_delete_post( $post_id ) {
194
+ if ( wp_is_post_revision( $post_id ) )
195
+ return;
196
+
197
+ $post = get_post( $post_id );
198
+
199
+ if ( in_array( $post->post_status, array( 'auto-draft', 'inherit' ) ) )
200
+ return;
201
+
202
+ aal_insert_log( array(
203
+ 'action' => 'deleted',
204
+ 'object_type' => 'Post',
205
+ 'object_subtype' => $post->post_type,
206
+ 'object_id' => $post->ID,
207
+ 'object_name' => _draft_or_post_title( $post->ID ),
208
+ ) );
209
+ }
210
+
211
+ public function hooks_widget_update_callback( $instance, $new_instance, $old_instance, WP_Widget $widget ) {
212
+ $aal_args = array(
213
+ 'action' => 'updated',
214
+ 'object_type' => 'Widget',
215
+ 'object_subtype' => 'sidebar_unknown',
216
+ 'object_id' => 0,
217
+ 'object_name' => $widget->id_base,
218
+ );
219
+
220
+ if ( ! empty( $_REQUEST['sidebar'] ) )
221
+ $aal_args['object_subtype'] = strtolower( $_REQUEST['sidebar'] );
222
+
223
+ /** @todo: find any way to widget deleted detected */
224
+ /*if ( isset( $_REQUEST['delete_widget'] ) && '1' === $_REQUEST['delete_widget'] ) {
225
+ $aal_args['action'] = 'deleted';
226
+ }*/
227
+
228
+ aal_insert_log( $aal_args );
229
+
230
+ // We are need return the instance, for complete the filter.
231
+ return $instance;
232
+ }
233
+
234
+ public function hooks_widget_delete() {
235
+ // A reference: http://grinninggecko.com/hooking-into-widget-delete-action-in-wordpress/
236
+ if ( 'post' == strtolower( $_SERVER['REQUEST_METHOD'] ) && ! empty( $_REQUEST['widget-id'] ) ) {
237
+ if ( isset( $_REQUEST['delete_widget'] ) && 1 === (int) $_REQUEST['delete_widget'] ) {
238
+ aal_insert_log( array(
239
+ 'action' => 'deleted',
240
+ 'object_type' => 'Widget',
241
+ 'object_subtype' => strtolower( $_REQUEST['sidebar'] ),
242
+ 'object_id' => 0,
243
+ 'object_name' => $_REQUEST['id_base'],
244
+ ) );
245
+ }
246
+ }
247
+ }
248
+
249
+ public function hooks_theme_modify( $location, $status ) {
250
+ if ( false !== strpos( $location, 'theme-editor.php?file=' ) ) {
251
+ if ( ! empty( $_POST ) && 'update' === $_POST['action'] ) {
252
+ $aal_args = array(
253
+ 'action' => 'file_updated',
254
+ 'object_type' => 'Theme',
255
+ 'object_subtype' => 'theme_unknown',
256
+ 'object_id' => 0,
257
+ 'object_name' => 'file_unknown',
258
+ );
259
+
260
+ if ( ! empty( $_POST['file'] ) )
261
+ $aal_args['object_name'] = $_POST['file'];
262
+
263
+ if ( ! empty( $_POST['theme'] ) )
264
+ $aal_args['object_subtype'] = $_POST['theme'];
265
+
266
+ aal_insert_log( $aal_args );
267
+ }
268
+ }
269
+
270
+ // We are need return the instance, for complete the filter.
271
+ return $location;
272
+ }
273
+
274
+ public function hooks_plugin_modify( $location, $status ) {
275
+ if ( false !== strpos( $location, 'plugin-editor.php' ) ) {
276
+ if ( ( ! empty( $_POST ) && 'update' === $_REQUEST['action'] ) ) {
277
+ $aal_args = array(
278
+ 'action' => 'file_updated',
279
+ 'object_type' => 'Plugin',
280
+ 'object_subtype' => 'plugin_unknown',
281
+ 'object_id' => 0,
282
+ 'object_name' => 'file_unknown',
283
+ );
284
+
285
+ if ( ! empty( $_REQUEST['file'] ) ) {
286
+ $aal_args['object_name'] = $_REQUEST['file'];
287
+ // Get plugin name
288
+ $plugin_dir = explode( '/', $_REQUEST['file'] );
289
+ $plugin_data = array_shift( array_values( get_plugins( '/' . $plugin_dir[0] ) ) );
290
+
291
+ $aal_args['object_subtype'] = $plugin_data['Name'];
292
+ }
293
+ aal_insert_log( $aal_args );
294
+ }
295
+ }
296
+
297
+ // We are need return the instance, for complete the filter.
298
+ return $location;
299
+ }
300
+
301
+ public function hooks_theme_customizer_modified( $obj ) {
302
+ $aal_args = array(
303
+ 'action' => 'updated',
304
+ 'object_type' => 'Theme',
305
+ 'object_subtype' => $obj->theme()->display( 'Name' ),
306
+ 'object_id' => 0,
307
+ 'object_name' => 'theme customizer',
308
+ );
309
+
310
+ if ( 'customize_preview_init' === current_filter() )
311
+ $aal_args['action'] = 'accessed';
312
+
313
+ aal_insert_log( $aal_args );
314
+ }
315
+
316
+ public function hooks_updated_option( $option, $oldvalue, $_newvalue ) {
317
+ $whitelist_options = apply_filters( 'aal_whitelist_options', array(
318
+ 'siteurl',
319
+ 'home',
320
+ 'blogname',
321
+ 'blogdescription',
322
+ 'admin_email',
323
+ 'avatar_default',
324
+ ) );
325
+
326
+ if ( ! in_array( $option, $whitelist_options ) )
327
+ return;
328
+
329
+ // TODO: need to think about save old & new values.
330
+ aal_insert_log( array(
331
+ 'action' => 'updated',
332
+ 'object_type' => 'Options',
333
+ 'object_name' => $option,
334
+ ) );
335
+ }
336
+
337
+ public function __construct() {
338
+ add_action( 'init', array( &$this, 'init' ) );
339
+ add_action( 'admin_init', array( &$this, 'admin_init' ) );
340
+ }
341
+ }
classes/class-maintenance.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
+
5
+ class AAL_Maintenance {
6
+
7
+ public static function activate() {
8
+ global $wpdb;
9
+
10
+ $sql = "CREATE TABLE IF NOT EXISTS `{$wpdb->activity_log}` (
11
+ `histid` int(11) NOT NULL AUTO_INCREMENT,
12
+ `user_caps` varchar(70) NOT NULL DEFAULT 'guest',
13
+ `action` varchar(255) NOT NULL,
14
+ `object_type` varchar(255) NOT NULL,
15
+ `object_subtype` varchar(255) NOT NULL DEFAULT '',
16
+ `object_name` varchar(255) NOT NULL,
17
+ `object_id` int(11) NOT NULL DEFAULT '0',
18
+ `user_id` int(11) NOT NULL DEFAULT '0',
19
+ `hist_ip` varchar(55) NOT NULL DEFAULT '127.0.0.1',
20
+ `hist_time` int(11) NOT NULL DEFAULT '0',
21
+ PRIMARY KEY (`histid`)
22
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;";
23
+
24
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
25
+ dbDelta( $sql );
26
+
27
+ update_option( 'activity_log_db_version', '1.0' );
28
+ }
29
+
30
+ public static function uninstall() {
31
+ global $wpdb;
32
+
33
+ $wpdb->query( "DROP TABLE IF EXISTS $wpdb->activity_log" );
34
+
35
+ delete_option( 'activity_log_db_version' );
36
+ }
37
+ }
38
+
39
+ register_activation_hook( ACTIVITY_LOG_BASE, array( 'AAL_Maintenance', 'activate' ) );
40
+ register_uninstall_hook( ACTIVITY_LOG_BASE, array( 'AAL_Maintenance', 'uninstall' ) );
classes/class-settings.php ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
4
+
5
+ class AAL_Settings {
6
+
7
+ private $hook;
8
+ private $slug;
9
+
10
+ public function __construct() {
11
+ add_action( 'admin_menu', array( &$this, 'action_admin_menu' ) );
12
+ add_action( 'admin_init', array( &$this, 'register_settings' ) );
13
+ }
14
+
15
+ /**
16
+ * Register the settings page
17
+ *
18
+ * @since 1.0
19
+ */
20
+ public function action_admin_menu() {
21
+ $this->hook = add_options_page(
22
+ __( 'Activity Log Settings', 'aryo-aal' ), // <title> tag
23
+ __( 'Activity Log', 'aryo-aal' ), // menu label
24
+ 'manage_options', // required cap to view this page
25
+ $this->slug = 'activity-log-settings', // page slug
26
+ array( &$this, 'display_settings_page' ) // callback
27
+ );
28
+
29
+ // this callback will initialize the settings for AAL
30
+ // add_action( "load-$this->hook", array( $this, 'register_settings' ) );
31
+ }
32
+
33
+ public function register_settings() {
34
+ // If no options exist, create them.
35
+ if ( ! get_option( $this->slug ) ) {
36
+ update_option( $this->slug, apply_filters( 'aal_default_options', array(
37
+ 'logs_lifespan' => 'forever',
38
+ ) ) );
39
+ }
40
+
41
+ // First, we register a section. This is necessary since all future options must belong to a
42
+ add_settings_section(
43
+ 'general_settings_section', // ID used to identify this section and with which to register options
44
+ __( 'Display Options', 'aryo-aal' ), // Title to be displayed on the administration page
45
+ array( 'AAL_Settings_Fields', 'description' ), // Callback used to render the description of the section
46
+ $this->slug // Page on which to add this section of options
47
+ );
48
+
49
+ add_settings_field(
50
+ 'logs_lifespan',
51
+ __( 'Keep logs for', 'aryo-aal' ),
52
+ array( 'AAL_Settings_Fields', 'select' ),
53
+ $this->slug,
54
+ 'general_settings_section',
55
+ array(
56
+ 'id' => 'logs_lifespan',
57
+ 'page' => $this->slug,
58
+ 'options' => array(
59
+ '' => __( 'Forever', 'aryo-aal' ),
60
+ '365' => __( 'A year', 'aryo-aal' ),
61
+ '90' => __( '6 months', 'aryo-aal' ),
62
+ '30' => __( 'A month', 'aryo-aal' ),
63
+ ),
64
+ )
65
+ );
66
+
67
+ register_setting( 'aal-options', $this->slug );
68
+ }
69
+
70
+ public function display_settings_page() {
71
+ ?>
72
+ <!-- Create a header in the default WordPress 'wrap' container -->
73
+ <div class="wrap">
74
+
75
+ <div id="icon-themes" class="icon32"></div>
76
+ <h2><?php _e( 'ARYO Activity Log Settings', 'aryo-aal' ); ?></h2>
77
+
78
+ <form method="post" action="options.php">
79
+ <?php
80
+ settings_fields( 'aal-options' );
81
+ do_settings_sections( $this->slug );
82
+
83
+ submit_button();
84
+ ?>
85
+ </form>
86
+
87
+ </div><!-- /.wrap -->
88
+ <?php
89
+ }
90
+
91
+ public static function get_option( $key = '' ) {
92
+ $settings = get_option( 'activity-log-settings' );
93
+ return ! empty( $settings[ $key ] ) ? $settings[ $key ] : false;
94
+ }
95
+
96
+ }
97
+
98
+ final class AAL_Settings_Fields {
99
+
100
+ public static function description() {
101
+ ?>
102
+ <p><?php _e( 'These are some basic settings for Activity Log.', 'aryo-aal' ); ?></p>
103
+ <?php
104
+ }
105
+
106
+ public static function select( $args ) {
107
+ extract( $args, EXTR_SKIP );
108
+
109
+ if ( empty( $options ) || empty( $id ) || empty( $page ) )
110
+ return;
111
+
112
+ ?>
113
+ <select id="<?php echo esc_attr( $id ); ?>" name="<?php printf( '%s[%s]', esc_attr( $page ), esc_attr( $id ) ); ?>">
114
+ <?php foreach ( $options as $name => $label ) : ?>
115
+ <option value="<?php echo esc_attr( $name ); ?>" <?php selected( $name, (string) AAL_Settings::get_option( $id ) ); ?>>
116
+ <?php echo esc_html( $label ); ?>
117
+ </option>
118
+ <?php endforeach; ?>
119
+ </select>
120
+ <?php
121
+ }
122
+
123
+ }
language/activity-log.pot ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2013
2
+ # This file is distributed under the same license as the package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: \n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/activity-log\n"
7
+ "POT-Creation-Date: 2013-05-23 07:35:20+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2013-MO-DA HO:MI+ZONE\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
14
+
15
+ #: classes/class-aal-activity-log-list-table.php:78
16
+ msgctxt "main table"
17
+ msgid "Type"
18
+ msgstr ""
19
+
20
+ #: classes/class-aal-activity-log-list-table.php:79
21
+ msgctxt "main table"
22
+ msgid "Name"
23
+ msgstr ""
24
+
25
+ #: classes/class-aal-activity-log-list-table.php:80
26
+ msgctxt "main table"
27
+ msgid "Action"
28
+ msgstr ""
29
+
30
+ #: classes/class-aal-activity-log-list-table.php:81
31
+ msgctxt "main table"
32
+ msgid "Date"
33
+ msgstr ""
34
+
35
+ #: classes/class-aal-activity-log-list-table.php:92
36
+ msgid "was "
37
+ msgstr ""
38
+
39
+ #: classes/class-aal-activity-log-list-table.php:95
40
+ msgid "%s ago"
41
+ msgstr ""
42
+
43
+ #: classes/class-aal-activity-log-list-table.php:116
44
+ msgid "by "
45
+ msgstr ""
46
+
47
+ #: classes/class-aal-activity-log-list-table.php:123
48
+ #: classes/class-aal-activity-log-list-table.php:168
49
+ msgid "Guest"
50
+ msgstr ""
51
+
52
+ #: classes/class-aal-activity-log-list-table.php:179
53
+ msgid "All Users"
54
+ msgstr ""
55
+
56
+ #: classes/class-aal-activity-log-list-table.php:206
57
+ msgid "All Types"
58
+ msgstr ""
59
+
60
+ #: classes/class-aal-activity-log-list-table.php:211
61
+ msgid "Filter"
62
+ msgstr ""
63
+
64
+ #: classes/class-admin-ui.php:8 classes/class-admin-ui.php:18
65
+ #: classes/class-settings.php:23
66
+ msgid "Activity Log"
67
+ msgstr ""
68
+
69
+ #: classes/class-settings.php:22
70
+ msgid "Activity Log Settings"
71
+ msgstr ""
72
+
73
+ #: classes/class-settings.php:44
74
+ msgid "Display Options"
75
+ msgstr ""
76
+
77
+ #: classes/class-settings.php:51
78
+ msgid "Keep logs for"
79
+ msgstr ""
80
+
81
+ #: classes/class-settings.php:59
82
+ msgid "Forever"
83
+ msgstr ""
84
+
85
+ #: classes/class-settings.php:60
86
+ msgid "A year"
87
+ msgstr ""
88
+
89
+ #: classes/class-settings.php:61
90
+ msgid "6 months"
91
+ msgstr ""
92
+
93
+ #: classes/class-settings.php:62
94
+ msgid "A month"
95
+ msgstr ""
96
+
97
+ #: classes/class-settings.php:76
98
+ msgid "ARYO Activity Log Settings"
99
+ msgstr ""
100
+
101
+ #: classes/class-settings.php:102
102
+ msgid "These are some basic settings for Activity Log."
103
+ msgstr ""
104
+
105
+ #: language/strings.php:4
106
+ msgid "Post"
107
+ msgstr ""
108
+
109
+ #: language/strings.php:5
110
+ msgid "created"
111
+ msgstr ""
112
+
113
+ #: language/strings.php:6
114
+ msgid "updated"
115
+ msgstr ""
116
+
117
+ #: language/strings.php:7
118
+ msgid "deleted"
119
+ msgstr ""
120
+
121
+ #: language/strings.php:10
122
+ msgid "Attachment"
123
+ msgstr ""
124
+
125
+ #: language/strings.php:11
126
+ msgid "added"
127
+ msgstr ""
128
+
129
+ #: language/strings.php:14
130
+ msgid "User"
131
+ msgstr ""
132
+
133
+ #: language/strings.php:15
134
+ msgid "logged_out"
135
+ msgstr ""
136
+
137
+ #: language/strings.php:16
138
+ msgid "logged_in"
139
+ msgstr ""
140
+
141
+ #: language/strings.php:17
142
+ msgid "wrong_password"
143
+ msgstr ""
144
+
145
+ #: language/strings.php:20
146
+ msgid "Plugin"
147
+ msgstr ""
148
+
149
+ #: language/strings.php:21
150
+ msgid "activated"
151
+ msgstr ""
152
+
153
+ #: language/strings.php:22
154
+ msgid "deactivated"
155
+ msgstr ""
language/aryo-aal-de_DE.mo ADDED
Binary file
language/aryo-aal-de_DE.po ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2013
2
+ # This file is distributed under the same license as the package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: ARYO Activity Log\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/activity-log\n"
7
+ "POT-Creation-Date: 2013-05-27 22:28+0200\n"
8
+ "PO-Revision-Date: 2013-05-27 22:29+0200\n"
9
+ "Last-Translator: Yakir Sitbon <kingyes1@gmail.com>\n"
10
+ "Language-Team: Robert Harm <LL@li.org>\n"
11
+ "Language: de_DE\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "X-Generator: Poedit 1.5.5\n"
16
+
17
+ #: ../classes/class-aal-activity-log-list-table.php:78
18
+ #, fuzzy
19
+ msgid "Type"
20
+ msgstr "Typ"
21
+
22
+ #: ../classes/class-aal-activity-log-list-table.php:79
23
+ #, fuzzy
24
+ msgid "Name"
25
+ msgstr "Name"
26
+
27
+ #: ../classes/class-aal-activity-log-list-table.php:80
28
+ #, fuzzy
29
+ msgid "Action"
30
+ msgstr "Aktion"
31
+
32
+ #: ../classes/class-aal-activity-log-list-table.php:81
33
+ #, fuzzy
34
+ msgid "Date"
35
+ msgstr "Datum"
36
+
37
+ #: ../classes/class-aal-activity-log-list-table.php:95
38
+ #, php-format
39
+ msgid "%s ago"
40
+ msgstr "vor %s"
41
+
42
+ #: ../classes/class-aal-activity-log-list-table.php:116
43
+ msgid "by "
44
+ msgstr "von"
45
+
46
+ #: ../classes/class-aal-activity-log-list-table.php:123
47
+ #: ../classes/class-aal-activity-log-list-table.php:168
48
+ msgid "Guest"
49
+ msgstr "Gast"
50
+
51
+ #: ../classes/class-aal-activity-log-list-table.php:179
52
+ msgid "All Users"
53
+ msgstr "Alle Benutzer"
54
+
55
+ #: ../classes/class-aal-activity-log-list-table.php:206
56
+ msgid "All Types"
57
+ msgstr "Alle Typen"
58
+
59
+ #: ../classes/class-aal-activity-log-list-table.php:212
60
+ msgid "Filter"
61
+ msgstr "Filter"
62
+
63
+ #: ../classes/class-admin-ui.php:8 ../classes/class-admin-ui.php:18
64
+ #: ../classes/class-settings.php:23
65
+ msgid "Activity Log"
66
+ msgstr "Aktivitätslog"
67
+
68
+ #: ../classes/class-settings.php:22
69
+ msgid "Activity Log Settings"
70
+ msgstr "Aktivitätslog-Einstellungen"
71
+
72
+ #: ../classes/class-settings.php:44
73
+ msgid "Display Options"
74
+ msgstr "Anzeigeoptionen"
75
+
76
+ #: ../classes/class-settings.php:51
77
+ msgid "Keep logs for"
78
+ msgstr "Logs aufbewahren für"
79
+
80
+ #: ../classes/class-settings.php:59
81
+ msgid "Forever"
82
+ msgstr "Für immer"
83
+
84
+ #: ../classes/class-settings.php:60
85
+ msgid "A year"
86
+ msgstr "1 Jahr"
87
+
88
+ #: ../classes/class-settings.php:61
89
+ msgid "6 months"
90
+ msgstr "6 Monate"
91
+
92
+ #: ../classes/class-settings.php:62
93
+ msgid "A month"
94
+ msgstr "1 Monat"
95
+
96
+ #: ../classes/class-settings.php:76
97
+ msgid "ARYO Activity Log Settings"
98
+ msgstr "ARYO Aktivitätslog-Einstellungen"
99
+
100
+ #: ../classes/class-settings.php:102
101
+ msgid "These are some basic settings for Activity Log."
102
+ msgstr "Basis-Einstellungen für das Aktivitätslog"
103
+
104
+ #: ../language/strings.php:4
105
+ msgid "Post"
106
+ msgstr "Beitrag"
107
+
108
+ #: ../language/strings.php:5
109
+ msgid "created"
110
+ msgstr "erstellt"
111
+
112
+ #: ../language/strings.php:6
113
+ msgid "updated"
114
+ msgstr "aktualisiert"
115
+
116
+ #: ../language/strings.php:7
117
+ msgid "deleted"
118
+ msgstr "gelöscht"
119
+
120
+ #: ../language/strings.php:10
121
+ msgid "Attachment"
122
+ msgstr "Anhang"
123
+
124
+ #: ../language/strings.php:11
125
+ msgid "added"
126
+ msgstr "hinzugefügt"
127
+
128
+ #: ../language/strings.php:14
129
+ msgid "User"
130
+ msgstr "Benutzer"
131
+
132
+ #: ../language/strings.php:15
133
+ msgid "logged_out"
134
+ msgstr "ausgeloggt"
135
+
136
+ #: ../language/strings.php:16
137
+ msgid "logged_in"
138
+ msgstr "eingeloggt"
139
+
140
+ #: ../language/strings.php:17
141
+ msgid "wrong_password"
142
+ msgstr "falsches_Passwort"
143
+
144
+ #: ../language/strings.php:20
145
+ msgid "Plugin"
146
+ msgstr "Plugin"
147
+
148
+ #: ../language/strings.php:21
149
+ msgid "activated"
150
+ msgstr "aktiviert"
151
+
152
+ #: ../language/strings.php:22
153
+ msgid "deactivated"
154
+ msgstr "deaktiviert"
155
+
156
+ #: ../language/strings.php:25
157
+ msgid "Widget"
158
+ msgstr "Widget"
159
+
160
+ #: ../language/strings.php:28
161
+ #, fuzzy
162
+ msgid "Options"
163
+ msgstr "Anzeigeoptionen"
164
+
165
+ #~ msgid "was "
166
+ #~ msgstr "war"
language/aryo-aal-he_IL.mo ADDED
Binary file
language/aryo-aal-he_IL.po ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2013
2
+ # This file is distributed under the same license as the package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: ARYO Activity Log\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/activity-log\n"
7
+ "POT-Creation-Date: 2013-05-27 22:28+0200\n"
8
+ "PO-Revision-Date: 2013-05-27 22:31+0200\n"
9
+ "Last-Translator: Yakir Sitbon <kingyes1@gmail.com>\n"
10
+ "Language-Team: Yakir Sitbon & Arie Klikstein <aryodigital@gmail.com>\n"
11
+ "Language: he_IL\n"
12
+ "MIME-Version: 1.0\n"
13
+ "Content-Type: text/plain; charset=UTF-8\n"
14
+ "Content-Transfer-Encoding: 8bit\n"
15
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
16
+ "X-Generator: Poedit 1.5.5\n"
17
+ "X-Poedit-SourceCharset: UTF-8\n"
18
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e;_x;_n:1,2;_c,_nc:4c,1,2\n"
19
+ "X-Poedit-Basepath: .\n"
20
+ "X-Poedit-SearchPath-0: ..\n"
21
+
22
+ #: ../classes/class-aal-activity-log-list-table.php:78
23
+ #, fuzzy
24
+ msgid "Type"
25
+ msgstr "סוג"
26
+
27
+ #: ../classes/class-aal-activity-log-list-table.php:79
28
+ #, fuzzy
29
+ msgid "Name"
30
+ msgstr "שם"
31
+
32
+ #: ../classes/class-aal-activity-log-list-table.php:80
33
+ #, fuzzy
34
+ msgid "Action"
35
+ msgstr "פעולה"
36
+
37
+ #: ../classes/class-aal-activity-log-list-table.php:81
38
+ #, fuzzy
39
+ msgid "Date"
40
+ msgstr "תאריך"
41
+
42
+ #: ../classes/class-aal-activity-log-list-table.php:95
43
+ #, php-format
44
+ msgid "%s ago"
45
+ msgstr "לפני %s"
46
+
47
+ #: ../classes/class-aal-activity-log-list-table.php:116
48
+ msgid "by "
49
+ msgstr "ע\"י"
50
+
51
+ #: ../classes/class-aal-activity-log-list-table.php:123
52
+ #: ../classes/class-aal-activity-log-list-table.php:168
53
+ msgid "Guest"
54
+ msgstr "אורח"
55
+
56
+ #: ../classes/class-aal-activity-log-list-table.php:179
57
+ msgid "All Users"
58
+ msgstr "כל המשתמשים"
59
+
60
+ #: ../classes/class-aal-activity-log-list-table.php:206
61
+ msgid "All Types"
62
+ msgstr "כל הסוגים"
63
+
64
+ #: ../classes/class-aal-activity-log-list-table.php:212
65
+ msgid "Filter"
66
+ msgstr "סינון"
67
+
68
+ #: ../classes/class-admin-ui.php:8 ../classes/class-admin-ui.php:18
69
+ #: ../classes/class-settings.php:23
70
+ msgid "Activity Log"
71
+ msgstr "יומן פעילות"
72
+
73
+ #: ../classes/class-settings.php:22
74
+ msgid "Activity Log Settings"
75
+ msgstr "הגדרות יומן פעילות"
76
+
77
+ #: ../classes/class-settings.php:44
78
+ msgid "Display Options"
79
+ msgstr "אפשרויות תצוגה"
80
+
81
+ #: ../classes/class-settings.php:51
82
+ msgid "Keep logs for"
83
+ msgstr "שמירת היסטוריית פעילות למשך"
84
+
85
+ #: ../classes/class-settings.php:59
86
+ msgid "Forever"
87
+ msgstr "לתמיד"
88
+
89
+ #: ../classes/class-settings.php:60
90
+ msgid "A year"
91
+ msgstr "שנה"
92
+
93
+ #: ../classes/class-settings.php:61
94
+ msgid "6 months"
95
+ msgstr "6 חודשים"
96
+
97
+ #: ../classes/class-settings.php:62
98
+ msgid "A month"
99
+ msgstr "חודש"
100
+
101
+ #: ../classes/class-settings.php:76
102
+ msgid "ARYO Activity Log Settings"
103
+ msgstr "הגדרות יומן פעילות"
104
+
105
+ #: ../classes/class-settings.php:102
106
+ msgid "These are some basic settings for Activity Log."
107
+ msgstr "אלו חלק מההגרות הבסיסיות של יומן הפעילות."
108
+
109
+ #: ../language/strings.php:4
110
+ msgid "Post"
111
+ msgstr "פוסט"
112
+
113
+ #: ../language/strings.php:5
114
+ msgid "created"
115
+ msgstr "נוצר"
116
+
117
+ #: ../language/strings.php:6
118
+ msgid "updated"
119
+ msgstr "עודכן"
120
+
121
+ #: ../language/strings.php:7
122
+ msgid "deleted"
123
+ msgstr "נמחק"
124
+
125
+ #: ../language/strings.php:10
126
+ msgid "Attachment"
127
+ msgstr "מדיה"
128
+
129
+ #: ../language/strings.php:11
130
+ msgid "added"
131
+ msgstr "נוסף"
132
+
133
+ #: ../language/strings.php:14
134
+ msgid "User"
135
+ msgstr "משתמש"
136
+
137
+ #: ../language/strings.php:15
138
+ msgid "logged_out"
139
+ msgstr "התנתק"
140
+
141
+ #: ../language/strings.php:16
142
+ msgid "logged_in"
143
+ msgstr "התחבר"
144
+
145
+ #: ../language/strings.php:17
146
+ msgid "wrong_password"
147
+ msgstr "סיסמה שגויה"
148
+
149
+ #: ../language/strings.php:20
150
+ msgid "Plugin"
151
+ msgstr "תוסף"
152
+
153
+ #: ../language/strings.php:21
154
+ msgid "activated"
155
+ msgstr "מופעל"
156
+
157
+ #: ../language/strings.php:22
158
+ msgid "deactivated"
159
+ msgstr "מכובה"
160
+
161
+ #: ../language/strings.php:25
162
+ msgid "Widget"
163
+ msgstr "וידג'טים"
164
+
165
+ #: ../language/strings.php:28
166
+ msgid "Options"
167
+ msgstr "הגדרות"
language/aryo-aal.pot ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2013
2
+ # This file is distributed under the same license as the package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: ARYO Activity Log\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/activity-log\n"
7
+ "POT-Creation-Date: 2013-05-27 22:28+0200\n"
8
+ "PO-Revision-Date: 2013-05-27 22:28+0200\n"
9
+ "Last-Translator: Yakir Sitbon <kingyes1@gmail.com>\n"
10
+ "Language-Team: LANGUAGE <LL@li.org>\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: 8bit\n"
14
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
15
+ "X-Generator: Poedit 1.5.5\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Poedit-KeywordsList: _;gettext;gettext_noop;__;_e;_x;_n:1,2;_c,_nc:4c,1,2\n"
18
+ "X-Poedit-Basepath: .\n"
19
+ "X-Poedit-SearchPath-0: ..\n"
20
+
21
+ #: ../classes/class-aal-activity-log-list-table.php:78
22
+ msgid "Type"
23
+ msgstr ""
24
+
25
+ #: ../classes/class-aal-activity-log-list-table.php:79
26
+ msgid "Name"
27
+ msgstr ""
28
+
29
+ #: ../classes/class-aal-activity-log-list-table.php:80
30
+ msgid "Action"
31
+ msgstr ""
32
+
33
+ #: ../classes/class-aal-activity-log-list-table.php:81
34
+ msgid "Date"
35
+ msgstr ""
36
+
37
+ #: ../classes/class-aal-activity-log-list-table.php:95
38
+ #, php-format
39
+ msgid "%s ago"
40
+ msgstr ""
41
+
42
+ #: ../classes/class-aal-activity-log-list-table.php:116
43
+ msgid "by "
44
+ msgstr ""
45
+
46
+ #: ../classes/class-aal-activity-log-list-table.php:123
47
+ #: ../classes/class-aal-activity-log-list-table.php:168
48
+ msgid "Guest"
49
+ msgstr ""
50
+
51
+ #: ../classes/class-aal-activity-log-list-table.php:179
52
+ msgid "All Users"
53
+ msgstr ""
54
+
55
+ #: ../classes/class-aal-activity-log-list-table.php:206
56
+ msgid "All Types"
57
+ msgstr ""
58
+
59
+ #: ../classes/class-aal-activity-log-list-table.php:212
60
+ msgid "Filter"
61
+ msgstr ""
62
+
63
+ #: ../classes/class-admin-ui.php:8 ../classes/class-admin-ui.php:18
64
+ #: ../classes/class-settings.php:23
65
+ msgid "Activity Log"
66
+ msgstr ""
67
+
68
+ #: ../classes/class-settings.php:22
69
+ msgid "Activity Log Settings"
70
+ msgstr ""
71
+
72
+ #: ../classes/class-settings.php:44
73
+ msgid "Display Options"
74
+ msgstr ""
75
+
76
+ #: ../classes/class-settings.php:51
77
+ msgid "Keep logs for"
78
+ msgstr ""
79
+
80
+ #: ../classes/class-settings.php:59
81
+ msgid "Forever"
82
+ msgstr ""
83
+
84
+ #: ../classes/class-settings.php:60
85
+ msgid "A year"
86
+ msgstr ""
87
+
88
+ #: ../classes/class-settings.php:61
89
+ msgid "6 months"
90
+ msgstr ""
91
+
92
+ #: ../classes/class-settings.php:62
93
+ msgid "A month"
94
+ msgstr ""
95
+
96
+ #: ../classes/class-settings.php:76
97
+ msgid "ARYO Activity Log Settings"
98
+ msgstr ""
99
+
100
+ #: ../classes/class-settings.php:102
101
+ msgid "These are some basic settings for Activity Log."
102
+ msgstr ""
103
+
104
+ #: ../language/strings.php:4
105
+ msgid "Post"
106
+ msgstr ""
107
+
108
+ #: ../language/strings.php:5
109
+ msgid "created"
110
+ msgstr ""
111
+
112
+ #: ../language/strings.php:6
113
+ msgid "updated"
114
+ msgstr ""
115
+
116
+ #: ../language/strings.php:7
117
+ msgid "deleted"
118
+ msgstr ""
119
+
120
+ #: ../language/strings.php:10
121
+ msgid "Attachment"
122
+ msgstr ""
123
+
124
+ #: ../language/strings.php:11
125
+ msgid "added"
126
+ msgstr ""
127
+
128
+ #: ../language/strings.php:14
129
+ msgid "User"
130
+ msgstr ""
131
+
132
+ #: ../language/strings.php:15
133
+ msgid "logged_out"
134
+ msgstr ""
135
+
136
+ #: ../language/strings.php:16
137
+ msgid "logged_in"
138
+ msgstr ""
139
+
140
+ #: ../language/strings.php:17
141
+ msgid "wrong_password"
142
+ msgstr ""
143
+
144
+ #: ../language/strings.php:20
145
+ msgid "Plugin"
146
+ msgstr ""
147
+
148
+ #: ../language/strings.php:21
149
+ msgid "activated"
150
+ msgstr ""
151
+
152
+ #: ../language/strings.php:22
153
+ msgid "deactivated"
154
+ msgstr ""
155
+
156
+ #: ../language/strings.php:25
157
+ msgid "Widget"
158
+ msgstr ""
159
+
160
+ #: ../language/strings.php:28
161
+ msgid "Options"
162
+ msgstr ""
language/strings.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Post
4
+ __( 'Post', 'aryo-aal' );
5
+ __( 'created', 'aryo-aal' );
6
+ __( 'updated', 'aryo-aal' );
7
+ __( 'deleted', 'aryo-aal' );
8
+
9
+ // Attachment
10
+ __( 'Attachment', 'aryo-aal' );
11
+ __( 'added', 'aryo-aal' );
12
+
13
+ // User
14
+ __( 'User', 'aryo-aal' );
15
+ __( 'logged_out', 'aryo-aal' );
16
+ __( 'logged_in', 'aryo-aal' );
17
+ __( 'wrong_password', 'aryo-aal' );
18
+
19
+ // Plugin
20
+ __( 'Plugin', 'aryo-aal' );
21
+ __( 'activated', 'aryo-aal' );
22
+ __( 'deactivated', 'aryo-aal' );
23
+
24
+ // Widget
25
+ __( 'Widget', 'aryo-aal' );
26
+
27
+ // Options
28
+ __( 'Options', 'aryo-aal' );
readme.txt ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === ARYO Activity Log ===
2
+ Contributors: KingYes, Ariel.K, maor
3
+ Tags: admin, administration, activity, multisite, logging, logger, login, tracking, user, madeinisrael
4
+ Requires at least: 3.5
5
+ Tested up to: 3.5.1
6
+ Stable tag: 1.0.1
7
+ License: GPLv2 or later
8
+
9
+ Get aware of any activities that are taking place on your dashboard! Imagine it like a black-box for your WordPress site.
10
+
11
+ == Description ==
12
+
13
+ <h3>Like being in control? Check this out.</h3>
14
+
15
+ We all know that it’s relatively easy to analyze what your visitors are looking for while browsing your site. But there is really no easy way to know what registered users (say, with an Administrator account or even Editors) are doing on the dashboard of your site. How can you know if a post was deleted? or if a plugin was activated/deactivated? or if the active theme was changed?
16
+ If you have tens of users or more, you really can’t know who did it. This plugin tries to solve this issue by tracking what users do on the dashboard of your WordPress site.
17
+
18
+ <strong>As of this moment, the plugin logs things when:</strong><br />
19
+
20
+
21
+ Users
22
+
23
+ * A user logs in
24
+ * A user logs out
25
+ * A login has failed due to incorrect credentials
26
+ * A user updates their profile
27
+ * A new user account is being registerd
28
+ * An existing user account is being deleted
29
+
30
+ Plugins
31
+
32
+ * A plugin is being activated
33
+ * A plugin is being deactivated
34
+ * A plugin is being changed
35
+
36
+ Themes
37
+
38
+ * A theme is being changed (Editor and Customizer)
39
+
40
+ Content
41
+
42
+ * A new post is being created
43
+ * A post is being updated
44
+ * A post changes status (draft, pending review, publish)
45
+ * A post is being deleted
46
+
47
+ Media
48
+
49
+ * An attachment is being uploaded
50
+ * An attachment is being edited
51
+ * An attachment is being deleted
52
+
53
+ Widgets
54
+
55
+ * A widget is being added to a sidebar
56
+ * A widget is being deleted from a sidebar
57
+
58
+
59
+ <strong>__Translators:</strong><br />
60
+ Hebrew (he_IL) - ARYO Digital
61
+ German (de_DE) - Robert Harm
62
+
63
+ The plugin does not require any kind of setup. It works out of the box (and that’s why we love it too).
64
+
65
+ We’re planning to add a lot more features in the upcoming releases. If you think we’re missing something big time, please post your suggestions in the plugin’s forum.
66
+
67
+ <strong>Contributions:</strong><br />
68
+
69
+ Would you like to like to cotribute to Activity Log? You are more than welcome to submit your pull requests on the [GitHub repo](https://github.com/KingYes/wordpress-aryo-activity-log). Also, if you have any notes about the code, please open a ticket on ths issue tracker.
70
+
71
+
72
+ == Installation ==
73
+
74
+ 1. Upload plugin files to your plugins folder, or install using WordPress' built-in Add New Plugin installer
75
+ 1. Activate the plugin
76
+ 1. Go to the plugin settings page (under Settings > Activity Log)
77
+ 1. Go to the log viewer page (under Dashboard > Activity Log)
78
+
79
+ == Screenshots ==
80
+
81
+ 1. The log viewer page
82
+ 2. The settings page
83
+ 2. Looks as nicely in MP6
84
+
85
+ == Frequently Asked Questions ==
86
+
87
+ = Requirements =
88
+ * __Requires PHP5__ for list management functionality.
89
+
90
+ = What is the plugin license? =
91
+
92
+ * This plugin is released under a GPL license.
93
+
94
+
95
+ == Changelog ==
96
+
97
+ = 1.0.1 =
98
+ * Added translate: German (de_DE) - Thanks to [Robert Harm](http://www.mapsmarker.com/)
99
+ * Added translate: Hebrew (he_IL)
100
+ * Plugin name instead of file name on activation/deactivation
101
+ * <strong>New Hooks:</strong>
102
+ * A widget is being deleted from a sidebar
103
+ * A plugin is being changed
104
+ * Theme Customizer (Thanks to Ohad Raz)
105
+
106
+ = 1.0 =
107
+ * Blastoff!
screenshot-1.jpg ADDED
Binary file
screenshot-2.jpg ADDED
Binary file
screenshot-3.jpg ADDED
Binary file