Redirection - Version 2.4

Version Description

  • Reworked modules now no longer stored in database
  • Nginx module (experimental)
  • View .htaccess/Nginx inline
  • Beginnings of some unit tests!
  • Fix DB creation on activation, props syntax53
  • Updated Japanese locale, props to Naoko
  • Remove deprecated like escaping
Download this release

Release Info

Developer johnny5
Plugin Icon 128x128 Redirection
Version 2.4
Comparing to
See all releases

Code changes from version 2.3.16 to 2.4

Files changed (93) hide show
  1. admin.css +32 -0
  2. fileio/apache.php +10 -6
  3. fileio/nginx.php +98 -0
  4. fileio/rss.php +5 -8
  5. locale/ja.mo +0 -0
  6. locale/ja.po +0 -991
  7. locale/{ar_AR.mo → redirection-ar_AR.mo} +0 -0
  8. locale/{ar_AR.po → redirection-ar_AR.po} +0 -0
  9. locale/{be_BY.mo → redirection-be_BY.mo} +0 -0
  10. locale/{be_BY.po → redirection-be_BY.po} +0 -0
  11. locale/{ca.mo → redirection-ca.mo} +0 -0
  12. locale/{ca.po → redirection-ca.po} +0 -0
  13. locale/{cs_CZ.mo → redirection-cs_CZ.mo} +0 -0
  14. locale/{cs_CZ.po → redirection-cs_CZ.po} +0 -0
  15. locale/{da.mo → redirection-da.mo} +0 -0
  16. locale/{da.po → redirection-da.po} +0 -0
  17. locale/{da_DK.mo → redirection-da_DK.mo} +0 -0
  18. locale/{da_DK.po → redirection-da_DK.po} +0 -0
  19. locale/{de_DE.mo → redirection-de_DE.mo} +0 -0
  20. locale/{de_DE.po → redirection-de_DE.po} +0 -0
  21. locale/{el_GR.mo → redirection-el_GR.mo} +0 -0
  22. locale/{el_GR.po → redirection-el_GR.po} +0 -0
  23. locale/{es_ES.mo → redirection-es_ES.mo} +0 -0
  24. locale/{es_ES.po → redirection-es_ES.po} +0 -0
  25. locale/{fa_IR.mo → redirection-fa_IR.mo} +0 -0
  26. locale/{fa_IR.po → redirection-fa_IR.po} +0 -0
  27. locale/{fr_FR.mo → redirection-fr_FR.mo} +0 -0
  28. locale/{fr_FR.po → redirection-fr_FR.po} +0 -0
  29. locale/{he_IL.mo → redirection-he_IL.mo} +0 -0
  30. locale/{he_IL.po → redirection-he_IL.po} +0 -0
  31. locale/{hi_IN.mo → redirection-hi_IN.mo} +0 -0
  32. locale/{hi_IN.po → redirection-hi_IN.po} +0 -0
  33. locale/{hu_HU.mo → redirection-hu_HU.mo} +0 -0
  34. locale/{hu_HU.po → redirection-hu_HU.po} +0 -0
  35. locale/{id_ID.mo → redirection-id_ID.mo} +0 -0
  36. locale/{id_ID.po → redirection-id_ID.po} +0 -0
  37. locale/{it_IT.mo → redirection-it_IT.mo} +0 -0
  38. locale/{it_IT.po → redirection-it_IT.po} +0 -0
  39. locale/redirection-ja.mo +0 -0
  40. locale/redirection-ja.po +1180 -0
  41. locale/{lt_LT.mo → redirection-lt_LT.mo} +0 -0
  42. locale/{lt_LT.po → redirection-lt_LT.po} +0 -0
  43. locale/{nl_NL.mo → redirection-nl_NL.mo} +0 -0
  44. locale/{nl_NL.po → redirection-nl_NL.po} +0 -0
  45. locale/{pl_PL.mo → redirection-pl_PL.mo} +0 -0
  46. locale/{pl_PL.po → redirection-pl_PL.po} +0 -0
  47. locale/{pt_BR.mo → redirection-pt_BR.mo} +0 -0
  48. locale/{pt_BR.po → redirection-pt_BR.po} +0 -0
  49. locale/redirection-redirection.pot +769 -0
  50. locale/{ro_RO.mo → redirection-ro_RO.mo} +0 -0
  51. locale/{ro_RO.po → redirection-ro_RO.po} +0 -0
  52. locale/{ru_RU.mo → redirection-ru_RU.mo} +0 -0
  53. locale/{ru_RU.po → redirection-ru_RU.po} +0 -0
  54. locale/{tr_TR.mo → redirection-tr_TR.mo} +0 -0
  55. locale/{tr_TR.po → redirection-tr_TR.po} +0 -0
  56. locale/{uk.mo → redirection-uk.mo} +0 -0
  57. locale/{uk.po → redirection-uk.po} +0 -0
  58. locale/{zh_CN.mo → redirection-zh_CN.mo} +0 -0
  59. locale/{zh_CN.po → redirection-zh_CN.po} +0 -0
  60. locale/redirection.pot +0 -942
  61. matches/{user_agent.php → user-agent.php} +0 -0
  62. models/database.php +9 -16
  63. models/{file_io.php → file-io.php} +10 -6
  64. models/group.php +42 -124
  65. models/htaccess.php +65 -69
  66. models/log.php +0 -27
  67. models/match.php +1 -21
  68. models/module.php +47 -257
  69. models/pager.php +118 -89
  70. models/redirect.php +96 -113
  71. modules/apache.php +73 -149
  72. modules/nginx.php +47 -0
  73. modules/wordpress.php +29 -14
  74. readme.txt +12 -3
  75. redirection-admin.php +68 -44
  76. redirection-front.php +2 -2
  77. redirection.js +296 -193
  78. redirection.php +5 -4
  79. view/add.php +59 -0
  80. view/admin/add.php +0 -57
  81. view/{admin/annoy.php → annoy.php} +0 -0
  82. view/{admin/error.php → error.php} +0 -0
  83. view/{admin/group_edit.php → group-edit.php} +9 -6
  84. view/{admin/group_list.php → group-list.php} +22 -10
  85. view/{admin/head.php → head.php} +0 -0
  86. view/{admin/item_edit.php → item-edit.php} +17 -9
  87. view/{admin/item_list.php → item-list.php} +10 -7
  88. view/{admin/log.php → log.php} +10 -9
  89. view/{admin/module_edit.php → module-edit.php} +9 -8
  90. view/{admin/module_list.php → module-list.php} +7 -3
  91. view/{admin/options.php → options.php} +2 -2
  92. view/{admin/submenu.php → submenu.php} +0 -0
  93. view/{admin/support.php → support.php} +0 -0
admin.css CHANGED
@@ -97,6 +97,14 @@ table.items .red-disabled {
97
  text-align: left;
98
  }
99
 
 
 
 
 
 
 
 
 
100
  table.items table.edit {
101
  width: 100%;
102
  }
@@ -126,3 +134,27 @@ table.items table.edit th {
126
  font-weight: bold;
127
  font-size: 14px;
128
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  text-align: left;
98
  }
99
 
100
+ .wp-list-table .column-export {
101
+ width: 200px;
102
+ }
103
+
104
+ .wp-list-table .column-module, .wp-list-table .column-total {
105
+ width: 100px;
106
+ }
107
+
108
  table.items table.edit {
109
  width: 100%;
110
  }
134
  font-weight: bold;
135
  font-size: 14px;
136
  }
137
+
138
+ .module-config {
139
+ padding-left: 40px;
140
+ padding-top: 10px;
141
+ font-style: italic;
142
+ }
143
+
144
+ .error-container {
145
+ margin-top: 20px;
146
+ padding: 20px;
147
+ background-color: red;
148
+ color: white;
149
+ font-weight: bold;
150
+ display: none;
151
+ }
152
+
153
+ .module-export {
154
+ border: 1px solid #ddd;
155
+ padding: 5px;
156
+ font-family: courier;
157
+ background-color: #eee;
158
+ margin-top: 15px;
159
+ width: 100%;
160
+ }
fileio/apache.php CHANGED
@@ -4,10 +4,6 @@ class Red_Apache_File extends Red_FileIO {
4
  var $htaccess;
5
 
6
  function export( array $items ) {
7
- include_once dirname( dirname( __FILE__ ) ).'/models/htaccess.php';
8
-
9
- $htaccess = new Red_Htaccess();
10
-
11
  $filename = 'redirection-'.date_i18n( get_option( 'date_format' ) ).'.htaccess';
12
 
13
  header( 'Content-Type: application/octet-stream' );
@@ -15,11 +11,19 @@ class Red_Apache_File extends Red_FileIO {
15
  header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
16
  header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
17
 
 
 
 
 
 
 
 
 
18
  foreach ( $items AS $item ) {
19
- $htaccess->add ($item);
20
  }
21
 
22
- echo $htaccess->generate();
23
  }
24
 
25
  function load( $group, $data, $filename = '' ) {
4
  var $htaccess;
5
 
6
  function export( array $items ) {
 
 
 
 
7
  $filename = 'redirection-'.date_i18n( get_option( 'date_format' ) ).'.htaccess';
8
 
9
  header( 'Content-Type: application/octet-stream' );
11
  header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
12
  header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
13
 
14
+ echo $htaccess->generate( $items );
15
+ }
16
+
17
+ public function get( array $items ) {
18
+ include_once dirname( dirname( __FILE__ ) ).'/models/htaccess.php';
19
+
20
+ $htaccess = new Red_Htaccess();
21
+
22
  foreach ( $items AS $item ) {
23
+ $htaccess->add( $item );
24
  }
25
 
26
+ return $htaccess->get();
27
  }
28
 
29
  function load( $group, $data, $filename = '' ) {
fileio/nginx.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Red_Nginx_File extends Red_FileIO {
4
+ function export( array $items ) {
5
+ $filename = 'redirection-'.date_i18n( get_option( 'date_format' ) ).'.nginx';
6
+
7
+ header( 'Content-Type: application/octet-stream' );
8
+ header( 'Cache-Control: no-cache, must-revalidate' );
9
+ header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
10
+ header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
11
+
12
+ echo $this->get( $items );
13
+ }
14
+
15
+ public function get( array $items ) {
16
+ if ( count( $items ) === 0 )
17
+ return '';
18
+
19
+ $lines = array();
20
+ $version = get_plugin_data( dirname( dirname( __FILE__ ) ).'/redirection.php' );
21
+
22
+ $lines[] = '# Created by Redirection';
23
+ $lines[] = '# '.date ('r');
24
+ $lines[] = '# Redirection '.trim( $version['Version'] ).' - http://urbangiraffe.com/plugins/redirection/';
25
+ $lines[] = '';
26
+ $lines[] = 'server {';
27
+
28
+ foreach ( $items AS $item ) {
29
+ $lines[] = $this->get_nginx_item( $item );
30
+ }
31
+
32
+ $lines[] = '}';
33
+ $lines[] = '';
34
+ $lines[] = '# End of Redirection';
35
+
36
+ return implode( "\n", $lines );
37
+ }
38
+
39
+ private function get_redirect_code( Red_Item $item ) {
40
+ if ( $item->get_action_code() === 301 )
41
+ return 'permanent';
42
+ return 'redirect';
43
+ }
44
+
45
+ function load( $group, $data, $filename = '' ) {
46
+ return 0;
47
+ }
48
+
49
+ private function get_nginx_item( Red_Item $item ) {
50
+ $target = 'add_'.$item->get_match_type();
51
+
52
+ if ( method_exists( $this, $target ) )
53
+ return ' '.$this->$target( $item, $item->match );
54
+ return false;
55
+ }
56
+
57
+ private function add_url( Red_Item $item ) {
58
+ return $this->add_redirect( $item->get_url(), $item->get_action_data(), $this->get_redirect_code( $item ) );
59
+ }
60
+
61
+ private function add_agent( Red_Item $item ) {
62
+ if ( $item->match->url_from ) {
63
+ $lines[] = 'if ( $http_user_agent ~* ^'.$item->match->user_agent.'$ ) {';
64
+ $lines[] = ' '.$this->add_redirect( $item->get_url(), $item->match->url_from, $this->get_redirect_code( $item ) );
65
+ $lines[] = ' }';
66
+ }
67
+
68
+ if ( $item->match->url_notfrom ) {
69
+ $lines[] = 'if ( $http_user_agent !~* ^'.$item->match->user_agent.'$ ) {';
70
+ $lines[] = ' '.$this->add_redirect( $item->get_url(), $item->match->url_notfrom, $this->get_redirect_code( $item ) );
71
+ $lines[] = ' }';
72
+ }
73
+
74
+ return implode( "\n", $lines );
75
+ }
76
+
77
+ private function add_referrer( Red_Item $item ) {
78
+ if ( $item->match->url_from ) {
79
+ $lines[] = 'if ( $http_referer ~* ^'.$item->match->referrer.'$ ) {';
80
+ $lines[] = ' '.$this->add_redirect( $item->get_url(), $item->match->url_from, $this->get_redirect_code( $item ) );
81
+ $lines[] = ' }';
82
+ }
83
+
84
+ if ( $item->match->url_notfrom ) {
85
+ $lines[] = 'if ( $http_referer !~* ^'.$item->match->referrer.'$ ) {';
86
+ $lines[] = ' '.$this->add_redirect( $item->get_url(), $item->match->url_notfrom, $this->get_redirect_code( $item ) );
87
+ $lines[] = ' }';
88
+ }
89
+
90
+ return implode( "\n", $lines );
91
+ }
92
+
93
+ private function add_redirect( $source, $target, $code ) {
94
+ return 'rewrite ^'.$source.'$ '.$target.' '.$code.';';
95
+ }
96
+ }
97
+
98
+
fileio/rss.php CHANGED
@@ -19,14 +19,11 @@ class Red_Rss_File extends Red_FileIO {
19
  <?php
20
  foreach ( (array)$items as $log ) : ?>
21
  <item>
22
- <title><?php echo esc_html( $log->url ); ?></title>
23
- <link><![CDATA[<?php echo esc_url( home_url() ); echo esc_url( $log->url ); ?>]]></link>
24
- <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', $log->created, false); ?></pubDate>
25
- <guid isPermaLink="false"><?php echo esc_html( $log->id ); ?></guid>
26
- <description><?php echo esc_html( $log->url ); ?></description>
27
- <?php if ( $log->referrer ) : ?>
28
- <content:encoded><?php printf( __( 'Referred by %s' ), esc_html( $log->referrer ) ); ?></content:encoded>
29
- <?php endif; ?>
30
  </item>
31
  <?php endforeach; ?>
32
  </channel>
19
  <?php
20
  foreach ( (array)$items as $log ) : ?>
21
  <item>
22
+ <title><?php echo esc_html( $log->get_url() ); ?></title>
23
+ <link><![CDATA[<?php echo esc_url( home_url() ); echo esc_url( $log->get_url() ); ?>]]></link>
24
+ <pubDate><?php echo date( 'D, d M Y H:i:s +0000', $log->get_last_hit() ); ?></pubDate>
25
+ <guid isPermaLink="false"><?php echo esc_html( $log->get_id() ); ?></guid>
26
+ <description><?php echo esc_html( $log->get_url() ); ?></description>
 
 
 
27
  </item>
28
  <?php endforeach; ?>
29
  </channel>
locale/ja.mo DELETED
Binary file
locale/ja.po DELETED
@@ -1,991 +0,0 @@
1
- # Japanese (UTF-8) translation for WordPress Plugin Redirection 2.1.14
2
- #
3
- # Copyright (c) 2009
4
- # このファイルは WordPress 本体と同じライセンスのもと配布されています。
5
- # This file is distributed under the same license as the WordPress package.
6
- #
7
- # WordPress J-Series Project
8
- # <http://wppluginsj.sourceforge.jp/i18n-ja_jp/>
9
- #
10
- msgid ""
11
- msgstr ""
12
- "Project-Id-Version: Redirection 2.1.14\n"
13
- "Report-Msgid-Bugs-To: \n"
14
- "POT-Creation-Date: 2009-06-14 22:42-0500\n"
15
- "PO-Revision-Date: 2009-06-14 22:50-0500\n"
16
- "Last-Translator: Naoko McCracken <info@nao-net.com>\n"
17
- "Language-Team: WordPress J-Series Project <http://wppluginsj.sourceforge.jp/i18n-ja_jp/>\n"
18
- "MIME-Version: 1.0\n"
19
- "Content-Type: text/plain; charset=UTF-8\n"
20
- "Content-Transfer-Encoding: 8bit\n"
21
- "X-Poedit-Language: Japanese\n"
22
- "X-Poedit-Country: JAPAN\n"
23
- "X-Poedit-SourceCharset: utf-8\n"
24
- "X-Poedit-Basepath: ../\n"
25
- "X-Poedit-KeywordsList: __;_e\n"
26
- "X-Poedit-SearchPath-0: .\n"
27
-
28
- #: ajax.php:51
29
- msgid "<p style=\"color: red\">You are not allowed access to this resource</p>"
30
- msgstr "<p style=\"color: red\">このリソースにアクセスする権限がありません</p>"
31
-
32
- #: ajax.php:59
33
- msgid "<p style=\"color: red\">That function is not defined</p>"
34
- msgstr "<p style=\"color: red\">その関数は定義されていません</p>"
35
-
36
- #: ajax.php:76
37
- msgid "Sorry, but your redirection was not created"
38
- msgstr "転送ルールを作成できませんでした。"
39
-
40
- #: ajax.php:234
41
- #: ajax.php:243
42
- #: ajax.php:270
43
- #: ajax.php:321
44
- #: ajax.php:338
45
- #: ajax.php:365
46
- msgid "Failed to retrieve group data"
47
- msgstr "グループのデータ取得に失敗しました。"
48
-
49
- #: ajax.php:307
50
- msgid "Failed to retrieve module data"
51
- msgstr "モジュールのデータ取得に失敗しました。"
52
-
53
- #: redirection.php:123
54
- msgid "Settings"
55
- msgstr "設定"
56
-
57
- #: redirection.php:130
58
- msgid "Redirection Help"
59
- msgstr "リディレクションプラグイン ヘルプ"
60
-
61
- #: redirection.php:131
62
- msgid "Redirection Documentation"
63
- msgstr "リディレクションプラグイン ドキュメンテーション"
64
-
65
- #: redirection.php:132
66
- msgid "Redirection Support Forum"
67
- msgstr "リディレクションプラグイン サポートフォーラム"
68
-
69
- #: redirection.php:133
70
- msgid "Redirection Bug Tracker"
71
- msgstr "リディレクションプラグイン バグトラッカー"
72
-
73
- #: redirection.php:134
74
- msgid "Redirection FAQ"
75
- msgstr "リディレクションプラグイン よくある質問"
76
-
77
- #: redirection.php:135
78
- msgid "Please read the documentation and FAQ, and check the bug tracker, before asking a question."
79
- msgstr "質問する前にドキュメンテーションと FAQ を読み、バグトラッカーを確認してください。"
80
-
81
- #: redirection.php:197
82
- msgid "Redirection"
83
- msgstr "リディレクション"
84
-
85
- #: redirection.php:240
86
- msgid "Your module was successfully created"
87
- msgstr "モジュールの作成に成功しました。"
88
-
89
- #: redirection.php:244
90
- msgid "Your module was not created - did you provide a name?"
91
- msgstr "モジュールを作成できませんでした。モジュール名を入力しましたか ?"
92
-
93
- #: redirection.php:306
94
- msgid "Your options were updated"
95
- msgstr "設定を更新しました。"
96
-
97
- #: redirection.php:314
98
- msgid "Redirection data has been deleted and the plugin disabled"
99
- msgstr "リディレクションデータを削除し、プラグインを無効化しました。"
100
-
101
- #: redirection.php:326
102
- msgid "No items were imported"
103
- msgstr "項目をインポートできませんでした。"
104
-
105
- #: redirection.php:344
106
- msgid "Your logs have been deleted"
107
- msgstr "ログを削除しました。"
108
-
109
- #: redirection.php:367
110
- msgid "Your group was added successfully"
111
- msgstr "グループの追加に成功しました。"
112
-
113
- #: redirection.php:371
114
- msgid "Please specify a group name"
115
- msgstr "グループ名を指定してください。"
116
-
117
- #: fileio/csv.php:21
118
- #, php-format
119
- msgid "module_%d.csv"
120
- msgstr "module_%d.csv"
121
-
122
- #: fileio/xml.php:32
123
- #, php-format
124
- msgid "module_%d.xml"
125
- msgstr "module_%d.xml"
126
-
127
- #: fileio/xml.php:105
128
- #, php-format
129
- msgid "%s imported on %s at %s"
130
- msgstr "%s をインポートしました (%s @ %s)"
131
-
132
- #: fileio/xml.php:168
133
- msgid "XML importing is only available with PHP5 - you have PHP4."
134
- msgstr "XML インポートは PHP5 上でのみ利用できます。現在 PHP4 をお使いです。"
135
-
136
- #: matches/login.php:25
137
- msgid "URL and login status"
138
- msgstr "URL およびログイン状態"
139
-
140
- #: matches/login.php:32
141
- msgid "The target URL will be chosen from one of the following URLs, depending if the user is logged in or out. Leaving a URL blank means that the user is not redirected."
142
- msgstr "ユーザーがログインしているかどうかにより、ターゲット URL は以下のうちいずれかになります。URL を空白にした場合、そのユーザーは転送されません。"
143
-
144
- #: matches/login.php:37
145
- #: matches/login.php:39
146
- msgid "Logged In"
147
- msgstr "ログイン中"
148
-
149
- #: matches/login.php:47
150
- #: matches/login.php:49
151
- msgid "Logged Out"
152
- msgstr "ログアウト中"
153
-
154
- #: matches/referrer.php:28
155
- msgid "URL and referrer"
156
- msgstr "URL およびリファラー"
157
-
158
- #: matches/referrer.php:40
159
- msgid "Referrer"
160
- msgstr "リファラー"
161
-
162
- #: matches/referrer.php:43
163
- msgid "Regex"
164
- msgstr "正規表現"
165
-
166
- #: matches/referrer.php:47
167
- #: matches/url.php:40
168
- #: matches/user_agent.php:56
169
- msgid "HTTP Code"
170
- msgstr "HTTP コード"
171
-
172
- #: matches/referrer.php:57
173
- msgid "The visitor will be redirected from the source URL if the referrer matches. You can specify a <em>matched</em> target URL as the address to send visitors if they do match, and <em>not matched</em> if they don't match. Leaving a URL blank means that the visitor is not redirected."
174
- msgstr "もしリファラーが一致する場合、ソース URL から転送されます。<strong>一致の場合</strong>と<strong>不一致の場合</strong>に転送先にするターゲット URL をそれぞれ指定できます。URL を空のままにした場合、ユーザーは転送されません。"
175
-
176
- #: matches/referrer.php:63
177
- #: matches/referrer.php:65
178
- #: matches/user_agent.php:74
179
- #: matches/user_agent.php:76
180
- msgid "Matched"
181
- msgstr "一致の場合"
182
-
183
- #: matches/referrer.php:73
184
- #: matches/referrer.php:75
185
- #: matches/user_agent.php:84
186
- #: matches/user_agent.php:86
187
- msgid "Not matched"
188
- msgstr "不一致の場合"
189
-
190
- #: matches/url.php:25
191
- msgid "URL only"
192
- msgstr "URL のみ"
193
-
194
- #: matches/url.php:32
195
- msgid "Target URL"
196
- msgstr "ターゲット URL"
197
-
198
- #: matches/user_agent.php:27
199
- msgid "URL and user agent"
200
- msgstr "URL およびユーザーエージェント"
201
-
202
- #: matches/user_agent.php:33
203
- msgid "FeedBurner"
204
- msgstr "FeedBurner"
205
-
206
- #: matches/user_agent.php:34
207
- msgid "Internet Explorer"
208
- msgstr "Internet Explorer"
209
-
210
- #: matches/user_agent.php:35
211
- msgid "FireFox"
212
- msgstr "FireFox"
213
-
214
- #: matches/user_agent.php:36
215
- msgid "Opera"
216
- msgstr "Opera"
217
-
218
- #: matches/user_agent.php:37
219
- msgid "Safari"
220
- msgstr "Safari"
221
-
222
- #: matches/user_agent.php:38
223
- msgid "iPhone"
224
- msgstr "iPhone"
225
-
226
- #: matches/user_agent.php:39
227
- msgid "Nintendo Wii"
228
- msgstr "Nintendo Wii"
229
-
230
- #: matches/user_agent.php:44
231
- msgid "User Agent"
232
- msgstr "ユーザーエージェント"
233
-
234
- #: matches/user_agent.php:67
235
- msgid "The visitor will be redirected from the source URL if the user agent matches. You can specify a <em>matched</em> target URL as the address to send visitors if they do match, and <em>not matched</em> if they don't match. Leaving a URL blank means that the visitor is not redirected. <strong>All matches are performed as regular expressions</strong>.\n"
236
- msgstr "もしユーザーエージェントが一致する場合、ソース URL から転送されます。<strong>一致の場合</strong>と<strong>不一致の場合</strong>に転送先にするターゲット URL をそれぞれ指定できます。URL を空のままにした場合、ユーザーは転送されません。<strong>一致条件の判定はすべて正規表現で行われます</strong>。\n"
237
-
238
- #: models/database.php:110
239
- #: models/module.php:168
240
- msgid "WordPress"
241
- msgstr "WordPress"
242
-
243
- #: models/database.php:111
244
- #: models/module.php:167
245
- msgid "Apache"
246
- msgstr "Apache"
247
-
248
- #: models/database.php:112
249
- #: models/module.php:169
250
- msgid "404 Errors"
251
- msgstr "404 エラー"
252
-
253
- #: models/database.php:118
254
- msgid "Redirections"
255
- msgstr "転送ルール"
256
-
257
- #: models/database.php:119
258
- msgid "Modified posts"
259
- msgstr "更新された投稿"
260
-
261
- #: models/module.php:192
262
- msgid "Strip WWW"
263
- msgstr "WWW を除く"
264
-
265
- #: models/module.php:192
266
- msgid "Force WWW"
267
- msgstr "WWW を強制追加"
268
-
269
- #: models/module.php:198
270
- msgid "Strip index.php"
271
- msgstr "index.php を除く"
272
-
273
- #: models/pager.php:404
274
- msgid "Previous"
275
- msgstr "前"
276
-
277
- #: models/pager.php:405
278
- msgid "Next"
279
- msgstr "次"
280
-
281
- #: models/pager.php:463
282
- #, php-format
283
- msgid "%d per-page"
284
- msgstr "%d件表示"
285
-
286
- #: models/pager.php:472
287
- #, php-format
288
- msgid "Displaying %s&#8211;%s of %s"
289
- msgstr "%s&#8211;%s件中%s件を表示中"
290
-
291
- #: models/redirect.php:403
292
- msgid "Redirect to URL"
293
- msgstr "URL へ転送"
294
-
295
- #: models/redirect.php:404
296
- msgid "Redirect to random post"
297
- msgstr "ランダムな記事へ転送"
298
-
299
- #: models/redirect.php:405
300
- msgid "Pass-through"
301
- msgstr "通過"
302
-
303
- #: models/redirect.php:406
304
- msgid "Error (404)"
305
- msgstr "エラー (404)"
306
-
307
- #: models/redirect.php:407
308
- msgid "Do nothing"
309
- msgstr "何もしない"
310
-
311
- #: modules/404.php:37
312
- msgid "Log 404s"
313
- msgstr "404 エラーのログをとる"
314
-
315
- #: modules/404.php:46
316
- #: modules/wordpress.php:228
317
- msgid "<strong>Disabled: You must enable <a href=\"options-permalink.php\">permalinks</a> before using this</strong>"
318
- msgstr "<strong>無効: これを使用する前に<a href=\"options-permalink.php\">パーマリンク</a>を有効にする必要があります。</strong>"
319
-
320
- #: modules/404.php:57
321
- #: modules/wordpress.php:252
322
- msgid "<small>No options have been set</small>"
323
- msgstr "<small>オプションが設定されていません</small>"
324
-
325
- #: modules/apache.php:65
326
- msgid "Location"
327
- msgstr "位置"
328
-
329
- #: modules/apache.php:70
330
- #, php-format
331
- msgid "WordPress is installed in: <code>%s</code>"
332
- msgstr "WordPress のインストール位置: <code>%s</code>"
333
-
334
- #: modules/apache.php:75
335
- #: modules/wordpress.php:189
336
- msgid "Canonical"
337
- msgstr "カノニカル"
338
-
339
- #: modules/apache.php:78
340
- #: modules/apache.php:84
341
- #: modules/wordpress.php:192
342
- #: modules/wordpress.php:197
343
- msgid "Leave as is"
344
- msgstr "そのままにする"
345
-
346
- #: modules/apache.php:78
347
- #: modules/wordpress.php:192
348
- #, php-format
349
- msgid "Strip WWW (%s)"
350
- msgstr "WWW を除く (%s)"
351
-
352
- #: modules/apache.php:78
353
- #: modules/wordpress.php:192
354
- #, php-format
355
- msgid "Force WWW (www.%s)"
356
- msgstr "WWW を強制追加 (www.%s)"
357
-
358
- #: modules/apache.php:82
359
- #: modules/wordpress.php:195
360
- msgid "Strip Index"
361
- msgstr "Index を除く"
362
-
363
- #: modules/apache.php:84
364
- msgid "Strip index files (html,php)"
365
- msgstr "index ファイルを除く (html,php)"
366
-
367
- #: modules/apache.php:89
368
- msgid "Memory Limit"
369
- msgstr "メモリー上限"
370
-
371
- #: modules/apache.php:92
372
- #: modules/apache.php:97
373
- #: modules/wordpress.php:205
374
- #: modules/wordpress.php:210
375
- msgid "Server default"
376
- msgstr "サーバーの初期設定"
377
-
378
- #: modules/apache.php:95
379
- #: modules/wordpress.php:208
380
- msgid "Error Level"
381
- msgstr "エラーレベル"
382
-
383
- #: modules/apache.php:97
384
- msgid "No errors"
385
- msgstr "エラーなし"
386
-
387
- #: modules/apache.php:97
388
- msgid "Show errors"
389
- msgstr "エラーを表示"
390
-
391
- #: modules/apache.php:102
392
- msgid "Ban IPs"
393
- msgstr "禁止 IP"
394
-
395
- #: modules/apache.php:108
396
- msgid "Allow IPs"
397
- msgstr "許可 IP"
398
-
399
- #: modules/apache.php:114
400
- msgid "Raw .htaccess"
401
- msgstr "生の .htaccess"
402
-
403
- #: modules/apache.php:120
404
- msgid "Site URL"
405
- msgstr "サイト URL "
406
-
407
- #: modules/apache.php:123
408
- msgid "Advanced: For management of external sites"
409
- msgstr "高度な設定: 外部サイト管理用"
410
-
411
- #: modules/apache.php:138
412
- msgid "<strong>Location is invalid - check that path exists</strong>"
413
- msgstr "<strong>ファイルの位置が正しくありません。パスが存在するか確認してください。</strong>"
414
-
415
- #: modules/apache.php:144
416
- msgid "<strong>Could not write to configured <code>.htaccess</code> file - check file permissions</strong>"
417
- msgstr "<strong>設定済みの <code>.htaccess</code> に書き込みできませんでした。パーミッションを確認してください。</strong>"
418
-
419
- #: modules/apache.php:151
420
- msgid "<strong>Disabled: enter the location of an <code>.htaccess</code> file for this to be valid</strong>"
421
- msgstr "<strong>無効: 有効にするには<code>.htaccess</code> ファイルの位置を入力してください。</strong>"
422
-
423
- #: modules/apache.php:156
424
- msgid "strip WWW"
425
- msgstr "WWW を除く"
426
-
427
- #: modules/apache.php:156
428
- msgid "force WWW"
429
- msgstr "WWW を追加"
430
-
431
- #: modules/apache.php:159
432
- #: modules/wordpress.php:236
433
- msgid "strip index"
434
- msgstr "index を除く"
435
-
436
- #: modules/apache.php:162
437
- #, php-format
438
- msgid "memory limit at %dMB"
439
- msgstr "メモリー上限%dMB"
440
-
441
- #: modules/apache.php:165
442
- #: modules/wordpress.php:247
443
- msgid "no errors"
444
- msgstr "エラーなし"
445
-
446
- #: modules/apache.php:165
447
- #: modules/wordpress.php:247
448
- msgid "show errors"
449
- msgstr "エラーを表示"
450
-
451
- #: modules/apache.php:168
452
- msgid "IPs are banned"
453
- msgstr "禁止 IP"
454
-
455
- #: modules/apache.php:171
456
- msgid "IPs are allowed"
457
- msgstr "許可 IP"
458
-
459
- #: modules/apache.php:179
460
- #, php-format
461
- msgid " for external site: <code>%s</code>"
462
- msgstr "外部サイト向け: <code>%s</code>"
463
-
464
- #: modules/wordpress.php:197
465
- msgid "Strip index files (html,php,asp)"
466
- msgstr "index ファイルを除く (html,php,asp)"
467
-
468
- #: modules/wordpress.php:202
469
- msgid "Time Limit"
470
- msgstr "時間上限"
471
-
472
- #: modules/wordpress.php:205
473
- msgid "30 seconds"
474
- msgstr "30秒"
475
-
476
- #: modules/wordpress.php:205
477
- msgid "1 minute"
478
- msgstr "1分"
479
-
480
- #: modules/wordpress.php:205
481
- msgid "2 minutes"
482
- msgstr "2分"
483
-
484
- #: modules/wordpress.php:205
485
- msgid "5 minutes"
486
- msgstr "5分"
487
-
488
- #: modules/wordpress.php:205
489
- msgid "As long as possible"
490
- msgstr "最長"
491
-
492
- #: modules/wordpress.php:241
493
- msgid "time limit set as long as possible"
494
- msgstr "タイムリミットは最長に設定されています"
495
-
496
- #: modules/wordpress.php:243
497
- #, php-format
498
- msgid "time limit at %ss"
499
- msgstr "タイムリミット %ss"
500
-
501
- #: view/admin/add.php:3
502
- msgid "Add new redirection"
503
- msgstr "新しい転送ルールを追加"
504
-
505
- #: view/admin/add.php:6
506
- msgid "Your redirection has been added."
507
- msgstr "新しい転送ルールを追加しました。"
508
-
509
- #: view/admin/add.php:12
510
- msgid "Source URL"
511
- msgstr "ソース URL"
512
-
513
- #: view/admin/add.php:16
514
- msgid "Match"
515
- msgstr "一致条件"
516
-
517
- #: view/admin/add.php:22
518
- msgid "Action"
519
- msgstr "操作"
520
-
521
- #: view/admin/add.php:27
522
- msgid "Regular expression"
523
- msgstr "正規表現"
524
-
525
- #: view/admin/add.php:36
526
- msgid "Group"
527
- msgstr "グループ"
528
-
529
- #: view/admin/add.php:43
530
- msgid "Add Redirection"
531
- msgstr "新しい転送ルールを追加"
532
-
533
- #: view/admin/group_edit.php:6
534
- #: view/admin/group_list.php:36
535
- #: view/admin/group_list.php:98
536
- #: view/admin/module_edit.php:17
537
- #: view/admin/module_list.php:41
538
- msgid "Name"
539
- msgstr "名称"
540
-
541
- #: view/admin/group_edit.php:10
542
- msgid "Tracked"
543
- msgstr "追跡"
544
-
545
- #: view/admin/group_edit.php:11
546
- msgid "Whether to track 'hits' to items"
547
- msgstr "項目のヒット数を追跡"
548
-
549
- #: view/admin/group_edit.php:14
550
- msgid "Enabled"
551
- msgstr "有効"
552
-
553
- #: view/admin/group_edit.php:15
554
- msgid "Disabling a group will disable all items contained within it"
555
- msgstr "グループを無効化すると、含まれた項目すべてが無効になります"
556
-
557
- #: view/admin/group_edit.php:20
558
- #: view/admin/item_edit.php:27
559
- #: view/admin/module_edit.php:26
560
- msgid "Save"
561
- msgstr "保存"
562
-
563
- #: view/admin/group_edit.php:21
564
- #: view/admin/item_edit.php:28
565
- #: view/admin/module_edit.php:27
566
- msgid "Cancel"
567
- msgstr "キャンセル"
568
-
569
- #: view/admin/group_item.php:4
570
- msgid "edit group"
571
- msgstr "グループを編集"
572
-
573
- #: view/admin/group_item.php:20
574
- #: view/admin/item.php:27
575
- msgid "disabled"
576
- msgstr "無効"
577
-
578
- #: view/admin/group_list.php:6
579
- msgid "Groups for module"
580
- msgstr "モジュールのグループ"
581
-
582
- #: view/admin/group_list.php:15
583
- #: view/admin/log.php:38
584
- msgid "Module"
585
- msgstr "モジュール"
586
-
587
- #: view/admin/group_list.php:20
588
- #: view/admin/item_list.php:21
589
- #: view/admin/log.php:16
590
- #: view/admin/log.php:23
591
- msgid "Search"
592
- msgstr "検索"
593
-
594
- #: view/admin/group_list.php:25
595
- msgid "go"
596
- msgstr "go"
597
-
598
- #: view/admin/group_list.php:35
599
- #: view/admin/item_list.php:34
600
- #: view/admin/module_list.php:16
601
- msgid "Hits"
602
- msgstr "ヒット数"
603
-
604
- #: view/admin/group_list.php:58
605
- #: view/admin/item_list.php:59
606
- msgid "Select All"
607
- msgstr "すべて選択"
608
-
609
- #: view/admin/group_list.php:59
610
- #: view/admin/item_list.php:60
611
- msgid "Toggle"
612
- msgstr "切り替え"
613
-
614
- #: view/admin/group_list.php:60
615
- #: view/admin/item_list.php:61
616
- msgid "Reset Hits"
617
- msgstr "訪問数をリセット"
618
-
619
- #: view/admin/group_list.php:61
620
- #: view/admin/item_list.php:62
621
- #: view/admin/log.php:30
622
- #: view/admin/options.php:110
623
- msgid "Delete"
624
- msgstr "削除"
625
-
626
- #: view/admin/group_list.php:63
627
- #: view/admin/item_list.php:64
628
- msgid "Move To"
629
- msgstr "移動"
630
-
631
- #: view/admin/group_list.php:73
632
- #: view/admin/item_list.php:75
633
- msgid "re-order"
634
- msgstr "並べ替え"
635
-
636
- #: view/admin/group_list.php:74
637
- #: view/admin/item_list.php:76
638
- msgid "save order"
639
- msgstr "並び順を保存"
640
-
641
- #: view/admin/group_list.php:87
642
- msgid "You have no groups in this module."
643
- msgstr "このモジュールにはグループがありません。"
644
-
645
- #: view/admin/group_list.php:92
646
- msgid "Add Group"
647
- msgstr "グループを追加"
648
-
649
- #: view/admin/group_list.php:103
650
- msgid "Add"
651
- msgstr "追加"
652
-
653
- #: view/admin/head.php:4
654
- msgid "Please wait..."
655
- msgstr "お待ちください…"
656
-
657
- #: view/admin/head.php:7
658
- msgid "Are you sure?"
659
- msgstr "本当によろしいですか ?"
660
-
661
- #: view/admin/head.php:8
662
- msgid "No items have been selected"
663
- msgstr "項目が選択されていません"
664
-
665
- #: view/admin/item_edit.php:3
666
- #, php-format
667
- msgid "%s by matching %s"
668
- msgstr "%s: %s の一致"
669
-
670
- #: view/admin/item_edit.php:7
671
- msgid "Title"
672
- msgstr "タイトル"
673
-
674
- #: view/admin/item_edit.php:10
675
- msgid "optional"
676
- msgstr "オプション"
677
-
678
- #: view/admin/item_list.php:6
679
- msgid "Redirections for group"
680
- msgstr "グループ転送"
681
-
682
- #: view/admin/item_list.php:26
683
- msgid "Go"
684
- msgstr "Go"
685
-
686
- #: view/admin/item_list.php:33
687
- msgid "Last Access"
688
- msgstr "前回のアクセス"
689
-
690
- #: view/admin/item_list.php:35
691
- #: view/admin/module_list.php:45
692
- msgid "Type"
693
- msgstr "タイプ"
694
-
695
- #: view/admin/item_list.php:36
696
- msgid "URL"
697
- msgstr "URL"
698
-
699
- #: view/admin/item_list.php:36
700
- msgid "Position"
701
- msgstr "位置"
702
-
703
- #: view/admin/item_list.php:80
704
- msgid "You have no redirections."
705
- msgstr "転送ルールが設定されていません。"
706
-
707
- #: view/admin/log.php:6
708
- msgid "Redirection Log"
709
- msgstr "転送ログ"
710
-
711
- #: view/admin/log.php:29
712
- msgid "Bulk Actions"
713
- msgstr "一括操作"
714
-
715
- #: view/admin/log.php:33
716
- msgid "Apply"
717
- msgstr "適用"
718
-
719
- #: view/admin/log.php:49
720
- msgid "Filter"
721
- msgstr "フィルター"
722
-
723
- #: view/admin/log.php:67
724
- msgid "Date"
725
- msgstr "日付"
726
-
727
- #: view/admin/log.php:70
728
- msgid "IP"
729
- msgstr "IP"
730
-
731
- #: view/admin/log.php:83
732
- msgid "There are no logs to display!"
733
- msgstr "表示するログがありません !"
734
-
735
- #: view/admin/log.php:92
736
- msgid "Process Current Logs"
737
- msgstr "現在のログを処理"
738
-
739
- #: view/admin/log.php:93
740
- msgid "These actions will affect all currently available logs (i.e. your search phrase will restrict the log items)."
741
- msgstr "以下の操作は現在利用できるログのすべてに対して行われます (例: 検索キーワードによってログ項目を制限)"
742
-
743
- #: view/admin/log.php:98
744
- msgid "Delete Logs"
745
- msgstr "ログを削除"
746
-
747
- #: view/admin/log.php:99
748
- msgid "Export to CSV"
749
- msgstr "CSV としてエクスポート"
750
-
751
- #: view/admin/log_item_details.php:9
752
- msgid "Redirect to"
753
- msgstr "転送先: "
754
-
755
- #: view/admin/log_item_details.php:15
756
- msgid "Redirected by"
757
- msgstr "転送: "
758
-
759
- #: view/admin/log_item_details.php:16
760
- msgid "for"
761
- msgstr ": "
762
-
763
- #: view/admin/module_item.php:23
764
- msgid "View as"
765
- msgstr "以下の形式で表示"
766
-
767
- #: view/admin/module_item.php:25
768
- msgid "CSV"
769
- msgstr "CSV"
770
-
771
- #: view/admin/module_item.php:26
772
- msgid "XML"
773
- msgstr "XML"
774
-
775
- #: view/admin/module_item.php:28
776
- msgid "RSS"
777
- msgstr "RSS"
778
-
779
- #: view/admin/module_item.php:41
780
- msgid "edit"
781
- msgstr "編集"
782
-
783
- #: view/admin/module_item.php:44
784
- msgid "delete"
785
- msgstr "削除"
786
-
787
- #: view/admin/module_item.php:47
788
- msgid "reset"
789
- msgstr "リセット"
790
-
791
- #: view/admin/module_list.php:6
792
- #: view/admin/submenu.php:6
793
- msgid "Modules"
794
- msgstr "モジュール"
795
-
796
- #: view/admin/module_list.php:13
797
- msgid "Details"
798
- msgstr "詳細"
799
-
800
- #: view/admin/module_list.php:14
801
- #: view/admin/submenu.php:5
802
- msgid "Groups"
803
- msgstr "グループ"
804
-
805
- #: view/admin/module_list.php:15
806
- msgid "Items"
807
- msgstr "項目"
808
-
809
- #: view/admin/module_list.php:17
810
- msgid "Operations"
811
- msgstr "アクション"
812
-
813
- #: view/admin/module_list.php:26
814
- msgid "Note: Hits are dependant on log entries"
815
- msgstr "注: 表示数はログ件数を元にしています"
816
-
817
- #: view/admin/module_list.php:28
818
- msgid "You have no modules defined yet"
819
- msgstr "モジュールが定義されていません"
820
-
821
- #: view/admin/module_list.php:33
822
- msgid "Add Module"
823
- msgstr "モジュールを追加"
824
-
825
- #: view/admin/module_list.php:34
826
- msgid "A module is a controlling element that determines how redirections are handled. Elements in a WordPress module are handled by WordPress, elements in an Apache module are handled by <code>.htaccess</code>, and elements in a 404 module affect how 404 errors are logged."
827
- msgstr "モジュール"
828
-
829
- #: view/admin/module_list.php:54
830
- msgid "Create"
831
- msgstr "生成"
832
-
833
- #: view/admin/options.php:6
834
- #: view/admin/submenu.php:8
835
- msgid "Options"
836
- msgstr "設定"
837
-
838
- #: view/admin/options.php:15
839
- msgid "Auto-generate URL"
840
- msgstr "URL を自動生成 "
841
-
842
- #: view/admin/options.php:19
843
- msgid "This will be used to auto-generate a URL if no URL is given. You can use the special tags $dec$ or $hex$ to have a unique ID inserted (either decimal or hex)"
844
- msgstr "もし URL が指定されていない場合自動生成されます。特別なタグ $dec$ または $hex$ を使い、10進法または16進法の固有 ID を挿入できます。"
845
-
846
- #: view/admin/options.php:24
847
- msgid "IP Lookup Service"
848
- msgstr "IP 参照サービス"
849
-
850
- #: view/admin/options.php:30
851
- msgid "Plugin Support"
852
- msgstr "プラグインサポート"
853
-
854
- #: view/admin/options.php:33
855
- msgid "I'm a nice person and I have helped support the author of this plugin"
856
- msgstr "このプラグインの作者に対する援助を行いました"
857
-
858
- #: view/admin/options.php:37
859
- msgid "Expire Logs"
860
- msgstr "ログの有効期限"
861
-
862
- #: view/admin/options.php:40
863
- msgid "days (enter 0 for no expiry)"
864
- msgstr "日 (無期限にするには0を入力)"
865
-
866
- #: view/admin/options.php:44
867
- msgid "RSS Token"
868
- msgstr "RSS トークン"
869
-
870
- #: view/admin/options.php:47
871
- msgid "A unique token allowing feed readers access to Redirection RSS (leave blank to auto-generate)"
872
- msgstr "リディレクション RSS にフィードリーダーからアクセスするための固有トークン (空白にしておけば自動生成します)"
873
-
874
- #: view/admin/options.php:52
875
- msgid "URL Monitoring"
876
- msgstr "URL モニタリング"
877
-
878
- #: view/admin/options.php:53
879
- msgid "You can have Redirection detect changes in URLs and have an automatic redirection created in a specific group."
880
- msgstr "リディレクションプラグインは変更された URL を発見し、指定したグループへ自動的に転送できます。"
881
-
882
- #: view/admin/options.php:57
883
- msgid "Post &amp; Page URLs"
884
- msgstr "投稿・ページ URL"
885
-
886
- #: view/admin/options.php:60
887
- #: view/admin/options.php:72
888
- msgid "Don't monitor"
889
- msgstr "モニターしない"
890
-
891
- #: view/admin/options.php:64
892
- msgid "Monitor new posts"
893
- msgstr "新規投稿をモニター"
894
-
895
- #: view/admin/options.php:69
896
- msgid "Category URLs"
897
- msgstr "カテゴリー URL"
898
-
899
- #: view/admin/options.php:79
900
- msgid "Update"
901
- msgstr "更新"
902
-
903
- #: view/admin/options.php:85
904
- msgid "Import"
905
- msgstr "インポート"
906
-
907
- #: view/admin/options.php:87
908
- msgid "Here you can import redirections from an existing .htaccess file, a CSV file, or a Redirection XML."
909
- msgstr "ここで既存の .htaccess ファイル、CSV ファイル、またはリディレクションプラグイン XML から転送ルールをインポートできます。"
910
-
911
- #: view/admin/options.php:94
912
- msgid "Import into"
913
- msgstr "インポート先"
914
-
915
- #: view/admin/options.php:97
916
- msgid "Upload"
917
- msgstr "アップロード"
918
-
919
- #: view/admin/options.php:100
920
- msgid "Note that the group is ignored when uploading an XML file."
921
- msgstr "XML ファイルをアップロードする際、グループは無視されますのでご注意ください。"
922
-
923
- #: view/admin/options.php:104
924
- msgid "Delete Redirection"
925
- msgstr "転送ルールを削除"
926
-
927
- #: view/admin/options.php:105
928
- msgid "Selecting this option will delete all redirections, all logs, and any options associated with the Redirection plugin. Make sure this is what you want to do."
929
- msgstr "個のオプションを選択すると、リディレクションプラグインに関するすべての転送ルール・ログ・設定を削除します。本当にこの操作を行って良いか、再度確認してください。"
930
-
931
- #: view/admin/submenu.php:4
932
- msgid "Redirects"
933
- msgstr "転送ルール"
934
-
935
- #: view/admin/submenu.php:7
936
- msgid "Log"
937
- msgstr "ログ"
938
-
939
- #: view/admin/submenu.php:9
940
- msgid "Support"
941
- msgstr "作者を応援 "
942
-
943
- #: view/admin/support.php:5
944
- msgid "Redirection Support"
945
- msgstr "リディレクション サポート"
946
-
947
- #: view/admin/support.php:9
948
- msgid "Redirection has required a great deal of time and effort to develop. If it's been useful to you then you can support this development by <strong>making a small donation of $12</strong>. This will act as an incentive for me to carry on developing it, providing countless hours of support, and including any enhancements that are suggested."
949
- msgstr "リディレクションプラグインの開発には長い時間がかかりました。もしあなたの役に立ったなら、<strong>$12 のささやかな寄付をして</strong>開発者を応援してください。開発の継続、数えきれないほどの時間のサポート提供、提案された改善の追加を行うためのやる気につながります。"
950
-
951
- #: view/admin/support.php:30
952
- msgid "Alternatively, if you are multi-lingual, do consider translating this into another language. All the necessary localisation files are included and I've written a <a href=\"http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/\">full guide to the translation process</a>."
953
- msgstr "あなたがもし複数の言語をご存知なら、このプラグインを他の言語に訳するお手伝いをお願いします。翻訳に必要なファイルはすべて含まれており、<a href=\"http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/\">翻訳プロセスのガイドライン</a>もあります。"
954
-
955
- #: view/admin/support.php:32
956
- msgid "Other plugins"
957
- msgstr "他のプラグイン"
958
-
959
- #: view/admin/support.php:34
960
- msgid "You may also be interested in some of my other plugins:"
961
- msgstr "私の他のプラグインもご利用ください:"
962
-
963
- #: view/admin/support.php:37
964
- msgid "HeadSpace"
965
- msgstr "HeadSpace"
966
-
967
- #: view/admin/support.php:37
968
- msgid "The most complete SEO meta-data manager and all-round general purpose plugin for WordPress. Replace five or six plugins with one single super-plugin!"
969
- msgstr "最も完成された SEO メタデータ管理および一般用途向け WordPress プラグイン。この強力なプラグインひとつで5、6個の他のプラグインを置き換えることができます !"
970
-
971
- #: view/admin/support.php:38
972
- msgid "Search Unleashed"
973
- msgstr "Search Unleashed"
974
-
975
- #: view/admin/support.php:38
976
- msgid "Attractive searches that go beyond the default WordPress search and increase the usefulness of your site."
977
- msgstr "デフォルトの WordPress 検索機能を超える魅力的な検索プラグイン。サイトを皿に使いやすくします。"
978
-
979
- #: view/admin/support.php:39
980
- msgid "Sniplets"
981
- msgstr "Sniplets"
982
-
983
- #: view/admin/support.php:39
984
- msgid "Very flexible and powerful text insertion that allows you to insert what you want, wherever you want it."
985
- msgstr "柔軟で強力なテキスト挿入プラグイン。好きなところに好きなテキストを挿入できます。"
986
-
987
- #~ msgid "How many widgets would you like?"
988
- #~ msgstr "いくつウィジェットを追加しますか ?"
989
- #~ msgid "This notice will only be shown at periodic intervals."
990
- #~ msgstr "このお知らせは定期的な間隔でのみ表示されます。"
991
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
locale/{ar_AR.mo → redirection-ar_AR.mo} RENAMED
File without changes
locale/{ar_AR.po → redirection-ar_AR.po} RENAMED
File without changes
locale/{be_BY.mo → redirection-be_BY.mo} RENAMED
File without changes
locale/{be_BY.po → redirection-be_BY.po} RENAMED
File without changes
locale/{ca.mo → redirection-ca.mo} RENAMED
File without changes
locale/{ca.po → redirection-ca.po} RENAMED
File without changes
locale/{cs_CZ.mo → redirection-cs_CZ.mo} RENAMED
File without changes
locale/{cs_CZ.po → redirection-cs_CZ.po} RENAMED
File without changes
locale/{da.mo → redirection-da.mo} RENAMED
File without changes
locale/{da.po → redirection-da.po} RENAMED
File without changes
locale/{da_DK.mo → redirection-da_DK.mo} RENAMED
File without changes
locale/{da_DK.po → redirection-da_DK.po} RENAMED
File without changes
locale/{de_DE.mo → redirection-de_DE.mo} RENAMED
File without changes
locale/{de_DE.po → redirection-de_DE.po} RENAMED
File without changes
locale/{el_GR.mo → redirection-el_GR.mo} RENAMED
File without changes
locale/{el_GR.po → redirection-el_GR.po} RENAMED
File without changes
locale/{es_ES.mo → redirection-es_ES.mo} RENAMED
File without changes
locale/{es_ES.po → redirection-es_ES.po} RENAMED
File without changes
locale/{fa_IR.mo → redirection-fa_IR.mo} RENAMED
File without changes
locale/{fa_IR.po → redirection-fa_IR.po} RENAMED
File without changes
locale/{fr_FR.mo → redirection-fr_FR.mo} RENAMED
File without changes
locale/{fr_FR.po → redirection-fr_FR.po} RENAMED
File without changes
locale/{he_IL.mo → redirection-he_IL.mo} RENAMED
File without changes
locale/{he_IL.po → redirection-he_IL.po} RENAMED
File without changes
locale/{hi_IN.mo → redirection-hi_IN.mo} RENAMED
File without changes
locale/{hi_IN.po → redirection-hi_IN.po} RENAMED
File without changes
locale/{hu_HU.mo → redirection-hu_HU.mo} RENAMED
File without changes
locale/{hu_HU.po → redirection-hu_HU.po} RENAMED
File without changes
locale/{id_ID.mo → redirection-id_ID.mo} RENAMED
File without changes
locale/{id_ID.po → redirection-id_ID.po} RENAMED
File without changes
locale/{it_IT.mo → redirection-it_IT.mo} RENAMED
File without changes
locale/{it_IT.po → redirection-it_IT.po} RENAMED
File without changes
locale/redirection-ja.mo ADDED
Binary file
locale/redirection-ja.po ADDED
@@ -0,0 +1,1180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Japanese (UTF-8) translation for WordPress Plugin Redirection 2.1.14
2
+ #
3
+ # Copyright (c) 2009
4
+ # このファイルは WordPress 本体と同じライセンスのもと配布されています。
5
+ # This file is distributed under the same license as the WordPress package.
6
+ #
7
+ # WordPress J-Series Project
8
+ # <http://wppluginsj.sourceforge.jp/i18n-ja_jp/>
9
+ #
10
+ msgid ""
11
+ msgstr ""
12
+ "Project-Id-Version: Redirection 2.1.14\n"
13
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/redirection\n"
14
+ "POT-Creation-Date: 2015-02-25 16:15+0900\n"
15
+ "PO-Revision-Date: 2015-02-25 16:39+0900\n"
16
+ "Last-Translator: Naoko Takano <info@nao-net.com>\n"
17
+ "Language-Team: \n"
18
+ "Language: ja\n"
19
+ "MIME-Version: 1.0\n"
20
+ "Content-Type: text/plain; charset=UTF-8\n"
21
+ "Content-Transfer-Encoding: 8bit\n"
22
+ "X-Poedit-SourceCharset: UTF-8\n"
23
+ "X-Poedit-Basepath: ../\n"
24
+ "X-Poedit-KeywordsList: __;_e\n"
25
+ "X-Generator: Poedit 1.7.1\n"
26
+ "Plural-Forms: nplurals=1; plural=0;\n"
27
+ "X-Poedit-SearchPath-0: .\n"
28
+
29
+ #: fileio/rss.php:28
30
+ #, php-format
31
+ msgid "Referred by %s"
32
+ msgstr "リファラー: %s"
33
+
34
+ #: matches/login.php:27
35
+ msgid "URL and login status"
36
+ msgstr "URL およびログイン状態"
37
+
38
+ #: matches/login.php:36
39
+ msgid ""
40
+ "The target URL will be chosen from one of the following URLs, depending if "
41
+ "the user is logged in or out. Leaving a URL blank means that the user is "
42
+ "not redirected."
43
+ msgstr ""
44
+ "ユーザーがログインしているかどうかにより、ターゲット URL は以下のうちいずれか"
45
+ "になります。URL を空白にした場合、そのユーザーは転送されません。"
46
+
47
+ #: matches/login.php:43 matches/login.php:45
48
+ msgid "Logged In"
49
+ msgstr "ログイン中"
50
+
51
+ #: matches/login.php:55 matches/login.php:57
52
+ msgid "Logged Out"
53
+ msgstr "ログアウト中"
54
+
55
+ #: matches/referrer.php:28
56
+ msgid "URL and referrer"
57
+ msgstr "URL およびリファラー"
58
+
59
+ #: matches/referrer.php:40 models/pager.php:438 models/pager.php:569
60
+ msgid "Referrer"
61
+ msgstr "リファラー"
62
+
63
+ #: matches/referrer.php:43 view/admin/item_edit.php:7
64
+ msgid "Regex"
65
+ msgstr "正規表現"
66
+
67
+ #: matches/referrer.php:47 matches/referrer.php:57 matches/url.php:40
68
+ #: matches/user_agent.php:57
69
+ msgid "HTTP Code"
70
+ msgstr "HTTP コード"
71
+
72
+ #: matches/referrer.php:59
73
+ msgid ""
74
+ "The visitor will be redirected from the source URL if the referrer matches. "
75
+ "You can specify a <em>matched</em> target URL as the address to send "
76
+ "visitors if they do match, and <em>not matched</em> if they don't match. "
77
+ "Leaving a URL blank means that the visitor is not redirected."
78
+ msgstr ""
79
+ "もしリファラーが一致する場合、ソース URL から転送されます。<strong>一致の場合"
80
+ "</strong>と<strong>不一致の場合</strong>に転送先にするターゲット URL をそれぞ"
81
+ "れ指定できます。URL を空のままにした場合、ユーザーは転送されません。"
82
+
83
+ #: matches/referrer.php:65 matches/referrer.php:67 matches/user_agent.php:77
84
+ #: matches/user_agent.php:79
85
+ msgid "Matched"
86
+ msgstr "一致の場合"
87
+
88
+ #: matches/referrer.php:75 matches/referrer.php:77 matches/user_agent.php:87
89
+ #: matches/user_agent.php:89
90
+ msgid "Not matched"
91
+ msgstr "不一致の場合"
92
+
93
+ #: matches/url.php:25
94
+ msgid "URL only"
95
+ msgstr "URL のみ"
96
+
97
+ #: matches/url.php:32 view/admin/add.php:32
98
+ msgid "Target URL"
99
+ msgstr "ターゲット URL"
100
+
101
+ #: matches/user_agent.php:27
102
+ msgid "URL and user agent"
103
+ msgstr "URL およびユーザーエージェント"
104
+
105
+ #: matches/user_agent.php:32
106
+ msgid "FeedBurner"
107
+ msgstr "FeedBurner"
108
+
109
+ #: matches/user_agent.php:33
110
+ msgid "Internet Explorer"
111
+ msgstr "Internet Explorer"
112
+
113
+ #: matches/user_agent.php:34
114
+ msgid "FireFox"
115
+ msgstr "FireFox"
116
+
117
+ #: matches/user_agent.php:35
118
+ msgid "Opera"
119
+ msgstr "Opera"
120
+
121
+ #: matches/user_agent.php:36
122
+ msgid "Safari"
123
+ msgstr "Safari"
124
+
125
+ #: matches/user_agent.php:37
126
+ msgid "iPhone"
127
+ msgstr "iPhone"
128
+
129
+ #: matches/user_agent.php:38
130
+ msgid "iPad"
131
+ msgstr "iPad"
132
+
133
+ #: matches/user_agent.php:39
134
+ msgid "Android"
135
+ msgstr "Android"
136
+
137
+ #: matches/user_agent.php:40
138
+ msgid "Nintendo Wii"
139
+ msgstr "Nintendo Wii"
140
+
141
+ #: matches/user_agent.php:45
142
+ msgid "User Agent"
143
+ msgstr "ユーザーエージェント"
144
+
145
+ #: matches/user_agent.php:70
146
+ msgid ""
147
+ "The visitor will be redirected from the source URL if the user agent "
148
+ "matches. You can specify a <em>matched</em> target URL as the address to "
149
+ "send visitors if they do match, and <em>not matched</em> if they don't "
150
+ "match. Leaving a URL blank means that the visitor is not redirected. "
151
+ "<strong>All matches are performed as regular expressions</strong>.\n"
152
+ msgstr ""
153
+ "もしユーザーエージェントが一致する場合、ソース URL から転送されます。<strong>"
154
+ "一致の場合</strong>と<strong>不一致の場合</strong>に転送先にするターゲット "
155
+ "URL をそれぞれ指定できます。URL を空のままにした場合、ユーザーは転送されませ"
156
+ "ん。<strong>一致条件の判定はすべて正規表現で行われます</strong>。\n"
157
+
158
+ #: models/database.php:108 models/module.php:168 modules/wordpress.php:116
159
+ msgid "WordPress"
160
+ msgstr "WordPress"
161
+
162
+ #: models/database.php:109 models/module.php:167 modules/apache.php:188
163
+ msgid "Apache"
164
+ msgstr "Apache"
165
+
166
+ #: models/database.php:114 view/admin/item_list.php:5
167
+ msgid "Redirections"
168
+ msgstr "転送ルール"
169
+
170
+ #: models/database.php:115
171
+ msgid "Modified Posts"
172
+ msgstr "編集済みの投稿"
173
+
174
+ #: models/group.php:202
175
+ msgid "Yes"
176
+ msgstr "はい"
177
+
178
+ #: models/group.php:203
179
+ msgid "No"
180
+ msgstr "いいえ"
181
+
182
+ #: models/module.php:192
183
+ msgid "Strip WWW"
184
+ msgstr "WWW を除く"
185
+
186
+ #: models/module.php:192
187
+ msgid "Force WWW"
188
+ msgstr "WWW を強制追加"
189
+
190
+ #: models/module.php:197
191
+ msgid "Strip index.php"
192
+ msgstr "index.php を除く"
193
+
194
+ #: models/pager.php:25 models/pager.php:667
195
+ msgid "Type"
196
+ msgstr "タイプ"
197
+
198
+ #: models/pager.php:26
199
+ msgid "URL"
200
+ msgstr "URL"
201
+
202
+ #: models/pager.php:27 models/pager.php:670
203
+ msgid "Hits"
204
+ msgstr "ヒット数"
205
+
206
+ #: models/pager.php:28
207
+ msgid "Last Access"
208
+ msgstr "前回のアクセス"
209
+
210
+ #: models/pager.php:50 models/pager.php:245 models/pager.php:689
211
+ msgid "Edit"
212
+ msgstr "編集"
213
+
214
+ #: models/pager.php:51 models/pager.php:98 models/pager.php:246
215
+ #: models/pager.php:281 models/pager.php:456 models/pager.php:586
216
+ #: view/admin/options.php:108
217
+ msgid "Delete"
218
+ msgstr "削除"
219
+
220
+ #: models/pager.php:56 models/pager.php:100
221
+ msgid "Disable"
222
+ msgstr "無効化"
223
+
224
+ #: models/pager.php:58 models/pager.php:99
225
+ msgid "Enable"
226
+ msgstr "有効化"
227
+
228
+ #: models/pager.php:101
229
+ msgid "Reset Hits"
230
+ msgstr "訪問数をリセット"
231
+
232
+ #: models/pager.php:155 models/pager.php:322
233
+ msgid "Filter"
234
+ msgstr "フィルター"
235
+
236
+ #: models/pager.php:236 models/pager.php:668 view/admin/group_edit.php:4
237
+ #: view/admin/group_list.php:28 view/admin/module_edit.php:4
238
+ msgid "Name"
239
+ msgstr "名称"
240
+
241
+ #: models/pager.php:237 view/admin/submenu.php:6
242
+ msgid "Redirects"
243
+ msgstr "転送ルール"
244
+
245
+ #: models/pager.php:247
246
+ msgid "View Redirects"
247
+ msgstr "転送ルールを表示"
248
+
249
+ #: models/pager.php:399 models/pager.php:533
250
+ msgid "Add redirect"
251
+ msgstr "転送ルールを追加"
252
+
253
+ #: models/pager.php:436 models/pager.php:567
254
+ msgid "Date"
255
+ msgstr "日付"
256
+
257
+ #: models/pager.php:437 models/pager.php:568 view/admin/add.php:13
258
+ #: view/admin/item_edit.php:4
259
+ msgid "Source URL"
260
+ msgstr "ソース URL"
261
+
262
+ #: models/pager.php:439 models/pager.php:570
263
+ msgid "IP"
264
+ msgstr "IP"
265
+
266
+ #: models/pager.php:539
267
+ msgid "Show only this IP"
268
+ msgstr "この IP のみ表示"
269
+
270
+ #: models/pager.php:669 view/admin/group_list.php:5 view/admin/submenu.php:11
271
+ msgid "Groups"
272
+ msgstr "グループ"
273
+
274
+ #: models/redirect.php:200
275
+ msgid "Source and target URL must be different"
276
+ msgstr "ソースとターゲット URL は異なるものを指定してください"
277
+
278
+ #: models/redirect.php:207
279
+ msgid "Invalid group when creating redirect"
280
+ msgstr "転送ルールを作成する際に無効なグループが指定されました"
281
+
282
+ #: models/redirect.php:210
283
+ msgid "Invalid source URL when creating redirect for given match type"
284
+ msgstr ""
285
+ "指定された一致タイプの転送ルールを作成する際に無効なソース URL が入力されまし"
286
+ "た"
287
+
288
+ #: models/redirect.php:247
289
+ msgid ""
290
+ "Unable to add new redirect - delete Redirection from the options page and re-"
291
+ "install"
292
+ msgstr ""
293
+ "新規転送ルールを追加できません。設定ページから転送ルールを削除し、再インス"
294
+ "トールしてください。"
295
+
296
+ #: models/redirect.php:427
297
+ msgid "Redirect to URL"
298
+ msgstr "URL へ転送"
299
+
300
+ #: models/redirect.php:428
301
+ msgid "Redirect to random post"
302
+ msgstr "ランダムな記事へ転送"
303
+
304
+ #: models/redirect.php:429
305
+ msgid "Pass-through"
306
+ msgstr "通過"
307
+
308
+ #: models/redirect.php:430
309
+ msgid "Error (404)"
310
+ msgstr "エラー (404)"
311
+
312
+ #: models/redirect.php:431
313
+ msgid "Do nothing"
314
+ msgstr "何もしない"
315
+
316
+ #: modules/apache.php:76
317
+ msgid "Location"
318
+ msgstr "位置"
319
+
320
+ #: modules/apache.php:81
321
+ #, php-format
322
+ msgid "WordPress is installed in: <code>%s</code>"
323
+ msgstr "WordPress のインストール位置: <code>%s</code>"
324
+
325
+ #: modules/apache.php:86
326
+ msgid "Canonical"
327
+ msgstr "カノニカル"
328
+
329
+ #: modules/apache.php:89 modules/apache.php:95
330
+ msgid "Leave as is"
331
+ msgstr "そのままにする"
332
+
333
+ #: modules/apache.php:89
334
+ #, php-format
335
+ msgid "Strip WWW (%s)"
336
+ msgstr "WWW を除く (%s)"
337
+
338
+ #: modules/apache.php:89
339
+ #, php-format
340
+ msgid "Force WWW (www.%s)"
341
+ msgstr "WWW を強制追加 (www.%s)"
342
+
343
+ #: modules/apache.php:93
344
+ msgid "Strip Index"
345
+ msgstr "Index を除く"
346
+
347
+ #: modules/apache.php:95
348
+ msgid "Strip index files (html,php)"
349
+ msgstr "index ファイルを除く (html,php)"
350
+
351
+ #: modules/apache.php:100
352
+ msgid "Memory Limit"
353
+ msgstr "メモリー上限"
354
+
355
+ #: modules/apache.php:103 modules/apache.php:108
356
+ msgid "Server default"
357
+ msgstr "サーバーの初期設定"
358
+
359
+ #: modules/apache.php:106
360
+ msgid "Error Level"
361
+ msgstr "エラーレベル"
362
+
363
+ #: modules/apache.php:108
364
+ msgid "No errors"
365
+ msgstr "エラーなし"
366
+
367
+ #: modules/apache.php:108
368
+ msgid "Show errors"
369
+ msgstr "エラーを表示"
370
+
371
+ #: modules/apache.php:113
372
+ msgid "Ban IPs"
373
+ msgstr "禁止 IP"
374
+
375
+ #: modules/apache.php:119
376
+ msgid "Allow IPs"
377
+ msgstr "許可 IP"
378
+
379
+ #: modules/apache.php:125
380
+ msgid "Raw .htaccess"
381
+ msgstr "生の .htaccess"
382
+
383
+ #: modules/apache.php:131
384
+ msgid "Site URL"
385
+ msgstr "サイト URL "
386
+
387
+ #: modules/apache.php:134
388
+ msgid "Advanced: For management of external sites"
389
+ msgstr "高度な設定: 外部サイト管理用"
390
+
391
+ #: modules/apache.php:149
392
+ msgid "<strong>Location is invalid - check that path exists</strong>"
393
+ msgstr ""
394
+ "<strong>ファイルの位置が正しくありません。パスが存在するか確認してください。"
395
+ "</strong>"
396
+
397
+ #: modules/apache.php:155
398
+ msgid ""
399
+ "<strong>Could not write to configured <code>.htaccess</code> file - check "
400
+ "file permissions</strong>"
401
+ msgstr ""
402
+ "<strong>設定済みの <code>.htaccess</code> に書き込みできませんでした。パー"
403
+ "ミッションを確認してください。</strong>"
404
+
405
+ #: modules/apache.php:162
406
+ msgid ""
407
+ "<strong>Disabled: enter the location of an <code>.htaccess</code> file for "
408
+ "this to be valid</strong>"
409
+ msgstr ""
410
+ "<strong>無効: 有効にするには<code>.htaccess</code> ファイルの位置を入力してく"
411
+ "ださい。</strong>"
412
+
413
+ #: modules/apache.php:167
414
+ msgid "strip WWW"
415
+ msgstr "WWW を除く"
416
+
417
+ #: modules/apache.php:167
418
+ msgid "force WWW"
419
+ msgstr "WWW を追加"
420
+
421
+ #: modules/apache.php:170
422
+ msgid "strip index"
423
+ msgstr "index を除く"
424
+
425
+ #: modules/apache.php:173
426
+ #, php-format
427
+ msgid "memory limit at %dMB"
428
+ msgstr "メモリー上限%dMB"
429
+
430
+ #: modules/apache.php:176
431
+ msgid "no errors"
432
+ msgstr "エラーなし"
433
+
434
+ #: modules/apache.php:176
435
+ msgid "show errors"
436
+ msgstr "エラーを表示"
437
+
438
+ #: modules/apache.php:179
439
+ msgid "IPs are banned"
440
+ msgstr "禁止 IP"
441
+
442
+ #: modules/apache.php:182
443
+ msgid "IPs are allowed"
444
+ msgstr "許可 IP"
445
+
446
+ #: modules/wordpress.php:112
447
+ msgid ""
448
+ "<strong>Disabled: You must enable <a href=\"options-permalink.php"
449
+ "\">permalinks</a> before using this</strong>"
450
+ msgstr ""
451
+ "<strong>無効: これを使用する前に<a href=\"options-permalink.php\">パーマリン"
452
+ "ク</a>を有効にする必要があります。</strong>"
453
+
454
+ #: redirection-admin.php:130
455
+ msgid "Settings"
456
+ msgstr "設定"
457
+
458
+ #: redirection-admin.php:142
459
+ msgid "Log entries"
460
+ msgstr "エントリーのログを保存"
461
+
462
+ #: redirection-admin.php:148
463
+ msgid "Sorry, unable to do that. Please try refreshing the page."
464
+ msgstr "ご指定の操作は実行できません。ページを再読み込みしてみてください。"
465
+
466
+ #: redirection-admin.php:153
467
+ msgid "Redirection"
468
+ msgstr "リディレクション"
469
+
470
+ #: redirection-admin.php:220 redirection-admin.php:236
471
+ msgid "Your options were updated"
472
+ msgstr "設定を更新しました。"
473
+
474
+ #: redirection-admin.php:245
475
+ msgid "Redirection data has been deleted and the plugin disabled"
476
+ msgstr "リディレクションデータを削除し、プラグインを無効化しました。"
477
+
478
+ #: redirection-admin.php:252
479
+ #, php-format
480
+ msgid "%d redirection was successfully imported"
481
+ msgid_plural "%d redirections were successfully imported"
482
+ msgstr[0] "%d件の転送をインポートしました。"
483
+
484
+ #: redirection-admin.php:254
485
+ msgid "No items were imported"
486
+ msgstr "項目をインポートできませんでした。"
487
+
488
+ #: redirection-admin.php:266 redirection-admin.php:286
489
+ msgid "Your logs have been deleted"
490
+ msgstr "ログを削除しました。"
491
+
492
+ #: redirection-admin.php:300
493
+ msgid "Your group was added successfully"
494
+ msgstr "グループの追加に成功しました。"
495
+
496
+ #: redirection-admin.php:304
497
+ msgid "Please specify a group name"
498
+ msgstr "グループ名を指定してください。"
499
+
500
+ #: redirection-admin.php:317
501
+ msgid "Unknown module"
502
+ msgstr "不明なモジュール"
503
+
504
+ #: redirection-admin.php:366 redirection-admin.php:378
505
+ #: redirection-admin.php:401 redirection-admin.php:415
506
+ #: redirection-admin.php:436 redirection-admin.php:448
507
+ #: redirection-admin.php:470
508
+ msgid "Unable to perform action"
509
+ msgstr "操作を実行できません"
510
+
511
+ #: redirection-admin.php:490
512
+ msgid "Sorry, but your redirection was not created"
513
+ msgstr "転送ルールを作成できませんでした。"
514
+
515
+ #: view/admin/add.php:4
516
+ msgid "Add new redirection"
517
+ msgstr "新しい転送ルールを追加"
518
+
519
+ #: view/admin/add.php:7
520
+ msgid "Your redirection has been added."
521
+ msgstr "新しい転送ルールを追加しました。"
522
+
523
+ #: view/admin/add.php:17
524
+ msgid "Match"
525
+ msgstr "一致条件"
526
+
527
+ #: view/admin/add.php:23
528
+ msgid "Action"
529
+ msgstr "操作"
530
+
531
+ #: view/admin/add.php:28
532
+ msgid "Regular expression"
533
+ msgstr "正規表現"
534
+
535
+ #: view/admin/add.php:37
536
+ msgid "Group"
537
+ msgstr "グループ"
538
+
539
+ #: view/admin/add.php:44
540
+ msgid "Add Redirection"
541
+ msgstr "新しい転送ルールを追加"
542
+
543
+ #: view/admin/group_edit.php:8
544
+ msgid "Tracked"
545
+ msgstr "追跡"
546
+
547
+ #: view/admin/group_edit.php:9
548
+ msgid "Whether to track 'hits' to items"
549
+ msgstr "項目のヒット数を追跡"
550
+
551
+ #: view/admin/group_edit.php:12
552
+ msgid "Enabled"
553
+ msgstr "有効"
554
+
555
+ #: view/admin/group_edit.php:13
556
+ msgid "Disabling a group will disable all items contained within it"
557
+ msgstr "グループを無効化すると、含まれた項目すべてが無効になります"
558
+
559
+ #: view/admin/group_edit.php:19 view/admin/item_edit.php:26
560
+ #: view/admin/module_edit.php:14
561
+ msgid "Save"
562
+ msgstr "保存"
563
+
564
+ #: view/admin/group_edit.php:20 view/admin/item_edit.php:27
565
+ #: view/admin/module_edit.php:15
566
+ msgid "Cancel"
567
+ msgstr "キャンセル"
568
+
569
+ #: view/admin/group_list.php:13 view/admin/item_list.php:12
570
+ #: view/admin/log.php:13
571
+ msgid "Search"
572
+ msgstr "検索"
573
+
574
+ #: view/admin/group_list.php:22
575
+ msgid "Add Group"
576
+ msgstr "グループを追加"
577
+
578
+ #: view/admin/group_list.php:34
579
+ msgid "Add"
580
+ msgstr "追加"
581
+
582
+ #: view/admin/item_edit.php:13
583
+ msgid "Description"
584
+ msgstr "説明"
585
+
586
+ #: view/admin/item_edit.php:16
587
+ msgid "optional"
588
+ msgstr "オプション"
589
+
590
+ #: view/admin/log.php:5
591
+ msgid "Redirection Log"
592
+ msgstr "転送ログ"
593
+
594
+ #: view/admin/log.php:19
595
+ msgid "Log Management"
596
+ msgstr "ログ管理"
597
+
598
+ #: view/admin/log.php:23
599
+ msgid "These apply to the current search term, if any, otherwise all logs."
600
+ msgstr ""
601
+ "これらは現在の検索キーワードに適用されます。もしキーワードがない場合はすべて"
602
+ "のログに適用されます。"
603
+
604
+ #: view/admin/log.php:25
605
+ msgid "Delete All"
606
+ msgstr "すべてを削除"
607
+
608
+ #: view/admin/log.php:28
609
+ msgid "Export To CSV"
610
+ msgstr "CSV としてエクスポート"
611
+
612
+ #: view/admin/module_list.php:5 view/admin/submenu.php:16
613
+ msgid "Modules"
614
+ msgstr "モジュール"
615
+
616
+ #: view/admin/options.php:6
617
+ msgid "No logs"
618
+ msgstr "ログなし"
619
+
620
+ #: view/admin/options.php:7
621
+ msgid "A day"
622
+ msgstr "1日"
623
+
624
+ #: view/admin/options.php:8
625
+ msgid "A week"
626
+ msgstr "1週間"
627
+
628
+ #: view/admin/options.php:9
629
+ msgid "A month"
630
+ msgstr "1ヶ月"
631
+
632
+ #: view/admin/options.php:10
633
+ msgid "Two months"
634
+ msgstr "2ヶ月"
635
+
636
+ #: view/admin/options.php:11
637
+ msgid "Keep forever"
638
+ msgstr "無期限に保存"
639
+
640
+ #: view/admin/options.php:19 view/admin/submenu.php:42
641
+ msgid "Options"
642
+ msgstr "設定"
643
+
644
+ #: view/admin/options.php:27
645
+ msgid "Plugin Support"
646
+ msgstr "プラグインサポート"
647
+
648
+ #: view/admin/options.php:30
649
+ msgid "I'm a nice person and I have helped support the author of this plugin"
650
+ msgstr "このプラグインの作者に対する援助を行いました"
651
+
652
+ #: view/admin/options.php:34
653
+ msgid "Redirect Logs"
654
+ msgstr "転送ログ"
655
+
656
+ #: view/admin/options.php:40 view/admin/options.php:50
657
+ msgid "(time to keep logs for)"
658
+ msgstr "(ログの保存期間)"
659
+
660
+ #: view/admin/options.php:44
661
+ msgid "404 Logs"
662
+ msgstr "404 ログ"
663
+
664
+ #: view/admin/options.php:54
665
+ msgid "Monitor changes to posts"
666
+ msgstr "投稿の変更をモニター"
667
+
668
+ #: view/admin/options.php:57
669
+ msgid "Don't monitor"
670
+ msgstr "モニターしない"
671
+
672
+ #: view/admin/options.php:63
673
+ msgid "RSS Token"
674
+ msgstr "RSS トークン"
675
+
676
+ #: view/admin/options.php:66
677
+ msgid ""
678
+ "A unique token allowing feed readers access to Redirection log RSS (leave "
679
+ "blank to auto-generate)"
680
+ msgstr ""
681
+ "リディレクションログ RSS にフィードリーダーからアクセスするための固有トーク"
682
+ "ン (空白にしておけば自動生成します)"
683
+
684
+ #: view/admin/options.php:70
685
+ msgid "Auto-generate URL"
686
+ msgstr "URL を自動生成 "
687
+
688
+ #: view/admin/options.php:74
689
+ msgid ""
690
+ "This will be used to auto-generate a URL if no URL is given. You can use "
691
+ "the special tags $dec$ or $hex$ to have a unique ID inserted (either decimal "
692
+ "or hex)"
693
+ msgstr ""
694
+ "もし URL が指定されていない場合自動生成されます。特別なタグ $dec$ または $hex"
695
+ "$ を使い、10進法または16進法の固有 ID を挿入できます。"
696
+
697
+ #: view/admin/options.php:79
698
+ msgid "Update"
699
+ msgstr "更新"
700
+
701
+ #: view/admin/options.php:85
702
+ msgid "Import"
703
+ msgstr "インポート"
704
+
705
+ #: view/admin/options.php:87
706
+ msgid ""
707
+ "Here you can import redirections from an existing .htaccess file, or a CSV "
708
+ "file."
709
+ msgstr ""
710
+ "ここで既存の .htaccess ファイルまたは CSV ファイルから転送ルールをインポート"
711
+ "できます。"
712
+
713
+ #: view/admin/options.php:94
714
+ msgid "Import into"
715
+ msgstr "インポート先"
716
+
717
+ #: view/admin/options.php:97
718
+ msgid "Upload"
719
+ msgstr "アップロード"
720
+
721
+ #: view/admin/options.php:102
722
+ msgid "Delete Redirection"
723
+ msgstr "転送ルールを削除"
724
+
725
+ #: view/admin/options.php:103
726
+ msgid ""
727
+ "Selecting this option will delete all redirections, all logs, and any "
728
+ "options associated with the Redirection plugin. Make sure this is what you "
729
+ "want to do."
730
+ msgstr ""
731
+ "個のオプションを選択すると、リディレクションプラグインに関するすべての転送"
732
+ "ルール・ログ・設定を削除します。本当にこの操作を行って良いか、再度確認してく"
733
+ "ださい。"
734
+
735
+ #: view/admin/submenu.php:23
736
+ msgid "Log"
737
+ msgstr "ログ"
738
+
739
+ #: view/admin/submenu.php:32
740
+ #, php-format
741
+ msgid "404s from %s"
742
+ msgstr "%s からの 404"
743
+
744
+ #: view/admin/submenu.php:34
745
+ msgid "404s"
746
+ msgstr "404 エラー"
747
+
748
+ #: view/admin/submenu.php:47
749
+ msgid "Support"
750
+ msgstr "作者を応援 "
751
+
752
+ #: view/admin/support.php:5
753
+ msgid "Redirection Support"
754
+ msgstr "Redirection を応援する"
755
+
756
+ #: view/admin/support.php:9
757
+ msgid ""
758
+ "Redirection is free to use - life is wonderful and lovely! However, it has "
759
+ "required a great deal of time and effort to develop and if it has been "
760
+ "useful you can help support this development by <strong>making a small "
761
+ "donation</strong>."
762
+ msgstr ""
763
+ "Redirection プラグインは無料でお使いいただけます。しかし、開発にはかなりの時"
764
+ "間と労力がかかっており、<strong>少額の寄付</strong>で開発を助けていただけるよ"
765
+ "うでしたら嬉しく思います。"
766
+
767
+ #: view/admin/support.php:10
768
+ msgid ""
769
+ "This will act as an incentive for me to carry on developing. You get some "
770
+ "useful software and I get to carry on making it. Everybody wins."
771
+ msgstr ""
772
+ "これは私が開発を継続するための動機付けになります。皆さんは役に立つソフトウェ"
773
+ "アを手に入れることができ、私はそれを作り続けられるので、誰もが得をするといえ"
774
+ "ます。"
775
+
776
+ #: view/admin/support.php:13
777
+ msgid ""
778
+ "Please note that a donation is just a donation - it is not a payment for "
779
+ "support. I am not a business, this is not a product, and I'm afraid I cannot "
780
+ "provide paid support"
781
+ msgstr ""
782
+ "寄付はサポートに対する支払いではないことにご注意ください。このプラグインを提"
783
+ "供しているのは法人ではなく、これは商品ではないため、恐れ入りますが有料サポー"
784
+ "トを提供することはできません。"
785
+
786
+ #: view/admin/support.php:15
787
+ msgid ""
788
+ "If you are using this plugin in a commercial setup, or feel that it's been "
789
+ "particularly useful, then you may want to consider a <strong>commercial "
790
+ "donation</strong>."
791
+ msgstr ""
792
+ "このプラグインを商用サイトにお使いの場合、または非常に役に立つプラグインだと"
793
+ "思っていただける場合は、<strong>商用寄付</strong>をご検討ください。"
794
+
795
+ #: view/admin/support.php:38
796
+ msgid "Individual<br/>Donation"
797
+ msgstr "個人の<br/>寄付"
798
+
799
+ #: view/admin/support.php:58
800
+ msgid "Commercial<br/>Donation"
801
+ msgstr "商用<br/>寄付"
802
+
803
+ #: view/admin/support.php:62
804
+ msgid "Translations"
805
+ msgstr "翻訳"
806
+
807
+ #: view/admin/support.php:64
808
+ msgid ""
809
+ "If you're multi-lingual then you may want to consider donating a translation:"
810
+ msgstr "多言語をご存知の場合、翻訳という形で寄付をしていただくこともできます。"
811
+
812
+ #: view/admin/support.php:72
813
+ msgid ""
814
+ "Full details of producing a translation can be found in this <a href="
815
+ "\"http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/"
816
+ "\">guide to translating WordPress plugins</a>."
817
+ msgstr ""
818
+ "翻訳作成に関する詳細は<a href=\"http://urbangiraffe.com/articles/translating-"
819
+ "wordpress-themes-and-plugins/\">翻訳プロセスのガイドライン</a>をご覧くださ"
820
+ "い。"
821
+
822
+ #~ msgid "module_%d.csv"
823
+ #~ msgstr "module_%d.csv"
824
+
825
+ #~ msgid "module_%d.xml"
826
+ #~ msgstr "module_%d.xml"
827
+
828
+ #~ msgid "%s imported on %s at %s"
829
+ #~ msgstr "%s をインポートしました (%s @ %s)"
830
+
831
+ #~ msgid "XML importing is only available with PHP5 - you have PHP4."
832
+ #~ msgstr ""
833
+ #~ "XML インポートは PHP5 上でのみ利用できます。現在 PHP4 をお使いです。"
834
+
835
+ #~ msgid "404"
836
+ #~ msgstr "404"
837
+
838
+ #~ msgid "Previous"
839
+ #~ msgstr "前"
840
+
841
+ #~ msgid "Next"
842
+ #~ msgstr "次"
843
+
844
+ #~ msgid "%d per-page"
845
+ #~ msgstr "%d件表示"
846
+
847
+ #~ msgid "Displaying %s&#8211;%s of %s"
848
+ #~ msgstr "%s&#8211;%s件中%s件を表示中"
849
+
850
+ #~ msgid "<small>No options have been set</small>"
851
+ #~ msgstr "<small>オプションが設定されていません</small>"
852
+
853
+ #~ msgid "Please wait..."
854
+ #~ msgstr "お待ちください…"
855
+
856
+ #~ msgid "Are you sure?"
857
+ #~ msgstr "本当によろしいですか ?"
858
+
859
+ #~ msgid "No items have been selected"
860
+ #~ msgstr "項目が選択されていません"
861
+
862
+ #~ msgid "Your module was successfully created"
863
+ #~ msgstr "モジュールの作成に成功しました。"
864
+
865
+ #~ msgid "Your module was not created - did you provide a name?"
866
+ #~ msgstr "モジュールを作成できませんでした。モジュール名を入力しましたか ?"
867
+
868
+ #~ msgid "edit group"
869
+ #~ msgstr "グループを編集"
870
+
871
+ #~ msgid "Groups for module"
872
+ #~ msgstr "モジュールのグループ"
873
+
874
+ #~ msgid "Module"
875
+ #~ msgstr "モジュール"
876
+
877
+ #~ msgid "go"
878
+ #~ msgstr "go"
879
+
880
+ #~ msgid "Toggle"
881
+ #~ msgstr "切り替え"
882
+
883
+ #~ msgid "Move To"
884
+ #~ msgstr "移動"
885
+
886
+ #~ msgid "Go"
887
+ #~ msgstr "Go"
888
+
889
+ #~ msgid "re-order"
890
+ #~ msgstr "並べ替え"
891
+
892
+ #~ msgid "save order"
893
+ #~ msgstr "並び順を保存"
894
+
895
+ #~ msgid "You have no groups in this module."
896
+ #~ msgstr "このモジュールにはグループがありません。"
897
+
898
+ #~ msgid "%s by matching %s"
899
+ #~ msgstr "%s: %s の一致"
900
+
901
+ #~ msgid "Title"
902
+ #~ msgstr "タイトル"
903
+
904
+ #~ msgid "Redirections for group"
905
+ #~ msgstr "グループ転送"
906
+
907
+ #~ msgid "You have no redirections."
908
+ #~ msgstr "転送ルールが設定されていません。"
909
+
910
+ #~ msgid "Bulk Actions"
911
+ #~ msgstr "一括操作"
912
+
913
+ #~ msgid "Apply"
914
+ #~ msgstr "適用"
915
+
916
+ #~ msgid "There are no logs to display!"
917
+ #~ msgstr "表示するログがありません !"
918
+
919
+ #~ msgid "Process Current Logs"
920
+ #~ msgstr "現在のログを処理"
921
+
922
+ #~ msgid ""
923
+ #~ "These actions will affect all currently available logs (i.e. your search "
924
+ #~ "phrase will restrict the log items)."
925
+ #~ msgstr ""
926
+ #~ "以下の操作は現在利用できるログのすべてに対して行われます (例: 検索キーワー"
927
+ #~ "ドによってログ項目を制限)"
928
+
929
+ #~ msgid "Delete Logs"
930
+ #~ msgstr "ログを削除"
931
+
932
+ #~ msgid "Redirect to"
933
+ #~ msgstr "転送先: "
934
+
935
+ #~ msgid "Redirected by"
936
+ #~ msgstr "転送: "
937
+
938
+ #~ msgid "for"
939
+ #~ msgstr ": "
940
+
941
+ #~ msgid "View as"
942
+ #~ msgstr "以下の形式で表示"
943
+
944
+ #~ msgid "CSV"
945
+ #~ msgstr "CSV"
946
+
947
+ #~ msgid "XML"
948
+ #~ msgstr "XML"
949
+
950
+ #~ msgid "RSS"
951
+ #~ msgstr "RSS"
952
+
953
+ #~ msgid "edit"
954
+ #~ msgstr "編集"
955
+
956
+ #~ msgid "delete"
957
+ #~ msgstr "削除"
958
+
959
+ #~ msgid "reset"
960
+ #~ msgstr "リセット"
961
+
962
+ #~ msgid "Details"
963
+ #~ msgstr "詳細"
964
+
965
+ #~ msgid "Items"
966
+ #~ msgstr "項目"
967
+
968
+ #~ msgid "Operations"
969
+ #~ msgstr "アクション"
970
+
971
+ #~ msgid "Note: Hits are dependant on log entries"
972
+ #~ msgstr "注: 表示数はログ件数を元にしています"
973
+
974
+ #~ msgid "You have no modules defined yet"
975
+ #~ msgstr "モジュールが定義されていません"
976
+
977
+ #~ msgid "Add Module"
978
+ #~ msgstr "モジュールを追加"
979
+
980
+ #~ msgid ""
981
+ #~ "A module is a controlling element that determines how redirections are "
982
+ #~ "handled. Elements in a WordPress module are handled by WordPress, "
983
+ #~ "elements in an Apache module are handled by <code>.htaccess</code>, and "
984
+ #~ "elements in a 404 module affect how 404 errors are logged."
985
+ #~ msgstr "モジュール"
986
+
987
+ #~ msgid "Create"
988
+ #~ msgstr "生成"
989
+
990
+ #~ msgid "IP Lookup Service"
991
+ #~ msgstr "IP 参照サービス"
992
+
993
+ #~ msgid "Logging"
994
+ #~ msgstr "ログ保存中"
995
+
996
+ #~ msgid "log redirected requests"
997
+ #~ msgstr "転送リクエストのログを保存する"
998
+
999
+ #~ msgid "log 404 Not Found requests"
1000
+ #~ msgstr "404 エラーリクエストのログを保存する"
1001
+
1002
+ #~ msgid ""
1003
+ #~ "Uncheck one or both of these to turn off logging and reduce database load "
1004
+ #~ "if your redirected URLs are hit very frequently, and/or your site is very "
1005
+ #~ "busy and pages are often not found."
1006
+ #~ msgstr ""
1007
+ #~ "以下のいずれか、または両方のチェックを外してログの保存を無効化することで、"
1008
+ #~ "データベースの不可を軽減できます。これは、転送 URL が非常に頻繁にアクセス"
1009
+ #~ "されている場合や、サイトのトラフィックが多く 404 ページがよく表示される場"
1010
+ #~ "合に効果的です。"
1011
+
1012
+ #~ msgid "Expire Logs"
1013
+ #~ msgstr "ログの有効期限"
1014
+
1015
+ #~ msgid "days (enter 0 for no expiry)"
1016
+ #~ msgstr "日 (無期限にするには0を入力)"
1017
+
1018
+ #~ msgid "URL Monitoring"
1019
+ #~ msgstr "URL モニタリング"
1020
+
1021
+ #~ msgid ""
1022
+ #~ "You can have Redirection detect changes in URLs and have an automatic "
1023
+ #~ "redirection created in a specific group."
1024
+ #~ msgstr ""
1025
+ #~ "リディレクションプラグインは変更された URL を発見し、指定したグループへ自"
1026
+ #~ "動的に転送できます。"
1027
+
1028
+ #~ msgid "Post &amp; Page URLs"
1029
+ #~ msgstr "投稿・ページ URL"
1030
+
1031
+ #~ msgid "Category URLs"
1032
+ #~ msgstr "カテゴリー URL"
1033
+
1034
+ #~ msgid "Note that the group is ignored when uploading an XML file."
1035
+ #~ msgstr ""
1036
+ #~ "XML ファイルをアップロードする際、グループは無視されますのでご注意くださ"
1037
+ #~ "い。"
1038
+
1039
+ #~ msgid ""
1040
+ #~ "All translators will have a link to their website placed on the plugin "
1041
+ #~ "homepage at <a href=\"http://urbangiraffe.com/plugins/redirection/"
1042
+ #~ "\">UrbanGiraffe</a>, in addition to being an individual supporter."
1043
+ #~ msgstr ""
1044
+ #~ "翻訳者の方は「個人サポーター」として扱われるのに加え、<a href=\"http://"
1045
+ #~ "urbangiraffe.com/plugins/redirection/\">UrbanGiraffe</a> サイトのプラグイ"
1046
+ #~ "ンページでその方のサイトへのリンクを掲載します。"
1047
+
1048
+ #~ msgid "http://urbangiraffe.com/plugins/redirection/"
1049
+ #~ msgstr "http://urbangiraffe.com/plugins/redirection/"
1050
+
1051
+ #~ msgid "Manage all your 301 redirects and monitor 404 errors"
1052
+ #~ msgstr "すべての 301 リダイレクトを管理し、404 エラーをモニター"
1053
+
1054
+ #~ msgid "John Godley"
1055
+ #~ msgstr "John Godley"
1056
+
1057
+ #~ msgid "http://urbangiraffe.com"
1058
+ #~ msgstr "http://urbangiraffe.com"
1059
+
1060
+ #~ msgid ""
1061
+ #~ "<p style=\"color: red\">You are not allowed access to this resource</p>"
1062
+ #~ msgstr ""
1063
+ #~ "<p style=\"color: red\">このリソースにアクセスする権限がありません</p>"
1064
+
1065
+ #~ msgid "<p style=\"color: red\">That function is not defined</p>"
1066
+ #~ msgstr "<p style=\"color: red\">その関数は定義されていません</p>"
1067
+
1068
+ #~ msgid "Failed to retrieve group data"
1069
+ #~ msgstr "グループのデータ取得に失敗しました。"
1070
+
1071
+ #~ msgid "Failed to retrieve module data"
1072
+ #~ msgstr "モジュールのデータ取得に失敗しました。"
1073
+
1074
+ #~ msgid "Redirection Help"
1075
+ #~ msgstr "リディレクションプラグイン ヘルプ"
1076
+
1077
+ #~ msgid "Redirection Documentation"
1078
+ #~ msgstr "リディレクションプラグイン ドキュメンテーション"
1079
+
1080
+ #~ msgid "Redirection Support Forum"
1081
+ #~ msgstr "リディレクションプラグイン サポートフォーラム"
1082
+
1083
+ #~ msgid "Redirection Bug Tracker"
1084
+ #~ msgstr "リディレクションプラグイン バグトラッカー"
1085
+
1086
+ #~ msgid "Redirection FAQ"
1087
+ #~ msgstr "リディレクションプラグイン よくある質問"
1088
+
1089
+ #~ msgid ""
1090
+ #~ "Please read the documentation and FAQ, and check the bug tracker, before "
1091
+ #~ "asking a question."
1092
+ #~ msgstr ""
1093
+ #~ "質問する前にドキュメンテーションと FAQ を読み、バグトラッカーを確認してく"
1094
+ #~ "ださい。"
1095
+
1096
+ #~ msgid " for external site: <code>%s</code>"
1097
+ #~ msgstr "外部サイト向け: <code>%s</code>"
1098
+
1099
+ #~ msgid "Strip index files (html,php,asp)"
1100
+ #~ msgstr "index ファイルを除く (html,php,asp)"
1101
+
1102
+ #~ msgid "Time Limit"
1103
+ #~ msgstr "時間上限"
1104
+
1105
+ #~ msgid "30 seconds"
1106
+ #~ msgstr "30秒"
1107
+
1108
+ #~ msgid "1 minute"
1109
+ #~ msgstr "1分"
1110
+
1111
+ #~ msgid "2 minutes"
1112
+ #~ msgstr "2分"
1113
+
1114
+ #~ msgid "5 minutes"
1115
+ #~ msgstr "5分"
1116
+
1117
+ #~ msgid "As long as possible"
1118
+ #~ msgstr "最長"
1119
+
1120
+ #~ msgid "time limit set as long as possible"
1121
+ #~ msgstr "タイムリミットは最長に設定されています"
1122
+
1123
+ #~ msgid "time limit at %ss"
1124
+ #~ msgstr "タイムリミット %ss"
1125
+
1126
+ #~ msgid ""
1127
+ #~ "Redirection has required a great deal of time and effort to develop. If "
1128
+ #~ "it's been useful to you then you can support this development by "
1129
+ #~ "<strong>making a small donation of $12</strong>. This will act as an "
1130
+ #~ "incentive for me to carry on developing it, providing countless hours of "
1131
+ #~ "support, and including any enhancements that are suggested."
1132
+ #~ msgstr ""
1133
+ #~ "リディレクションプラグインの開発には長い時間がかかりました。もしあなたの役"
1134
+ #~ "に立ったなら、<strong>$12 のささやかな寄付をして</strong>開発者を応援して"
1135
+ #~ "ください。開発の継続、数えきれないほどの時間のサポート提供、提案された改善"
1136
+ #~ "の追加を行うためのやる気につながります。"
1137
+
1138
+ #~ msgid "Other plugins"
1139
+ #~ msgstr "他のプラグイン"
1140
+
1141
+ #~ msgid "You may also be interested in some of my other plugins:"
1142
+ #~ msgstr "私の他のプラグインもご利用ください:"
1143
+
1144
+ #~ msgid "HeadSpace"
1145
+ #~ msgstr "HeadSpace"
1146
+
1147
+ #~ msgid ""
1148
+ #~ "The most complete SEO meta-data manager and all-round general purpose "
1149
+ #~ "plugin for WordPress. Replace five or six plugins with one single super-"
1150
+ #~ "plugin!"
1151
+ #~ msgstr ""
1152
+ #~ "最も完成された SEO メタデータ管理および一般用途向け WordPress プラグイン。"
1153
+ #~ "この強力なプラグインひとつで5、6個の他のプラグインを置き換えることができま"
1154
+ #~ "す !"
1155
+
1156
+ #~ msgid "Search Unleashed"
1157
+ #~ msgstr "Search Unleashed"
1158
+
1159
+ #~ msgid ""
1160
+ #~ "Attractive searches that go beyond the default WordPress search and "
1161
+ #~ "increase the usefulness of your site."
1162
+ #~ msgstr ""
1163
+ #~ "デフォルトの WordPress 検索機能を超える魅力的な検索プラグイン。サイトを皿"
1164
+ #~ "に使いやすくします。"
1165
+
1166
+ #~ msgid "Sniplets"
1167
+ #~ msgstr "Sniplets"
1168
+
1169
+ #~ msgid ""
1170
+ #~ "Very flexible and powerful text insertion that allows you to insert what "
1171
+ #~ "you want, wherever you want it."
1172
+ #~ msgstr ""
1173
+ #~ "柔軟で強力なテキスト挿入プラグイン。好きなところに好きなテキストを挿入でき"
1174
+ #~ "ます。"
1175
+
1176
+ #~ msgid "How many widgets would you like?"
1177
+ #~ msgstr "いくつウィジェットを追加しますか ?"
1178
+
1179
+ #~ msgid "This notice will only be shown at periodic intervals."
1180
+ #~ msgstr "このお知らせは定期的な間隔でのみ表示されます。"
locale/{lt_LT.mo → redirection-lt_LT.mo} RENAMED
File without changes
locale/{lt_LT.po → redirection-lt_LT.po} RENAMED
File without changes
locale/{nl_NL.mo → redirection-nl_NL.mo} RENAMED
File without changes
locale/{nl_NL.po → redirection-nl_NL.po} RENAMED
File without changes
locale/{pl_PL.mo → redirection-pl_PL.mo} RENAMED
File without changes
locale/{pl_PL.po → redirection-pl_PL.po} RENAMED
File without changes
locale/{pt_BR.mo → redirection-pt_BR.mo} RENAMED
File without changes
locale/{pt_BR.po → redirection-pt_BR.po} RENAMED
File without changes
locale/redirection-redirection.pot ADDED
@@ -0,0 +1,769 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2012 Redirection
2
+ # This file is distributed under the same license as the Redirection package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Redirection 2.2.13\n"
6
+ "Report-Msgid-Bugs-To: http://wordpress.org/tag/redirection\n"
7
+ "POT-Creation-Date: 2015-02-25 16:15+0900\n"
8
+ "PO-Revision-Date: 2015-02-25 16:15+0900\n"
9
+ "Last-Translator: Naoko Takano <info@nao-net.com>\n"
10
+ "Language-Team: LANGUAGE <LL@li.org>\n"
11
+ "Language: en\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.7.1\n"
17
+ "X-Poedit-KeywordsList: __;_e;_x;esc_html_e;esc_html__;esc_attr_e;esc_attr__;"
18
+ "_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;_x:1,2c;_n:1,2;_n_noop:1,2;"
19
+ "__ngettext_noop:1,2;_c,_nc:4c,1,2\n"
20
+ "X-Poedit-Basepath: ../\n"
21
+ "X-Poedit-SearchPath-0: .\n"
22
+
23
+ #: fileio/rss.php:28
24
+ #, php-format
25
+ msgid "Referred by %s"
26
+ msgstr ""
27
+
28
+ #: matches/login.php:27
29
+ msgid "URL and login status"
30
+ msgstr ""
31
+
32
+ #: matches/login.php:36
33
+ msgid ""
34
+ "The target URL will be chosen from one of the following URLs, depending if "
35
+ "the user is logged in or out. Leaving a URL blank means that the user is "
36
+ "not redirected."
37
+ msgstr ""
38
+
39
+ #: matches/login.php:43 matches/login.php:45
40
+ msgid "Logged In"
41
+ msgstr ""
42
+
43
+ #: matches/login.php:55 matches/login.php:57
44
+ msgid "Logged Out"
45
+ msgstr ""
46
+
47
+ #: matches/referrer.php:28
48
+ msgid "URL and referrer"
49
+ msgstr ""
50
+
51
+ #: matches/referrer.php:40 models/pager.php:438 models/pager.php:569
52
+ msgid "Referrer"
53
+ msgstr ""
54
+
55
+ #: matches/referrer.php:43 view/admin/item_edit.php:7
56
+ msgid "Regex"
57
+ msgstr ""
58
+
59
+ #: matches/referrer.php:47 matches/referrer.php:57 matches/url.php:40
60
+ #: matches/user_agent.php:57
61
+ msgid "HTTP Code"
62
+ msgstr ""
63
+
64
+ #: matches/referrer.php:59
65
+ msgid ""
66
+ "The visitor will be redirected from the source URL if the referrer matches. "
67
+ "You can specify a <em>matched</em> target URL as the address to send "
68
+ "visitors if they do match, and <em>not matched</em> if they don't match. "
69
+ "Leaving a URL blank means that the visitor is not redirected."
70
+ msgstr ""
71
+
72
+ #: matches/referrer.php:65 matches/referrer.php:67 matches/user_agent.php:77
73
+ #: matches/user_agent.php:79
74
+ msgid "Matched"
75
+ msgstr ""
76
+
77
+ #: matches/referrer.php:75 matches/referrer.php:77 matches/user_agent.php:87
78
+ #: matches/user_agent.php:89
79
+ msgid "Not matched"
80
+ msgstr ""
81
+
82
+ #: matches/url.php:25
83
+ msgid "URL only"
84
+ msgstr ""
85
+
86
+ #: matches/url.php:32 view/admin/add.php:32
87
+ msgid "Target URL"
88
+ msgstr ""
89
+
90
+ #: matches/user_agent.php:27
91
+ msgid "URL and user agent"
92
+ msgstr ""
93
+
94
+ #: matches/user_agent.php:32
95
+ msgid "FeedBurner"
96
+ msgstr ""
97
+
98
+ #: matches/user_agent.php:33
99
+ msgid "Internet Explorer"
100
+ msgstr ""
101
+
102
+ #: matches/user_agent.php:34
103
+ msgid "FireFox"
104
+ msgstr ""
105
+
106
+ #: matches/user_agent.php:35
107
+ msgid "Opera"
108
+ msgstr ""
109
+
110
+ #: matches/user_agent.php:36
111
+ msgid "Safari"
112
+ msgstr ""
113
+
114
+ #: matches/user_agent.php:37
115
+ msgid "iPhone"
116
+ msgstr ""
117
+
118
+ #: matches/user_agent.php:38
119
+ msgid "iPad"
120
+ msgstr ""
121
+
122
+ #: matches/user_agent.php:39
123
+ msgid "Android"
124
+ msgstr ""
125
+
126
+ #: matches/user_agent.php:40
127
+ msgid "Nintendo Wii"
128
+ msgstr ""
129
+
130
+ #: matches/user_agent.php:45
131
+ msgid "User Agent"
132
+ msgstr ""
133
+
134
+ #: matches/user_agent.php:70
135
+ msgid ""
136
+ "The visitor will be redirected from the source URL if the user agent "
137
+ "matches. You can specify a <em>matched</em> target URL as the address to "
138
+ "send visitors if they do match, and <em>not matched</em> if they don't "
139
+ "match. Leaving a URL blank means that the visitor is not redirected. "
140
+ "<strong>All matches are performed as regular expressions</strong>.\n"
141
+ msgstr ""
142
+
143
+ #: models/database.php:108 models/module.php:168 modules/wordpress.php:116
144
+ msgid "WordPress"
145
+ msgstr ""
146
+
147
+ #: models/database.php:109 models/module.php:167 modules/apache.php:188
148
+ msgid "Apache"
149
+ msgstr ""
150
+
151
+ #: models/database.php:114 view/admin/item_list.php:5
152
+ msgid "Redirections"
153
+ msgstr ""
154
+
155
+ #: models/database.php:115
156
+ msgid "Modified Posts"
157
+ msgstr ""
158
+
159
+ #: models/group.php:202
160
+ msgid "Yes"
161
+ msgstr ""
162
+
163
+ #: models/group.php:203
164
+ msgid "No"
165
+ msgstr ""
166
+
167
+ #: models/module.php:192
168
+ msgid "Strip WWW"
169
+ msgstr ""
170
+
171
+ #: models/module.php:192
172
+ msgid "Force WWW"
173
+ msgstr ""
174
+
175
+ #: models/module.php:197
176
+ msgid "Strip index.php"
177
+ msgstr ""
178
+
179
+ #: models/pager.php:25 models/pager.php:667
180
+ msgid "Type"
181
+ msgstr ""
182
+
183
+ #: models/pager.php:26
184
+ msgid "URL"
185
+ msgstr ""
186
+
187
+ #: models/pager.php:27 models/pager.php:670
188
+ msgid "Hits"
189
+ msgstr ""
190
+
191
+ #: models/pager.php:28
192
+ msgid "Last Access"
193
+ msgstr ""
194
+
195
+ #: models/pager.php:50 models/pager.php:245 models/pager.php:689
196
+ msgid "Edit"
197
+ msgstr ""
198
+
199
+ #: models/pager.php:51 models/pager.php:98 models/pager.php:246
200
+ #: models/pager.php:281 models/pager.php:456 models/pager.php:586
201
+ #: view/admin/options.php:108
202
+ msgid "Delete"
203
+ msgstr ""
204
+
205
+ #: models/pager.php:56 models/pager.php:100
206
+ msgid "Disable"
207
+ msgstr ""
208
+
209
+ #: models/pager.php:58 models/pager.php:99
210
+ msgid "Enable"
211
+ msgstr ""
212
+
213
+ #: models/pager.php:101
214
+ msgid "Reset Hits"
215
+ msgstr ""
216
+
217
+ #: models/pager.php:155 models/pager.php:322
218
+ msgid "Filter"
219
+ msgstr ""
220
+
221
+ #: models/pager.php:236 models/pager.php:668 view/admin/group_edit.php:4
222
+ #: view/admin/group_list.php:28 view/admin/module_edit.php:4
223
+ msgid "Name"
224
+ msgstr ""
225
+
226
+ #: models/pager.php:237 view/admin/submenu.php:6
227
+ msgid "Redirects"
228
+ msgstr ""
229
+
230
+ #: models/pager.php:247
231
+ msgid "View Redirects"
232
+ msgstr ""
233
+
234
+ #: models/pager.php:399 models/pager.php:533
235
+ msgid "Add redirect"
236
+ msgstr ""
237
+
238
+ #: models/pager.php:436 models/pager.php:567
239
+ msgid "Date"
240
+ msgstr ""
241
+
242
+ #: models/pager.php:437 models/pager.php:568 view/admin/add.php:13
243
+ #: view/admin/item_edit.php:4
244
+ msgid "Source URL"
245
+ msgstr ""
246
+
247
+ #: models/pager.php:439 models/pager.php:570
248
+ msgid "IP"
249
+ msgstr ""
250
+
251
+ #: models/pager.php:539
252
+ msgid "Show only this IP"
253
+ msgstr ""
254
+
255
+ #: models/pager.php:669 view/admin/group_list.php:5 view/admin/submenu.php:11
256
+ msgid "Groups"
257
+ msgstr ""
258
+
259
+ #: models/redirect.php:200
260
+ msgid "Source and target URL must be different"
261
+ msgstr ""
262
+
263
+ #: models/redirect.php:207
264
+ msgid "Invalid group when creating redirect"
265
+ msgstr ""
266
+
267
+ #: models/redirect.php:210
268
+ msgid "Invalid source URL when creating redirect for given match type"
269
+ msgstr ""
270
+
271
+ #: models/redirect.php:247
272
+ msgid ""
273
+ "Unable to add new redirect - delete Redirection from the options page and re-"
274
+ "install"
275
+ msgstr ""
276
+
277
+ #: models/redirect.php:427
278
+ msgid "Redirect to URL"
279
+ msgstr ""
280
+
281
+ #: models/redirect.php:428
282
+ msgid "Redirect to random post"
283
+ msgstr ""
284
+
285
+ #: models/redirect.php:429
286
+ msgid "Pass-through"
287
+ msgstr ""
288
+
289
+ #: models/redirect.php:430
290
+ msgid "Error (404)"
291
+ msgstr ""
292
+
293
+ #: models/redirect.php:431
294
+ msgid "Do nothing"
295
+ msgstr ""
296
+
297
+ #: modules/apache.php:76
298
+ msgid "Location"
299
+ msgstr ""
300
+
301
+ #: modules/apache.php:81
302
+ #, php-format
303
+ msgid "WordPress is installed in: <code>%s</code>"
304
+ msgstr ""
305
+
306
+ #: modules/apache.php:86
307
+ msgid "Canonical"
308
+ msgstr ""
309
+
310
+ #: modules/apache.php:89 modules/apache.php:95
311
+ msgid "Leave as is"
312
+ msgstr ""
313
+
314
+ #: modules/apache.php:89
315
+ #, php-format
316
+ msgid "Strip WWW (%s)"
317
+ msgstr ""
318
+
319
+ #: modules/apache.php:89
320
+ #, php-format
321
+ msgid "Force WWW (www.%s)"
322
+ msgstr ""
323
+
324
+ #: modules/apache.php:93
325
+ msgid "Strip Index"
326
+ msgstr ""
327
+
328
+ #: modules/apache.php:95
329
+ msgid "Strip index files (html,php)"
330
+ msgstr ""
331
+
332
+ #: modules/apache.php:100
333
+ msgid "Memory Limit"
334
+ msgstr ""
335
+
336
+ #: modules/apache.php:103 modules/apache.php:108
337
+ msgid "Server default"
338
+ msgstr ""
339
+
340
+ #: modules/apache.php:106
341
+ msgid "Error Level"
342
+ msgstr ""
343
+
344
+ #: modules/apache.php:108
345
+ msgid "No errors"
346
+ msgstr ""
347
+
348
+ #: modules/apache.php:108
349
+ msgid "Show errors"
350
+ msgstr ""
351
+
352
+ #: modules/apache.php:113
353
+ msgid "Ban IPs"
354
+ msgstr ""
355
+
356
+ #: modules/apache.php:119
357
+ msgid "Allow IPs"
358
+ msgstr ""
359
+
360
+ #: modules/apache.php:125
361
+ msgid "Raw .htaccess"
362
+ msgstr ""
363
+
364
+ #: modules/apache.php:131
365
+ msgid "Site URL"
366
+ msgstr ""
367
+
368
+ #: modules/apache.php:134
369
+ msgid "Advanced: For management of external sites"
370
+ msgstr ""
371
+
372
+ #: modules/apache.php:149
373
+ msgid "<strong>Location is invalid - check that path exists</strong>"
374
+ msgstr ""
375
+
376
+ #: modules/apache.php:155
377
+ msgid ""
378
+ "<strong>Could not write to configured <code>.htaccess</code> file - check "
379
+ "file permissions</strong>"
380
+ msgstr ""
381
+
382
+ #: modules/apache.php:162
383
+ msgid ""
384
+ "<strong>Disabled: enter the location of an <code>.htaccess</code> file for "
385
+ "this to be valid</strong>"
386
+ msgstr ""
387
+
388
+ #: modules/apache.php:167
389
+ msgid "strip WWW"
390
+ msgstr ""
391
+
392
+ #: modules/apache.php:167
393
+ msgid "force WWW"
394
+ msgstr ""
395
+
396
+ #: modules/apache.php:170
397
+ msgid "strip index"
398
+ msgstr ""
399
+
400
+ #: modules/apache.php:173
401
+ #, php-format
402
+ msgid "memory limit at %dMB"
403
+ msgstr ""
404
+
405
+ #: modules/apache.php:176
406
+ msgid "no errors"
407
+ msgstr ""
408
+
409
+ #: modules/apache.php:176
410
+ msgid "show errors"
411
+ msgstr ""
412
+
413
+ #: modules/apache.php:179
414
+ msgid "IPs are banned"
415
+ msgstr ""
416
+
417
+ #: modules/apache.php:182
418
+ msgid "IPs are allowed"
419
+ msgstr ""
420
+
421
+ #: modules/wordpress.php:112
422
+ msgid ""
423
+ "<strong>Disabled: You must enable <a href=\"options-permalink.php"
424
+ "\">permalinks</a> before using this</strong>"
425
+ msgstr ""
426
+
427
+ #: redirection-admin.php:130
428
+ msgid "Settings"
429
+ msgstr ""
430
+
431
+ #: redirection-admin.php:142
432
+ msgid "Log entries"
433
+ msgstr ""
434
+
435
+ #: redirection-admin.php:148
436
+ msgid "Sorry, unable to do that. Please try refreshing the page."
437
+ msgstr ""
438
+
439
+ #: redirection-admin.php:153
440
+ msgid "Redirection"
441
+ msgstr ""
442
+
443
+ #: redirection-admin.php:220 redirection-admin.php:236
444
+ msgid "Your options were updated"
445
+ msgstr ""
446
+
447
+ #: redirection-admin.php:245
448
+ msgid "Redirection data has been deleted and the plugin disabled"
449
+ msgstr ""
450
+
451
+ #: redirection-admin.php:252
452
+ #, php-format
453
+ msgid "%d redirection was successfully imported"
454
+ msgid_plural "%d redirections were successfully imported"
455
+ msgstr[0] ""
456
+ msgstr[1] ""
457
+
458
+ #: redirection-admin.php:254
459
+ msgid "No items were imported"
460
+ msgstr ""
461
+
462
+ #: redirection-admin.php:266 redirection-admin.php:286
463
+ msgid "Your logs have been deleted"
464
+ msgstr ""
465
+
466
+ #: redirection-admin.php:300
467
+ msgid "Your group was added successfully"
468
+ msgstr ""
469
+
470
+ #: redirection-admin.php:304
471
+ msgid "Please specify a group name"
472
+ msgstr ""
473
+
474
+ #: redirection-admin.php:317
475
+ msgid "Unknown module"
476
+ msgstr ""
477
+
478
+ #: redirection-admin.php:366 redirection-admin.php:378
479
+ #: redirection-admin.php:401 redirection-admin.php:415
480
+ #: redirection-admin.php:436 redirection-admin.php:448
481
+ #: redirection-admin.php:470
482
+ msgid "Unable to perform action"
483
+ msgstr ""
484
+
485
+ #: redirection-admin.php:490
486
+ msgid "Sorry, but your redirection was not created"
487
+ msgstr ""
488
+
489
+ #: view/admin/add.php:4
490
+ msgid "Add new redirection"
491
+ msgstr ""
492
+
493
+ #: view/admin/add.php:7
494
+ msgid "Your redirection has been added."
495
+ msgstr ""
496
+
497
+ #: view/admin/add.php:17
498
+ msgid "Match"
499
+ msgstr ""
500
+
501
+ #: view/admin/add.php:23
502
+ msgid "Action"
503
+ msgstr ""
504
+
505
+ #: view/admin/add.php:28
506
+ msgid "Regular expression"
507
+ msgstr ""
508
+
509
+ #: view/admin/add.php:37
510
+ msgid "Group"
511
+ msgstr ""
512
+
513
+ #: view/admin/add.php:44
514
+ msgid "Add Redirection"
515
+ msgstr ""
516
+
517
+ #: view/admin/group_edit.php:8
518
+ msgid "Tracked"
519
+ msgstr ""
520
+
521
+ #: view/admin/group_edit.php:9
522
+ msgid "Whether to track 'hits' to items"
523
+ msgstr ""
524
+
525
+ #: view/admin/group_edit.php:12
526
+ msgid "Enabled"
527
+ msgstr ""
528
+
529
+ #: view/admin/group_edit.php:13
530
+ msgid "Disabling a group will disable all items contained within it"
531
+ msgstr ""
532
+
533
+ #: view/admin/group_edit.php:19 view/admin/item_edit.php:26
534
+ #: view/admin/module_edit.php:14
535
+ msgid "Save"
536
+ msgstr ""
537
+
538
+ #: view/admin/group_edit.php:20 view/admin/item_edit.php:27
539
+ #: view/admin/module_edit.php:15
540
+ msgid "Cancel"
541
+ msgstr ""
542
+
543
+ #: view/admin/group_list.php:13 view/admin/item_list.php:12
544
+ #: view/admin/log.php:13
545
+ msgid "Search"
546
+ msgstr ""
547
+
548
+ #: view/admin/group_list.php:22
549
+ msgid "Add Group"
550
+ msgstr ""
551
+
552
+ #: view/admin/group_list.php:34
553
+ msgid "Add"
554
+ msgstr ""
555
+
556
+ #: view/admin/item_edit.php:13
557
+ msgid "Description"
558
+ msgstr ""
559
+
560
+ #: view/admin/item_edit.php:16
561
+ msgid "optional"
562
+ msgstr ""
563
+
564
+ #: view/admin/log.php:5
565
+ msgid "Redirection Log"
566
+ msgstr ""
567
+
568
+ #: view/admin/log.php:19
569
+ msgid "Log Management"
570
+ msgstr ""
571
+
572
+ #: view/admin/log.php:23
573
+ msgid "These apply to the current search term, if any, otherwise all logs."
574
+ msgstr ""
575
+
576
+ #: view/admin/log.php:25
577
+ msgid "Delete All"
578
+ msgstr ""
579
+
580
+ #: view/admin/log.php:28
581
+ msgid "Export To CSV"
582
+ msgstr ""
583
+
584
+ #: view/admin/module_list.php:5 view/admin/submenu.php:16
585
+ msgid "Modules"
586
+ msgstr ""
587
+
588
+ #: view/admin/options.php:6
589
+ msgid "No logs"
590
+ msgstr ""
591
+
592
+ #: view/admin/options.php:7
593
+ msgid "A day"
594
+ msgstr ""
595
+
596
+ #: view/admin/options.php:8
597
+ msgid "A week"
598
+ msgstr ""
599
+
600
+ #: view/admin/options.php:9
601
+ msgid "A month"
602
+ msgstr ""
603
+
604
+ #: view/admin/options.php:10
605
+ msgid "Two months"
606
+ msgstr ""
607
+
608
+ #: view/admin/options.php:11
609
+ msgid "Keep forever"
610
+ msgstr ""
611
+
612
+ #: view/admin/options.php:19 view/admin/submenu.php:42
613
+ msgid "Options"
614
+ msgstr ""
615
+
616
+ #: view/admin/options.php:27
617
+ msgid "Plugin Support"
618
+ msgstr ""
619
+
620
+ #: view/admin/options.php:30
621
+ msgid "I'm a nice person and I have helped support the author of this plugin"
622
+ msgstr ""
623
+
624
+ #: view/admin/options.php:34
625
+ msgid "Redirect Logs"
626
+ msgstr ""
627
+
628
+ #: view/admin/options.php:40 view/admin/options.php:50
629
+ msgid "(time to keep logs for)"
630
+ msgstr ""
631
+
632
+ #: view/admin/options.php:44
633
+ msgid "404 Logs"
634
+ msgstr ""
635
+
636
+ #: view/admin/options.php:54
637
+ msgid "Monitor changes to posts"
638
+ msgstr ""
639
+
640
+ #: view/admin/options.php:57
641
+ msgid "Don't monitor"
642
+ msgstr ""
643
+
644
+ #: view/admin/options.php:63
645
+ msgid "RSS Token"
646
+ msgstr ""
647
+
648
+ #: view/admin/options.php:66
649
+ msgid ""
650
+ "A unique token allowing feed readers access to Redirection log RSS (leave "
651
+ "blank to auto-generate)"
652
+ msgstr ""
653
+
654
+ #: view/admin/options.php:70
655
+ msgid "Auto-generate URL"
656
+ msgstr ""
657
+
658
+ #: view/admin/options.php:74
659
+ msgid ""
660
+ "This will be used to auto-generate a URL if no URL is given. You can use "
661
+ "the special tags $dec$ or $hex$ to have a unique ID inserted (either decimal "
662
+ "or hex)"
663
+ msgstr ""
664
+
665
+ #: view/admin/options.php:79
666
+ msgid "Update"
667
+ msgstr ""
668
+
669
+ #: view/admin/options.php:85
670
+ msgid "Import"
671
+ msgstr ""
672
+
673
+ #: view/admin/options.php:87
674
+ msgid ""
675
+ "Here you can import redirections from an existing .htaccess file, or a CSV "
676
+ "file."
677
+ msgstr ""
678
+
679
+ #: view/admin/options.php:94
680
+ msgid "Import into"
681
+ msgstr ""
682
+
683
+ #: view/admin/options.php:97
684
+ msgid "Upload"
685
+ msgstr ""
686
+
687
+ #: view/admin/options.php:102
688
+ msgid "Delete Redirection"
689
+ msgstr ""
690
+
691
+ #: view/admin/options.php:103
692
+ msgid ""
693
+ "Selecting this option will delete all redirections, all logs, and any "
694
+ "options associated with the Redirection plugin. Make sure this is what you "
695
+ "want to do."
696
+ msgstr ""
697
+
698
+ #: view/admin/submenu.php:23
699
+ msgid "Log"
700
+ msgstr ""
701
+
702
+ #: view/admin/submenu.php:32
703
+ #, php-format
704
+ msgid "404s from %s"
705
+ msgstr ""
706
+
707
+ #: view/admin/submenu.php:34
708
+ msgid "404s"
709
+ msgstr ""
710
+
711
+ #: view/admin/submenu.php:47
712
+ msgid "Support"
713
+ msgstr ""
714
+
715
+ #: view/admin/support.php:5
716
+ msgid "Redirection Support"
717
+ msgstr ""
718
+
719
+ #: view/admin/support.php:9
720
+ msgid ""
721
+ "Redirection is free to use - life is wonderful and lovely! However, it has "
722
+ "required a great deal of time and effort to develop and if it has been "
723
+ "useful you can help support this development by <strong>making a small "
724
+ "donation</strong>."
725
+ msgstr ""
726
+
727
+ #: view/admin/support.php:10
728
+ msgid ""
729
+ "This will act as an incentive for me to carry on developing. You get some "
730
+ "useful software and I get to carry on making it. Everybody wins."
731
+ msgstr ""
732
+
733
+ #: view/admin/support.php:13
734
+ msgid ""
735
+ "Please note that a donation is just a donation - it is not a payment for "
736
+ "support. I am not a business, this is not a product, and I'm afraid I cannot "
737
+ "provide paid support"
738
+ msgstr ""
739
+
740
+ #: view/admin/support.php:15
741
+ msgid ""
742
+ "If you are using this plugin in a commercial setup, or feel that it's been "
743
+ "particularly useful, then you may want to consider a <strong>commercial "
744
+ "donation</strong>."
745
+ msgstr ""
746
+
747
+ #: view/admin/support.php:38
748
+ msgid "Individual<br/>Donation"
749
+ msgstr ""
750
+
751
+ #: view/admin/support.php:58
752
+ msgid "Commercial<br/>Donation"
753
+ msgstr ""
754
+
755
+ #: view/admin/support.php:62
756
+ msgid "Translations"
757
+ msgstr ""
758
+
759
+ #: view/admin/support.php:64
760
+ msgid ""
761
+ "If you're multi-lingual then you may want to consider donating a translation:"
762
+ msgstr ""
763
+
764
+ #: view/admin/support.php:72
765
+ msgid ""
766
+ "Full details of producing a translation can be found in this <a href="
767
+ "\"http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/"
768
+ "\">guide to translating WordPress plugins</a>."
769
+ msgstr ""
locale/{ro_RO.mo → redirection-ro_RO.mo} RENAMED
File without changes
locale/{ro_RO.po → redirection-ro_RO.po} RENAMED
File without changes
locale/{ru_RU.mo → redirection-ru_RU.mo} RENAMED
File without changes
locale/{ru_RU.po → redirection-ru_RU.po} RENAMED
File without changes
locale/{tr_TR.mo → redirection-tr_TR.mo} RENAMED
File without changes
locale/{tr_TR.po → redirection-tr_TR.po} RENAMED
File without changes
locale/{uk.mo → redirection-uk.mo} RENAMED
File without changes
locale/{uk.po → redirection-uk.po} RENAMED
File without changes
locale/{zh_CN.mo → redirection-zh_CN.mo} RENAMED
File without changes
locale/{zh_CN.po → redirection-zh_CN.po} RENAMED
File without changes
locale/redirection.pot DELETED
@@ -1,942 +0,0 @@
1
- # Copyright (C) 2012 Redirection
2
- # This file is distributed under the same license as the Redirection package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Redirection 2.2.13\n"
6
- "Report-Msgid-Bugs-To: http://wordpress.org/tag/redirection\n"
7
- "POT-Creation-Date: 2012-05-07 13:59:00+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: 2012-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
- "Language-Team: LANGUAGE <LL@li.org>\n"
14
-
15
- #: ajax.php:370
16
- msgid "Sorry, but your redirection was not created"
17
- msgstr ""
18
-
19
- #: fileio/csv.php:21
20
- msgid "module_%d.csv"
21
- msgstr ""
22
-
23
- #: fileio/xml.php:32
24
- msgid "module_%d.xml"
25
- msgstr ""
26
-
27
- #: fileio/xml.php:105
28
- msgid "%s imported on %s at %s"
29
- msgstr ""
30
-
31
- #: fileio/xml.php:168
32
- msgid "XML importing is only available with PHP5 - you have PHP4."
33
- msgstr ""
34
-
35
- #: matches/login.php:25
36
- msgid "URL and login status"
37
- msgstr ""
38
-
39
- #: matches/login.php:33
40
- msgid ""
41
- "The target URL will be chosen from one of the following URLs, depending if "
42
- "the user is logged in or out. Leaving a URL blank means that the user is "
43
- "not redirected."
44
- msgstr ""
45
-
46
- #: matches/login.php:39 matches/login.php:41
47
- msgid "Logged In"
48
- msgstr ""
49
-
50
- #: matches/login.php:51 matches/login.php:53
51
- msgid "Logged Out"
52
- msgstr ""
53
-
54
- #: matches/referrer.php:28
55
- msgid "URL and referrer"
56
- msgstr ""
57
-
58
- #: matches/referrer.php:40 view/admin/log.php:69
59
- msgid "Referrer"
60
- msgstr ""
61
-
62
- #: matches/referrer.php:43 view/admin/item_edit.php:18
63
- msgid "Regex"
64
- msgstr ""
65
-
66
- #: matches/referrer.php:47 matches/url.php:40 matches/user_agent.php:57
67
- msgid "HTTP Code"
68
- msgstr ""
69
-
70
- #: matches/referrer.php:57
71
- msgid ""
72
- "The visitor will be redirected from the source URL if the referrer matches. "
73
- "You can specify a <em>matched</em> target URL as the address to send "
74
- "visitors if they do match, and <em>not matched</em> if they don't match. "
75
- "Leaving a URL blank means that the visitor is not redirected."
76
- msgstr ""
77
-
78
- #: matches/referrer.php:63 matches/referrer.php:65 matches/user_agent.php:75
79
- #: matches/user_agent.php:77
80
- msgid "Matched"
81
- msgstr ""
82
-
83
- #: matches/referrer.php:73 matches/referrer.php:75 matches/user_agent.php:85
84
- #: matches/user_agent.php:87
85
- msgid "Not matched"
86
- msgstr ""
87
-
88
- #: matches/url.php:25
89
- msgid "URL only"
90
- msgstr ""
91
-
92
- #: matches/url.php:32 view/admin/add.php:31
93
- msgid "Target URL"
94
- msgstr ""
95
-
96
- #: matches/user_agent.php:27
97
- msgid "URL and user agent"
98
- msgstr ""
99
-
100
- #: matches/user_agent.php:32
101
- msgid "FeedBurner"
102
- msgstr ""
103
-
104
- #: matches/user_agent.php:33
105
- msgid "Internet Explorer"
106
- msgstr ""
107
-
108
- #: matches/user_agent.php:34
109
- msgid "FireFox"
110
- msgstr ""
111
-
112
- #: matches/user_agent.php:35
113
- msgid "Opera"
114
- msgstr ""
115
-
116
- #: matches/user_agent.php:36
117
- msgid "Safari"
118
- msgstr ""
119
-
120
- #: matches/user_agent.php:37
121
- msgid "iPhone"
122
- msgstr ""
123
-
124
- #: matches/user_agent.php:38
125
- msgid "iPad"
126
- msgstr ""
127
-
128
- #: matches/user_agent.php:39
129
- msgid "Android"
130
- msgstr ""
131
-
132
- #: matches/user_agent.php:40
133
- msgid "Nintendo Wii"
134
- msgstr ""
135
-
136
- #: matches/user_agent.php:45 view/admin/log_item_details.php:20
137
- msgid "User Agent"
138
- msgstr ""
139
-
140
- #: matches/user_agent.php:68
141
- msgid ""
142
- "The visitor will be redirected from the source URL if the user agent "
143
- "matches. You can specify a <em>matched</em> target URL as the address to "
144
- "send visitors if they do match, and <em>not matched</em> if they don't "
145
- "match. Leaving a URL blank means that the visitor is not redirected. "
146
- "<strong>All matches are performed as regular expressions</strong>.\n"
147
- msgstr ""
148
-
149
- #: models/database.php:94 models/module.php:161
150
- msgid "WordPress"
151
- msgstr ""
152
-
153
- #: models/database.php:95 models/module.php:160 view/admin/module_item.php:27
154
- msgid "Apache"
155
- msgstr ""
156
-
157
- #: models/database.php:96
158
- msgid "404"
159
- msgstr ""
160
-
161
- #: models/database.php:101
162
- msgid "Redirections"
163
- msgstr ""
164
-
165
- #: models/database.php:102
166
- msgid "Modified Posts"
167
- msgstr ""
168
-
169
- #: models/group.php:194
170
- msgid "Yes"
171
- msgstr ""
172
-
173
- #: models/group.php:195
174
- msgid "No"
175
- msgstr ""
176
-
177
- #: models/module.php:162
178
- msgid "404 Errors"
179
- msgstr ""
180
-
181
- #: models/module.php:187
182
- msgid "Strip WWW"
183
- msgstr ""
184
-
185
- #: models/module.php:187
186
- msgid "Force WWW"
187
- msgstr ""
188
-
189
- #: models/module.php:192
190
- msgid "Strip index.php"
191
- msgstr ""
192
-
193
- #: models/pager.php:389
194
- msgid "Previous"
195
- msgstr ""
196
-
197
- #: models/pager.php:390
198
- msgid "Next"
199
- msgstr ""
200
-
201
- #: models/pager.php:448
202
- msgid "%d per-page"
203
- msgstr ""
204
-
205
- #: models/pager.php:457
206
- msgid "Displaying %s&#8211;%s of %s"
207
- msgstr ""
208
-
209
- #: models/redirect.php:386
210
- msgid "Redirect to URL"
211
- msgstr ""
212
-
213
- #: models/redirect.php:387
214
- msgid "Redirect to random post"
215
- msgstr ""
216
-
217
- #: models/redirect.php:388
218
- msgid "Pass-through"
219
- msgstr ""
220
-
221
- #: models/redirect.php:389
222
- msgid "Error (404)"
223
- msgstr ""
224
-
225
- #: models/redirect.php:390
226
- msgid "Do nothing"
227
- msgstr ""
228
-
229
- #: modules/404.php:37
230
- msgid "Log 404s"
231
- msgstr ""
232
-
233
- #: modules/404.php:46 modules/wordpress.php:121
234
- msgid ""
235
- "<strong>Disabled: You must enable <a href=\"options-permalink.php"
236
- "\">permalinks</a> before using this</strong>"
237
- msgstr ""
238
-
239
- #: modules/404.php:57
240
- msgid "<small>No options have been set</small>"
241
- msgstr ""
242
-
243
- #: modules/apache.php:77
244
- msgid "Location"
245
- msgstr ""
246
-
247
- #: modules/apache.php:82
248
- msgid "WordPress is installed in: <code>%s</code>"
249
- msgstr ""
250
-
251
- #: modules/apache.php:87
252
- msgid "Canonical"
253
- msgstr ""
254
-
255
- #: modules/apache.php:90 modules/apache.php:96
256
- msgid "Leave as is"
257
- msgstr ""
258
-
259
- #: modules/apache.php:90
260
- msgid "Strip WWW (%s)"
261
- msgstr ""
262
-
263
- #: modules/apache.php:90
264
- msgid "Force WWW (www.%s)"
265
- msgstr ""
266
-
267
- #: modules/apache.php:94
268
- msgid "Strip Index"
269
- msgstr ""
270
-
271
- #: modules/apache.php:96
272
- msgid "Strip index files (html,php)"
273
- msgstr ""
274
-
275
- #: modules/apache.php:101
276
- msgid "Memory Limit"
277
- msgstr ""
278
-
279
- #: modules/apache.php:104 modules/apache.php:109
280
- msgid "Server default"
281
- msgstr ""
282
-
283
- #: modules/apache.php:107
284
- msgid "Error Level"
285
- msgstr ""
286
-
287
- #: modules/apache.php:109
288
- msgid "No errors"
289
- msgstr ""
290
-
291
- #: modules/apache.php:109
292
- msgid "Show errors"
293
- msgstr ""
294
-
295
- #: modules/apache.php:114
296
- msgid "Ban IPs"
297
- msgstr ""
298
-
299
- #: modules/apache.php:120
300
- msgid "Allow IPs"
301
- msgstr ""
302
-
303
- #: modules/apache.php:126
304
- msgid "Raw .htaccess"
305
- msgstr ""
306
-
307
- #: modules/apache.php:132
308
- msgid "Site URL"
309
- msgstr ""
310
-
311
- #: modules/apache.php:135
312
- msgid "Advanced: For management of external sites"
313
- msgstr ""
314
-
315
- #: modules/apache.php:150
316
- msgid "<strong>Location is invalid - check that path exists</strong>"
317
- msgstr ""
318
-
319
- #: modules/apache.php:156
320
- msgid ""
321
- "<strong>Could not write to configured <code>.htaccess</code> file - check "
322
- "file permissions</strong>"
323
- msgstr ""
324
-
325
- #: modules/apache.php:163
326
- msgid ""
327
- "<strong>Disabled: enter the location of an <code>.htaccess</code> file for "
328
- "this to be valid</strong>"
329
- msgstr ""
330
-
331
- #: modules/apache.php:168
332
- msgid "strip WWW"
333
- msgstr ""
334
-
335
- #: modules/apache.php:168
336
- msgid "force WWW"
337
- msgstr ""
338
-
339
- #: modules/apache.php:171
340
- msgid "strip index"
341
- msgstr ""
342
-
343
- #: modules/apache.php:174
344
- msgid "memory limit at %dMB"
345
- msgstr ""
346
-
347
- #: modules/apache.php:177
348
- msgid "no errors"
349
- msgstr ""
350
-
351
- #: modules/apache.php:177
352
- msgid "show errors"
353
- msgstr ""
354
-
355
- #: modules/apache.php:180
356
- msgid "IPs are banned"
357
- msgstr ""
358
-
359
- #: modules/apache.php:183
360
- msgid "IPs are allowed"
361
- msgstr ""
362
-
363
- #: redirection.php:94
364
- msgid "Settings"
365
- msgstr ""
366
-
367
- #: redirection.php:112
368
- msgid "Please wait..."
369
- msgstr ""
370
-
371
- #: redirection.php:115 view/admin/group_list.php:118
372
- #: view/admin/item_list.php:113 view/admin/log.php:113
373
- msgid "Are you sure?"
374
- msgstr ""
375
-
376
- #: redirection.php:116 view/admin/group_list.php:117
377
- #: view/admin/item_list.php:112 view/admin/log.php:112
378
- msgid "No items have been selected"
379
- msgstr ""
380
-
381
- #. #-#-#-#-# plugin.pot (Redirection 2.2.13) #-#-#-#-#
382
- #. Plugin Name of the plugin/theme
383
- #: redirection.php:121
384
- msgid "Redirection"
385
- msgstr ""
386
-
387
- #: redirection.php:159
388
- msgid "Your module was successfully created"
389
- msgstr ""
390
-
391
- #: redirection.php:163
392
- msgid "Your module was not created - did you provide a name?"
393
- msgstr ""
394
-
395
- #: redirection.php:228
396
- msgid "Your options were updated"
397
- msgstr ""
398
-
399
- #: redirection.php:236
400
- msgid "Redirection data has been deleted and the plugin disabled"
401
- msgstr ""
402
-
403
- #: redirection.php:246
404
- msgid "%d redirection was successfully imported"
405
- msgid_plural "%d redirections were successfully imported"
406
- msgstr[0] ""
407
- msgstr[1] ""
408
-
409
- #: redirection.php:248
410
- msgid "No items were imported"
411
- msgstr ""
412
-
413
- #: redirection.php:266
414
- msgid "Your logs have been deleted"
415
- msgstr ""
416
-
417
- #: redirection.php:289
418
- msgid "Your group was added successfully"
419
- msgstr ""
420
-
421
- #: redirection.php:293
422
- msgid "Please specify a group name"
423
- msgstr ""
424
-
425
- #: redirection.php:330
426
- msgid "Redirection is available in"
427
- msgstr ""
428
-
429
- #: view/admin/add.php:3
430
- msgid "Add new redirection"
431
- msgstr ""
432
-
433
- #: view/admin/add.php:6
434
- msgid "Your redirection has been added."
435
- msgstr ""
436
-
437
- #: view/admin/add.php:12 view/admin/item_edit.php:15 view/admin/log.php:68
438
- #: view/admin/log_item_details.php:4
439
- msgid "Source URL"
440
- msgstr ""
441
-
442
- #: view/admin/add.php:16
443
- msgid "Match"
444
- msgstr ""
445
-
446
- #: view/admin/add.php:22
447
- msgid "Action"
448
- msgstr ""
449
-
450
- #: view/admin/add.php:27
451
- msgid "Regular expression"
452
- msgstr ""
453
-
454
- #: view/admin/add.php:36 view/admin/item_list.php:24 view/admin/log.php:43
455
- msgid "Group"
456
- msgstr ""
457
-
458
- #: view/admin/add.php:43
459
- msgid "Add Redirection"
460
- msgstr ""
461
-
462
- #: view/admin/group_edit.php:6 view/admin/group_list.php:37
463
- #: view/admin/group_list.php:100 view/admin/module_edit.php:18
464
- #: view/admin/module_list.php:42
465
- msgid "Name"
466
- msgstr ""
467
-
468
- #: view/admin/group_edit.php:10
469
- msgid "Tracked"
470
- msgstr ""
471
-
472
- #: view/admin/group_edit.php:11
473
- msgid "Whether to track 'hits' to items"
474
- msgstr ""
475
-
476
- #: view/admin/group_edit.php:14
477
- msgid "Enabled"
478
- msgstr ""
479
-
480
- #: view/admin/group_edit.php:15
481
- msgid "Disabling a group will disable all items contained within it"
482
- msgstr ""
483
-
484
- #: view/admin/group_edit.php:20 view/admin/item_edit.php:27
485
- #: view/admin/module_edit.php:27
486
- msgid "Save"
487
- msgstr ""
488
-
489
- #: view/admin/group_edit.php:21 view/admin/item_edit.php:28
490
- #: view/admin/module_edit.php:28
491
- msgid "Cancel"
492
- msgstr ""
493
-
494
- #: view/admin/group_item.php:3
495
- msgid "edit group"
496
- msgstr ""
497
-
498
- #: view/admin/group_item.php:23 view/admin/item.php:27
499
- msgid "disabled"
500
- msgstr ""
501
-
502
- #: view/admin/group_list.php:6
503
- msgid "Groups for module"
504
- msgstr ""
505
-
506
- #: view/admin/group_list.php:16 view/admin/log.php:38
507
- msgid "Module"
508
- msgstr ""
509
-
510
- #: view/admin/group_list.php:21 view/admin/item_list.php:29
511
- #: view/admin/log.php:16 view/admin/log.php:23
512
- msgid "Search"
513
- msgstr ""
514
-
515
- #: view/admin/group_list.php:26
516
- msgid "go"
517
- msgstr ""
518
-
519
- #: view/admin/group_list.php:36 view/admin/item_list.php:42
520
- #: view/admin/module_list.php:17
521
- msgid "Hits"
522
- msgstr ""
523
-
524
- #: view/admin/group_list.php:59 view/admin/item_list.php:67
525
- msgid "Select All"
526
- msgstr ""
527
-
528
- #: view/admin/group_list.php:60 view/admin/item_list.php:68
529
- msgid "Toggle"
530
- msgstr ""
531
-
532
- #: view/admin/group_list.php:61 view/admin/item_list.php:69
533
- msgid "Reset Hits"
534
- msgstr ""
535
-
536
- #: view/admin/group_list.php:62 view/admin/item_list.php:70
537
- #: view/admin/log.php:30 view/admin/options.php:120
538
- msgid "Delete"
539
- msgstr ""
540
-
541
- #: view/admin/group_list.php:64 view/admin/item_list.php:72
542
- msgid "Move To"
543
- msgstr ""
544
-
545
- #: view/admin/group_list.php:69 view/admin/item_list.php:34
546
- #: view/admin/item_list.php:77
547
- msgid "Go"
548
- msgstr ""
549
-
550
- #: view/admin/group_list.php:75 view/admin/item_list.php:83
551
- msgid "re-order"
552
- msgstr ""
553
-
554
- #: view/admin/group_list.php:76 view/admin/item_list.php:84
555
- msgid "save order"
556
- msgstr ""
557
-
558
- #: view/admin/group_list.php:89
559
- msgid "You have no groups in this module."
560
- msgstr ""
561
-
562
- #: view/admin/group_list.php:94
563
- msgid "Add Group"
564
- msgstr ""
565
-
566
- #: view/admin/group_list.php:105
567
- msgid "Add"
568
- msgstr ""
569
-
570
- #: view/admin/item_edit.php:3
571
- msgid "%s by matching %s"
572
- msgstr ""
573
-
574
- #: view/admin/item_edit.php:7
575
- msgid "Title"
576
- msgstr ""
577
-
578
- #: view/admin/item_edit.php:10
579
- msgid "optional"
580
- msgstr ""
581
-
582
- #: view/admin/item_list.php:7
583
- msgid "Redirections for group"
584
- msgstr ""
585
-
586
- #: view/admin/item_list.php:41
587
- msgid "Last Access"
588
- msgstr ""
589
-
590
- #: view/admin/item_list.php:43 view/admin/module_list.php:46
591
- msgid "Type"
592
- msgstr ""
593
-
594
- #: view/admin/item_list.php:44
595
- msgid "URL"
596
- msgstr ""
597
-
598
- #: view/admin/item_list.php:44
599
- msgid "Position"
600
- msgstr ""
601
-
602
- #: view/admin/item_list.php:88
603
- msgid "You have no redirections."
604
- msgstr ""
605
-
606
- #: view/admin/log.php:6
607
- msgid "Redirection Log"
608
- msgstr ""
609
-
610
- #: view/admin/log.php:29
611
- msgid "Bulk Actions"
612
- msgstr ""
613
-
614
- #: view/admin/log.php:33
615
- msgid "Apply"
616
- msgstr ""
617
-
618
- #: view/admin/log.php:49
619
- msgid "Filter"
620
- msgstr ""
621
-
622
- #: view/admin/log.php:67
623
- msgid "Date"
624
- msgstr ""
625
-
626
- #: view/admin/log.php:70
627
- msgid "IP"
628
- msgstr ""
629
-
630
- #: view/admin/log.php:85
631
- msgid "There are no logs to display!"
632
- msgstr ""
633
-
634
- #: view/admin/log.php:94
635
- msgid "Process Current Logs"
636
- msgstr ""
637
-
638
- #: view/admin/log.php:95
639
- msgid ""
640
- "These actions will affect all currently available logs (i.e. your search "
641
- "phrase will restrict the log items)."
642
- msgstr ""
643
-
644
- #: view/admin/log.php:100
645
- msgid "Delete Logs"
646
- msgstr ""
647
-
648
- #: view/admin/log_item_details.php:9
649
- msgid "Redirect to"
650
- msgstr ""
651
-
652
- #: view/admin/log_item_details.php:15
653
- msgid "Redirected by"
654
- msgstr ""
655
-
656
- #: view/admin/log_item_details.php:16
657
- msgid "for"
658
- msgstr ""
659
-
660
- #: view/admin/module_item.php:23
661
- msgid "View as"
662
- msgstr ""
663
-
664
- #: view/admin/module_item.php:25
665
- msgid "CSV"
666
- msgstr ""
667
-
668
- #: view/admin/module_item.php:26
669
- msgid "XML"
670
- msgstr ""
671
-
672
- #: view/admin/module_item.php:28
673
- msgid "RSS"
674
- msgstr ""
675
-
676
- #: view/admin/module_item.php:41
677
- msgid "edit"
678
- msgstr ""
679
-
680
- #: view/admin/module_item.php:43
681
- msgid "delete"
682
- msgstr ""
683
-
684
- #: view/admin/module_item.php:45
685
- msgid "reset"
686
- msgstr ""
687
-
688
- #: view/admin/module_list.php:6 view/admin/submenu.php:16
689
- msgid "Modules"
690
- msgstr ""
691
-
692
- #: view/admin/module_list.php:14
693
- msgid "Details"
694
- msgstr ""
695
-
696
- #: view/admin/module_list.php:15 view/admin/submenu.php:11
697
- msgid "Groups"
698
- msgstr ""
699
-
700
- #: view/admin/module_list.php:16
701
- msgid "Items"
702
- msgstr ""
703
-
704
- #: view/admin/module_list.php:18
705
- msgid "Operations"
706
- msgstr ""
707
-
708
- #: view/admin/module_list.php:27
709
- msgid "Note: Hits are dependant on log entries"
710
- msgstr ""
711
-
712
- #: view/admin/module_list.php:29
713
- msgid "You have no modules defined yet"
714
- msgstr ""
715
-
716
- #: view/admin/module_list.php:34
717
- msgid "Add Module"
718
- msgstr ""
719
-
720
- #: view/admin/module_list.php:35
721
- msgid ""
722
- "A module is a controlling element that determines how redirections are "
723
- "handled. Elements in a WordPress module are handled by WordPress, elements "
724
- "in an Apache module are handled by <code>.htaccess</code>, and elements in a "
725
- "404 module affect how 404 errors are logged."
726
- msgstr ""
727
-
728
- #: view/admin/module_list.php:55
729
- msgid "Create"
730
- msgstr ""
731
-
732
- #: view/admin/options.php:6 view/admin/submenu.php:26
733
- msgid "Options"
734
- msgstr ""
735
-
736
- #: view/admin/options.php:15
737
- msgid "Auto-generate URL"
738
- msgstr ""
739
-
740
- #: view/admin/options.php:19
741
- msgid ""
742
- "This will be used to auto-generate a URL if no URL is given. You can use "
743
- "the special tags $dec$ or $hex$ to have a unique ID inserted (either decimal "
744
- "or hex)"
745
- msgstr ""
746
-
747
- #: view/admin/options.php:24
748
- msgid "IP Lookup Service"
749
- msgstr ""
750
-
751
- #: view/admin/options.php:30
752
- msgid "Plugin Support"
753
- msgstr ""
754
-
755
- #: view/admin/options.php:33
756
- msgid "I'm a nice person and I have helped support the author of this plugin"
757
- msgstr ""
758
-
759
- #: view/admin/options.php:37
760
- msgid "Logging"
761
- msgstr ""
762
-
763
- #: view/admin/options.php:40
764
- msgid "log redirected requests"
765
- msgstr ""
766
-
767
- #: view/admin/options.php:42
768
- msgid "log 404 Not Found requests"
769
- msgstr ""
770
-
771
- #: view/admin/options.php:43
772
- msgid ""
773
- "Uncheck one or both of these to turn off logging and reduce database load if "
774
- "your redirected URLs are hit very frequently, and/or your site is very busy "
775
- "and pages are often not found."
776
- msgstr ""
777
-
778
- #: view/admin/options.php:47
779
- msgid "Expire Logs"
780
- msgstr ""
781
-
782
- #: view/admin/options.php:50
783
- msgid "days (enter 0 for no expiry)"
784
- msgstr ""
785
-
786
- #: view/admin/options.php:54
787
- msgid "RSS Token"
788
- msgstr ""
789
-
790
- #: view/admin/options.php:57
791
- msgid ""
792
- "A unique token allowing feed readers access to Redirection RSS (leave blank "
793
- "to auto-generate)"
794
- msgstr ""
795
-
796
- #: view/admin/options.php:62
797
- msgid "URL Monitoring"
798
- msgstr ""
799
-
800
- #: view/admin/options.php:63
801
- msgid ""
802
- "You can have Redirection detect changes in URLs and have an automatic "
803
- "redirection created in a specific group."
804
- msgstr ""
805
-
806
- #: view/admin/options.php:67
807
- msgid "Post &amp; Page URLs"
808
- msgstr ""
809
-
810
- #: view/admin/options.php:70 view/admin/options.php:82
811
- msgid "Don't monitor"
812
- msgstr ""
813
-
814
- #: view/admin/options.php:74
815
- msgid "Monitor new posts"
816
- msgstr ""
817
-
818
- #: view/admin/options.php:79
819
- msgid "Category URLs"
820
- msgstr ""
821
-
822
- #: view/admin/options.php:89
823
- msgid "Update"
824
- msgstr ""
825
-
826
- #: view/admin/options.php:95
827
- msgid "Import"
828
- msgstr ""
829
-
830
- #: view/admin/options.php:97
831
- msgid ""
832
- "Here you can import redirections from an existing .htaccess file, a CSV "
833
- "file, or a Redirection XML."
834
- msgstr ""
835
-
836
- #: view/admin/options.php:104
837
- msgid "Import into"
838
- msgstr ""
839
-
840
- #: view/admin/options.php:107
841
- msgid "Upload"
842
- msgstr ""
843
-
844
- #: view/admin/options.php:110
845
- msgid "Note that the group is ignored when uploading an XML file."
846
- msgstr ""
847
-
848
- #: view/admin/options.php:114
849
- msgid "Delete Redirection"
850
- msgstr ""
851
-
852
- #: view/admin/options.php:115
853
- msgid ""
854
- "Selecting this option will delete all redirections, all logs, and any "
855
- "options associated with the Redirection plugin. Make sure this is what you "
856
- "want to do."
857
- msgstr ""
858
-
859
- #: view/admin/submenu.php:6
860
- msgid "Redirects"
861
- msgstr ""
862
-
863
- #: view/admin/submenu.php:21
864
- msgid "Log"
865
- msgstr ""
866
-
867
- #: view/admin/submenu.php:31
868
- msgid "Support"
869
- msgstr ""
870
-
871
- #: view/admin/support.php:5
872
- msgid "Redirection Support"
873
- msgstr ""
874
-
875
- #: view/admin/support.php:9
876
- msgid ""
877
- "Redirection is free to use - life is wonderful and lovely! However, it has "
878
- "required a great deal of time and effort to develop and if it has been "
879
- "useful you can help support this development by <strong>making a small "
880
- "donation</strong>."
881
- msgstr ""
882
-
883
- #: view/admin/support.php:10
884
- msgid ""
885
- "This will act as an incentive for me to carry on developing, providing "
886
- "countless hours of support, and including new features and suggestions. You "
887
- "get some useful software and I get to carry on making it. Everybody wins."
888
- msgstr ""
889
-
890
- #: view/admin/support.php:13
891
- msgid ""
892
- "If you are using this plugin in a commercial setup, or feel that it's been "
893
- "particularly useful, then you may want to consider a <strong>commercial "
894
- "donation</strong>."
895
- msgstr ""
896
-
897
- #: view/admin/support.php:36
898
- msgid "Individual<br/>Donation"
899
- msgstr ""
900
-
901
- #: view/admin/support.php:56
902
- msgid "Commercial<br/>Donation"
903
- msgstr ""
904
-
905
- #: view/admin/support.php:60
906
- msgid "Translations"
907
- msgstr ""
908
-
909
- #: view/admin/support.php:62
910
- msgid ""
911
- "If you're multi-lingual then you may want to consider donating a translation:"
912
- msgstr ""
913
-
914
- #: view/admin/support.php:70
915
- msgid ""
916
- "All translators will have a link to their website placed on the plugin "
917
- "homepage at <a href=\"http://urbangiraffe.com/plugins/redirection/"
918
- "\">UrbanGiraffe</a>, in addition to being an individual supporter."
919
- msgstr ""
920
-
921
- #: view/admin/support.php:71
922
- msgid ""
923
- "Full details of producing a translation can be found in this <a href="
924
- "\"http://urbangiraffe.com/articles/translating-wordpress-themes-and-plugins/"
925
- "\">guide to translating WordPress plugins</a>."
926
- msgstr ""
927
-
928
- #. Plugin URI of the plugin/theme
929
- msgid "http://urbangiraffe.com/plugins/redirection/"
930
- msgstr ""
931
-
932
- #. Description of the plugin/theme
933
- msgid "Manage all your 301 redirects and monitor 404 errors"
934
- msgstr ""
935
-
936
- #. Author of the plugin/theme
937
- msgid "John Godley"
938
- msgstr ""
939
-
940
- #. Author URI of the plugin/theme
941
- msgid "http://urbangiraffe.com"
942
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
matches/{user_agent.php → user-agent.php} RENAMED
File without changes
models/database.php CHANGED
@@ -73,16 +73,6 @@ class RE_Database {
73
  KEY `module_id` (`module_id`)
74
  ) $charset_collate",
75
 
76
- "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}redirection_modules`(
77
- `id` int(11) unsigned NOT NULL auto_increment,
78
- `type` varchar(20) NOT NULL default '',
79
- `name` varchar(50) NOT NULL default '',
80
- `options` mediumtext,
81
- PRIMARY KEY ( `id`),
82
- KEY `name` (`name`),
83
- KEY `type` (`type`)
84
- ) $charset_collate",
85
-
86
  "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}redirection_404` (
87
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
88
  `created` datetime NOT NULL,
@@ -103,12 +93,6 @@ class RE_Database {
103
  return false;
104
  }
105
 
106
- // Modules
107
- if ( $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_modules" ) == 0 ) {
108
- $wpdb->insert( $wpdb->prefix.'redirection_modules', array( 'type' => 'wp', 'name' => __( 'WordPress', 'redirection' ), 'options' => '' ) );
109
- $wpdb->insert( $wpdb->prefix.'redirection_modules', array( 'type' => 'apache', 'name' => __( 'Apache', 'redirection' ), 'options' => '' ) );
110
- }
111
-
112
  // Groups
113
  if ( $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_groups" ) == 0 ) {
114
  $wpdb->insert( $wpdb->prefix.'redirection_groups', array( 'name' => __( 'Redirections' ), 'module_id' => 1, 'position' => 0 ) );
@@ -148,6 +132,9 @@ class RE_Database {
148
  if ( version_compare( $current, '2.3.1' ) == -1 )
149
  $this->upgrade_to_231();
150
 
 
 
 
151
  $success = true;
152
  }
153
 
@@ -181,6 +168,12 @@ class RE_Database {
181
  ) $charset_collate;" );
182
  }
183
 
 
 
 
 
 
 
184
  private function upgrade_from_20() {
185
  global $wpdb;
186
 
73
  KEY `module_id` (`module_id`)
74
  ) $charset_collate",
75
 
 
 
 
 
 
 
 
 
 
 
76
  "CREATE TABLE IF NOT EXISTS `{$wpdb->prefix}redirection_404` (
77
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
78
  `created` datetime NOT NULL,
93
  return false;
94
  }
95
 
 
 
 
 
 
 
96
  // Groups
97
  if ( $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_groups" ) == 0 ) {
98
  $wpdb->insert( $wpdb->prefix.'redirection_groups', array( 'name' => __( 'Redirections' ), 'module_id' => 1, 'position' => 0 ) );
132
  if ( version_compare( $current, '2.3.1' ) == -1 )
133
  $this->upgrade_to_231();
134
 
135
+ if ( version_compare( $current, '2.3.2' ) == -1 )
136
+ $this->upgrade_to_232();
137
+
138
  $success = true;
139
  }
140
 
168
  ) $charset_collate;" );
169
  }
170
 
171
+ private function upgrade_to_232() {
172
+ global $wpdb;
173
+
174
+ $wpdb->query( "DROP TABLE IF EXISTS {$wpdb->prefix}redirection_modules;" );
175
+ }
176
+
177
  private function upgrade_from_20() {
178
  global $wpdb;
179
 
models/{file_io.php → file-io.php} RENAMED
@@ -6,18 +6,22 @@ abstract class Red_FileIO {
6
  public static function create( $type ) {
7
  $exporter = false;
8
 
9
- if ( $type == 'rss' ) {
10
- include dirname( dirname( __FILE__ ) )."/fileio/rss.php";
11
  $exporter = new Red_Rss_File();
12
  }
13
- elseif ( $type == 'csv' ) {
14
- include dirname( dirname( __FILE__ ) )."/fileio/csv.php";
15
  $exporter = new Red_Csv_File();
16
  }
17
- elseif ( $type == 'apache' ) {
18
- include dirname( dirname( __FILE__ ) )."/fileio/apache.php";
19
  $exporter = new Red_Apache_File();
20
  }
 
 
 
 
21
 
22
  return $exporter;
23
  }
6
  public static function create( $type ) {
7
  $exporter = false;
8
 
9
+ if ( $type === 'rss' ) {
10
+ include dirname( dirname( __FILE__ ) ).'/fileio/rss.php';
11
  $exporter = new Red_Rss_File();
12
  }
13
+ elseif ( $type === 'csv' ) {
14
+ include dirname( dirname( __FILE__ ) ).'/fileio/csv.php';
15
  $exporter = new Red_Csv_File();
16
  }
17
+ elseif ( $type === 'apache' ) {
18
+ include dirname( dirname( __FILE__ ) ).'/fileio/apache.php';
19
  $exporter = new Red_Apache_File();
20
  }
21
+ elseif ( $type === 'nginx' ) {
22
+ include dirname( dirname( __FILE__ ) ).'/fileio/nginx.php';
23
+ $exporter = new Red_Nginx_File();
24
+ }
25
 
26
  return $exporter;
27
  }
models/group.php CHANGED
@@ -3,6 +3,10 @@
3
  class Red_Group {
4
  private $items = 0;
5
  private $name;
 
 
 
 
6
 
7
  public function __construct( $values = '' ) {
8
  if ( is_object( $values ) ) {
@@ -20,13 +24,10 @@ class Red_Group {
20
  return $this->id;
21
  }
22
 
23
- public function is_disabled() {
24
- return $this->status == 'disabled' ? true : false;
25
  }
26
 
27
- /**
28
- * Get list of groups
29
- */
30
  static function get( $id ) {
31
  global $wpdb;
32
 
@@ -36,184 +37,101 @@ class Red_Group {
36
  return false;
37
  }
38
 
39
- static function get_for_module( $module ) {
40
- global $wpdb;
41
-
42
- $sql = $wpdb->prepare( "SELECT SQL_CALC_FOUND_ROWS {$wpdb->prefix}redirection_groups.* FROM {$wpdb->prefix}redirection_groups WHERE {$wpdb->prefix}redirection_groups.module_id=%d", $module );
43
-
44
- $rows = $wpdb->get_results( $sql );
45
- $items = array();
46
- if ( count( $rows ) > 0 ) {
47
- foreach( $rows AS $row ) {
48
- $items[] = new Red_Group( $row );
49
- }
50
- }
51
-
52
- return $items;
53
- }
54
-
55
- /**
56
- * Get all groups with number of items in each group
57
- * DBW
58
- */
59
- static function get_all( $module, $pager ) {
60
- global $wpdb;
61
-
62
- $sql = $wpdb->prepare( "SELECT SQL_CALC_FOUND_ROWS {$wpdb->prefix}redirection_groups.*,COUNT( {$wpdb->prefix}redirection_items.id ) AS items,SUM( {$wpdb->prefix}redirection_items.last_count ) AS redirects FROM {$wpdb->prefix}redirection_groups LEFT JOIN {$wpdb->prefix}redirection_items ON {$wpdb->prefix}redirection_items.group_id={$wpdb->prefix}redirection_groups.id WHERE {$wpdb->prefix}redirection_groups.module_id=%d", $module );
63
- $sql .= str_replace( 'WHERE', 'AND', $pager->to_limits( '', array( 'name' ), '', "GROUP BY {$wpdb->prefix}redirection_groups.id" ) );
64
-
65
- $rows = $wpdb->get_results( $sql );
66
- $pager->set_total( $wpdb->get_var( "SELECT FOUND_ROWS()" ) );
67
- $items = array();
68
- if ( count( $rows ) > 0 ) {
69
- foreach( $rows AS $row ) {
70
- $items[] = new Red_Group( $row );
71
- }
72
- }
73
-
74
- return $items;
75
- }
76
-
77
- /**
78
- * Get list of groups
79
- * DBW
80
- */
81
  static function get_for_select() {
82
  global $wpdb;
83
 
84
  $data = array();
85
- $rows = $wpdb->get_results( "SELECT {$wpdb->prefix}redirection_modules.name AS module_name,{$wpdb->prefix}redirection_groups.name AS group_name,{$wpdb->prefix}redirection_groups.id FROM {$wpdb->prefix}redirection_groups INNER JOIN {$wpdb->prefix}redirection_modules ON {$wpdb->prefix}redirection_modules.id={$wpdb->prefix}redirection_groups.module_id ORDER BY {$wpdb->prefix}redirection_modules.name,{$wpdb->prefix}redirection_groups.position" );
 
86
  if ( $rows ) {
87
  foreach ( $rows AS $row ) {
88
- $data[$row->module_name][$row->id] = $row->group_name;
 
89
  }
90
  }
91
 
92
  return $data;
93
  }
94
 
95
- /**
96
- * Get first group ID
97
- */
98
- static function get_first_id() {
99
  global $wpdb;
100
 
101
- return intval( $wpdb->get_var( "SELECT id FROM {$wpdb->prefix}redirection_groups ORDER BY id LIMIT 0,1" ) );
102
- }
103
 
104
- static function create( $data ) {
105
- global $wpdb;
106
-
107
- $name = trim( $data['name'] );
108
- $module = intval( $data['module_id'] );
109
-
110
- if ( $name != '' && $module > 0 ) {
111
- $position = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( * ) FROM {$wpdb->prefix}redirection_groups WHERE module_id=%d", $module ) );
112
- if ( isset( $data['position'] ) )
113
- $position = $data['position'];
114
 
115
  $data = array(
116
  'name' => trim( $name ),
117
- 'module_id' => intval( $module ),
118
  'position' => intval( $position )
119
  );
120
 
121
- if ( isset( $data['status'] ) && isset( $data['position'] ) )
122
- $data['status'] = $data['status'];
123
-
124
  $wpdb->insert( $wpdb->prefix.'redirection_groups', $data );
125
 
126
- Red_Module::flush( $module );
127
  return Red_Group::get( $wpdb->insert_id );
128
  }
129
 
130
  return false;
131
  }
132
 
133
- function update( $data ) {
134
  global $wpdb;
135
 
136
- $data = array_map( 'stripslashes', $data );
 
137
 
138
- $this->tracking = isset( $data['tracking'] ) ? true : false;
139
- $this->status = isset( $data['status'] ) ? 'enabled' : 'disabled';
140
- $this->name = trim( wp_kses( $data['name'], array() ) );
141
 
142
- $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'name' => $this->name, 'status' => $this->status, 'tracking' => intval( $this->tracking ) ), array( 'id' => intval( $this->id ) ) );
143
 
144
- Red_Module::flush( $this->module_id );
 
 
 
145
  }
146
 
147
- function delete() {
148
  global $wpdb;
149
 
150
  // Delete all items in this group
151
  $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_items WHERE group_id=%d", $this->id ) );
152
 
 
 
153
  // Delete the group
154
  $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_groups WHERE id=%d", $this->id ) );
155
- }
156
-
157
- static function save_order( $items, $start ) {
158
- global $wpdb;
159
-
160
- foreach ( $items AS $pos => $id ) {
161
- $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'position' => $pos + $start ), array( 'id' => intval( $id ) ) );
162
- }
163
 
164
- $group = self::get( $items[0] );
165
- Red_Module::flush( $group->module_id );
166
- }
167
-
168
- function move_to( $module ) {
169
- global $wpdb;
170
-
171
- $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'module_id' => intval( $module ) ), array( 'id' => $this->id ) );
172
-
173
- Red_Module::flush( $module );
174
- Red_Module::flush( $this->id );
175
  }
176
 
177
- function reset() {
178
  global $wpdb;
179
 
180
- $this->last_count = 0;
181
- $this->last_access = '0000-00-00 00:00:00';
182
-
183
- $wpdb->update( $wpdb->prefix.'redirection_items', array( 'last_count' => 0, 'last_access' => $this->last_access ), array( 'group_id' => $this->id ) );
184
-
185
- RE_Log::delete_for_group( $this->id );
186
  }
187
 
188
- function get_item_count() {
189
  global $wpdb;
190
 
191
- return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_items WHERE group_id=%d", $this->id ) );
192
- }
193
 
194
- function type() {
195
- if ( $this->apache )
196
- return '.ht';
197
- return 'WP';
198
- }
199
-
200
- function tracked() {
201
- if ( $this->tracking == 1 )
202
- return __( 'Yes', 'redirection' );
203
- return __( 'No', 'redirection' );
204
  }
205
 
206
- function toggle_status() {
207
  global $wpdb;
208
 
209
- $this->status = ( $this->status == 'enabled' ) ? 'disabled' : 'enabled';
 
210
 
211
- $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'status' => $this->status ), array( 'id' => $this->id ) );
212
  }
213
 
214
- function hits() {
215
- global $wpdb;
216
-
217
- return (int)$wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_logs WHERE group_id=%d", $this->id ) );
218
  }
219
  }
3
  class Red_Group {
4
  private $items = 0;
5
  private $name;
6
+ private $tracking;
7
+ private $module_id;
8
+ private $status;
9
+ private $position;
10
 
11
  public function __construct( $values = '' ) {
12
  if ( is_object( $values ) ) {
24
  return $this->id;
25
  }
26
 
27
+ public function is_enabled() {
28
+ return $this->status === 'enabled' ? true : false;
29
  }
30
 
 
 
 
31
  static function get( $id ) {
32
  global $wpdb;
33
 
37
  return false;
38
  }
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  static function get_for_select() {
41
  global $wpdb;
42
 
43
  $data = array();
44
+ $rows = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}redirection_groups" );
45
+
46
  if ( $rows ) {
47
  foreach ( $rows AS $row ) {
48
+ $module = Red_Module::get( $row->module_id );
49
+ $data[$module->get_name()][$row->id] = $row->name;
50
  }
51
  }
52
 
53
  return $data;
54
  }
55
 
56
+ static function create( $name, $module_id ) {
 
 
 
57
  global $wpdb;
58
 
59
+ $name = trim( $name );
 
60
 
61
+ if ( $name !== '' && $module_id > 0 ) {
62
+ $position = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT( * ) FROM {$wpdb->prefix}redirection_groups WHERE module_id=%d", $module_id ) );
 
 
 
 
 
 
 
 
63
 
64
  $data = array(
65
  'name' => trim( $name ),
66
+ 'module_id' => intval( $module_id ),
67
  'position' => intval( $position )
68
  );
69
 
 
 
 
70
  $wpdb->insert( $wpdb->prefix.'redirection_groups', $data );
71
 
 
72
  return Red_Group::get( $wpdb->insert_id );
73
  }
74
 
75
  return false;
76
  }
77
 
78
+ public function update( $data ) {
79
  global $wpdb;
80
 
81
+ $old_id = $this->module_id;
82
+ $this->name = trim( wp_kses( stripslashes( $data['name'] ), array() ) );
83
 
84
+ if ( Red_Module::is_valid_id( intval( $data['module_id'] ) ) )
85
+ $this->module_id = intval( $data['module_id'] );
 
86
 
87
+ $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'name' => $this->name, 'module_id' => $this->module_id ), array( 'id' => intval( $this->id ) ) );
88
 
89
+ if ( $old_id !== $this->module_id ) {
90
+ Red_Module::flush_by_module( $old_id );
91
+ Red_Module::flush_by_module( $this->module_id );
92
+ }
93
  }
94
 
95
+ public function delete() {
96
  global $wpdb;
97
 
98
  // Delete all items in this group
99
  $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_items WHERE group_id=%d", $this->id ) );
100
 
101
+ Red_Module::flush( $this->id );
102
+
103
  // Delete the group
104
  $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_groups WHERE id=%d", $this->id ) );
 
 
 
 
 
 
 
 
105
 
106
+ if ( $wpdb->get_var( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_groups" ) == 0 )
107
+ $wpdb->insert( $wpdb->prefix.'redirection_groups', array( 'name' => __( 'Redirections' ), 'module_id' => 1, 'position' => 0 ) );
 
 
 
 
 
 
 
 
 
108
  }
109
 
110
+ public function get_total_redirects() {
111
  global $wpdb;
112
 
113
+ return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_items WHERE group_id=%d", $this->id ) );
 
 
 
 
 
114
  }
115
 
116
+ public function enable() {
117
  global $wpdb;
118
 
119
+ $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'status' => 'enabled' ), array( 'id' => $this->id ) );
120
+ $wpdb->update( $wpdb->prefix.'redirection_items', array( 'status' => 'enabled' ), array( 'group_id' => $this->id ) );
121
 
122
+ Red_Module::flush( $this->id );
 
 
 
 
 
 
 
 
 
123
  }
124
 
125
+ public function disable() {
126
  global $wpdb;
127
 
128
+ $wpdb->update( $wpdb->prefix.'redirection_groups', array( 'status' => 'disabled' ), array( 'id' => $this->id ) );
129
+ $wpdb->update( $wpdb->prefix.'redirection_items', array( 'status' => 'disabled' ), array( 'group_id' => $this->id ) );
130
 
131
+ Red_Module::flush( $this->id );
132
  }
133
 
134
+ public function get_module_id() {
135
+ return $this->module_id;
 
 
136
  }
137
  }
models/htaccess.php CHANGED
@@ -1,13 +1,14 @@
1
  <?php
2
 
3
  class Red_Htaccess {
4
- var $items;
 
5
 
6
- function encode_from( $url ) {
7
  return '^'.$this->encode( $url ).'$';
8
  }
9
 
10
- function encode2nd( $url ) {
11
  $url = urlencode( $url );
12
  $url = str_replace( '%2F', '/', $url );
13
  $url = str_replace( '%3A', ':', $url );
@@ -16,7 +17,7 @@ class Red_Htaccess {
16
  return $url;
17
  }
18
 
19
- function encode( $url ) {
20
  $url = urlencode( $url );
21
  $url = str_replace( '%2F', '/', $url );
22
  $url = str_replace( '+', '%20', $url );
@@ -24,7 +25,7 @@ class Red_Htaccess {
24
  return $url;
25
  }
26
 
27
- function encode_regex( $url ) {
28
  $url = str_replace( ' ', '%20', $url );
29
  $url = str_replace( '.', '\\.', $url );
30
  $url = str_replace( '\\.*', '.*', $url );
@@ -32,57 +33,66 @@ class Red_Htaccess {
32
  return $url;
33
  }
34
 
35
- function add_referrer( $item, $match ) {
36
- $from = $this->encode_from( ltrim( $item->url, '/' ) );
37
- if ( $item->regex )
38
- $from = $this->encode_regex( ltrim( $item->url, '/' ) );
39
 
40
  if ( ( $match->url_from || $match->url_notfrom ) && $match->referrer ) {
41
  $this->items[] = sprintf( 'RewriteCond %%{HTTP_REFERER} %s [NC]', ( $match->regex ? $this->encode_regex( $match->referrer ) : $this->encode_from( $match->referrer ) ) );
42
 
43
  if ( $match->url_from ) {
44
- $to = $this->target( $item->action_type, $match->url_from, $item->action_code, $item->regex );
45
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
46
  }
47
 
48
  if ( $match->url_notfrom ) {
49
- $to = $this->target( $item->action_type, $match->url_notfrom, $item->action_code, $item->regex );
50
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
51
  }
52
  }
53
  }
54
 
55
- function add_agent( $item, $match ) {
56
- $from = $this->encode( ltrim( $item->url, '/' ) );
57
- if ( $item->regex )
58
- $from = $this->encode_regex( ltrim( $item->url, '/' ) );
59
 
60
  if ( ( $match->url_from || $match->url_notfrom ) && $match->user_agent ) {
61
  $this->items[] = sprintf( 'RewriteCond %%{HTTP_USER_AGENT} %s [NC]', ( $match->regex ? $this->encode_regex( $match->user_agent ) : $this->encode2nd( $match->user_agent ) ) );
62
 
63
  if ( $match->url_from ) {
64
- $to = $this->target( $item->action_type, $match->url_from, $item->action_code, $item->regex );
65
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
66
  }
67
 
68
  if ( $match->url_notfrom ) {
69
- $to = $this->target( $item->action_type, $match->url_notfrom, $item->action_code, $item->regex );
70
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
71
  }
72
  }
73
  }
74
 
75
- function add_url( $item, $match ) {
76
- $to = $this->target( $item->action_type, $match->url, $item->action_code, $item->regex );
77
- $from = $this->encode_from( ltrim( $item->url, '/' ) );
78
- if ( $item->regex )
79
- $from = $this->encode_regex( ltrim ($item->url, '/' ) );
 
 
 
 
 
 
 
 
 
80
 
81
  if ( $to )
82
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
83
  }
84
 
85
- function action_random( $data, $code, $regex ) {
86
  // Pick a WP post at random
87
  global $wpdb;
88
 
@@ -92,25 +102,25 @@ class Red_Htaccess {
92
  return sprintf( '%s [R=%d,L]', $this->encode( $url['path'] ), $code );
93
  }
94
 
95
- function action_pass( $data, $code, $regex ) {
96
  if ( $regex )
97
  return sprintf( '%s [L]', $this->encode2nd( $data ), $code );
98
  return sprintf( '%s [L]', $this->encode2nd( $data ), $code );
99
  }
100
 
101
- function action_error( $data, $code, $regex) {
102
  if ( $code == '410' )
103
  return '/ [G,L]';
104
  return '/ [F,L]';
105
  }
106
 
107
- function action_url( $data, $code, $regex ) {
108
  if ( $regex )
109
  return sprintf( '%s [R=%d,L]', $this->encode2nd( $data ), $code );
110
  return sprintf( '%s [R=%d,L]', $this->encode2nd( $data ), $code );
111
  }
112
 
113
- function target( $action, $data, $code, $regex ) {
114
  $target = 'action_'.$action;
115
 
116
  if ( method_exists( $this, $target ) )
@@ -118,38 +128,22 @@ class Red_Htaccess {
118
  return '';
119
  }
120
 
121
- function add( $item ) {
122
- $target = 'add_'.$item->match_type;
 
123
 
124
- if ( method_exists( $this, $target ) )
125
- $this->$target( $item, $item->match );
126
- }
127
-
128
- function generate() {
129
- $version = get_plugin_data( __FILE__ );
130
- $version = $version['Version'];
131
 
132
  $text[] = '# Created by Redirection';
133
  $text[] = '# '.date ('r');
134
- $text[] = '# Redirection '.$version.' - http://urbangiraffe.com/plugins/redirection/';
135
- $text[] = '';
136
-
137
- // Default blocked files - I can't think of a reason not to block these
138
- $text[] = '<Files .htaccess,.svn>';
139
- $text[] = 'order allow,deny';
140
- $text[] = 'deny from all';
141
- $text[] = '</Files>';
142
  $text[] = '';
143
 
144
  // mod_rewrite section
145
- $text[] = '';
146
- $text[] = 'Options +FollowSymlinks';
147
- $text[] = '';
148
  $text[] = '<IfModule mod_rewrite.c>';
149
 
150
  // Add redirects
151
- if ( is_array( $this->items ) )
152
- $text = array_merge( $text, $this->items );
153
 
154
  // End of mod_rewrite
155
  $text[] = '</IfModule>';
@@ -157,35 +151,37 @@ class Red_Htaccess {
157
 
158
  // End of redirection section
159
  $text[] = '# End of Redirection';
160
- $text[] = '';
161
 
162
  $text = implode( "\r\n", $text );
163
- $text = str_replace( "\r\n\r\n\r\n", "\r\n", $text );
164
- $text = str_replace( "\r\n\r\n\r\n", "\r\n", $text );
165
- return $text;
166
  }
167
 
168
- function save( $filename, $name ) {
169
- $text = $this->generate( $name );
170
 
171
- // Does the file already exist?
172
- if ( file_exists( $filename) ) {
173
- $existing = @file_get_contents( $filename );
174
 
175
- // Remove any existing Redirection module
176
- $text .= preg_replace( '@# Created by Redirection(.*?)# End of Redirection@sm', '', $existing );
 
 
 
 
 
 
177
  }
178
 
179
- $file = @fopen( $filename, 'w' );
180
- if ( $file ) {
181
- $text = str_replace( "\r\n\r\n\r\n", "\r\n", $text );
182
- $text = str_replace( "\r\n\r\n\r\n", "\r\n", $text );
183
 
184
- fwrite( $file, $text );
185
- fclose( $file );
186
- return true;
187
- }
 
188
 
189
- return false;
190
  }
191
  }
1
  <?php
2
 
3
  class Red_Htaccess {
4
+ private $items = array();
5
+ const INSERT_REGEX = '@\n?# Created by Redirection(.*?)# End of Redirection\n?@sm';
6
 
7
+ private function encode_from( $url ) {
8
  return '^'.$this->encode( $url ).'$';
9
  }
10
 
11
+ private function encode2nd( $url ) {
12
  $url = urlencode( $url );
13
  $url = str_replace( '%2F', '/', $url );
14
  $url = str_replace( '%3A', ':', $url );
17
  return $url;
18
  }
19
 
20
+ private function encode( $url ) {
21
  $url = urlencode( $url );
22
  $url = str_replace( '%2F', '/', $url );
23
  $url = str_replace( '+', '%20', $url );
25
  return $url;
26
  }
27
 
28
+ private function encode_regex( $url ) {
29
  $url = str_replace( ' ', '%20', $url );
30
  $url = str_replace( '.', '\\.', $url );
31
  $url = str_replace( '\\.*', '.*', $url );
33
  return $url;
34
  }
35
 
36
+ private function add_referrer( $item, $match ) {
37
+ $from = $this->encode_from( ltrim( $item->get_url(), '/' ) );
38
+ if ( $item->is_regex() )
39
+ $from = $this->encode_regex( ltrim( $item->get_url(), '/' ) );
40
 
41
  if ( ( $match->url_from || $match->url_notfrom ) && $match->referrer ) {
42
  $this->items[] = sprintf( 'RewriteCond %%{HTTP_REFERER} %s [NC]', ( $match->regex ? $this->encode_regex( $match->referrer ) : $this->encode_from( $match->referrer ) ) );
43
 
44
  if ( $match->url_from ) {
45
+ $to = $this->target( $item->get_action_type(), $match->url_from, $item->get_action_code(), $item->is_regex() );
46
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
47
  }
48
 
49
  if ( $match->url_notfrom ) {
50
+ $to = $this->target( $item->get_action_type(), $match->url_notfrom, $item->get_action_code(), $item->is_regex() );
51
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
52
  }
53
  }
54
  }
55
 
56
+ private function add_agent( $item, $match ) {
57
+ $from = $this->encode( ltrim( $item->get_url(), '/' ) );
58
+ if ( $item->is_regex() )
59
+ $from = $this->encode_regex( ltrim( $item->get_url(), '/' ) );
60
 
61
  if ( ( $match->url_from || $match->url_notfrom ) && $match->user_agent ) {
62
  $this->items[] = sprintf( 'RewriteCond %%{HTTP_USER_AGENT} %s [NC]', ( $match->regex ? $this->encode_regex( $match->user_agent ) : $this->encode2nd( $match->user_agent ) ) );
63
 
64
  if ( $match->url_from ) {
65
+ $to = $this->target( $item->get_action_type(), $match->url_from, $item->get_action_code(), $item->is_regex() );
66
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
67
  }
68
 
69
  if ( $match->url_notfrom ) {
70
+ $to = $this->target( $item->get_action_type(), $match->url_notfrom, $item->get_action_code(), $item->is_regex() );
71
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
72
  }
73
  }
74
  }
75
 
76
+ private function add_url( $item, $match ) {
77
+ $url = $item->get_url();
78
+
79
+ if ( $item->is_regex() == false && strpos( $url, '?') !== false || strpos( $url, '&' ) !== false ) {
80
+ $url_parts = parse_url( $url );
81
+ $url = $url_parts['path'];
82
+ $this->items[] = sprintf( 'RewriteCond %%{QUERY_STRING} ^%s$', $url_parts['query'] );
83
+ }
84
+
85
+ $to = $this->target( $item->get_action_type(), $match->url, $item->get_action_code(), $item->is_regex() );
86
+ $from = $this->encode_from( $url );
87
+
88
+ if ( $item->is_regex() )
89
+ $from = $this->encode_regex( $item->get_url() );
90
 
91
  if ( $to )
92
  $this->items[] = sprintf( 'RewriteRule %s %s', $from, $to );
93
  }
94
 
95
+ private function action_random( $data, $code, $regex ) {
96
  // Pick a WP post at random
97
  global $wpdb;
98
 
102
  return sprintf( '%s [R=%d,L]', $this->encode( $url['path'] ), $code );
103
  }
104
 
105
+ private function action_pass( $data, $code, $regex ) {
106
  if ( $regex )
107
  return sprintf( '%s [L]', $this->encode2nd( $data ), $code );
108
  return sprintf( '%s [L]', $this->encode2nd( $data ), $code );
109
  }
110
 
111
+ private function action_error( $data, $code, $regex) {
112
  if ( $code == '410' )
113
  return '/ [G,L]';
114
  return '/ [F,L]';
115
  }
116
 
117
+ private function action_url( $data, $code, $regex ) {
118
  if ( $regex )
119
  return sprintf( '%s [R=%d,L]', $this->encode2nd( $data ), $code );
120
  return sprintf( '%s [R=%d,L]', $this->encode2nd( $data ), $code );
121
  }
122
 
123
+ private function target( $action, $data, $code, $regex ) {
124
  $target = 'action_'.$action;
125
 
126
  if ( method_exists( $this, $target ) )
128
  return '';
129
  }
130
 
131
+ private function generate() {
132
+ if ( count( $this->items ) === 0 )
133
+ return '';
134
 
135
+ $version = get_plugin_data( dirname( dirname( __FILE__ ) ).'/redirection.php' );
 
 
 
 
 
 
136
 
137
  $text[] = '# Created by Redirection';
138
  $text[] = '# '.date ('r');
139
+ $text[] = '# Redirection '.trim( $version['Version'] ).' - http://urbangiraffe.com/plugins/redirection/';
 
 
 
 
 
 
 
140
  $text[] = '';
141
 
142
  // mod_rewrite section
 
 
 
143
  $text[] = '<IfModule mod_rewrite.c>';
144
 
145
  // Add redirects
146
+ $text = array_merge( $text, $this->items );
 
147
 
148
  // End of mod_rewrite
149
  $text[] = '</IfModule>';
151
 
152
  // End of redirection section
153
  $text[] = '# End of Redirection';
 
154
 
155
  $text = implode( "\r\n", $text );
156
+ return "\n".$text."\n";
 
 
157
  }
158
 
159
+ public function add( $item ) {
160
+ $target = 'add_'.$item->get_match_type();
161
 
162
+ if ( method_exists( $this, $target ) )
163
+ $this->$target( $item, $item->match );
164
+ }
165
 
166
+ public function get( $existing = false ) {
167
+ $text = $this->generate();
168
+
169
+ if ( $existing ) {
170
+ if ( preg_match( self::INSERT_REGEX, $existing ) > 0 )
171
+ $text = preg_replace( self::INSERT_REGEX, $text, $existing );
172
+ else
173
+ $text = trim( $existing )."\n".$text;
174
  }
175
 
176
+ return trim( $text );
177
+ }
 
 
178
 
179
+ public function save( $filename, $content_to_save = false ) {
180
+ $existing = false;
181
+
182
+ if ( file_exists( $filename ) )
183
+ $existing = @file_get_contents( $filename );
184
 
185
+ return @file_put_contents( $filename, $this->get( $existing ) );
186
  }
187
  }
models/log.php CHANGED
@@ -1,24 +1,4 @@
1
  <?php
2
- /**
3
- * Redirection
4
- *
5
- * @package Redirection
6
- * @author John Godley
7
- * @copyright Copyright (C) John Godley
8
- **/
9
-
10
- /*
11
- ============================================================================================================
12
- This software is provided "as is" and any express or implied warranties, including, but not limited to, the
13
- implied warranties of merchantibility and fitness for a particular purpose are disclaimed. In no event shall
14
- the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or
15
- consequential damages (including, but not limited to, procurement of substitute goods or services; loss of
16
- use, data, or profits; or business interruption) however caused and on any theory of liability, whether in
17
- contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of
18
- this software, even if advised of the possibility of such damage.
19
-
20
- For full license details see license.txt
21
- ============================================================================================================ */
22
 
23
  class RE_Log {
24
  var $id;
@@ -64,7 +44,6 @@ class RE_Log {
64
 
65
  $insert['sent_to'] = $target;
66
  $insert['redirection_id'] = isset( $extra['redirect_id'] ) ? $extra['redirect_id'] : 0;
67
- $insert['module_id'] = isset( $extra['module_id'] ) ? $extra['module_id'] : 0;
68
  $insert['group_id'] = isset( $extra['group_id'] ) ? $extra['group_id'] : 0;
69
 
70
  $insert = apply_filters( 'redirection_log_data', $insert );
@@ -92,11 +71,6 @@ class RE_Log {
92
  $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_logs WHERE group_id=%d", $id ) );
93
  }
94
 
95
- static function delete_for_module( $id ) {
96
- global $wpdb;
97
- $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_logs WHERE module_id=%d", $id ) );
98
- }
99
-
100
  static function delete_all( $type = 'all', $id = 0 ) {
101
  global $wpdb;
102
 
@@ -268,4 +242,3 @@ class RE_404 {
268
  }
269
  }
270
  }
271
-
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  class RE_Log {
4
  var $id;
44
 
45
  $insert['sent_to'] = $target;
46
  $insert['redirection_id'] = isset( $extra['redirect_id'] ) ? $extra['redirect_id'] : 0;
 
47
  $insert['group_id'] = isset( $extra['group_id'] ) ? $extra['group_id'] : 0;
48
 
49
  $insert = apply_filters( 'redirection_log_data', $insert );
71
  $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_logs WHERE group_id=%d", $id ) );
72
  }
73
 
 
 
 
 
 
74
  static function delete_all( $type = 'all', $id = 0 ) {
75
  global $wpdb;
76
 
242
  }
243
  }
244
  }
 
models/match.php CHANGED
@@ -1,24 +1,4 @@
1
  <?php
2
- /**
3
- * Redirection
4
- *
5
- * @package Redirection
6
- * @author John Godley
7
- * @copyright Copyright( C ) John Godley
8
- **/
9
-
10
- /*
11
- ============================================================================================================
12
- This software is provided "as is" and any express or implied warranties, including, but not limited to, the
13
- implied warranties of merchantibility and fitness for a particular purpose are disclaimed. In no event shall
14
- the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or
15
- consequential damages( including, but not limited to, procurement of substitute goods or services; loss of
16
- use, data, or profits; or business interruption ) however caused and on any theory of liability, whether in
17
- contract, strict liability, or tort( including negligence or otherwise ) arising in any way out of the use of
18
- this software, even if advised of the possibility of such damage.
19
-
20
- For full license details see license.txt
21
- ============================================================================================================ */
22
 
23
  class Red_Match {
24
  var $url;
@@ -94,7 +74,7 @@ class Red_Match {
94
  return array (
95
  'url' => 'url.php',
96
  'referrer' => 'referrer.php',
97
- 'agent' => 'user_agent.php',
98
  'login' => 'login.php',
99
  );
100
  }
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  class Red_Match {
4
  var $url;
74
  return array (
75
  'url' => 'url.php',
76
  'referrer' => 'referrer.php',
77
+ 'agent' => 'user-agent.php',
78
  'login' => 'login.php',
79
  );
80
  }
models/module.php CHANGED
@@ -1,288 +1,78 @@
1
  <?php
2
 
3
- class Red_Module {
4
- private $id;
5
- private $type;
6
- private $name;
7
- private $options;
8
 
9
- function Red_Module( $values = '' ) {
10
- if ( is_object( $values ) ) {
11
- foreach ( $values AS $key => $value ) {
12
- $this->$key = $value;
13
- }
14
-
15
- if ( $this->options )
16
- $this->load( unserialize( $this->options ) );
17
- }
18
- }
19
-
20
- function module_flush( $items ) {
21
- }
22
-
23
- function module_flush_delete() {
24
- }
25
-
26
- static function flush( $id ) {
27
- $module = self::get( $id );
28
- if ( $module && $module->is_valid() )
29
- $module->module_flush( Red_Item::get_all_for_module( $id ) );
30
- }
31
-
32
- static function flush_delete( $id ) {
33
- $module = self::get( $id );
34
- if ( $module )
35
- $module->module_flush_delete();
36
- }
37
-
38
- function update( $data ) {
39
- global $wpdb;
40
-
41
- $data = array_map( 'stripslashes', $data );
42
-
43
- $this->name = $data['name'];
44
- $options = $this->save( $data );
45
- $wpdb->update( $wpdb->prefix.'redirection_modules', array( 'name' => trim( $data['name'] ), 'options' => empty( $options ) ? '' : serialize( $options ) ), array( 'id' => intval( $this->id ) ) );
46
-
47
- self::clear_cache( $this->id );
48
- }
49
-
50
- function delete() {
51
- global $wpdb;
52
-
53
- $groups = Red_Group::get_for_module( $this->id );
54
- if ( count( $groups ) > 0 ) {
55
- foreach ( $groups AS $group ) {
56
- $group->delete( $group->id );
57
- }
58
- }
59
-
60
- $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_modules WHERE id=%d", $this->id ) );
61
-
62
- RE_Log::delete_for_module( $this->id );
63
- self::clear_cache( $this->id );
64
- self::flush_delete( $this->id );
65
- }
66
-
67
- static function clear_cache( $module ) {
68
- delete_option( 'redirection_module_cache' );
69
- self::flush( $module );
70
- }
71
-
72
- function create( $data ) {
73
- global $wpdb;
74
-
75
- if ( strlen( $data['name'] ) > 0 ) {
76
- $db = array(
77
- 'name' => trim( $data['name'] ),
78
- 'type' => $data['type'],
79
- );
80
-
81
- if ( isset( $data['options'] ) )
82
- $db['options'] = serialize( $data['options'] );
83
-
84
- $wpdb->insert( $wpdb->prefix.'redirection_modules', $db );
85
-
86
- self::flush( $wpdb->insert_id );
87
- return $wpdb->insert_id;
88
- }
89
-
90
- return false;
91
  }
92
 
93
  static function get( $id ) {
94
- global $wpdb;
 
95
 
96
- $row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}redirection_modules WHERE id=%d", $id ) );
97
- if ( $row )
98
- return self::new_item( $row );
99
- return false;
100
- }
101
-
102
- function get_by_type( $type ) {
103
- global $wpdb;
104
-
105
- $cache = get_option( 'redirection_module_cache' );
106
- if ( $cache && isset( $cache[$type] ) )
107
- return $cache[$type];
108
-
109
- $rows = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}redirection_modules WHERE type=%s ORDER BY id", $type ) );
110
- $items = array();
111
- if ( count( $rows ) > 0 ) {
112
- foreach ( $rows AS $row ) {
113
- $items[] = self::new_item( $row );
114
- }
115
- }
116
-
117
- $cache[$type] = $items;
118
- update_option( 'redirection_module_cache', $cache );
119
- return $items;
120
- }
121
 
122
- /**
123
- * Get all modules
124
- */
125
- static function get_all() {
126
- global $wpdb;
127
-
128
- $rows = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}redirection_modules WHERE id > 0 ORDER BY id" );
129
- $items = array();
130
- if ( count( $rows ) > 0 ) {
131
- foreach ( $rows AS $row ) {
132
- $items[] = self::new_item( $row );
133
- }
134
- }
135
-
136
- return array_filter( $items );
137
  }
138
 
139
- /**
140
- * Get first module
141
- */
142
- static function get_first_id() {
143
  global $wpdb;
144
- return $wpdb->get_var( "SELECT id FROM {$wpdb->prefix}redirection_modules ORDER BY id LIMIT 0,1" );
145
- }
146
-
147
- /**
148
- * Get all modules
149
- */
150
-
151
- static function get_for_select() {
152
- $data = array();
153
- $items = self::get_all();
154
 
155
- foreach ( $items AS $item ) {
156
- $data[$item->id] = $item->name;
157
- }
158
-
159
- return $data;
160
- }
161
-
162
- /**
163
- * Get all module types
164
- */
165
- static function get_types() {
166
- return array (
167
- 'apache' => __( 'Apache', 'redirection' ),
168
- 'wp' => __( 'WordPress', 'redirection' ),
169
- );
170
  }
171
 
172
- static function new_item( $data ) {
173
- $map = array (
174
- 'apache' => array( 'Apache_Module', 'apache.php' ),
175
- 'wp' => array( 'WordPress_Module', 'wordpress.php' ),
176
- );
177
-
178
- if ( isset( $map[$data->type] ) ) {
179
- $obj = $map[$data->type][0];
180
- $file = $map[$data->type][1];
181
-
182
- if ( !class_exists( $obj ) )
183
- include dirname( __FILE__ )."/../modules/$file";
184
-
185
- return new $obj( $data );
186
- }
187
-
188
  return false;
189
  }
190
 
191
- function canonical() {
192
- $can = array( 'none' => '&mdash;', 'nowww' => __( 'Strip WWW', 'redirection' ), 'www' => __( 'Force WWW', 'redirection' ) );
193
- return $can[$this->canonical];
194
- }
195
-
196
- function index() {
197
- $can = array( 'ignore' => '&mdash;', 'remove' => __( 'Strip index.php', 'redirection' ) );
198
- return $can[$this->index];
199
- }
200
-
201
- function options() {
202
- }
203
-
204
- function type() {
205
- $types = $this->get_types();
206
- return $types[$this->type];
207
- }
208
-
209
- function checked( $item, $field = '' ) {
210
- if ( $field && is_array( $item ) ) {
211
- if ( isset( $item[$field] ) && $item[$field] )
212
- echo ' checked="checked"';
213
- }
214
- elseif ( !empty( $item ) )
215
- echo ' checked="checked"';
216
- }
217
-
218
- function select( $items, $default = '' ) {
219
- if ( count( $items ) > 0 ) {
220
- foreach ( $items AS $key => $value ) {
221
- echo '<option value="'.$key.'"'.($key == $default ? ' selected="selected"' : '' ).'>'.$value.'</option>';
222
- }
223
- }
224
- }
225
-
226
- function groups() {
227
- global $wpdb;
228
-
229
- return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id ) FROM {$wpdb->prefix}redirection_groups WHERE module_id=%d", $this->id ) );
230
- }
231
-
232
- function redirects() {
233
- global $wpdb;
234
 
235
- $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT({$wpdb->prefix}redirection_items.id) FROM {$wpdb->prefix}redirection_groups INNER JOIN {$wpdb->prefix}redirection_items ON {$wpdb->prefix}redirection_items.group_id={$wpdb->prefix}redirection_groups.id WHERE module_id=%d GROUP BY {$wpdb->prefix}redirection_items.group_id", $this->id ) );
236
- if ( $count > 0 )
237
- return $count;
238
- return 0;
 
239
  }
240
 
241
- function hits() {
242
- global $wpdb;
243
-
244
- $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_logs WHERE module_id=%d", $this->id ) );
245
- if ( $count > 0 )
246
- return $count;
247
- return 0;
248
- }
249
 
250
- function reset() {
251
- self::clear_cache( $this->id );
252
 
253
- $groups = Red_Group::get_for_module( $this->id );
254
- if ( count( $groups ) > 0 ) {
255
- foreach ( $groups AS $group ) {
256
- $group->reset();
257
- }
258
  }
259
-
260
- RE_Log::delete_for_module( $this->id );
261
- }
262
-
263
- function is_valid() {
264
- return true;
265
- }
266
-
267
- function load( $data ) {
268
  }
269
 
270
- function config() {
271
- }
272
 
273
- function get_id() {
274
- return $this->id;
275
  }
276
 
277
- function get_type() {
278
- return $this->type;
279
- }
280
 
281
- public function get_name() {
282
- return $this->name;
283
- }
 
284
 
285
- public function get_type_string() {
286
- return '';
287
- }
288
  }
1
  <?php
2
 
3
+ include_once dirname( dirname( __FILE__ ) ).'/modules/wordpress.php';
4
+ include_once dirname( dirname( __FILE__ ) ).'/modules/apache.php';
5
+ include_once dirname( dirname( __FILE__ ) ).'/modules/nginx.php';
 
 
6
 
7
+ abstract class Red_Module {
8
+ public function __construct( $options ) {
9
+ if ( is_array( $options ) )
10
+ $this->load( $options );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  }
12
 
13
  static function get( $id ) {
14
+ $id = intval( $id );
15
+ $options = red_get_options();
16
 
17
+ if ( $id === Apache_Module::MODULE_ID )
18
+ return new Apache_Module( isset( $options['modules'][Apache_Module::MODULE_ID] ) ? $options['modules'][Apache_Module::MODULE_ID] : array() );
19
+ else if ( $id === WordPress_Module::MODULE_ID )
20
+ return new WordPress_Module( isset( $options['modules'][WordPress_Module::MODULE_ID] ) ? $options['modules'][WordPress_Module::MODULE_ID] : array() );
21
+ else if ( $id === Nginx_Module::MODULE_ID )
22
+ return new Nginx_Module( isset( $options['modules'][Nginx_Module::MODULE_ID] ) ? $options['modules'][Nginx_Module::MODULE_ID] : array() );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
+ return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  }
26
 
27
+ public function get_total_redirects() {
 
 
 
28
  global $wpdb;
 
 
 
 
 
 
 
 
 
 
29
 
30
+ return $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM {$wpdb->prefix}redirection_items INNER JOIN {$wpdb->prefix}redirection_groups ON {$wpdb->prefix}redirection_items.group_id={$wpdb->prefix}redirection_groups.id WHERE {$wpdb->prefix}redirection_groups.module_id=%d", $this->get_id() ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
32
 
33
+ static public function is_valid_id( $id ) {
34
+ if ( $id === Apache_Module::MODULE_ID || $id === WordPress_Module::MODULE_ID )
35
+ return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  return false;
37
  }
38
 
39
+ static function get_for_select() {
40
+ $options = red_get_options();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
 
42
+ return array(
43
+ WordPress_Module::MODULE_ID => Red_Module::get( WordPress_Module::MODULE_ID ),
44
+ Apache_Module::MODULE_ID => Red_Module::get( Apache_Module::MODULE_ID ),
45
+ Nginx_Module::MODULE_ID => Nginx_Module::get( Nginx_Module::MODULE_ID ),
46
+ );
47
  }
48
 
49
+ static function flush( $group_id ) {
50
+ $group = Red_Group::get( $group_id );
 
 
 
 
 
 
51
 
52
+ if ( $group ) {
53
+ $module = Red_Module::get( $group->get_module_id() );
54
 
55
+ if ( $module )
56
+ $module->flush_module();
 
 
 
57
  }
 
 
 
 
 
 
 
 
 
58
  }
59
 
60
+ static function flush_by_module( $module_id ) {
61
+ $module = Red_Module::get( $module_id );
62
 
63
+ if ( $module )
64
+ $module->flush_module();
65
  }
66
 
67
+ abstract public function get_id();
68
+ abstract public function get_name();
69
+ abstract public function get_description();
70
 
71
+ abstract public function render_config();
72
+ abstract public function get_config();
73
+ abstract public function can_edit_config();
74
+ abstract public function update( $options );
75
 
76
+ abstract protected function load( $options );
77
+ abstract protected function flush_module();
 
78
  }
models/pager.php CHANGED
@@ -5,12 +5,13 @@ if ( !class_exists( 'WP_List_Table' ) )
5
 
6
  class Redirection_Table extends WP_List_Table {
7
  private $groups;
 
8
  private $total_items;
9
- private $current_group;
10
 
11
- function __construct( array $groups, Red_Group $current_group = null ) {
12
  $this->groups = $groups;
13
- $this->current_group = $current_group;
14
 
15
  //Set parent defaults
16
  parent::__construct( array(
@@ -37,13 +38,13 @@ class Redirection_Table extends WP_List_Table {
37
  }
38
 
39
  function column_last_access( $item ) {
40
- if ( $item->last_access == 0 )
41
  return '&mdash;';
42
- return date_i18n( get_option( 'date_format' ), $item->last_access );
43
  }
44
 
45
  function column_hits( $item ) {
46
- return esc_html( number_format_i18n( $item->last_count, 0 ) );
47
  }
48
 
49
  function column_url( $item ) {
@@ -61,18 +62,18 @@ class Redirection_Table extends WP_List_Table {
61
  $after = '</span>';
62
  }
63
 
64
- $title = $item->url;
65
- if ( $item->title )
66
- $title = $item->title;
67
 
68
- return sprintf( '%1$s %2$s', $before.'<a href="'.esc_url( $item->url ).'">'.esc_html( $title ).'</a>'.$after, $this->row_actions( $actions ) );
69
  }
70
 
71
  function column_cb($item){
72
  return sprintf(
73
  '<input type="checkbox" name="%1$s[]" value="%2$s" />',
74
  /*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie")
75
- /*$2%s*/ $item->id //The value of the checkbox should be the record's id
76
  );
77
  }
78
 
@@ -111,30 +112,34 @@ class Redirection_Table extends WP_List_Table {
111
 
112
  if ( in_array( $this->current_action(), array( 'reset', 'enable', 'disable', 'delete' ) ) ) {
113
  $redirections = array();
 
114
 
115
  foreach( (array)$_POST['item'] AS $id ) {
116
  $redirect = Red_Item::get_by_id( intval( $id ) );
117
- if ( $redirect )
118
- $redirections[] = $redirect;
119
- }
120
 
121
- array_map( array( &$this, 'process_action_items' ), $redirections );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
 
123
- Red_Module::flush( $this->current_group->module_id );
 
 
 
124
  }
125
  }
126
 
127
- function process_action_items( $item ) {
128
- if ( $this->current_action() == 'reset' )
129
- $item->reset();
130
- elseif ( $this->current_action() == 'enable' )
131
- $item->enable();
132
- elseif ( $this->current_action() == 'disable' )
133
- $item->disable();
134
- elseif ( $this->current_action() == 'delete' )
135
- $item->delete();
136
- }
137
-
138
  function extra_tablenav( $which ) {
139
  if ( $which == 'bottom' )
140
  return;
@@ -142,10 +147,12 @@ class Redirection_Table extends WP_List_Table {
142
  ?>
143
  <div class="alignleft actions">
144
  <select name="id">
 
 
145
  <?php foreach ( $this->groups AS $module_name => $groups ) : ?>
146
  <optgroup label="<?php echo esc_attr( $module_name ); ?>">
147
- <?php foreach ( $groups AS $group_name => $group ) : ?>
148
- <option value="<?php echo esc_attr( $group_name ); ?>"<?php selected( $group_name, $this->current_group->get_id() ); ?>>
149
  <?php echo esc_html( $group ); ?>
150
  </option>
151
  <?php endforeach; ?>
@@ -188,10 +195,10 @@ class Redirection_Table extends WP_List_Table {
188
  $order = 'desc';
189
 
190
  $where = array();
191
- if ( isset( $_GET['s'] ) )
192
- $where[] = $wpdb->prepare( 'url LIKE %s', '%'.like_escape( $_GET['s'] ).'%' );
193
 
194
- if ( isset( $_REQUEST['id'] ) )
195
  $where[] = $wpdb->prepare( "group_id=%d", intval( $_REQUEST['id'] ) );
196
 
197
  $where_cond = "";
@@ -217,11 +224,9 @@ class Redirection_Table extends WP_List_Table {
217
 
218
  class Redirection_Group_Table extends WP_List_Table {
219
  private $modules;
220
- private $current_module;
221
 
222
- function __construct( $modules, $current_module ) {
223
  $this->modules = $modules;
224
- $this->current_module = $current_module;
225
 
226
  //Set parent defaults
227
  parent::__construct( array(
@@ -236,6 +241,7 @@ class Redirection_Group_Table extends WP_List_Table {
236
  'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
237
  'name' => __( 'Name', 'redirection' ),
238
  'redirects' => __( 'Redirects', 'redirection' ),
 
239
  );
240
 
241
  return $columns;
@@ -249,7 +255,10 @@ class Redirection_Group_Table extends WP_List_Table {
249
  );
250
 
251
  $after = $before = '';
252
- if ( $item->is_disabled() ) {
 
 
 
253
  $before = '<span class="red-disabled">';
254
  $after = '</span>';
255
  }
@@ -258,7 +267,15 @@ class Redirection_Group_Table extends WP_List_Table {
258
  }
259
 
260
  function column_redirects( $item ) {
261
- return esc_html( $item->get_item_count() );
 
 
 
 
 
 
 
 
262
  }
263
 
264
  function column_cb($item){
@@ -279,7 +296,9 @@ class Redirection_Group_Table extends WP_List_Table {
279
 
280
  function get_bulk_actions() {
281
  $actions = array(
282
- 'delete' => __( 'Delete', 'redirection' ),
 
 
283
  );
284
 
285
  return $actions;
@@ -289,33 +308,54 @@ class Redirection_Group_Table extends WP_List_Table {
289
  if ( !isset( $_POST['item'] ) )
290
  return;
291
 
292
- if ( in_array( $this->current_action(), array( 'delete' ) ) ) {
293
  $groups = array();
294
 
295
  foreach( (array)$_POST['item'] AS $id ) {
296
- $redirect = Red_Group::get( intval( $id ) );
297
- if ( $redirect )
298
- $groups[] = $redirect;
 
 
 
 
 
 
 
 
 
 
 
299
  }
300
-
301
- array_map( array( &$this, 'delete_item' ), $groups );
302
  }
303
  }
304
 
305
- function delete_item( $item ) {
306
  $item->delete();
307
  }
308
 
 
 
 
 
 
 
 
 
309
  function extra_tablenav( $which ) {
310
  if ( $which == 'bottom' )
311
  return;
312
 
 
 
 
313
  ?>
314
  <div class="alignleft actions">
315
  <select name="id">
316
- <?php foreach ( $this->modules AS $module_name => $module ) : ?>
317
- <option value="<?php echo esc_attr( $module_name ); ?>"<?php selected( $module_name, $this->current_module ); ?>>
318
- <?php echo esc_html( $module ); ?>
 
319
  </option>
320
  <?php endforeach; ?>
321
  </select>
@@ -350,10 +390,10 @@ class Redirection_Group_Table extends WP_List_Table {
350
  $order = 'desc';
351
 
352
  $where = array();
353
- if ( isset( $_GET['s'] ) )
354
- $where[] = $wpdb->prepare( 'name LIKE %s', '%'.like_escape( $_GET['s'] ).'%' );
355
 
356
- if ( isset( $_REQUEST['id'] ) )
357
  $where[] = $wpdb->prepare( "module_id=%d", intval( $_REQUEST['id'] ) );
358
 
359
  $where_cond = "";
@@ -492,8 +532,8 @@ class Redirection_Log_Table extends WP_List_Table {
492
  $order = 'desc';
493
 
494
  $where = array();
495
- if ( isset( $_GET['s'] ) )
496
- $where[] = $wpdb->prepare( 'url LIKE %s', '%'.like_escape( $_GET['s'] ).'%' );
497
 
498
  $where_cond = "";
499
  if ( count( $where ) > 0 )
@@ -622,8 +662,8 @@ class Redirection_404_Table extends WP_List_Table {
622
  $order = 'desc';
623
 
624
  $where = array();
625
- if ( isset( $_GET['s'] ) )
626
- $where[] = $wpdb->prepare( 'url LIKE %s', '%'.like_escape( $_GET['s'] ).'%' );
627
 
628
  if ( $restrict_by_ip !== false )
629
  $where[] = $wpdb->prepare( 'ip=INET_ATON(%s)', $restrict_by_ip );
@@ -633,7 +673,7 @@ class Redirection_404_Table extends WP_List_Table {
633
  $where_cond = " WHERE ".implode( ' AND ', $where );
634
 
635
  $table = $wpdb->prefix.'redirection_404';
636
- $rows = $wpdb->get_results( "SELECT * FROM {$table} ".$where_cond.$wpdb->prepare( " ORDER BY $orderby $order LIMIT %d,%d", ( $this->get_pagenum() - 1 ) * $per_page, $per_page ) );
637
  $total_items = $wpdb->get_var( "SELECT COUNT(*) FROM {$table}".$where_cond );
638
 
639
  $this->items = array();
@@ -665,59 +705,48 @@ class Redirection_Module_Table extends WP_List_Table {
665
 
666
  function get_columns() {
667
  $columns = array(
668
- 'moduletype' => __( 'Type', 'redirection' ),
669
- 'name' => __( 'Name', 'redirection' ),
670
- 'groups' => __( 'Groups', 'redirection' ),
671
- 'hits' => __( 'Hits', 'redirection' ),
672
  );
673
 
674
  return $columns;
675
  }
676
 
677
- function column_groups( $item ) {
678
- return esc_html( $item->groups() );
679
- }
680
 
681
- function column_hits( $item ) {
682
- return esc_html( number_format_i18n( $item->hits(), 0 ) );
683
- }
684
 
685
- function column_moduletype( $item ) {
686
- return esc_html( $item->get_type_string() );
687
- }
688
 
689
- function column_name( $item ) {
690
- $actions['edit'] = sprintf( '<a href="#" class="red-ajax" data-action="%s" data-nonce="%s" data-id="%s">'.__( 'Edit', 'redirection' ).'</a>', 'red_module_edit', wp_create_nonce( 'red_edit-'.$item->get_id() ), $item->get_id() );
 
691
 
692
- if ( $this->token ) {
693
- if ( $item->get_type() === 'wp' ) {
694
- $actions['rss'] = sprintf( '<a href="%s">RSS</a>', '?page=redirection.php&amp;token='.$this->token.'&amp;sub=rss&amp;module='.intval( $item->get_id() ) );
695
- }
696
 
697
- $actions['htaccess'] = sprintf( '<a href="%s">.htaccess</a>', '?page=redirection.php&amp;token='.$this->token.'&amp;sub=apache&amp;module='.intval( $item->get_id() ) );
698
- $actions['csv'] = sprintf( '<a href="%s">CSV</a>', '?page=redirection.php&amp;token='.$this->token.'&amp;sub=csv&amp;module='.intval( $item->get_id() ) );
699
- }
700
 
701
- return '<a href="#" data-action="%s" data-nonce="%s" data-id="%s">'.esc_html( $item->get_name() ).'</a>'.$this->row_actions( $actions );
 
702
  }
703
 
704
  function prepare_items( $type = '', $id = 0 ) {
705
  global $wpdb;
706
 
707
- $table = $wpdb->prefix.'redirection_modules';
708
- $rows = $wpdb->get_results( "SELECT * FROM {$table}" );
709
- $this->total_items = $wpdb->get_var( "SELECT COUNT(*) FROM {$table}" );
710
-
711
  $columns = $this->get_columns();
712
  $sortable = $this->get_sortable_columns();
713
 
714
  $this->_column_headers = array( $columns, array(), $sortable );
715
-
716
- $this->items = array();
717
- foreach ( (array)$rows AS $row ) {
718
- $this->items[] = Red_Module::new_item( $row );
719
- }
720
-
721
  $this->set_pagination_args( array(
722
  'total_items' => $this->total_items,
723
  'per_page' => 100,
5
 
6
  class Redirection_Table extends WP_List_Table {
7
  private $groups;
8
+ private $current_group;
9
  private $total_items;
10
+ private $current_group_id;
11
 
12
+ function __construct( array $groups, $current_group_id ) {
13
  $this->groups = $groups;
14
+ $this->current_group_id = $current_group_id;
15
 
16
  //Set parent defaults
17
  parent::__construct( array(
38
  }
39
 
40
  function column_last_access( $item ) {
41
+ if ( $item->get_last_hit() == 0 )
42
  return '&mdash;';
43
+ return date_i18n( get_option( 'date_format' ), $item->get_last_hit() );
44
  }
45
 
46
  function column_hits( $item ) {
47
+ return esc_html( number_format_i18n( $item->get_hits(), 0 ) );
48
  }
49
 
50
  function column_url( $item ) {
62
  $after = '</span>';
63
  }
64
 
65
+ $title = $item->get_url();
66
+ if ( $item->get_title() )
67
+ $title = $item->get_title();
68
 
69
+ return sprintf( '%1$s %2$s', $before.'<a href="'.esc_url( $item->get_url() ).'">'.esc_html( $title ).'</a>'.$after, $this->row_actions( $actions ) );
70
  }
71
 
72
  function column_cb($item){
73
  return sprintf(
74
  '<input type="checkbox" name="%1$s[]" value="%2$s" />',
75
  /*$1%s*/ $this->_args['singular'], //Let's simply repurpose the table's singular label ("movie")
76
+ /*$2%s*/ $item->get_id() //The value of the checkbox should be the record's id
77
  );
78
  }
79
 
112
 
113
  if ( in_array( $this->current_action(), array( 'reset', 'enable', 'disable', 'delete' ) ) ) {
114
  $redirections = array();
115
+ $flush = array();
116
 
117
  foreach( (array)$_POST['item'] AS $id ) {
118
  $redirect = Red_Item::get_by_id( intval( $id ) );
 
 
 
119
 
120
+ if ( $redirect ) {
121
+ if ( $this->current_action() === 'reset' )
122
+ $redirect->reset();
123
+ elseif ( $this->current_action() === 'enable' ) {
124
+ $redirect->enable();
125
+ $flush[] = $redirect->get_group_id();
126
+ }
127
+ elseif ( $this->current_action() === 'disable' ) {
128
+ $redirect->disable();
129
+ $flush[] = $redirect->get_group_id();
130
+ }
131
+ elseif ( $this->current_action() === 'delete' )
132
+ $redirect->delete();
133
+ }
134
+ }
135
 
136
+ $flush = array_unique( $flush );
137
+ foreach ( $flush AS $group_id ) {
138
+ Red_Module::flush( $group_id );
139
+ }
140
  }
141
  }
142
 
 
 
 
 
 
 
 
 
 
 
 
143
  function extra_tablenav( $which ) {
144
  if ( $which == 'bottom' )
145
  return;
147
  ?>
148
  <div class="alignleft actions">
149
  <select name="id">
150
+ <option value="0"<?php selected( 0, $this->current_group_id ); ?>><?php _e( 'No group filter', 'redirection' ); ?></option>
151
+
152
  <?php foreach ( $this->groups AS $module_name => $groups ) : ?>
153
  <optgroup label="<?php echo esc_attr( $module_name ); ?>">
154
+ <?php foreach ( $groups AS $group_id => $group ) : ?>
155
+ <option value="<?php echo esc_attr( $group_id ); ?>"<?php selected( $group_id, $this->current_group_id ); ?>>
156
  <?php echo esc_html( $group ); ?>
157
  </option>
158
  <?php endforeach; ?>
195
  $order = 'desc';
196
 
197
  $where = array();
198
+ if ( isset( $_GET['s'] ) && strlen( $_GET['s'] ) > 0 )
199
+ $where[] = $wpdb->prepare( 'url LIKE %s', '%'.$wpdb->esc_like( $_GET['s'] ).'%' );
200
 
201
+ if ( isset( $_REQUEST['id'] ) && intval( $_REQUEST['id'] ) > 0 )
202
  $where[] = $wpdb->prepare( "group_id=%d", intval( $_REQUEST['id'] ) );
203
 
204
  $where_cond = "";
224
 
225
  class Redirection_Group_Table extends WP_List_Table {
226
  private $modules;
 
227
 
228
+ function __construct( $modules ) {
229
  $this->modules = $modules;
 
230
 
231
  //Set parent defaults
232
  parent::__construct( array(
241
  'cb' => '<input type="checkbox" />', //Render a checkbox instead of text
242
  'name' => __( 'Name', 'redirection' ),
243
  'redirects' => __( 'Redirects', 'redirection' ),
244
+ 'module' => __( 'Module', 'redirection' ),
245
  );
246
 
247
  return $columns;
255
  );
256
 
257
  $after = $before = '';
258
+ if ( $item->is_enabled() )
259
+ $actions['disable'] = sprintf( '<a class="red-auto" data-action="%s" href="#">'.__( 'Disable', 'redirection' ).'</a>', 'disable', $item->get_id() );
260
+ else {
261
+ $actions['enable'] = sprintf( '<a class="red-auto" data-action="%s" href="#">'.__( 'Enable', 'redirection' ).'</a>', 'enable', $item->get_id() );
262
  $before = '<span class="red-disabled">';
263
  $after = '</span>';
264
  }
267
  }
268
 
269
  function column_redirects( $item ) {
270
+ return esc_html( $item->get_total_redirects() );
271
+ }
272
+
273
+ function column_module( $item ) {
274
+ $module = Red_Module::get( $item->get_module_id() );
275
+
276
+ if ( $module )
277
+ return esc_html( $module->get_name() );
278
+ return esc_html( __( 'Unknown', 'redirection' ) );
279
  }
280
 
281
  function column_cb($item){
296
 
297
  function get_bulk_actions() {
298
  $actions = array(
299
+ 'delete' => __( 'Delete', 'redirection' ),
300
+ 'enable' => __( 'Enable', 'redirection' ),
301
+ 'disable' => __( 'Disable', 'redirection' ),
302
  );
303
 
304
  return $actions;
308
  if ( !isset( $_POST['item'] ) )
309
  return;
310
 
311
+ if ( in_array( $this->current_action(), array( 'delete', 'enable', 'disable' ) ) ) {
312
  $groups = array();
313
 
314
  foreach( (array)$_POST['item'] AS $id ) {
315
+ $group = Red_Group::get( intval( $id ) );
316
+
317
+ if ( $group ) {
318
+ if ( $this->current_action() === 'delete' )
319
+ $group->delete();
320
+ else if ( $this->current_action() === 'enable' ) {
321
+ $group->enable();
322
+ Red_Module::flush( $group->get_id() );
323
+ }
324
+ else if ( $this->current_action() === 'disable' ) {
325
+ $group->disable();
326
+ Red_Module::flush( $group->get_id() );
327
+ }
328
+ }
329
  }
 
 
330
  }
331
  }
332
 
333
+ private function delete( $item ) {
334
  $item->delete();
335
  }
336
 
337
+ private function enable( $item ) {
338
+ $item->enable();
339
+ }
340
+
341
+ private function disable( $item ) {
342
+ $item->disable();
343
+ }
344
+
345
  function extra_tablenav( $which ) {
346
  if ( $which == 'bottom' )
347
  return;
348
 
349
+ $selected = 0;
350
+ if ( isset( $_POST['id'] ) )
351
+ $selected = intval( $_POST['id'] );
352
  ?>
353
  <div class="alignleft actions">
354
  <select name="id">
355
+ <option value="0"<?php selected( 0, $selected ); ?>><?php _e( 'All modules', 'redirection' ); ?></option>
356
+ <?php foreach ( $this->modules AS $module_id => $module ) : ?>
357
+ <option value="<?php echo esc_attr( $module_id ); ?>"<?php selected( $module_id, $selected ); ?>>
358
+ <?php echo esc_html( $module->get_name() ); ?>
359
  </option>
360
  <?php endforeach; ?>
361
  </select>
390
  $order = 'desc';
391
 
392
  $where = array();
393
+ if ( isset( $_GET['s'] ) && strlen( $_GET['s'] ) > 0 )
394
+ $where[] = $wpdb->prepare( 'name LIKE %s', '%'.$wpdb->esc_like( $_GET['s'] ).'%' );
395
 
396
+ if ( isset( $_REQUEST['id'] ) && intval( $_REQUEST['id'] ) > 0 )
397
  $where[] = $wpdb->prepare( "module_id=%d", intval( $_REQUEST['id'] ) );
398
 
399
  $where_cond = "";
532
  $order = 'desc';
533
 
534
  $where = array();
535
+ if ( isset( $_GET['s'] ) && strlen( $_GET['s'] ) > 0 )
536
+ $where[] = $wpdb->prepare( 'url LIKE %s', '%'.$wpdb->esc_like( $_GET['s'] ).'%' );
537
 
538
  $where_cond = "";
539
  if ( count( $where ) > 0 )
662
  $order = 'desc';
663
 
664
  $where = array();
665
+ if ( isset( $_GET['s'] ) && strlen( $_GET['s'] ) > 0 )
666
+ $where[] = $wpdb->prepare( 'url LIKE %s', '%'.$wpdb->esc_like( $_GET['s'] ).'%' );
667
 
668
  if ( $restrict_by_ip !== false )
669
  $where[] = $wpdb->prepare( 'ip=INET_ATON(%s)', $restrict_by_ip );
673
  $where_cond = " WHERE ".implode( ' AND ', $where );
674
 
675
  $table = $wpdb->prefix.'redirection_404';
676
+ $rows = $wpdb->get_results( "SELECT * FROM {$table} ".$where_cond.$wpdb->prepare( " ORDER BY $orderby $order LIMIT %d,%d", ( $this->get_pagenum() - 1 ) * $per_page, $per_page ) );
677
  $total_items = $wpdb->get_var( "SELECT COUNT(*) FROM {$table}".$where_cond );
678
 
679
  $this->items = array();
705
 
706
  function get_columns() {
707
  $columns = array(
708
+ 'name' => __( 'Module', 'redirection' ),
709
+ 'total' => __( 'Redirects', 'redirection' ),
 
 
710
  );
711
 
712
  return $columns;
713
  }
714
 
715
+ function column_name( $item ) {
716
+ $config = $item->get_config();
 
717
 
718
+ if ( $item->can_edit_config() )
719
+ $actions['edit'] = sprintf( '<a href="#" class="red-ajax" data-action="%s" data-nonce="%s" data-id="%s">'.__( 'Configure', 'redirection' ).'</a>', 'red_module_edit', wp_create_nonce( 'red_edit-'.$item->get_id() ), $item->get_id() );
 
720
 
721
+ if ( $item->get_id() === WordPress_Module::MODULE_ID && $this->token )
722
+ $actions['rss'] = sprintf( '<a href="%s">RSS</a>', '?page=redirection.php&amp;token='.$this->token.'&amp;sub=rss&amp;module='.intval( $item->get_id() ) );
 
723
 
724
+ $actions['csv'] = sprintf( '<a href="%s">CSV</a>', '?page=redirection.php&amp;token='.$this->token.'&amp;sub=csv&amp;module='.intval( $item->get_id() ) );
725
+ $actions['view-htaccess'] = sprintf( '<a href="#" class="red-ajax" data-id="%d" data-action="red_get_htaccess" data-nonce="%s">.htaccess</a>', $item->get_id(), wp_create_nonce( 'red_get_htaccess' ) );
726
+ $actions['view-nginx'] = sprintf( '<a href="#" class="red-ajax" data-id="%d" data-action="red_get_nginx" data-nonce="%s">Nginx</a>', $item->get_id(), wp_create_nonce( 'red_get_nginx' ) );
727
 
728
+ if ( count( $config ) > 0 )
729
+ $config = '<div class="module-config">'.join( '<br/>', $config ).'</div>';
730
+ else
731
+ $config = '';
732
 
733
+ return '<p><strong>'.esc_html( $item->get_name() ).'</strong></p>'.$item->get_description().$config.$this->row_actions( $actions );
734
+ }
 
735
 
736
+ function column_total( $item ) {
737
+ return esc_html( $item->get_total_redirects() );
738
  }
739
 
740
  function prepare_items( $type = '', $id = 0 ) {
741
  global $wpdb;
742
 
743
+ $options = red_get_options();
 
 
 
744
  $columns = $this->get_columns();
745
  $sortable = $this->get_sortable_columns();
746
 
747
  $this->_column_headers = array( $columns, array(), $sortable );
748
+ $this->items = Red_Module::get_for_select();
749
+ $this->total_items = count( $this->items );
 
 
 
 
750
  $this->set_pagination_args( array(
751
  'total_items' => $this->total_items,
752
  'per_page' => 100,
models/redirect.php CHANGED
@@ -1,39 +1,22 @@
1
  <?php
2
- /**
3
- * Redirection
4
- *
5
- * @package Redirection
6
- * @author John Godley
7
- * @copyright Copyright( C) John Godley
8
- **/
9
-
10
- /*
11
- ============================================================================================================
12
- This software is provided "as is" and any express or implied warranties, including, but not limited to, the
13
- implied warranties of merchantibility and fitness for a particular purpose are disclaimed. In no event shall
14
- the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or
15
- consequential damages( including, but not limited to, procurement of substitute goods or services; loss of
16
- use, data, or profits; or business interruption) however caused and on any theory of liability, whether in
17
- contract, strict liability, or tort( including negligence or otherwise) arising in any way out of the use of
18
- this software, even if advised of the possibility of such damage.
19
-
20
- For full license details see license.txt
21
- ============================================================================================================ */
22
  class Red_Item {
23
- var $id = null;
24
- var $created;
25
- var $referrer;
26
- var $url = null;
27
- var $regex = false;
28
- var $action_data = null;
29
- var $action_code = 0;
30
-
31
- var $last_access = null;
32
- var $last_count = 0;
33
-
34
- var $tracking = true;
 
35
  private $status;
36
  private $position;
 
37
 
38
  function Red_Item( $values, $type = '', $match = '' ) {
39
  if ( is_object( $values ) ) {
@@ -66,18 +49,6 @@ class Red_Item {
66
  }
67
  }
68
 
69
- public function get_id() {
70
- return $this->id;
71
- }
72
-
73
- public function get_position() {
74
- return $this->position;
75
- }
76
-
77
- public function get_action_code() {
78
- return $this->action_code;
79
- }
80
-
81
  static function get_all_for_module( $module ) {
82
  global $wpdb;
83
 
@@ -95,18 +66,10 @@ class Red_Item {
95
  return $items;
96
  }
97
 
98
- static function exists( $url ) {
99
- global $wpdb;
100
-
101
- if ( $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(id) FROM {$wpdb->prefix}redirection_items WHERE url=%s", $url ) ) > 0 )
102
- return true;
103
- return false;
104
- }
105
-
106
  static function get_for_url( $url, $type ) {
107
  global $wpdb;
108
 
109
- $sql = $wpdb->prepare( "SELECT @redirection_items.*,@redirection_groups.tracking,@redirection_groups.position AS group_pos,@redirection_modules.id AS module_id FROM @redirection_items INNER JOIN @redirection_groups ON @redirection_groups.id=@redirection_items.group_id AND @redirection_groups.status='enabled' INNER JOIN @redirection_modules ON @redirection_modules.id=@redirection_groups.module_id AND @redirection_modules.type=%s WHERE( @redirection_items.regex=1 OR @redirection_items.url=%s)", $type, $url );
110
  $sql = str_replace( '@', $wpdb->prefix, $sql);
111
 
112
  $rows = $wpdb->get_results( $sql ) ;
@@ -126,38 +89,14 @@ class Red_Item {
126
  static function get_by_module( $module ) {
127
  global $wpdb;
128
 
129
- $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM {$wpdb->prefix}redirection_items INNER JOIN {$wpdb->prefix}redirection_groups ON {$wpdb->prefix}redirection_groups.id={$wpdb->prefix}redirection_items.group_id";
130
  $sql .= $wpdb->prepare( " WHERE {$wpdb->prefix}redirection_groups.module_id=%d", $module );
131
 
132
  $rows = $wpdb->get_results( $sql );
133
  $items = array();
134
- if ( count( $rows) > 0) {
135
- foreach( $rows AS $row)
136
- $items[] = new Red_Item( $row);
137
- }
138
-
139
- return $items;
140
- }
141
-
142
- /**
143
- * Get redirection items in a group
144
- */
145
- static function get_by_group( $group, &$pager ) {
146
- global $wpdb;
147
-
148
- $sql = $wpdb->prepare( "FROM {$wpdb->prefix}redirection_items WHERE group_id=%d", $group );
149
 
150
- if ( $pager->search )
151
- $sql .= $wpdb->prepare( ' AND url LIKE %s', '%'.like_escape( $pager->search ).'%' );
152
-
153
- $pager->set_total( $wpdb->get_var( "SELECT COUNT(*) ".$sql ) );
154
- $rows = $wpdb->get_results( "SELECT * ".$sql.' ORDER BY position'.$pager->to_limits() );
155
-
156
- $items = array();
157
- if ( count( $rows ) > 0 ) {
158
- foreach ( $rows AS $row ) {
159
- $items[] = new Red_Item( $row );
160
- }
161
  }
162
 
163
  return $items;
@@ -199,8 +138,15 @@ class Red_Item {
199
  if ( $details['source'] == $details['target'] )
200
  return new WP_Error( 'redirect-add', __( 'Source and target URL must be different', 'redirection' ) );
201
 
 
 
 
 
 
 
 
202
  $matcher = Red_Match::create( $details['match'] );
203
- $group_id = intval( $details['group'] );
204
  $group = Red_Group::get( $group_id );
205
 
206
  if ( $group_id <= 0 || !$group )
@@ -239,25 +185,13 @@ class Red_Item {
239
  $wpdb->delete( $wpdb->prefix.'redirection_items', array( 'url' => $data['action_data'], 'action_type' => $data['action_type'], 'action_data' => $data['url'] ) );
240
 
241
  if ( $wpdb->insert( $wpdb->prefix.'redirection_items', $data ) ) {
242
- Red_Module::flush( $group->module_id );
243
-
244
  return self::get_by_id( $wpdb->insert_id );
245
  }
246
 
247
  return new WP_Error( 'redirect-add', __( 'Unable to add new redirect - delete Redirection from the options page and re-install' ) );
248
  }
249
 
250
- static function delete_by_group( $group ) {
251
- global $wpdb;
252
-
253
- RE_Log::delete_for_group( $group);
254
-
255
- $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}redirection_items WHERE group_id=%d", $group ) );
256
-
257
- $group = Red_Group::get( $wpdb->insert_id );
258
- Red_Module::flush( $group->module_id );
259
- }
260
-
261
  public function delete() {
262
  global $wpdb;
263
 
@@ -272,8 +206,9 @@ class Red_Item {
272
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'position' => $pos ), array( 'id' => $row->id ) );
273
  }
274
  }
275
- }
276
 
 
 
277
 
278
  static function sanitize_url( $url, $regex ) {
279
  // Make sure that the old URL is relative
@@ -285,7 +220,6 @@ class Red_Item {
285
  return $url;
286
  }
287
 
288
-
289
  function update( $details ) {
290
  if ( strlen( $details['old'] ) > 0 ) {
291
  global $wpdb;
@@ -296,21 +230,25 @@ class Red_Item {
296
  $this->url = self::sanitize_url( $details['old'], $this->regex );
297
  $this->title = $details['title'];
298
 
299
- $data = $this->match->data( $details );
300
 
301
  $this->action_code = 0;
302
  if ( isset( $details['action_code'] ) )
303
  $this->action_code = intval( $details['action_code'] );
304
 
305
- if ( isset( $details['group_id'] ) )
 
 
306
  $this->group_id = intval( $details['group_id'] );
 
307
 
308
  // Save this
309
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'url' => $this->url, 'regex' => $this->regex, 'action_code' => $this->action_code, 'action_data' => $data, 'group_id' => $this->group_id, 'title' => $this->title ), array( 'id' => $this->id ) );
310
 
311
- $group = Red_Group::get( $this->group_id );
312
- if ( $group )
313
- Red_Module::flush( $group->module_id );
 
314
  }
315
  }
316
 
@@ -321,10 +259,7 @@ class Red_Item {
321
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'position' => $pos + $start ), array( 'id' => $id ) );
322
  }
323
 
324
- $item = self::get_by_id( $id );
325
- $group = Red_Group::get( $item->group_id );
326
- if ( $group )
327
- Red_Module::flush( $group->module_id );
328
  }
329
 
330
  function matches( $url ) {
@@ -334,14 +269,14 @@ class Red_Item {
334
  // Check if we match the URL
335
  if ( ( $this->regex == false && ( $this->url == $url || $this->url == rtrim( $url, '/' ) || $this->url == urldecode( $url ) ) ) ||( $this->regex == true && @preg_match( '@'.str_replace( '@', '\\@', $this->url).'@', $url, $matches) > 0) ||( $this->regex == true && @preg_match( '@'.str_replace( '@', '\\@', $this->url).'@', urldecode( $url ), $matches) > 0) ) {
336
  // Check if our match wants this URL
337
- $target = $this->match->get_target( $url, $this->url, $this->regex);
338
 
339
  if ( $target ) {
340
  $target = $this->replaceSpecialTags( $target );
341
 
342
  $this->visit( $url, $target );
343
 
344
- if ( $this->status == 'enabled' )
345
  return $this->action->process_before( $this->action_code, $target );
346
  }
347
  }
@@ -379,12 +314,12 @@ class Red_Item {
379
 
380
  $options = red_get_options();
381
  if ( isset( $options['expire_redirect'] ) && $options['expire_redirect'] >= 0 )
382
- $log = RE_Log::create( $url, $target, $_SERVER['HTTP_USER_AGENT'], $ip, isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '', array( 'redirect_id' => $this->id, 'module_id' => $this->module_id, 'group_id' => $this->group_id) );
383
  }
384
  }
385
 
386
  public function is_enabled() {
387
- return $this->status == 'enabled';
388
  }
389
 
390
  function reset() {
@@ -408,17 +343,17 @@ class Red_Item {
408
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'group_id' => $group ), array( 'id' => $this->id ) );
409
  }
410
 
411
- function enable() {
412
  global $wpdb;
413
 
414
- $this->status = true;
415
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'status' => $this->status ), array( 'id' => $this->id ) );
416
  }
417
 
418
- function disable() {
419
  global $wpdb;
420
 
421
- $this->status = false;
422
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'status' => $this->status ), array( 'id' => $this->id ) );
423
  }
424
 
@@ -447,4 +382,52 @@ class Red_Item {
447
  return 'pass';
448
  return '&mdash;';
449
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
450
  }
1
  <?php
2
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  class Red_Item {
4
+ private $id = null;
5
+ private $created;
6
+ private $referrer;
7
+ private $url = null;
8
+ private $regex = false;
9
+ private $action_data = null;
10
+ private $action_code = 0;
11
+ private $action_type;
12
+ private $match_type;
13
+ private $title;
14
+ private $last_access = null;
15
+ private $last_count = 0;
16
+ private $tracking = true;
17
  private $status;
18
  private $position;
19
+ private $group_id;
20
 
21
  function Red_Item( $values, $type = '', $match = '' ) {
22
  if ( is_object( $values ) ) {
49
  }
50
  }
51
 
 
 
 
 
 
 
 
 
 
 
 
 
52
  static function get_all_for_module( $module ) {
53
  global $wpdb;
54
 
66
  return $items;
67
  }
68
 
 
 
 
 
 
 
 
 
69
  static function get_for_url( $url, $type ) {
70
  global $wpdb;
71
 
72
+ $sql = $wpdb->prepare( "SELECT @redirection_items.*,@redirection_groups.position AS group_pos FROM @redirection_items INNER JOIN @redirection_groups ON @redirection_groups.id=@redirection_items.group_id AND @redirection_groups.status='enabled' AND @redirection_groups.module_id=%d WHERE (@redirection_items.regex=1 OR @redirection_items.url=%s)", WordPress_Module::MODULE_ID, $url );
73
  $sql = str_replace( '@', $wpdb->prefix, $sql);
74
 
75
  $rows = $wpdb->get_results( $sql ) ;
89
  static function get_by_module( $module ) {
90
  global $wpdb;
91
 
92
+ $sql = "SELECT {$wpdb->prefix}redirection_items.* FROM {$wpdb->prefix}redirection_items INNER JOIN {$wpdb->prefix}redirection_groups ON {$wpdb->prefix}redirection_groups.id={$wpdb->prefix}redirection_items.group_id";
93
  $sql .= $wpdb->prepare( " WHERE {$wpdb->prefix}redirection_groups.module_id=%d", $module );
94
 
95
  $rows = $wpdb->get_results( $sql );
96
  $items = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
 
98
+ foreach( (array)$rows AS $row ) {
99
+ $items[] = new Red_Item( $row );
 
 
 
 
 
 
 
 
 
100
  }
101
 
102
  return $items;
138
  if ( $details['source'] == $details['target'] )
139
  return new WP_Error( 'redirect-add', __( 'Source and target URL must be different', 'redirection' ) );
140
 
141
+ $parsed_url = parse_url( $details['source'] );
142
+ $parsed_domain = parse_url( site_url() );
143
+
144
+ if ( isset( $parsed_url['scheme'] ) && ( $parsed_url['scheme'] === 'http' || $parsed_url['scheme'] === 'https' ) && $parsed_url['host'] !== $parsed_domain['host'] ) {
145
+ return new WP_Error( 'redirect-add', sprintf( __( 'You can only redirect from a relative URL (<code>%s</code>) on this domain (<code>%s</code>).', 'redirection' ), $parsed_url['path'], $parsed_domain['host'] ) );
146
+ }
147
+
148
  $matcher = Red_Match::create( $details['match'] );
149
+ $group_id = intval( $details['group_id'] );
150
  $group = Red_Group::get( $group_id );
151
 
152
  if ( $group_id <= 0 || !$group )
185
  $wpdb->delete( $wpdb->prefix.'redirection_items', array( 'url' => $data['action_data'], 'action_type' => $data['action_type'], 'action_data' => $data['url'] ) );
186
 
187
  if ( $wpdb->insert( $wpdb->prefix.'redirection_items', $data ) ) {
188
+ Red_Module::flush( $group_id );
 
189
  return self::get_by_id( $wpdb->insert_id );
190
  }
191
 
192
  return new WP_Error( 'redirect-add', __( 'Unable to add new redirect - delete Redirection from the options page and re-install' ) );
193
  }
194
 
 
 
 
 
 
 
 
 
 
 
 
195
  public function delete() {
196
  global $wpdb;
197
 
206
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'position' => $pos ), array( 'id' => $row->id ) );
207
  }
208
  }
 
209
 
210
+ Red_Module::flush( $this->group_id );
211
+ }
212
 
213
  static function sanitize_url( $url, $regex ) {
214
  // Make sure that the old URL is relative
220
  return $url;
221
  }
222
 
 
223
  function update( $details ) {
224
  if ( strlen( $details['old'] ) > 0 ) {
225
  global $wpdb;
230
  $this->url = self::sanitize_url( $details['old'], $this->regex );
231
  $this->title = $details['title'];
232
 
233
+ $data = $this->match->data( $details );
234
 
235
  $this->action_code = 0;
236
  if ( isset( $details['action_code'] ) )
237
  $this->action_code = intval( $details['action_code'] );
238
 
239
+ $old_group = false;
240
+ if ( isset( $details['group_id'] ) ) {
241
+ $old_group = intval( $this->group_id );
242
  $this->group_id = intval( $details['group_id'] );
243
+ }
244
 
245
  // Save this
246
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'url' => $this->url, 'regex' => $this->regex, 'action_code' => $this->action_code, 'action_data' => $data, 'group_id' => $this->group_id, 'title' => $this->title ), array( 'id' => $this->id ) );
247
 
248
+ if ( $old_group !== $this->group_id ) {
249
+ Red_Module::flush( $this->group_id );
250
+ Red_Module::flush( $old_group );
251
+ }
252
  }
253
  }
254
 
259
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'position' => $pos + $start ), array( 'id' => $id ) );
260
  }
261
 
262
+ Red_Module::flush( $this->group_id );
 
 
 
263
  }
264
 
265
  function matches( $url ) {
269
  // Check if we match the URL
270
  if ( ( $this->regex == false && ( $this->url == $url || $this->url == rtrim( $url, '/' ) || $this->url == urldecode( $url ) ) ) ||( $this->regex == true && @preg_match( '@'.str_replace( '@', '\\@', $this->url).'@', $url, $matches) > 0) ||( $this->regex == true && @preg_match( '@'.str_replace( '@', '\\@', $this->url).'@', urldecode( $url ), $matches) > 0) ) {
271
  // Check if our match wants this URL
272
+ $target = $this->match->get_target( $url, $this->url, $this->regex );
273
 
274
  if ( $target ) {
275
  $target = $this->replaceSpecialTags( $target );
276
 
277
  $this->visit( $url, $target );
278
 
279
+ if ( $this->status === 'enabled' )
280
  return $this->action->process_before( $this->action_code, $target );
281
  }
282
  }
314
 
315
  $options = red_get_options();
316
  if ( isset( $options['expire_redirect'] ) && $options['expire_redirect'] >= 0 )
317
+ $log = RE_Log::create( $url, $target, $_SERVER['HTTP_USER_AGENT'], $ip, isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '', array( 'redirect_id' => $this->id, 'group_id' => $this->group_id) );
318
  }
319
  }
320
 
321
  public function is_enabled() {
322
+ return $this->status === 'enabled';
323
  }
324
 
325
  function reset() {
343
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'group_id' => $group ), array( 'id' => $this->id ) );
344
  }
345
 
346
+ public function enable() {
347
  global $wpdb;
348
 
349
+ $this->status = 'enabled';
350
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'status' => $this->status ), array( 'id' => $this->id ) );
351
  }
352
 
353
+ public function disable() {
354
  global $wpdb;
355
 
356
+ $this->status = 'disabled';
357
  $wpdb->update( $wpdb->prefix.'redirection_items', array( 'status' => $this->status ), array( 'id' => $this->id ) );
358
  }
359
 
382
  return 'pass';
383
  return '&mdash;';
384
  }
385
+
386
+ public function get_id() {
387
+ return $this->id;
388
+ }
389
+
390
+ public function get_position() {
391
+ return $this->position;
392
+ }
393
+
394
+ public function get_group_id() {
395
+ return $this->group_id;
396
+ }
397
+
398
+ public function get_url() {
399
+ return $this->url;
400
+ }
401
+
402
+ public function get_title() {
403
+ return $this->title;
404
+ }
405
+
406
+ public function get_hits() {
407
+ return $this->last_count;
408
+ }
409
+
410
+ public function get_last_hit() {
411
+ return $this->last_access;
412
+ }
413
+
414
+ public function is_regex() {
415
+ return $this->regex ? true : false;
416
+ }
417
+
418
+ public function get_match_type() {
419
+ return $this->match_type;
420
+ }
421
+
422
+ public function get_action_type() {
423
+ return $this->action_type;
424
+ }
425
+
426
+ public function get_action_code() {
427
+ return intval( $this->action_code );
428
+ }
429
+
430
+ public function get_action_data() {
431
+ return $this->action_data;
432
+ }
433
  }
modules/apache.php CHANGED
@@ -1,190 +1,114 @@
1
  <?php
2
 
3
- class Apache_Module extends Red_Module
4
- {
5
- var $name;
6
- var $allow_ip = false;
7
- var $raw;
8
- var $ban_ip = false;
9
-
10
- var $site = '';
11
- var $location = '';
12
- var $canonical = '';
13
- var $strip_index = '';
14
- var $memory_limit = '';
15
- var $error_level = '';
16
-
17
- function is_valid ()
18
- {
19
- if (!$this->location || !file_exists (dirname ($this->location)) && !is_writable (dirname ($this->location)))
20
- return false;
21
  return true;
22
  }
23
 
24
- function load ($data)
25
- {
26
- $mine = array ('location', 'canonical', 'strip_index', 'memory_limit', 'error_level', 'ban_ip', 'allow_ip', 'raw', 'site');
27
- foreach ($mine AS $key)
28
- {
29
- if (isset ($data[$key]))
30
  $this->$key = $data[$key];
31
  }
32
  }
33
 
34
- function module_flush_delete ()
35
- {
36
- @unlink ($this->location);
37
- }
38
 
39
- function module_flush ($items)
40
- {
41
- // Produce the .htaccess file
42
- include_once (dirname (__FILE__).'/../models/htaccess.php');
43
 
44
- $htaccess = new Red_Htaccess ($this);
45
- if (is_array ($items) && count ($items) > 0)
46
- {
47
- foreach ($items AS $item)
48
- $htaccess->add ($item);
 
 
 
 
49
  }
50
 
51
- $htaccess->save ($this->location, $this->name);
52
  }
53
 
54
- function save ($data)
55
- {
56
- $save = array (
57
- 'location' => isset( $data['location'] ) ? $data['location'] : false,
58
- 'canonical' => isset( $data['canonical'] ) ? $data['canonical'] : false,
59
- 'strip_index' => isset( $data['strip_index'] ) ? $data['strip_index'] : false,
60
- 'memory_limit' => isset( $data['memory_limit'] ) ? $data['memory_limit'] : false,
61
- 'error_level' => isset( $data['error_level'] ) ? $data['error_level'] : false,
62
- 'ban_ip' => isset( $data['ban_ip'] ) ? $data['ban_ip'] : false,
63
- 'allow_ip' => isset( $data['allow_ip'] ) ? $data['allow_ip'] : false,
64
- 'raw' => isset( $data['raw'] ) ? $data['raw'] : false,
65
- 'site' => preg_replace ('@https?://@', '', $data['site'])
66
  );
67
 
68
- $this->load ($save);
69
- return $save;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70
  }
71
 
72
- function config ()
73
- {
74
  ?>
75
  <tr>
76
- <th valign="top"><?php _e ('Location', 'redirection'); ?>:</th>
77
  <td>
78
- <input type="text" name="location" value="<?php echo htmlspecialchars ($this->location) ?>" style="width: 95%"/>
79
- <?php if ($this->location == '') : ?>
80
- <br/>
81
- <span class="sub"><?php printf (__ ('WordPress is installed in: <code>%s</code>', 'redirection'), ABSPATH); ?></span>
82
- <?php endif; ?>
83
  </td>
84
  </tr>
85
  <tr>
86
- <th><?php _e ('Canonical', 'redirection'); ?>:</th>
87
  <td>
88
  <select name="canonical">
89
- <?php echo $this->select (array ('default' => __ ('Leave as is', 'redirection'), 'nowww' => sprintf (__ ('Strip WWW (%s)', 'redirection'), preg_replace ('@https?://(www)?@', '', get_bloginfo ('url'))), 'www' => sprintf (__ ('Force WWW (www.%s)', 'redirection'), preg_replace ('@https?://(www)?@', '', get_bloginfo ('url')))), $this->canonical); ?>
 
 
90
  </select>
91
 
92
- <br/>
93
- <strong><?php _e ('Strip Index', 'redirection'); ?>:</strong>
94
- <select name="strip_index">
95
- <?php echo $this->select (array ('default' => __ ('Leave as is', 'redirection'), 'yes' => __ ('Strip index files (html,php)', 'redirection')), $this->strip_index); ?>
96
- </select>
97
- </td>
98
- </tr>
99
- <tr>
100
- <th><?php _e ('Memory Limit', 'redirection'); ?>:</th>
101
- <td>
102
- <select name="memory_limit">
103
- <?php echo $this->select (array ('0' => __ ('Server default', 'redirection'), '8' => '8MB', '16' => '16MB', '32' => '32MB', '64' => '64MB', '128' => '128MB'), $this->memory_limit); ?>
104
- </select>
105
-
106
- <strong><?php _e ('Error Level', 'redirection'); ?>:</strong>
107
- <select name="error_level">
108
- <?php echo $this->select (array ('default' => __ ('Server default', 'redirection'), 'none' => __ ('No errors', 'redirection'), 'error' => __ ('Show errors', 'redirection')), $this->error_level); ?>
109
- </select>
110
- </td>
111
- </tr>
112
- <tr>
113
- <th><?php _e ('Ban IPs', 'redirection'); ?>:</th>
114
- <td>
115
- <input type="text" name="ban_ip" value="<?php echo htmlspecialchars ($this->ban_ip) ?>" style="width: 95%"/>
116
- </td>
117
- </tr>
118
- <tr>
119
- <th><?php _e ('Allow IPs', 'redirection'); ?>:</th>
120
- <td>
121
- <input type="text" name="allow_ip" value="<?php echo htmlspecialchars ($this->allow_ip) ?>" style="width: 95%"/>
122
- </td>
123
- </tr>
124
- <tr>
125
- <th valign="top"><?php _e ('Raw .htaccess', 'redirection'); ?>:</th>
126
- <td>
127
- <textarea style="width: 95%" name="raw"><?php echo htmlspecialchars ($this->raw)?></textarea>
128
- </td>
129
- </tr>
130
- <tr>
131
- <th><?php _e ('Site URL', 'redirection'); ?>:</th>
132
- <td>
133
- <input type="text" size="40" name="site" value="<?php echo htmlspecialchars ($this->site) ?>"/>
134
- <span class="sub"><?php _e ('Advanced: For management of external sites', 'redirection'); ?></span>
135
  </td>
136
  </tr>
137
 
138
  <?php
139
  }
140
 
141
- function options ()
142
- {
143
- echo '<p>';
144
- if ($this->location)
145
- {
146
- if (!file_exists (dirname ($this->location)))
147
- {
148
- echo '<code>'.$this->location.'</code></p>';
149
- echo __ ('<strong>Location is invalid - check that path exists</strong>', 'redirection');
150
- return;
151
- }
152
- else if ((file_exists ($this->location) && !is_writable ($this->location)) || (!file_exists ($this->location) && !is_writable (dirname ($this->location))))
153
- {
154
- echo '<code>'.$this->location.'</code></p>';
155
- echo __ ('<strong>Could not write to configured <code>.htaccess</code> file - check file permissions</strong>', 'redirection');
156
- return;
157
- }
158
- else
159
- echo '<code>'.$this->location.'</code>';
160
- }
161
- else
162
- echo __ ('<strong>Disabled: enter the location of an <code>.htaccess</code> file for this to be valid</strong>', 'redirection');
163
- echo '</p>';
164
-
165
- $options = array ();
166
- if ($this->canonical != 'default' && !empty ($this->canonical))
167
- $options[] = ($this->canonical == 'nowww') ? __ ('strip WWW', 'redirection') : __ ('force WWW', 'redirection');
168
-
169
- if ($this->strip_index != 'default' && !empty ($this->strip_index))
170
- $options[] = __ ('strip index', 'redirection');
171
 
172
- if ($this->memory_limit > 0 && !empty ($this->memory_limit))
173
- $options[] = sprintf (__ ('memory limit at %dMB', 'redirection'), $this->memory_limit);
174
-
175
- if ($this->error_level != 'default' && !empty ($this->error_level))
176
- $options[] = ($this->error_level == 'none') ? __ ('no errors', 'redirection') : __ ('show errors', 'redirection');
177
-
178
- if (!empty ($this->ban_ip))
179
- $options[] = __ ('IPs are banned', 'redirection');
180
-
181
- if (!empty ($this->allow_ip))
182
- $options[] = __ ('IPs are allowed', 'redirection');
183
-
184
- echo '<small>'.ucfirst (implode (', ', $options)).'</small>';
185
  }
186
 
187
- public function get_type_string() {
188
  return __( 'Apache', 'redirection' );
189
  }
 
 
 
 
190
  }
1
  <?php
2
 
3
+ class Apache_Module extends Red_Module {
4
+ const MODULE_ID = 2;
5
+
6
+ private $location = '';
7
+ private $canonical = '';
8
+
9
+ public function get_id() {
10
+ return self::MODULE_ID;
11
+ }
12
+
13
+ public function can_edit_config() {
 
 
 
 
 
 
 
14
  return true;
15
  }
16
 
17
+ protected function load( $data ) {
18
+ $mine = array( 'location', 'canonical' );
19
+
20
+ foreach ( $mine AS $key ) {
21
+ if ( isset( $data[$key] ) )
 
22
  $this->$key = $data[$key];
23
  }
24
  }
25
 
26
+ protected function flush_module() {
27
+ include_once dirname( dirname( __FILE__ ) ).'/models/htaccess.php';
 
 
28
 
29
+ if ( empty( $this->location ) )
30
+ return;
 
 
31
 
32
+ $items = Red_Item::get_by_module( $this->get_id() );
33
+
34
+ // Produce the .htaccess file
35
+ $htaccess = new Red_Htaccess();
36
+ if ( is_array( $items ) && count( $items ) > 0 ) {
37
+ foreach ( $items AS $item ) {
38
+ if ( $item->is_enabled() )
39
+ $htaccess->add( $item );
40
+ }
41
  }
42
 
43
+ return $htaccess->save( $this->location );
44
  }
45
 
46
+ public function update( $data ) {
47
+ include_once dirname( dirname( __FILE__ ) ).'/models/htaccess.php';
48
+
49
+ $save = array(
50
+ 'location' => isset( $data['location'] ) ? $data['location'] : false,
51
+ 'canonical' => isset( $data['canonical'] ) ? $data['canonical'] : false,
 
 
 
 
 
 
52
  );
53
 
54
+ if ( !empty( $this->location ) && $save['location'] !== $this->location ) {
55
+ // Location has moved. Remove from old location
56
+ $htaccess = new Red_Htaccess();
57
+ $htaccess->save( $this->location, '' );
58
+ }
59
+
60
+ $this->load( $save );
61
+
62
+ if ( $save['location'] && $this->flush_module() === false )
63
+ return __( 'Cannot write to chosen location - check path and permissions.', 'redirection' );
64
+
65
+ $options = red_get_options();
66
+ $options['modules'][self::MODULE_ID] = $save;
67
+
68
+ update_option( 'redirection_options', $options );
69
+ return true;
70
  }
71
 
72
+ public function render_config() {
73
+ $without = preg_replace( '@https?://(www)?@', '', get_bloginfo( 'url' ) );
74
  ?>
75
  <tr>
76
+ <th valign="top" width="170"><?php _e( '.htaccess Location', 'redirection' ); ?>:</th>
77
  <td>
78
+ <input type="text" name="location" value="<?php echo esc_attr( $this->location ) ?>" style="width: 95%"/>
79
+
80
+ <p class="sub"><?php _e( 'If you want Redirection to automatically update your <code>.htaccess</code> file then enter the full path and filename here. You can also download the file and update it manually.', 'redirection' ); ?></p>
81
+ <p class="sub"><?php printf( __( 'WordPress is installed in: <code>%s</code>', 'redirection' ), ABSPATH ); ?></p>
 
82
  </td>
83
  </tr>
84
  <tr>
85
+ <th valign="top"><?php _e( 'Canonical URL', 'redirection' ); ?>:</th>
86
  <td>
87
  <select name="canonical">
88
+ <option <?php selected( $this->canonical, '' ); ?> value=""><?php _e( 'Default server', 'redirection' ); ?></option>
89
+ <option <?php selected( $this->canonical, 'nowww' ); ?> value="nowww"><?php printf( __( 'Remove WWW (%s)', 'redirection' ), $without ); ?></option>
90
+ <option <?php selected( $this->canonical, 'www' ); ?> value="www"><?php printf( __( 'Add WWW (www.%s)', 'redirection' ), $without ); ?></option>
91
  </select>
92
 
93
+ <p class="sub"><?php _e( 'Automatically remove or add www to your site.', 'redirection' ); ?></p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  </td>
95
  </tr>
96
 
97
  <?php
98
  }
99
 
100
+ public function get_config() {
101
+ if ( !empty( $this->location ) )
102
+ return array( sprintf( __( '<code>.htaccess</code> saved to %s', 'redirection' ), esc_html( $this->location ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103
 
104
+ return array();
 
 
 
 
 
 
 
 
 
 
 
 
105
  }
106
 
107
+ public function get_name() {
108
  return __( 'Apache', 'redirection' );
109
  }
110
+
111
+ public function get_description() {
112
+ return __( 'Uses Apache <code>.htaccess</code> files. Requires further configuration. The redirect happens without loading WordPress. No tracking of hits.', 'redirection' );
113
+ }
114
  }
modules/nginx.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nginx_Module extends Red_Module {
4
+ const MODULE_ID = 3;
5
+
6
+ private $location = '';
7
+ private $canonical = '';
8
+
9
+ public function get_id() {
10
+ return self::MODULE_ID;
11
+ }
12
+
13
+ public function can_edit_config() {
14
+ return false;
15
+ }
16
+
17
+ protected function load( $data ) {
18
+ $mine = array( 'location', 'canonical' );
19
+
20
+ foreach ( $mine AS $key ) {
21
+ if ( isset( $data[$key] ) )
22
+ $this->$key = $data[$key];
23
+ }
24
+ }
25
+
26
+ protected function flush_module() {
27
+ }
28
+
29
+ public function update( $data ) {
30
+ return false;
31
+ }
32
+
33
+ public function render_config() {
34
+ }
35
+
36
+ public function get_config() {
37
+ return array();
38
+ }
39
+
40
+ public function get_name() {
41
+ return __( 'Nginx', 'redirection' );
42
+ }
43
+
44
+ public function get_description() {
45
+ return __( 'For use with Nginx server. Requires manual configuration. The redirect happens without loading WordPress. No tracking of hits. This is an experimental module.', 'redirection' );
46
+ }
47
+ }
modules/wordpress.php CHANGED
@@ -1,8 +1,25 @@
1
  <?php
2
 
3
  class WordPress_Module extends Red_Module {
 
 
4
  private $matched = false;
5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6
  public function start() {
7
  // Setup the various filters and actions that allow Redirection to happen
8
  add_action( 'init', array( &$this, 'init' ) );
@@ -89,8 +106,14 @@ class WordPress_Module extends Red_Module {
89
  return $url;
90
  }
91
 
92
- public function save( $data ) {
93
- return array();
 
 
 
 
 
 
94
  }
95
 
96
  public function permalink_redirect_skip( $skip ) {
@@ -100,20 +123,12 @@ class WordPress_Module extends Red_Module {
100
  return $skip;
101
  }
102
 
103
- public function is_valid() {
104
- $perm = get_option( 'permalink_structure' );
105
- if ( $perm === false || $perm == '' )
106
- return false;
107
- return true;
108
- }
109
-
110
- public function options() {
111
- if ( !$this->is_valid() )
112
- echo __( '<strong>Disabled: You must enable <a href="options-permalink.php">permalinks</a> before using this</strong>', 'redirection' );
113
  }
114
 
115
- public function get_type_string() {
116
- return __( 'WordPress', 'redirection' );
117
  }
118
 
119
  private function get_url() {
1
  <?php
2
 
3
  class WordPress_Module extends Red_Module {
4
+ const MODULE_ID = 1;
5
+
6
  private $matched = false;
7
 
8
+ public function get_id() {
9
+ return self::MODULE_ID;
10
+ }
11
+
12
+ public function can_edit_config() {
13
+ return false;
14
+ }
15
+
16
+ public function render_config() {
17
+ }
18
+
19
+ public function get_config() {
20
+ return array();
21
+ }
22
+
23
  public function start() {
24
  // Setup the various filters and actions that allow Redirection to happen
25
  add_action( 'init', array( &$this, 'init' ) );
106
  return $url;
107
  }
108
 
109
+ public function update( $data ) {
110
+ return false;
111
+ }
112
+
113
+ protected function load( $options ) {
114
+ }
115
+
116
+ protected function flush_module() {
117
  }
118
 
119
  public function permalink_redirect_skip( $skip ) {
123
  return $skip;
124
  }
125
 
126
+ public function get_name() {
127
+ return __( 'WordPress', 'redirection' );
 
 
 
 
 
 
 
 
128
  }
129
 
130
+ public function get_description() {
131
+ return __( 'WordPress-powered redirects. This requires no further configuration, and you can track hits.', 'redirection' );
132
  }
133
 
134
  private function get_url() {
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
- === Plugin Name ===
2
  Contributors: johnny5
3
  Donate link: http://urbangiraffe.com/about/
4
  Tags: post, admin, seo, pages, manage, 301, 404, redirect, permalink
5
  Requires at least: 3.4
6
- Tested up to: 4.2
7
- Stable tag: 2.3.16
8
 
9
  Redirection is a WordPress plugin to manage 301 redirections and keep track of 404 errors without requiring knowledge of Apache .htaccess files.
10
 
@@ -94,6 +94,15 @@ The plugin works in a similar manner to how WordPress handles permalinks and sho
94
 
95
  == Changelog ==
96
 
 
 
 
 
 
 
 
 
 
97
  = 2.3.16 =
98
  * Fix export options not showing for some people
99
 
1
+ === Plugin Name ===
2
  Contributors: johnny5
3
  Donate link: http://urbangiraffe.com/about/
4
  Tags: post, admin, seo, pages, manage, 301, 404, redirect, permalink
5
  Requires at least: 3.4
6
+ Tested up to: 4.4
7
+ Stable tag: 2.4
8
 
9
  Redirection is a WordPress plugin to manage 301 redirections and keep track of 404 errors without requiring knowledge of Apache .htaccess files.
10
 
94
 
95
  == Changelog ==
96
 
97
+ = 2.4 =
98
+ * Reworked modules now no longer stored in database
99
+ * Nginx module (experimental)
100
+ * View .htaccess/Nginx inline
101
+ * Beginnings of some unit tests!
102
+ * Fix DB creation on activation, props syntax53
103
+ * Updated Japanese locale, props to Naoko
104
+ * Remove deprecated like escaping
105
+
106
  = 2.3.16 =
107
  * Fix export options not showing for some people
108
 
redirection-admin.php CHANGED
@@ -3,7 +3,7 @@
3
  include dirname( __FILE__ ).'/models/group.php';
4
  include dirname( __FILE__ ).'/models/monitor.php';
5
  include dirname( __FILE__ ).'/models/pager.php';
6
- include dirname( __FILE__ ).'/models/file_io.php';
7
 
8
  class Redirection_Admin {
9
  private static $instance = null;
@@ -37,11 +37,14 @@ class Redirection_Admin {
37
  add_action( 'wp_ajax_red_redirect_add', array( &$this, 'ajax_redirect_add' ) );
38
  add_action( 'wp_ajax_red_redirect_edit', array( &$this, 'ajax_redirect_edit' ) );
39
  add_action( 'wp_ajax_red_redirect_save', array( &$this, 'ajax_redirect_save' ) );
 
 
40
 
41
  $this->monitor = new Red_Monitor( red_get_options() );
42
  }
43
 
44
  public static function plugin_activated() {
 
45
  Red_Flusher::schedule();
46
  }
47
 
@@ -61,8 +64,8 @@ class Redirection_Admin {
61
  $$key = $val;
62
  }
63
 
64
- if ( file_exists( dirname( REDIRECTION_FILE )."/view/admin/$template.php" ) )
65
- include dirname( REDIRECTION_FILE )."/view/admin/$template.php";
66
  }
67
 
68
  private function capture( $ug_name, $ug_vars = array() ) {
@@ -91,7 +94,7 @@ class Redirection_Admin {
91
  <?php
92
  }
93
 
94
- private function update() {
95
  $version = get_option( 'redirection_version' );
96
 
97
  if ( $version != REDIRECTION_VERSION ) {
@@ -154,9 +157,9 @@ class Redirection_Admin {
154
  }
155
 
156
  function admin_screen() {
157
- $this->update();
158
 
159
- if ( isset($_GET['sub']) ) {
160
  if ( $_GET['sub'] == 'log' )
161
  return $this->admin_screen_log();
162
  elseif ( $_GET['sub'] == '404s' )
@@ -166,14 +169,14 @@ class Redirection_Admin {
166
  elseif ( $_GET['sub'] == 'process' )
167
  return $this->admin_screen_process();
168
  elseif ( $_GET['sub'] == 'groups' )
169
- return $this->admin_groups( isset( $_GET['id'] ) ? intval( $_GET['id'] ) : 0 );
170
  elseif ( $_GET['sub'] == 'modules' )
171
  return $this->admin_screen_modules();
172
  elseif ( $_GET['sub'] == 'support' )
173
  return $this->render('support', array( 'options' => red_get_options() ) );
174
  }
175
 
176
- return $this->admin_redirects( isset( $_GET['id'] ) ? intval( $_GET['id'] ) : 0 );
177
  }
178
 
179
  function admin_screen_modules() {
@@ -181,7 +184,7 @@ class Redirection_Admin {
181
  $pager = new Redirection_Module_Table( $options['token'] );
182
  $pager->prepare_items();
183
 
184
- $this->render( 'module_list', array( 'options' => $options, 'table' => $pager ) );
185
  }
186
 
187
  function inject() {
@@ -296,40 +299,24 @@ class Redirection_Admin {
296
 
297
  function admin_groups( $module ) {
298
  if ( isset( $_POST['add'] ) && check_admin_referer( 'redirection-add_group' ) ) {
299
- if ( Red_Group::create( stripslashes_deep( $_POST ) ) ) {
300
  $this->render_message( __( 'Your group was added successfully', 'redirection' ) );
301
- Red_Module::flush( $module );
302
  }
303
  else
304
  $this->render_error( __( 'Please specify a group name', 'redirection' ) );
305
  }
306
 
307
- if ( $module == 0 )
308
- $module = Red_Module::get_first_id();
309
-
310
- $table = new Redirection_Group_Table( Red_Module::get_for_select(), $module );
311
  $table->prepare_items();
312
 
313
- $module = Red_Module::get( $module );
314
- if ( $module )
315
- $this->render( 'group_list', array( 'options' => red_get_options(), 'table' => $table, 'modules' => Red_Module::get_for_select(), 'module' => $module ) );
316
- else
317
- $this->render_message( __( 'Unknown module', 'redirection' ) );
318
  }
319
 
320
  function admin_redirects( $group_id ) {
321
- if ( $group_id == 0 )
322
- $group_id = Red_Group::get_first_id();
323
-
324
- $group = Red_Group::get( $group_id );
325
- if ( $group === false ) {
326
- $group = Red_Group::create( array( 'name' => 'Redirections', 'module_id' => 1 ) );
327
- }
328
-
329
- $table = new Redirection_Table( Red_Group::get_for_select(), $group );
330
  $table->prepare_items();
331
 
332
- $this->render( 'item_list', array( 'options' => red_get_options(), 'group' => $group, 'table' => $table, 'date_format' => get_option( 'date_format' ) ) );
333
  }
334
 
335
  function locales() {
@@ -373,7 +360,7 @@ class Redirection_Admin {
373
 
374
  $module = Red_Module::get( $module_id );
375
  if ( $module )
376
- $json['html'] = $this->capture( 'module_edit', array( 'module' => $module ) );
377
  else
378
  $json['error'] = __( 'Unable to perform action' ).' - could not find module';
379
 
@@ -381,21 +368,25 @@ class Redirection_Admin {
381
  }
382
 
383
  public function ajax_module_save() {
384
- global $hook_suffix;
385
-
386
- $hook_suffix = '';
387
  $module_id = intval( $_POST['id'] );
388
- $options = red_get_options();
389
 
390
  $this->check_ajax_referer( 'red_module_save_'.$module_id );
391
 
392
  $module = Red_Module::get( $module_id );
393
-
394
  if ( $module ) {
395
- $module->update( $_POST );
396
 
397
- $pager = new Redirection_Module_Table( $options['token'] );
398
- $json = array( 'html' => $pager->column_name( $module ) );
 
 
 
 
 
 
 
 
 
399
  }
400
  else
401
  $json['error'] = __( 'Unable to perform action' ).' - could not find module';
@@ -410,7 +401,7 @@ class Redirection_Admin {
410
 
411
  $group = Red_Group::get( $group_id );
412
  if ( $group )
413
- $json['html'] = $this->capture( 'group_edit', array( 'group' => $group, 'modules' => Red_Module::get_for_select() ) );
414
  else
415
  $json['error'] = __( 'Unable to perform action' ).' - could not find group';
416
 
@@ -428,9 +419,10 @@ class Redirection_Admin {
428
  $group = Red_Group::get( $group_id );
429
  if ( $group ) {
430
  $group->update( $_POST );
 
431
 
432
  $pager = new Redirection_Group_Table( array(), false );
433
- $json = array( 'html' => $pager->column_name( $group ) );
434
  }
435
  else
436
  $json['error'] = __( 'Unable to perform action' ).' - could not find redirect';
@@ -443,7 +435,7 @@ class Redirection_Admin {
443
  $redirect = Red_Item::get_by_id( intval( $_POST['id'] ) );
444
 
445
  if ( $redirect )
446
- $json['html'] = $this->capture( 'item_edit', array( 'redirect' => $redirect, 'groups' => Red_Group::get_for_select() ) );
447
  else
448
  $json['error'] = __( 'Unable to perform action' ).' - could not find redirect';
449
 
@@ -463,7 +455,7 @@ class Redirection_Admin {
463
  if ( $redirect ) {
464
  $redirect->update( $_POST );
465
 
466
- $pager = new Redirection_Table( array() );
467
  $json = array( 'html' => $pager->column_url( $redirect ), 'code' => $redirect->get_action_code() );
468
  }
469
  else
@@ -483,7 +475,7 @@ class Redirection_Admin {
483
  if ( is_wp_error( $item ) )
484
  $json['error'] = $item->get_error_message();
485
  elseif ( $item !== false ) {
486
- $pager = new Redirection_Table( array() );
487
  $json = array( 'html' => $pager->get_row( $item ) );
488
  }
489
  else
@@ -492,6 +484,38 @@ class Redirection_Admin {
492
  $this->output_ajax_response( $json );
493
  }
494
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
495
  private function output_ajax_response( array $data ) {
496
  header( 'Content-Type: application/json' );
497
  echo json_encode( $data );
3
  include dirname( __FILE__ ).'/models/group.php';
4
  include dirname( __FILE__ ).'/models/monitor.php';
5
  include dirname( __FILE__ ).'/models/pager.php';
6
+ include dirname( __FILE__ ).'/models/file-io.php';
7
 
8
  class Redirection_Admin {
9
  private static $instance = null;
37
  add_action( 'wp_ajax_red_redirect_add', array( &$this, 'ajax_redirect_add' ) );
38
  add_action( 'wp_ajax_red_redirect_edit', array( &$this, 'ajax_redirect_edit' ) );
39
  add_action( 'wp_ajax_red_redirect_save', array( &$this, 'ajax_redirect_save' ) );
40
+ add_action( 'wp_ajax_red_get_htaccess', array( &$this, 'ajax_get_htaccess' ) );
41
+ add_action( 'wp_ajax_red_get_nginx', array( &$this, 'ajax_get_nginx' ) );
42
 
43
  $this->monitor = new Red_Monitor( red_get_options() );
44
  }
45
 
46
  public static function plugin_activated() {
47
+ Redirection_Admin::update();
48
  Red_Flusher::schedule();
49
  }
50
 
64
  $$key = $val;
65
  }
66
 
67
+ if ( file_exists( dirname( REDIRECTION_FILE )."/view/$template.php" ) )
68
+ include dirname( REDIRECTION_FILE )."/view/$template.php";
69
  }
70
 
71
  private function capture( $ug_name, $ug_vars = array() ) {
94
  <?php
95
  }
96
 
97
+ private static function update() {
98
  $version = get_option( 'redirection_version' );
99
 
100
  if ( $version != REDIRECTION_VERSION ) {
157
  }
158
 
159
  function admin_screen() {
160
+ Redirection_Admin::update();
161
 
162
+ if ( isset( $_GET['sub'] ) ) {
163
  if ( $_GET['sub'] == 'log' )
164
  return $this->admin_screen_log();
165
  elseif ( $_GET['sub'] == '404s' )
169
  elseif ( $_GET['sub'] == 'process' )
170
  return $this->admin_screen_process();
171
  elseif ( $_GET['sub'] == 'groups' )
172
+ return $this->admin_groups( isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0 );
173
  elseif ( $_GET['sub'] == 'modules' )
174
  return $this->admin_screen_modules();
175
  elseif ( $_GET['sub'] == 'support' )
176
  return $this->render('support', array( 'options' => red_get_options() ) );
177
  }
178
 
179
+ return $this->admin_redirects( isset( $_REQUEST['id'] ) ? intval( $_REQUEST['id'] ) : 0 );
180
  }
181
 
182
  function admin_screen_modules() {
184
  $pager = new Redirection_Module_Table( $options['token'] );
185
  $pager->prepare_items();
186
 
187
+ $this->render( 'module-list', array( 'options' => $options, 'table' => $pager ) );
188
  }
189
 
190
  function inject() {
299
 
300
  function admin_groups( $module ) {
301
  if ( isset( $_POST['add'] ) && check_admin_referer( 'redirection-add_group' ) ) {
302
+ if ( Red_Group::create( stripslashes( $_POST['name'] ), intval( $_POST['module_id'] ) ) ) {
303
  $this->render_message( __( 'Your group was added successfully', 'redirection' ) );
 
304
  }
305
  else
306
  $this->render_error( __( 'Please specify a group name', 'redirection' ) );
307
  }
308
 
309
+ $table = new Redirection_Group_Table( Red_Module::get_for_select() );
 
 
 
310
  $table->prepare_items();
311
 
312
+ $this->render( 'group-list', array( 'options' => red_get_options(), 'table' => $table, 'modules' => Red_Module::get_for_select(), 'module' => $module ) );
 
 
 
 
313
  }
314
 
315
  function admin_redirects( $group_id ) {
316
+ $table = new Redirection_Table( Red_Group::get_for_select(), $group_id );
 
 
 
 
 
 
 
 
317
  $table->prepare_items();
318
 
319
+ $this->render( 'item-list', array( 'options' => red_get_options(), 'group' => $group_id, 'table' => $table, 'date_format' => get_option( 'date_format' ) ) );
320
  }
321
 
322
  function locales() {
360
 
361
  $module = Red_Module::get( $module_id );
362
  if ( $module )
363
+ $json['html'] = $this->capture( 'module-edit', array( 'module' => $module ) );
364
  else
365
  $json['error'] = __( 'Unable to perform action' ).' - could not find module';
366
 
368
  }
369
 
370
  public function ajax_module_save() {
 
 
 
371
  $module_id = intval( $_POST['id'] );
 
372
 
373
  $this->check_ajax_referer( 'red_module_save_'.$module_id );
374
 
375
  $module = Red_Module::get( $module_id );
 
376
  if ( $module ) {
377
+ $result = $module->update( $_POST );
378
 
379
+ if ( $result === true ) {
380
+ global $hook_suffix;
381
+
382
+ $hook_suffix = '';
383
+ $options = red_get_options();
384
+ $pager = new Redirection_Module_Table( $options['token'] );
385
+
386
+ $json = array( 'html' => $pager->column_name( $module ) );
387
+ }
388
+ else
389
+ $json['error'] = $result;
390
  }
391
  else
392
  $json['error'] = __( 'Unable to perform action' ).' - could not find module';
401
 
402
  $group = Red_Group::get( $group_id );
403
  if ( $group )
404
+ $json['html'] = $this->capture( 'group-edit', array( 'group' => $group, 'modules' => Red_Module::get_for_select() ) );
405
  else
406
  $json['error'] = __( 'Unable to perform action' ).' - could not find group';
407
 
419
  $group = Red_Group::get( $group_id );
420
  if ( $group ) {
421
  $group->update( $_POST );
422
+ $module = Red_Module::get( $group->get_module_id() );
423
 
424
  $pager = new Redirection_Group_Table( array(), false );
425
+ $json = array( 'html' => $pager->column_name( $group ), 'module' => $module->get_name() );
426
  }
427
  else
428
  $json['error'] = __( 'Unable to perform action' ).' - could not find redirect';
435
  $redirect = Red_Item::get_by_id( intval( $_POST['id'] ) );
436
 
437
  if ( $redirect )
438
+ $json['html'] = $this->capture( 'item-edit', array( 'redirect' => $redirect, 'groups' => Red_Group::get_for_select() ) );
439
  else
440
  $json['error'] = __( 'Unable to perform action' ).' - could not find redirect';
441
 
455
  if ( $redirect ) {
456
  $redirect->update( $_POST );
457
 
458
+ $pager = new Redirection_Table( array(), 0 );
459
  $json = array( 'html' => $pager->column_url( $redirect ), 'code' => $redirect->get_action_code() );
460
  }
461
  else
475
  if ( is_wp_error( $item ) )
476
  $json['error'] = $item->get_error_message();
477
  elseif ( $item !== false ) {
478
+ $pager = new Redirection_Table( array(), 0 );
479
  $json = array( 'html' => $pager->get_row( $item ) );
480
  }
481
  else
484
  $this->output_ajax_response( $json );
485
  }
486
 
487
+ private function get_module_column( $module_id, $export_type ) {
488
+ $json['error'] = __( 'Invalid module', 'redirection' );
489
+
490
+ $module = Red_Module::get( $module_id );
491
+ $exporter = Red_FileIO::create( $export_type );
492
+
493
+ if ( $module && $exporter ) {
494
+ global $hook_suffix;
495
+
496
+ $hook_suffix = '';
497
+ $options = red_get_options();
498
+ $pager = new Redirection_Module_Table( $options['token'] );
499
+ $items = Red_Item::get_all_for_module( $module_id );
500
+
501
+ $json = array( 'html' => $pager->column_name( $module ) );
502
+
503
+ $json['html'] .= '<textarea readonly="readonly" class="module-export" rows="10">'.esc_textarea( $exporter->get( $items ) ).'</textarea>';
504
+ $json['html'] .= '<div class="table-actions"><a href="?page=redirection.php&amp;token='.$options['token'].'&amp;sub='.$export_type.'&amp;module='.$module_id.'"><input class="button-primary" type="button" value="'.__( 'Download', 'redirection' ).'"/></a> ';
505
+ $json['html'] .= '<input class="button-secondary" type="submit" name="cancel" value="'.__( 'Cancel', 'redirection' ).'"/>';
506
+ }
507
+
508
+ $this->output_ajax_response( $json );
509
+ }
510
+
511
+ public function ajax_get_nginx() {
512
+ $this->get_module_column( intval( $_POST['id'] ), 'nginx' );
513
+ }
514
+
515
+ public function ajax_get_htaccess() {
516
+ $this->get_module_column( intval( $_POST['id'] ), 'apache' );
517
+ }
518
+
519
  private function output_ajax_response( array $data ) {
520
  header( 'Content-Type: application/json' );
521
  echo json_encode( $data );
redirection-front.php CHANGED
@@ -1,6 +1,6 @@
1
  <?php
2
 
3
- include dirname( __FILE__ ).'/modules/wordpress.php';
4
 
5
  class Redirection {
6
  private static $instance = null;
@@ -15,7 +15,7 @@ class Redirection {
15
  }
16
 
17
  public function __construct() {
18
- $this->module = new WordPress_Module();
19
  $this->module->start();
20
 
21
  add_action( Red_Flusher::DELETE_HOOK, array( $this, 'clean_redirection_logs' ) );
1
  <?php
2
 
3
+ include_once dirname( __FILE__ ).'/modules/wordpress.php';
4
 
5
  class Redirection {
6
  private static $instance = null;
15
  }
16
 
17
  public function __construct() {
18
+ $this->module = Red_Module::get( WordPress_Module::MODULE_ID );
19
  $this->module->start();
20
 
21
  add_action( Red_Flusher::DELETE_HOOK, array( $this, 'clean_redirection_logs' ) );
redirection.js CHANGED
@@ -1,200 +1,303 @@
1
- var Redirection;
2
-
3
- (function($) {
4
- Redirection_Items = function() {
5
- function edit_items() {
6
- $( 'table.items' ).on( 'click', '.advanced-toggle', function( ev ) {
7
- ev.preventDefault();
8
- $( this ).toggleClass( 'advanced-toggled' );
9
- $( this ).closest( 'table' ).find( '.advanced' ).toggle();
10
- } );
11
-
12
- $( 'table.items' ).on( 'click', '.row-actions a.red-auto', function( ev ) {
13
- ev.preventDefault();
14
-
15
- $( this ).closest( 'tr' ).find( 'input[type=checkbox]' ).prop( 'checked', true );
16
- $( 'select[name=action]' ).find( 'option[value=' + $( this ).data( 'action' ) + ']' ).prop( 'selected', true );
17
- $( '#doaction' ).click();
18
- } );
19
-
20
- $( 'table.items' ).on( 'click', '.row-actions a.red-ajax', function( ev ) {
21
- var action = $( this ).data( 'action' );
22
- var container = $( this ).closest( 'td' );
23
-
24
- ev.preventDefault();
25
-
26
- container.data( 'cancel', container.html() );
27
-
28
- show_loading( container.find( '.row-actions' ) );
29
-
30
- $.post( ajaxurl, {
31
- action: $( this ).data( 'action' ),
32
- _ajax_nonce: $( this ).data( 'nonce' ),
33
- id: $( this ).data( 'id' )
34
- }, function( response ) {
35
- if ( show_error( response ) )
36
- return;
37
-
38
- container.html( response.html );
39
- connect_redirect_edit( container );
40
- }, 'json' );
41
- } );
42
-
43
- $( document ).on( 'change', 'select.change-user-agent', function( ev ) {
44
- $( this ).closest( 'td' ).find( 'input[type=text]' ).val( $( this ).val() );
45
- } );
46
- }
47
-
48
- function show_loading( container ) {
49
- container.replaceWith( '<div class="spinner" style="display: block"></div>' );
50
- }
51
-
52
- function show_error( response ) {
53
- if (response == 0 || response == -1) {
54
- alert( Redirectioni10n.error_msg );
55
- return true;
56
- }
57
- else if (response.error) {
58
- alert( response.error );
59
- return true;
60
- }
61
-
62
- return false;
63
- }
64
-
65
- function connect_redirect_edit( container ) {
66
- container.find( 'input[name=save]' ).on( 'click', function( ev ) {
67
- var form = $( this ).closest( 'table.edit' );
68
-
69
- ev.preventDefault();
70
-
71
- form.addClass( 'loading' );
72
-
73
- $.post( form.data( 'url' ), form.find( 'input, select' ).serialize(), function( response ) {
74
- if ( show_error( response ) )
75
- return;
76
-
77
- container.html( response.html );
78
-
79
- if ( response.code )
80
- container.closest( 'tr' ).find( '.column-type' ).html( response.code );
81
- }, 'json' );
82
- } );
83
-
84
- container.find( 'input[name=cancel]' ).on( 'click', function( ev ) {
85
- ev.preventDefault();
86
-
87
- container.html( container.data( 'cancel' ) );
88
- container.data( 'cancel', null );
89
- } );
90
- }
91
-
92
- edit_items();
93
- };
94
 
95
- Redirection_Modules = function() {
96
- function modules() {
97
- // Edit module
98
- $( 'a.edit' ).unbind( 'click' ).click( function( ev ) {
99
- var container = $( this ).closest( 'tr' );
100
- ev.preventDefault();
101
-
102
- $.get( $( this ).attr( 'href' ), function( response ) {
103
- container.html( response );
104
- } );
105
- } );
106
-
107
- // Reset links
108
- $( 'a.reset' ).unbind( 'click' ).click( function() {
109
- var item = $( this ).parents( 'tr' )
110
- var href = this.href;
111
-
112
- $( item ).find( '.operations div' ).hide();
113
- $( item ).find( '.loader' ).show();
114
- $( item ).load( this.href, function() {
115
- modules();
116
- });
117
-
118
- return false;
119
- });
120
-
121
- // Delete links
122
- $( 'a.rdelete' ).unbind( 'click' ).click( function() {
123
- var item = $( this ).parents( 'tr' )
124
-
125
- $( item ).find( '.operations a' ).hide();
126
- $( item ).find( '.loader' ).show();
127
- $.get( this.href, function() {
128
- $( item ).fadeOut();
129
- });
130
-
131
- return false;
132
- });
133
- }
134
-
135
- modules();
136
- };
137
 
138
- Redirection_Logs = function() {
139
- function logs() {
140
- $( '.add-log' ).unbind( 'click' ).click( function( item ) {
141
- $( '#added' ).hide ();
142
- $( '#add' ).show ();
143
 
144
- // Copy details
145
- $( '#old' ).val( $( this ).attr( 'href' ) );
146
- return false;
147
- } );
148
- }
149
 
150
- logs();
151
- };
152
 
153
- function get_redirect_error( response ) {
154
- if ( parseInt( response, 10 ) === 0 || parseInt( response, 10 ) === -1 )
155
- return Redirectioni10n.error_msg;
156
- else if ( response.error )
157
- return response.error;
158
- return false;
159
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
 
161
- Redirection_Add = function( selector, target, add_form, add_to_screen ) {
162
- $( selector ).on( 'change', function() {
163
- if ( $( this ).val() == 'url' || $( this ).val() == 'pass' )
164
- $( target ).show();
165
- else
166
- $( target ).hide();
167
- } );
168
-
169
- $( add_form ).find( 'form' ).ajaxForm( {
170
- beforeSubmit: function () {
171
- $( add_form ).removeClass( 'loaded-error' ).addClass( 'loading' );
172
- },
173
- success: function( response ) {
174
- var error = get_redirect_error( response );
175
-
176
- $( add_form ).find( 'input[type=text]' ).val( '' );
177
- $( add_form ).removeClass( 'loading' );
178
-
179
- if ( error ) {
180
- $( add_form ).addClass( 'loaded-error' );
181
- $( add_form ).find( '.red-error' ).html( error );
182
- return;
183
- }
184
-
185
- if ( add_to_screen === true ) {
186
- $( add_form ).addClass( 'loaded' );
187
-
188
- $( 'table tr.no-items' ).remove();
189
- $( 'table.items' ).append( response.html );
190
- $( 'table.items tr' ).each( function( pos, item ) {
191
- $( item ).removeClass( 'alternate' );
192
- if ( pos % 2 == 0 )
193
- $( item ).addClass( 'alternate' );
194
- } );
195
- }
196
- },
197
- dataType: 'json'
198
- });
 
 
199
  };
200
- } )( jQuery );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* global Redirectioni10n, ajaxurl, document, alert */
2
+ "use strict";
3
+
4
+ /**
5
+ * Saves data in a table to the server
6
+ */
7
+ var Redirection_Ajax_Form = function( $, form, on_success ) {
8
+ this.$ = $;
9
+ this.form = form;
10
+ this.on_success = on_success;
11
+ this.LOADING_CLASS = 'loading';
12
+ };
13
+
14
+ Redirection_Ajax_Form.prototype.start = function() {
15
+ var data = this.form.find( 'input, select' ).serialize();
16
+ var url = this.form.data( 'url' );
17
+
18
+ this.form.addClass( this.LOADING_CLASS );
19
+
20
+ this.$.post( url, data, this.$.proxy( this.on_submit_form, this ), 'json' );
21
+ };
22
+
23
+ Redirection_Ajax_Form.prototype.on_submit_form = function( response ) {
24
+ this.form.removeClass( this.LOADING_CLASS );
25
+ this.on_success( response );
26
+ };
27
+
28
+ /**
29
+ * Handles ajax fetching when a link in the table is clicked
30
+ */
31
+ var Redirection_Ajax = function( $, container ) {
32
+ this.$ = $;
33
+ this.container = container;
34
+ this.old_content = container.html();
35
+
36
+ this.ERROR_CONTAINER = '.error-container';
37
+ this.SAVE_BUTTON = 'input[name=save]';
38
+ this.CANCEL_BUTTON = 'input[name=cancel]';
39
+ this.FORM = 'table.edit';
40
+ this.COLUMN_TYPE = '.column-type';
41
+ this.COLUMN_MODULE = '.column-module';
42
+ };
43
+
44
+ Redirection_Ajax.prototype.start = function( ajax_data ) {
45
+ this.container.find( this.ERROR_CONTAINER ).hide();
46
+ this.show_loading();
47
+
48
+ this.$.post( ajaxurl, ajax_data, this.$.proxy( this.on_ajax_response, this ), 'json' );
49
+ };
50
+
51
+ Redirection_Ajax.prototype.on_ajax_response = function( response ) {
52
+ if ( this.show_error( response ) )
53
+ return;
54
+
55
+ this.container.html( response.html );
56
+ this.container.find( this.SAVE_BUTTON ).on( 'click', this.$.proxy( this.on_save, this ) );
57
+ this.container.find( this.CANCEL_BUTTON ).on( 'click', this.$.proxy( this.on_cancel, this ) );
58
+ };
59
+
60
+ Redirection_Ajax.prototype.show_loading = function() {
61
+ this.container.prepend( '<div class="spinner" style="display: block"></div>' );
62
+ };
63
+
64
+ Redirection_Ajax.prototype.hide_loading = function() {
65
+ this.container.find( '.spinner' ).remove();
66
+ };
67
+
68
+ Redirection_Ajax.prototype.show_error = function( response, error_container ) {
69
+ var error = false;
70
+
71
+ this.hide_loading();
72
+
73
+ if ( parseInt( response, 10 ) <= -1 )
74
+ error = Redirectioni10n.error_msg;
75
+ else if ( response.error )
76
+ error = response.error;
77
+
78
+ if ( error ) {
79
+ if ( typeof error_container !== 'undefined' && error_container )
80
+ error_container.text( Redirectioni10n.error_msg ).show();
81
+ else
82
+ alert( Redirectioni10n.error_msg );
83
+
84
+ return true;
85
+ }
 
 
 
 
 
 
 
 
86
 
87
+ return false;
88
+ };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
 
90
+ Redirection_Ajax.prototype.on_save = function( ev ) {
91
+ ev.preventDefault();
 
 
 
92
 
93
+ this.form = new Redirection_Ajax_Form( this.$, this.$( ev.target ).closest( this.FORM ), this.$.proxy( this.on_save_success, this ) );
94
+ this.form.start();
95
+ };
 
 
96
 
97
+ Redirection_Ajax.prototype.on_cancel = function( ev ) {
98
+ ev.preventDefault();
99
 
100
+ this.container.html( this.old_content );
101
+ };
102
+
103
+ Redirection_Ajax.prototype.on_save_success = function( response ) {
104
+ this.form = null;
105
+
106
+ if ( this.show_error( response, this.container.find( this.ERROR_CONTAINER ) ) )
107
+ return;
108
+
109
+ this.container.html( response.html );
110
+
111
+ if ( response.code )
112
+ this.set_column( this.COLUMN_TYPE, response.code );
113
+ else if ( response.module )
114
+ this.set_column( this.COLUMN_MODULE, response.module );
115
+ };
116
+
117
+ Redirection_Ajax.prototype.set_column = function( selector, content ) {
118
+ var column = this.container.closest( 'tr' ).find( selector );
119
+
120
+ column.html( content );
121
+ };
122
+
123
+ /**
124
+ * Items in a table
125
+ */
126
+ var Redirection_Items = function( $ ) {
127
+ this.$ = $;
128
+ };
129
 
130
+ Redirection_Items.prototype.setup = function( table_items ) {
131
+ this.$( table_items ).on( 'click', '.advanced-toggle', this.$.proxy( this.toggle_advanced_editing, this ) );
132
+ this.$( table_items ).on( 'click', '.row-actions a.red-auto', this.$.proxy( this.perform_single_bulk_action, this ) );
133
+ this.$( table_items ).on( 'click', '.row-actions a.red-ajax', this.$.proxy( this.perform_ajax_action, this ) );
134
+
135
+ this.$( document ).on( 'change', 'select.change-user-agent', this.$.proxy( this.copy_user_agent, this ) );
136
+ };
137
+
138
+ Redirection_Items.prototype.copy_user_agent = function( ev ) {
139
+ var select = this.$( ev.target );
140
+
141
+ select.closest( 'td' ).find( 'input[type=text]' ).val( select.val() );
142
+ };
143
+
144
+ Redirection_Items.prototype.toggle_advanced_editing = function( ev ) {
145
+ var edit_button = this.$( ev.target );
146
+
147
+ ev.preventDefault();
148
+
149
+ edit_button.toggleClass( 'advanced-toggled' );
150
+ edit_button.closest( 'table' ).find( '.advanced' ).toggle();
151
+ };
152
+
153
+ Redirection_Items.prototype.perform_single_bulk_action = function( ev ) {
154
+ var action = this.$( ev.target );
155
+
156
+ ev.preventDefault();
157
+
158
+ action.closest( 'tr' ).find( 'input[type=checkbox]' ).prop( 'checked', true );
159
+ this.$( 'select[name=action]' ).find( 'option[value=' + action.data( 'action' ) + ']' ).prop( 'selected', true );
160
+ this.$( '#doaction' ).click();
161
+ };
162
+
163
+ Redirection_Items.prototype.perform_ajax_action = function( ev ) {
164
+ var container = this.$( ev.target ).closest( 'td' );
165
+ var action = this.$( ev.target );
166
+ var ajax_data = {
167
+ action: action.data( 'action' ),
168
+ _ajax_nonce: action.data( 'nonce' ),
169
+ id: action.data( 'id' )
170
  };
171
+
172
+ ev.preventDefault();
173
+
174
+ if ( typeof this.ajax !== 'undefined' )
175
+ delete this.ajax;
176
+
177
+ this.ajax = new Redirection_Ajax( this.$, container );
178
+ this.ajax.start( ajax_data );
179
+ };
180
+
181
+ /**
182
+ * Connects the 'add redirect' link to the Redirection_Add form
183
+ */
184
+
185
+ var Redirection_Logs = function( $, add_form, added_notice, source_url ) {
186
+ this.$ = $;
187
+ this.add_form = add_form;
188
+ this.addded_notice = added_notice;
189
+ this.source_url = source_url;
190
+ };
191
+
192
+ Redirection_Logs.prototype.setup = function( add_log ) {
193
+ this.$( add_log ).on( 'click', this.$.proxy( this.on_add_log, this ) );
194
+ };
195
+
196
+ Redirection_Logs.prototype.on_add_log = function( ev ) {
197
+ ev.preventDefault();
198
+
199
+ this.$( this.added_notice ).hide();
200
+ this.$( this.add_form ).show();
201
+
202
+ // Copy details
203
+ this.$( this.source_url ).val( this.$( ev.target ).attr( 'href' ) );
204
+ this.$( 'html, body' ).scrollTop( this.$( this.add_form ).offset().top );
205
+ };
206
+
207
+
208
+ /**
209
+ * Add a redirect form
210
+ */
211
+ var Redirection_Add = function( $, target, add_to_screen ) {
212
+ this.$ = $;
213
+ this.target = target;
214
+ this.add_to_screen = add_to_screen;
215
+
216
+ this.ALT_CLASS = 'alternate';
217
+ this.LOADING_CLASS = 'loading';
218
+ this.LOADED_CLASS = 'loaded';
219
+ this.LOADED_ERROR_CLASS = 'loaded-error';
220
+ this.TEXT_FIELD = 'input[type=text]';
221
+ this.ERROR_CONTAINER = '.red-error';
222
+ this.ITEM_TABLE = 'table.items';
223
+ this.EMPTY_TABLE = 'table tr.no-items';
224
+ };
225
+
226
+ Redirection_Add.prototype.setup = function( selector, add_form ) {
227
+ this.add_form = add_form;
228
+
229
+ this.$( selector ).on( 'change', this.$.proxy( this.on_change_type, this ) );
230
+ this.$( add_form ).find( 'form' ).ajaxForm( {
231
+ beforeSubmit: this.$.proxy( this.before_submit, this ),
232
+ success: this.$.proxy( this.on_success, this ),
233
+ dataType: 'json'
234
+ } );
235
+ };
236
+
237
+ Redirection_Add.prototype.on_change_type = function( ev ) {
238
+ var val = this.$( ev.target ).val();
239
+
240
+ this.$( this.target ).toggle( val === 'url' || val === 'pass' );
241
+ };
242
+
243
+ Redirection_Add.prototype.before_submit = function() {
244
+ this.$( this.add_form ).removeClass( this.LOADED_ERROR_CLASS + ' ' + this.LOADED_CLASS ).addClass( this.LOADING_CLASS );
245
+ };
246
+
247
+ Redirection_Add.prototype.on_success = function( response ) {
248
+ var error = this.get_redirect_error( response );
249
+
250
+ this.reset_form();
251
+
252
+ if ( error )
253
+ this.add_error( this.add_form, error );
254
+ else if ( this.add_to_screen === true )
255
+ this.add_redirect_to_list( this.add_form, response.html );
256
+ else
257
+ this.show_added_notice( this.add_form );
258
+ };
259
+
260
+ Redirection_Add.prototype.reset_form = function() {
261
+ this.$( this.add_form ).find( this.TEXT_FIELD ).val( '' );
262
+ this.$( this.add_form ).removeClass( this.LOADING_CLASS );
263
+ };
264
+
265
+ Redirection_Add.prototype.add_error = function( add_form, error ) {
266
+ this.$( add_form ).addClass( this.LOADED_ERROR_CLASS );
267
+ this.$( add_form ).find( this.ERROR_CONTAINER ).html( error );
268
+ };
269
+
270
+ Redirection_Add.prototype.add_redirect_to_list = function( add_form, html ) {
271
+ this.$( this.ITEM_TABLE ).append( html );
272
+
273
+ this.show_added_notice( add_form );
274
+ this.set_alternate_rows( this.ITEM_TABLE + ' tr' );
275
+ this.remove_empty_row( this.EMPTY_TABLE );
276
+ };
277
+
278
+ Redirection_Add.prototype.show_added_notice = function( add_form ) {
279
+ this.$( add_form ).addClass( this.LOADED_CLASS );
280
+ };
281
+
282
+ Redirection_Add.prototype.remove_empty_row = function( empty_rows ) {
283
+ this.$( empty_rows ).remove();
284
+ };
285
+
286
+ Redirection_Add.prototype.set_alternate_rows = function( table_rows ) {
287
+ this.$( table_rows ).each( this.$.proxy( this.alt_rows, this ) );
288
+ };
289
+
290
+ Redirection_Add.prototype.alt_rows = function( pos, item ) {
291
+ this.$( item ).removeClass( this.ALT_CLASS );
292
+
293
+ if ( pos % 2 === 0 )
294
+ this.$( item ).addClass( this.ALT_CLASS );
295
+ };
296
+
297
+ Redirection_Add.prototype.get_redirect_error = function( response ) {
298
+ if ( parseInt( response, 10 ) === 0 || parseInt( response, 10 ) === -1 )
299
+ return Redirectioni10n.error_msg;
300
+ else if ( response.error )
301
+ return response.error;
302
+ return false;
303
+ };
redirection.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Redirection
4
  Plugin URI: http://urbangiraffe.com/plugins/redirection/
5
  Description: Manage all your 301 redirects and monitor 404 errors
6
- Version: 2.3.16
7
  Author: John Godley
8
  Author URI: http://urbangiraffe.com
9
  ============================================================================================================
@@ -19,7 +19,7 @@ For full license details see license.txt
19
  ============================================================================================================
20
  */
21
 
22
- define( 'REDIRECTION_VERSION', '2.3.1' ); // DB schema version. Only change if DB needs changing
23
  define( 'REDIRECTION_FILE', __FILE__ );
24
 
25
  include dirname( __FILE__ ).'/models/module.php';
@@ -34,14 +34,15 @@ function red_get_options() {
34
  if ( $options === false )
35
  $options = array();
36
 
37
- $defaults = array(
38
  'support' => false,
39
  'token' => md5( uniqid() ),
40
  'monitor_post' => 0,
41
  'auto_target' => '',
42
  'expire_redirect' => 7,
43
  'expire_404' => 7,
44
- );
 
45
 
46
  foreach ( $defaults AS $key => $value ) {
47
  if ( !isset( $options[$key] ) )
3
  Plugin Name: Redirection
4
  Plugin URI: http://urbangiraffe.com/plugins/redirection/
5
  Description: Manage all your 301 redirects and monitor 404 errors
6
+ Version: 2.4
7
  Author: John Godley
8
  Author URI: http://urbangiraffe.com
9
  ============================================================================================================
19
  ============================================================================================================
20
  */
21
 
22
+ define( 'REDIRECTION_VERSION', '2.3.2' ); // DB schema version. Only change if DB needs changing
23
  define( 'REDIRECTION_FILE', __FILE__ );
24
 
25
  include dirname( __FILE__ ).'/models/module.php';
34
  if ( $options === false )
35
  $options = array();
36
 
37
+ $defaults = apply_filters( 'red_default_options', array(
38
  'support' => false,
39
  'token' => md5( uniqid() ),
40
  'monitor_post' => 0,
41
  'auto_target' => '',
42
  'expire_redirect' => 7,
43
  'expire_404' => 7,
44
+ 'modules' => array()
45
+ ) );
46
 
47
  foreach ( $defaults AS $key => $value ) {
48
  if ( !isset( $options[$key] ) )
view/add.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php if ( !defined( 'ABSPATH' ) ) die( 'No direct access allowed' ); ?>
2
+
3
+ <div class="wrap" id="add" <?php if ( $hidden ) echo ' style="display: none"' ?>>
4
+ <h2><?php _e( 'Add new redirection', 'redirection' ) ?></h2>
5
+
6
+ <div class="red-added">
7
+ <p><?php _e( 'Your redirection has been added.', 'redirection' ); ?></p>
8
+ </div>
9
+
10
+ <form method="post" action="<?php echo admin_url( 'admin-ajax.php' ); ?>">
11
+ <table width="100%">
12
+ <tr>
13
+ <th align="right" width="100"><?php _e( 'Source URL', 'redirection' ) ?>:</th>
14
+ <td><input type="text" name="source" style="width: 95%" id="old"/></td>
15
+ </tr>
16
+ <tr>
17
+ <th align="right"><?php _e( 'Match', 'redirection' ) ?>:</th>
18
+ <td>
19
+ <select name="match">
20
+ <?php echo $this->select( Red_Match::all() ); ?>
21
+ </select>
22
+
23
+ <strong><?php _e( 'Action', 'redirection' ); ?>:</strong>
24
+ <select name="red_action">
25
+ <?php echo $this->select( Red_Item::actions(), 'url' ); ?>
26
+ </select>
27
+
28
+ <label><?php _e( 'Regular expression', 'redirection' ); ?>: <input id="regex" type="checkbox" name="regex"/></label>
29
+ </td>
30
+ </tr>
31
+ <tr id="target">
32
+ <th align="right"><?php _e( 'Target URL', 'redirection' ) ?>:</th>
33
+ <td><input type="text" name="target" style="width: 95%"/></td>
34
+ </tr>
35
+ <tr>
36
+ <th><?php _e( 'Group', 'redirection' ); ?>:</th>
37
+ <td>
38
+ <select name="group_id">
39
+ <?php echo $this->select( Red_Group::get_for_select(), $group )?>
40
+ </select>
41
+ </td>
42
+ </tr>
43
+ <tr>
44
+ <th></th>
45
+ <td>
46
+ <input class="button-primary" type="submit" name="add" value="<?php esc_attr_e( 'Add Redirection', 'redirection' ) ?>" id="submit"/>
47
+ <?php if ( isset( $group ) ) : ?>
48
+ <input type="hidden" name="group" value="<?php echo esc_attr( $group ) ?>"/>
49
+ <?php endif; ?>
50
+
51
+ <input type="hidden" name="action" value="red_redirect_add"/>
52
+ <?php wp_nonce_field( 'redirection-redirect_add' ) ?>
53
+
54
+ <div class="red-error"></div>
55
+ </td>
56
+ </tr>
57
+ </table>
58
+ </form>
59
+ </div>
view/admin/add.php DELETED
@@ -1,57 +0,0 @@
1
- <?php if ( !defined( 'ABSPATH' ) ) die( 'No direct access allowed' ); ?>
2
-
3
- <div class="wrap" id="add" <?php if ( $hidden ) echo ' style="display: none"' ?>>
4
- <h2><?php _e( 'Add new redirection', 'redirection' ) ?></h2>
5
-
6
- <div class="red-added">
7
- <p><?php _e( 'Your redirection has been added.', 'redirection' ); ?></p>
8
- </div>
9
-
10
- <form method="post" action="<?php echo admin_url( 'admin-ajax.php' ); ?>">
11
- <table width="100%">
12
- <tr>
13
- <th align="right" width="100"><?php _e( 'Source URL', 'redirection' ) ?>:</th>
14
- <td><input type="text" name="source" style="width: 95%" id="old"/></td>
15
- </tr>
16
- <tr>
17
- <th align="right"><?php _e( 'Match', 'redirection' ) ?>:</th>
18
- <td>
19
- <select name="match">
20
- <?php echo $this->select( Red_Match::all() ); ?>
21
- </select>
22
-
23
- <strong><?php _e( 'Action', 'redirection' ); ?>:</strong>
24
- <select name="red_action">
25
- <?php echo $this->select( Red_Item::actions(), 'url' ); ?>
26
- </select>
27
-
28
- <label><?php _e( 'Regular expression', 'redirection' ); ?>: <input id="regex" type="checkbox" name="regex"/></label>
29
- </td>
30
- </tr>
31
- <tr id="target">
32
- <th align="right"><?php _e( 'Target URL', 'redirection' ) ?>:</th>
33
- <td><input type="text" name="target" style="width: 95%"/></td>
34
- </tr>
35
- <?php if ( !isset( $group ) ) : ?>
36
- <tr>
37
- <th><?php _e( 'Group', 'redirection' ); ?>:</th>
38
- <td><select name="group"><?php echo $this->select( Red_Group::get_for_select(), isset( $_GET['group'] ) ? intval( $_GET['group'] ) : 0 )?></select></td>
39
- </tr>
40
- <?php endif; ?>
41
- <tr>
42
- <th></th>
43
- <td>
44
- <input class="button-primary" type="submit" name="add" value="<?php esc_attr_e( 'Add Redirection', 'redirection' ) ?>" id="submit"/>
45
- <?php if ( isset( $group ) ) : ?>
46
- <input type="hidden" name="group" value="<?php echo esc_attr( $group ) ?>"/>
47
- <?php endif; ?>
48
-
49
- <input type="hidden" name="action" value="red_redirect_add"/>
50
- <?php wp_nonce_field( 'redirection-redirect_add' ) ?>
51
-
52
- <div class="red-error"></div>
53
- </td>
54
- </tr>
55
- </table>
56
- </form>
57
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
view/{admin/annoy.php → annoy.php} RENAMED
File without changes
view/{admin/error.php → error.php} RENAMED
File without changes
view/{admin/group_edit.php → group-edit.php} RENAMED
@@ -5,12 +5,14 @@
5
  <td><input style="width: 95%" type="text" name="name" value="<?php echo esc_attr( $group->get_name() ) ?>"/></td>
6
  </tr>
7
  <tr>
8
- <th width="70"><?php _e ('Tracked', 'redirection'); ?>:</th>
9
- <td><label><input type="checkbox" name="tracking"<?php echo checked ($group->tracking) ?>/> <span class="sub"><?php _e ('Whether to track \'hits\' to items', 'redirection'); ?></span></label></td>
10
- </tr>
11
- <tr>
12
- <th width="70"><?php _e ('Enabled', 'redirection'); ?>:</th>
13
- <td><label><input type="checkbox" name="status"<?php if ($group->status == 'enabled') echo ' checked="checked"' ?>/> <span class="sub"><?php _e ('Disabling a group will disable all items contained within it', 'redirection'); ?></span></label></td>
 
 
14
  </tr>
15
  <tr>
16
  <th width="70"></th>
@@ -21,6 +23,7 @@
21
 
22
  <input type="hidden" name="action" value="red_group_save"/>
23
  <input type="hidden" name="id" value="<?php echo esc_attr( $group->id ); ?>"/>
 
24
  <?php wp_nonce_field( 'redirection-group_save_'.$group->id ) ?>
25
  </div>
26
 
5
  <td><input style="width: 95%" type="text" name="name" value="<?php echo esc_attr( $group->get_name() ) ?>"/></td>
6
  </tr>
7
  <tr>
8
+ <th width="70"><?php _e( 'Module', 'redirection' ); ?></th>
9
+ <td>
10
+ <select name="module_id">
11
+ <?php foreach ( Red_Module::get_for_select() AS $module ) : ?>
12
+ <option value="<?php echo esc_attr( $module->get_id() ); ?>"<?php selected( $module->get_id(), $group->get_module_id() ); ?>><?php echo esc_html( $module->get_name() ); ?></option>
13
+ <?php endforeach; ?>
14
+ </select>
15
+ </td>
16
  </tr>
17
  <tr>
18
  <th width="70"></th>
23
 
24
  <input type="hidden" name="action" value="red_group_save"/>
25
  <input type="hidden" name="id" value="<?php echo esc_attr( $group->id ); ?>"/>
26
+
27
  <?php wp_nonce_field( 'redirection-group_save_'.$group->id ) ?>
28
  </div>
29
 
view/{admin/group_list.php → group-list.php} RENAMED
@@ -21,18 +21,27 @@
21
  <div class="wrap">
22
  <h2><?php _e( 'Add Group', 'redirection' ); ?></h2>
23
 
 
 
24
  <form action="" method="post" accept-charset="utf-8">
25
  <?php wp_nonce_field( 'redirection-add_group' ); ?>
26
  <table class="form-table">
27
  <tr>
28
- <th width="50"><?php _e( 'Name', 'redirection' ); ?>:</th>
29
- <td><input size="40" class="regular-text" type="text" name="name" value=""/></td>
 
 
 
 
 
 
 
 
30
  </tr>
31
  <tr>
32
- <th width="50"></th>
33
  <td>
34
  <input class="button-primary" type="submit" name="add" value="<?php esc_attr_e( 'Add', 'redirection' ); ?>"/>
35
- <input type="hidden" name="module_id" value="<?php echo $module->get_id() ?>"/>
36
  </td>
37
  </tr>
38
  </table>
@@ -40,10 +49,13 @@
40
  </div>
41
 
42
  <script type="text/javascript">
43
- var redirection;
44
-
45
- jQuery(document).ready( function() {
46
- new Redirection_Items();
47
- new Redirection_Add( 'select[name=red_action]', '#target', '#add', true );
48
- });
 
 
 
49
  </script>
21
  <div class="wrap">
22
  <h2><?php _e( 'Add Group', 'redirection' ); ?></h2>
23
 
24
+ <p><?php _e( 'Use groups to organise your redirects. Groups are assigned to a module, which affects how the redirects in that group work. If you are unsure then stick to the WordPress module.', 'redirection' ); ?></p>
25
+
26
  <form action="" method="post" accept-charset="utf-8">
27
  <?php wp_nonce_field( 'redirection-add_group' ); ?>
28
  <table class="form-table">
29
  <tr>
30
+ <th style="width: 50px"><?php _e( 'Name', 'redirection' ); ?>:</th>
31
+ <td>
32
+ <input size="30" class="regular-text" type="text" name="name" value=""/>
33
+
34
+ <select name="module_id">
35
+ <?php foreach ( Red_Module::get_for_select() AS $module ) : ?>
36
+ <option value="<?php echo esc_attr( $module->get_id() ); ?>"><?php echo esc_html( $module->get_name() ); ?></option>
37
+ <?php endforeach; ?>
38
+ </select>
39
+ </td>
40
  </tr>
41
  <tr>
42
+ <th style="width: 50px"></th>
43
  <td>
44
  <input class="button-primary" type="submit" name="add" value="<?php esc_attr_e( 'Add', 'redirection' ); ?>"/>
 
45
  </td>
46
  </tr>
47
  </table>
49
  </div>
50
 
51
  <script type="text/javascript">
52
+ ( function( $ ) {
53
+ $( document ).ready( function() {
54
+ var items = new Redirection_Items( $ );
55
+ var adder = new Redirection_Add( $, '#target', true );
56
+
57
+ adder.setup( 'select[name=red_action]', '#add' );
58
+ items.setup( 'table.items' );
59
+ } );
60
+ } )( jQuery );
61
  </script>
view/{admin/head.php → head.php} RENAMED
File without changes
view/{admin/item_edit.php → item-edit.php} RENAMED
@@ -1,19 +1,27 @@
1
  <?php if ( !defined( 'ABSPATH' ) ) die( 'No direct access allowed' ); ?>
2
  <table class="edit" data-url="<?php echo admin_url( 'admin-ajax.php' ) ?>">
3
  <tr>
4
- <th width="100"><a target="_blank" href="<?php echo esc_url( $redirect->url ) ?>"><?php _e( 'Source URL', 'redirection' ); ?>:</a></th>
5
  <td>
6
- <input style="width: 85%" type="text" name="old" value="<?php echo esc_attr( $redirect->url ); ?>" id="original"/>
7
- <label><?php _e( 'Regex', 'redirection' ); ?>: <input type="checkbox" name="regex" <?php if ( $redirect->regex == true ) echo ' checked="checked"' ?>/></label>
8
 
9
  <a href="#" class="advanced-toggle">&#9881;</a>
10
  </td>
11
  </tr>
12
  <tr class="advanced">
13
- <th width="100"><?php _e ('Description', 'redirection'); ?>:</th>
14
  <td>
15
- <input style="width: 85%" type="text" name="title" value="<?php echo esc_attr( $redirect->title ); ?>"/>
16
- <span class="sub">(<?php _e( "optional", 'redirection' ); ?>)</span>
 
 
 
 
 
 
 
 
17
  </td>
18
  </tr>
19
 
@@ -27,10 +35,10 @@
27
  <input class="button-secondary" type="submit" name="cancel" value="<?php _e( 'Cancel', 'redirection' ); ?>"/>
28
 
29
  <input type="hidden" name="action" value="red_redirect_save"/>
30
- <input type="hidden" name="id" value="<?php echo esc_attr( $redirect->id ); ?>"/>
31
- <?php wp_nonce_field( 'redirection-redirect_save_'.$redirect->id ) ?>
32
 
33
- <span id="info_<?php echo esc_attr( $redirect->id ) ?>"></span>
34
  </div>
35
  <div class="table-loading">
36
  <div class="spinner"></div>
1
  <?php if ( !defined( 'ABSPATH' ) ) die( 'No direct access allowed' ); ?>
2
  <table class="edit" data-url="<?php echo admin_url( 'admin-ajax.php' ) ?>">
3
  <tr>
4
+ <th width="100"><a target="_blank" href="<?php echo esc_url( $redirect->get_url() ) ?>"><?php _e( 'Source URL', 'redirection' ); ?>:</a></th>
5
  <td>
6
+ <input style="width: 85%" type="text" name="old" value="<?php echo esc_attr( $redirect->get_url() ); ?>" id="original"/>
7
+ <label><?php _e( 'Regex', 'redirection' ); ?>: <input type="checkbox" name="regex" <?php if ( $redirect->is_regex() ) echo ' checked="checked"' ?>/></label>
8
 
9
  <a href="#" class="advanced-toggle">&#9881;</a>
10
  </td>
11
  </tr>
12
  <tr class="advanced">
13
+ <th width="100"><?php _e( 'Description', 'redirection' ); ?>:</th>
14
  <td>
15
+ <input style="width: 85%" type="text" name="title" value="<?php echo esc_attr( $redirect->get_title() ); ?>"/>
16
+ <span class="sub">(<?php _e( 'optional', 'redirection' ); ?>)</span>
17
+ </td>
18
+ </tr>
19
+ <tr class="advanced">
20
+ <th width="100"><?php _e( 'Group', 'redirection' ); ?>:</th>
21
+ <td>
22
+ <select name="group_id">
23
+ <?php echo $this->select( Red_Group::get_for_select(), $redirect->get_group_id() );?>
24
+ </select>
25
  </td>
26
  </tr>
27
 
35
  <input class="button-secondary" type="submit" name="cancel" value="<?php _e( 'Cancel', 'redirection' ); ?>"/>
36
 
37
  <input type="hidden" name="action" value="red_redirect_save"/>
38
+ <input type="hidden" name="id" value="<?php echo esc_attr( $redirect->get_id() ); ?>"/>
39
+ <?php wp_nonce_field( 'redirection-redirect_save_'.$redirect->get_id() ) ?>
40
 
41
+ <span id="info_<?php echo esc_attr( $redirect->get_id() ) ?>"></span>
42
  </div>
43
  <div class="table-loading">
44
  <div class="spinner"></div>
view/{admin/item_list.php → item-list.php} RENAMED
@@ -19,13 +19,16 @@
19
  <div style="clear: both"></div>
20
  </div>
21
 
22
- <?php $this->render( 'add', array( 'add_to_screen' => true, 'group' => $group ? $group->id : 0, 'hidden' => false ) ); ?>
23
 
24
  <script type="text/javascript">
25
- var redirection;
26
-
27
- jQuery(document).ready( function() {
28
- new Redirection_Items();
29
- new Redirection_Add( 'select[name=red_action]', '#target', '#add', true );
30
- });
 
 
 
31
  </script>
19
  <div style="clear: both"></div>
20
  </div>
21
 
22
+ <?php $this->render( 'add', array( 'add_to_screen' => true, 'group' => $group, 'hidden' => false ) ); ?>
23
 
24
  <script type="text/javascript">
25
+ ( function( $ ) {
26
+ $( document ).ready( function() {
27
+ var items = new Redirection_Items( $ );
28
+ var adder = new Redirection_Add( $, '#target', true );
29
+
30
+ adder.setup( 'select[name=red_action]', '#add' );
31
+ items.setup( 'table.items' );
32
+ } );
33
+ } )( jQuery );
34
  </script>
view/{admin/log.php → log.php} RENAMED
@@ -32,15 +32,16 @@
32
  <div style="clear: both"></div>
33
  </div>
34
 
35
- <?php $this->render ('add', array ('hidden' => true))?>
36
 
37
  <script type="text/javascript">
38
- var redirection;
39
-
40
- (function($) {
41
- $(document).ready( function() {
42
- new Redirection_Logs();
43
- new Redirection_Add( 'select[name=red_action]', '#target', '#add', false );
44
- });
45
- })(jQuery);
 
46
  </script>
32
  <div style="clear: both"></div>
33
  </div>
34
 
35
+ <?php $this->render( 'add', array( 'hidden' => true ) )?>
36
 
37
  <script type="text/javascript">
38
+ ( function( $ ) {
39
+ $( document ).ready( function() {
40
+ var logs = new Redirection_Logs( $, '#add', '#added', '#old' );
41
+ var adder = new Redirection_Add( $, '#target', false );
42
+
43
+ adder.setup( 'select[name=red_action]', '#add' );
44
+ logs.setup( '.add-log' );
45
+ } );
46
+ } )( jQuery );
47
  </script>
view/{admin/module_edit.php → module-edit.php} RENAMED
@@ -1,24 +1,25 @@
1
- <?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?>
 
2
  <table class="edit" data-url="<?php echo admin_url( 'admin-ajax.php' ) ?>">
3
- <tr>
4
- <th width="70"><?php _e ('Name', 'redirection'); ?>:</th>
5
- <td><input style="width: 95%" type="text" name="name" value="<?php echo esc_attr( $module->get_name() ) ?>"/></td>
6
- </tr>
7
 
8
- <?php $module->config(); ?>
9
 
10
  <tr>
11
  <th width="70"></th>
12
  <td>
13
  <div class="table-actions">
14
- <input class="button-primary" type="submit" name="save" value="<?php _e ('Save', 'redirection'); ?>"/>
15
- <input class="button-secondary" type="submit" name="cancel" value="<?php _e ('Cancel', 'redirection'); ?>"/>
16
 
17
  <input type="hidden" name="action" value="red_module_save"/>
18
  <input type="hidden" name="id" value="<?php echo esc_attr( $module->get_id() ); ?>"/>
 
19
  <?php wp_nonce_field( 'red_module_save_'.$module->get_id() ) ?>
20
  </div>
21
 
 
 
22
  <div class="table-loading">
23
  <div class="spinner"></div>
24
  </div>
1
+ <?php if ( !defined( 'ABSPATH' ) ) die( 'No direct access allowed' ); ?>
2
+
3
  <table class="edit" data-url="<?php echo admin_url( 'admin-ajax.php' ) ?>">
4
+ <p><?php echo esc_html( $module->get_name() ); ?></p>
 
 
 
5
 
6
+ <?php $module->render_config(); ?>
7
 
8
  <tr>
9
  <th width="70"></th>
10
  <td>
11
  <div class="table-actions">
12
+ <input class="button-primary" type="submit" name="save" value="<?php _e( 'Save', 'redirection' ); ?>"/>
13
+ <input class="button-secondary" type="submit" name="cancel" value="<?php _e( 'Cancel', 'redirection' ); ?>"/>
14
 
15
  <input type="hidden" name="action" value="red_module_save"/>
16
  <input type="hidden" name="id" value="<?php echo esc_attr( $module->get_id() ); ?>"/>
17
+
18
  <?php wp_nonce_field( 'red_module_save_'.$module->get_id() ) ?>
19
  </div>
20
 
21
+ <div class="error-container">An error</div>
22
+
23
  <div class="table-loading">
24
  <div class="spinner"></div>
25
  </div>
view/{admin/module_list.php → module-list.php} RENAMED
@@ -12,7 +12,11 @@
12
  </div>
13
 
14
  <script type="text/javascript">
15
- jQuery(document ).ready( function() {
16
- new Redirection_Items();
17
- } );
 
 
 
 
18
  </script>
12
  </div>
13
 
14
  <script type="text/javascript">
15
+ ( function( $ ) {
16
+ $( document ).ready( function() {
17
+ var items = new Redirection_Items( $ );
18
+
19
+ items.setup( 'table.items' );
20
+ } );
21
+ } )( jQuery );
22
  </script>
view/{admin/options.php → options.php} RENAMED
@@ -71,7 +71,7 @@ $expiry = array(
71
  <td>
72
  <input type="text" name="auto_target" style="width: 65%" value="<?php echo esc_attr( $options['auto_target'] ) ?>"/>
73
  <br/>
74
- <span class="sub"><?php _e( 'This will be used to auto-generate a URL if no URL is given. You can use the special tags $dec$ or $hex$ to have a unique ID inserted (either decimal or hex)', 'redirection' ); ?></span>
75
  </td>
76
  </tr>
77
  </table>
@@ -84,7 +84,7 @@ $expiry = array(
84
  <div class="wrap">
85
  <h2><?php _e( 'Import', 'redirection' ); ?></h2>
86
 
87
- <p><?php _e( 'Here you can import redirections from an existing .htaccess file, or a CSV file.', 'redirection' ); ?></p>
88
 
89
  <form action="" method="post" accept-charset="utf-8" enctype="multipart/form-data">
90
  <?php wp_nonce_field( 'redirection-import' ); ?>
71
  <td>
72
  <input type="text" name="auto_target" style="width: 65%" value="<?php echo esc_attr( $options['auto_target'] ) ?>"/>
73
  <br/>
74
+ <span class="sub"><?php _e( 'This will be used to auto-generate a URL if no URL is given. You can use the special tags <code>$dec$</code> or <code>$hex$</code> to have a unique ID inserted (either decimal or hex)', 'redirection' ); ?></span>
75
  </td>
76
  </tr>
77
  </table>
84
  <div class="wrap">
85
  <h2><?php _e( 'Import', 'redirection' ); ?></h2>
86
 
87
+ <p><?php _e( 'Here you can import redirections from an existing <code>.htaccess</code> file, or a CSV file.', 'redirection' ); ?></p>
88
 
89
  <form action="" method="post" accept-charset="utf-8" enctype="multipart/form-data">
90
  <?php wp_nonce_field( 'redirection-import' ); ?>
view/{admin/submenu.php → submenu.php} RENAMED
File without changes
view/{admin/support.php → support.php} RENAMED
File without changes