Index: civicrm/trunk/sites/all/modules/devel/devel_node_access.info |
— | — | @@ -4,9 +4,9 @@ |
5 | 5 | package = Development |
6 | 6 | core = 6.x |
7 | 7 | |
8 | | -; Information added by drupal.org packaging script on 2009-08-19 |
9 | | -version = "6.x-1.17" |
| 8 | +; Information added by drupal.org packaging script on 2010-08-04 |
| 9 | +version = "6.x-1.21" |
10 | 10 | core = "6.x" |
11 | 11 | project = "devel" |
12 | | -datestamp = "1250713853" |
| 12 | +datestamp = "1280961078" |
13 | 13 | |
Index: civicrm/trunk/sites/all/modules/devel/README_devel_node_access.txt |
— | — | @@ -15,8 +15,14 @@ |
16 | 16 | |
17 | 17 | Provides a block which shows all node_access entries for the nodes |
18 | 18 | shown on a given page. This gives developers a quick check to see |
19 | | -that grants are provided as they should be. This block auto-enables to the footer region. You may move it as desired. |
| 19 | +that grants are provided as they should be. This block auto-enables |
| 20 | +to the footer region. You may move it as desired. If you enable DBA |
| 21 | +Debug Mode on the Devel Settings page, you will get more information. |
20 | 22 | |
| 23 | +Provides a second block that shows and explains the CRUD access rights |
| 24 | +of the 10 most recently active users. This block is disabled by default |
| 25 | +because it has a huge overhead. |
| 26 | + |
21 | 27 | If Views module is installed, allows browsing of nodes by realm, |
22 | 28 | including those nodes not in the node_access table (NULL realm). |
23 | 29 | |
— | — | @@ -35,7 +41,9 @@ |
36 | 42 | of grants. I personally use node_access only for view grants so I'm |
37 | 43 | not sure exactly what else it should show. |
38 | 44 | |
39 | | -AUTHOR |
40 | | -====== |
| 45 | +STAFF |
| 46 | +===== |
41 | 47 | |
42 | | -Dave Cohen AKA yogadex on drupal.org |
| 48 | +Original author: Dave Cohen AKA yogadex on drupal.org |
| 49 | +Current maintainer: Hans Salvisberg AKA salvis on drupal.org |
| 50 | + |
Index: civicrm/trunk/sites/all/modules/devel/translations/devel.pot |
— | — | @@ -1,32 +1,31 @@ |
2 | | -# $Id: devel.pot,v 1.2.2.1 2008/12/21 15:20:01 hass Exp $ |
| 2 | +# $Id: devel.pot,v 1.2.2.3 2009/09/05 01:43:19 salvis Exp $ |
3 | 3 | # |
4 | 4 | # LANGUAGE translation of Drupal (general) |
5 | 5 | # Copyright YEAR NAME <EMAIL@ADDRESS> |
6 | 6 | # Generated from files: |
7 | | -# devel_generate.inc,v 1.14.2.9 2008/11/14 14:35:01 weitzman |
8 | | -# devel_generate_batch.inc,v 1.1.2.4 2008/11/07 20:37:51 weitzman |
9 | | -# devel.module,v 1.258.2.40 2008/12/16 23:51:58 weitzman |
10 | | -# devel_generate.module,v 1.11.2.6 2008/09/18 17:00:28 weitzman |
11 | | -# devel_node_access.module,v 1.15.2.10 2008/11/07 00:48:27 salvis |
12 | | -# performance.module,v 1.2.2.3 2008/10/21 17:15:40 kbahey |
| 7 | +# devel_generate.inc,v 1.14.2.14 2009/06/09 03:22:39 weitzman |
| 8 | +# devel_generate_batch.inc,v 1.1.2.5 2009/02/02 21:00:52 drewish |
| 9 | +# devel.module,v 1.258.2.55 2009/08/19 20:16:09 weitzman |
| 10 | +# devel_generate.module,v 1.11.2.13 2009/07/03 00:30:31 weitzman |
| 11 | +# devel_node_access.module,v 1.15.2.16 2009/09/05 00:52:09 salvis |
| 12 | +# performance.module,v 1.2.2.26 2009/08/10 15:32:04 kbahey |
13 | 13 | # devel_node_access.info,v 1.7.2.1 2008/05/17 03:49:30 weitzman |
14 | 14 | # devel_themer.module: n/a |
15 | | -# macro.module,v 1.4.2.2 2008/06/13 03:11:21 weitzman |
16 | | -# devel.install,v 1.24.2.5 2008/12/14 06:25:21 dww |
| 15 | +# devel.install,v 1.24.2.7 2009/07/30 19:38:48 weitzman |
17 | 16 | # devel.info,v 1.5.2.1 2008/06/13 03:25:20 weitzman |
18 | 17 | # devel_generate.info,v 1.5.2.1 2008/05/17 03:49:30 weitzman |
19 | 18 | # devel_themer.info,v 1.3.2.1 2008/09/23 03:13:50 weitzman |
20 | | -# macro.info,v 1.4 2008/01/15 04:02:28 weitzman |
21 | 19 | # performance.info,v 1.2 2008/10/20 20:29:18 kbahey |
22 | 20 | # devel_themer.install: n/a |
23 | 21 | # generate-og-users.php,v 1.3 2006/06/11 00:43:25 killes |
24 | 22 | # generate-og2list-mail.php,v 1.4 2006/06/27 21:51:29 killes |
| 23 | +# performance.install,v 1.1.4.8 2009/08/07 15:49:07 kbahey |
25 | 24 | # |
26 | 25 | #, fuzzy |
27 | 26 | msgid "" |
28 | 27 | msgstr "" |
29 | 28 | "Project-Id-Version: PROJECT VERSION\n" |
30 | | -"POT-Creation-Date: 2008-12-21 15:48+0100\n" |
| 29 | +"POT-Creation-Date: 2009-09-05 03:40+0200\n" |
31 | 30 | "PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n" |
32 | 31 | "Last-Translator: NAME <EMAIL@ADDRESS>\n" |
33 | 32 | "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n" |
— | — | @@ -39,34 +38,44 @@ |
40 | 39 | msgid "Users deleted." |
41 | 40 | msgstr "" |
42 | 41 | |
43 | | -#: devel_generate.inc:32 |
| 42 | +#: devel_generate.inc:37 |
44 | 43 | msgid "!num_users created." |
45 | 44 | msgstr "" |
46 | 45 | |
47 | | -#: devel_generate.inc:181 |
| 46 | +#: devel_generate.inc:187 |
48 | 47 | msgid "Deleted taxonomy." |
49 | 48 | msgstr "" |
50 | 49 | |
51 | | -#: devel_generate.inc:186 |
| 50 | +#: devel_generate.inc:192 |
52 | 51 | msgid "Created the following new vocabularies: !vocs" |
53 | 52 | msgstr "" |
54 | 53 | |
55 | | -#: devel_generate.inc:191 |
| 54 | +#: devel_generate.inc:197 |
56 | 55 | msgid "Created the following new terms: !terms" |
57 | 56 | msgstr "" |
58 | 57 | |
59 | | -#: devel_generate.inc:32 |
| 58 | +#: devel_generate.inc:253 |
| 59 | +msgid ". This type contains CCK fields which will only be populated by fields that implement the content_generate hook." |
| 60 | +msgstr "" |
| 61 | + |
| 62 | +#: devel_generate.inc:37 |
60 | 63 | msgid "1 user" |
61 | 64 | msgid_plural "@count users" |
62 | 65 | msgstr[0] "" |
63 | 66 | msgstr[1] "" |
64 | 67 | |
65 | | -#: devel_generate.inc:58 |
| 68 | +#: devel_generate.inc:63 |
66 | 69 | msgid "1 node created." |
67 | 70 | msgid_plural "@count nodes created" |
68 | 71 | msgstr[0] "" |
69 | 72 | msgstr[1] "" |
70 | 73 | |
| 74 | +#: devel_generate.inc:431 |
| 75 | +msgid "Deleted one post" |
| 76 | +msgid_plural "Deleted @count posts" |
| 77 | +msgstr[0] "" |
| 78 | +msgstr[1] "" |
| 79 | + |
71 | 80 | #: devel_generate_batch.inc:31 |
72 | 81 | msgid "Generating Content" |
73 | 82 | msgstr "" |
— | — | @@ -103,381 +112,393 @@ |
104 | 113 | msgid "Enable Theme developer" |
105 | 114 | msgstr "" |
106 | 115 | |
107 | | -#: devel.module:297 |
| 116 | +#: devel.module:304 |
108 | 117 | msgid "Invalid file path" |
109 | 118 | msgstr "" |
110 | 119 | |
111 | | -#: devel.module:469;508;153 |
| 120 | +#: devel.module:365 |
| 121 | +msgid "The theme registry is being rebuilt on every request. Remember to <a href=\"!url\">turn off</a> this feature on production websites." |
| 122 | +msgstr "" |
| 123 | + |
| 124 | +#: devel.module:508;549;153 |
112 | 125 | msgid "Switch user" |
113 | 126 | msgstr "" |
114 | 127 | |
115 | | -#: devel.module:471;498 |
| 128 | +#: devel.module:510;537 |
116 | 129 | msgid "Execute PHP" |
117 | 130 | msgstr "" |
118 | 131 | |
119 | | -#: devel.module:477 |
| 132 | +#: devel.module:516 |
120 | 133 | msgid "Number of users to display in the list" |
121 | 134 | msgstr "" |
122 | 135 | |
123 | | -#: devel.module:539 |
| 136 | +#: devel.module:582 |
124 | 137 | msgid "This user can switch back." |
125 | 138 | msgstr "" |
126 | 139 | |
127 | | -#: devel.module:546 |
| 140 | +#: devel.module:595 |
128 | 141 | msgid "Caution: this user will be unable switch back." |
129 | 142 | msgstr "" |
130 | 143 | |
131 | | -#: devel.module:561 |
| 144 | +#: devel.module:611 |
132 | 145 | msgid "Enter username" |
133 | 146 | msgstr "" |
134 | 147 | |
135 | | -#: devel.module:568 |
| 148 | +#: devel.module:618 |
136 | 149 | msgid "Switch" |
137 | 150 | msgstr "" |
138 | 151 | |
139 | | -#: devel.module:578 |
| 152 | +#: devel.module:628 |
140 | 153 | msgid "Enter function name for api lookup" |
141 | 154 | msgstr "" |
142 | 155 | |
143 | | -#: devel.module:585;1179 |
| 156 | +#: devel.module:635;1238 |
144 | 157 | msgid "Submit" |
145 | 158 | msgstr "" |
146 | 159 | |
147 | | -#: devel.module:599 |
| 160 | +#: devel.module:649 |
148 | 161 | msgid "Username not found" |
149 | 162 | msgstr "" |
150 | 163 | |
151 | | -#: devel.module:878 |
| 164 | +#: devel.module:930 |
152 | 165 | msgid "Query log" |
153 | 166 | msgstr "" |
154 | 167 | |
155 | | -#: devel.module:880 |
| 168 | +#: devel.module:932 |
156 | 169 | msgid "Collect query info. If disabled, no query log functionality will work." |
157 | 170 | msgstr "" |
158 | 171 | |
159 | | -#: devel.module:882 |
| 172 | +#: devel.module:934 |
160 | 173 | msgid "You must disable or upgrade the php Zend Optimizer extension in order to enable this feature. The minimum required version is 3.2.8. Earlier versions of Zend Optimizer are <a href=\"!url\">horribly buggy and segfault your Apache</a> ... " |
161 | 174 | msgstr "" |
162 | 175 | |
163 | | -#: devel.module:885 |
| 176 | +#: devel.module:937 |
164 | 177 | msgid "Collect query info" |
165 | 178 | msgstr "" |
166 | 179 | |
167 | | -#: devel.module:892 |
| 180 | +#: devel.module:944 |
168 | 181 | msgid "Display query log" |
169 | 182 | msgstr "" |
170 | 183 | |
171 | | -#: devel.module:894 |
| 184 | +#: devel.module:946 |
172 | 185 | msgid "Display a log of the database queries needed to generate the current page, and the execution time for each. Also, queries which are repeated during a single page view are summed in the # column, and printed in red since they are candidates for caching." |
173 | 186 | msgstr "" |
174 | 187 | |
175 | | -#: devel.module:896 |
| 188 | +#: devel.module:948 |
176 | 189 | msgid "Sort query log" |
177 | 190 | msgstr "" |
178 | 191 | |
179 | | -#: devel.module:898 |
| 192 | +#: devel.module:950 |
180 | 193 | msgid "by source" |
181 | 194 | msgstr "" |
182 | 195 | |
183 | | -#: devel.module:898 |
| 196 | +#: devel.module:950 |
184 | 197 | msgid "by duration" |
185 | 198 | msgstr "" |
186 | 199 | |
187 | | -#: devel.module:899 |
| 200 | +#: devel.module:951 |
188 | 201 | msgid "The query table can be sorted in the order that the queries were executed or by descending duration." |
189 | 202 | msgstr "" |
190 | 203 | |
191 | | -#: devel.module:902 |
| 204 | +#: devel.module:954 |
192 | 205 | msgid "Slow query highlighting" |
193 | 206 | msgstr "" |
194 | 207 | |
195 | | -#: devel.module:906 |
| 208 | +#: devel.module:958 |
196 | 209 | msgid "Enter an integer in milliseconds. Any query which takes longer than this many milliseconds will be highlighted in the query log. This indicates a possibly inefficient query, or a candidate for caching." |
197 | 210 | msgstr "" |
198 | 211 | |
199 | | -#: devel.module:909 |
| 212 | +#: devel.module:961 |
200 | 213 | msgid "Store executed queries" |
201 | 214 | msgstr "" |
202 | 215 | |
203 | | -#: devel.module:911 |
| 216 | +#: devel.module:963 |
204 | 217 | msgid "Store statistics about executed queries. See the devel_x tables." |
205 | 218 | msgstr "" |
206 | 219 | |
207 | | -#: devel.module:913 |
| 220 | +#: devel.module:965 |
208 | 221 | msgid "Sampling interval" |
209 | 222 | msgstr "" |
210 | 223 | |
211 | | -#: devel.module:916 |
| 224 | +#: devel.module:968 |
212 | 225 | msgid "If storing query statistics, only store every nth page view. 1 means every page view, 2 every second, and so on." |
213 | 226 | msgstr "" |
214 | 227 | |
215 | | -#: devel.module:919 |
| 228 | +#: devel.module:971 |
216 | 229 | msgid "API Site" |
217 | 230 | msgstr "" |
218 | 231 | |
219 | | -#: devel.module:921 |
| 232 | +#: devel.module:973 |
220 | 233 | msgid "The base URL for your developer documentation links. You might change this if you run <a href=\"!url\">api.module</a> locally." |
221 | 234 | msgstr "" |
222 | 235 | |
223 | | -#: devel.module:923 |
| 236 | +#: devel.module:975 |
224 | 237 | msgid "Display page timer" |
225 | 238 | msgstr "" |
226 | 239 | |
227 | | -#: devel.module:925 |
| 240 | +#: devel.module:977 |
228 | 241 | msgid "Display page execution time in the query log box." |
229 | 242 | msgstr "" |
230 | 243 | |
231 | | -#: devel.module:928 |
| 244 | +#: devel.module:980 |
232 | 245 | msgid "Display memory usage" |
233 | 246 | msgstr "" |
234 | 247 | |
235 | | -#: devel.module:930 |
| 248 | +#: devel.module:982 |
236 | 249 | msgid "Display how much memory is used to generate the current page. This will show memory usage when devel_init() is called and when devel_exit() is called. PHP must have been compiled with the <em>--enable-memory-limit</em> configuration option for this feature to work." |
237 | 250 | msgstr "" |
238 | 251 | |
239 | | -#: devel.module:933 |
| 252 | +#: devel.module:985 |
240 | 253 | msgid "Display redirection page" |
241 | 254 | msgstr "" |
242 | 255 | |
243 | | -#: devel.module:935 |
| 256 | +#: devel.module:987 |
244 | 257 | msgid "When a module executes drupal_goto(), the query log and other developer information is lost. Enabling this setting presents an intermediate page to developers so that the log can be examined before continuing to the destination page." |
245 | 258 | msgstr "" |
246 | 259 | |
247 | | -#: devel.module:938 |
| 260 | +#: devel.module:990 |
248 | 261 | msgid "Display form element keys and weights" |
249 | 262 | msgstr "" |
250 | 263 | |
251 | | -#: devel.module:940 |
| 264 | +#: devel.module:992 |
252 | 265 | msgid "Form element names are needed for performing themeing or altering a form. Their weights determine the position of the element. Enabling this setting will show these keys and weights beside each form item." |
253 | 266 | msgstr "" |
254 | 267 | |
255 | | -#: devel.module:943 |
| 268 | +#: devel.module:995 |
256 | 269 | msgid "Error handler" |
257 | 270 | msgstr "" |
258 | 271 | |
259 | | -#: devel.module:945 |
| 272 | +#: devel.module:997 |
260 | 273 | msgid "None" |
261 | 274 | msgstr "" |
262 | 275 | |
263 | | -#: devel.module:945 |
| 276 | +#: devel.module:997 |
264 | 277 | msgid "Standard drupal" |
265 | 278 | msgstr "" |
266 | 279 | |
267 | | -#: devel.module:946 |
| 280 | +#: devel.module:998 |
268 | 281 | msgid "Choose an error handler for your site. <em>Backtrace</em> prints nice debug information when an error is noticed, and you !choose. <strong>Backtrace requires the <a href=\"!krumo\">krumo library</a></strong>. <em>None</em> is a good option when stepping through the site in your debugger." |
269 | 282 | msgstr "" |
270 | 283 | |
271 | | -#: devel.module:946 |
| 284 | +#: devel.module:998 |
272 | 285 | msgid "choose to show errors on screen" |
273 | 286 | msgstr "" |
274 | 287 | |
275 | | -#: devel.module:949 |
| 288 | +#: devel.module:1001 |
276 | 289 | msgid "Backtrace" |
277 | 290 | msgstr "" |
278 | 291 | |
279 | | -#: devel.module:955 |
280 | | -msgid "Krumo skin" |
| 292 | +#: devel.module:1007 |
| 293 | +msgid "Krumo display" |
281 | 294 | msgstr "" |
282 | 295 | |
283 | | -#: devel.module:956 |
284 | | -msgid "Select a skin for your debug messages" |
| 296 | +#: devel.module:1008 |
| 297 | +msgid "Select a skin for your debug messages or select <em>disabled</em> to display object and array output in standard PHP format." |
285 | 298 | msgstr "" |
286 | 299 | |
287 | | -#: devel.module:966 |
| 300 | +#: devel.module:1018 |
288 | 301 | msgid "Default" |
289 | 302 | msgstr "" |
290 | 303 | |
291 | | -#: devel.module:967 |
| 304 | +#: devel.module:1019 |
292 | 305 | msgid "Log only" |
293 | 306 | msgstr "" |
294 | 307 | |
295 | | -#: devel.module:970 |
| 308 | +#: devel.module:1022 |
296 | 309 | msgid "Other (!library)" |
297 | 310 | msgstr "" |
298 | 311 | |
299 | | -#: devel.module:974 |
| 312 | +#: devel.module:1026 |
300 | 313 | msgid "SMTP library" |
301 | 314 | msgstr "" |
302 | 315 | |
303 | | -#: devel.module:1000 |
| 316 | +#: devel.module:1033 |
| 317 | +msgid "Rebuild the theme registry on every page load" |
| 318 | +msgstr "" |
| 319 | + |
| 320 | +#: devel.module:1034 |
| 321 | +msgid "While creating new templates and theme_ overrides the theme registry needs to be rebuilt." |
| 322 | +msgstr "" |
| 323 | + |
| 324 | +#: devel.module:1059 |
304 | 325 | msgid "PHP code to execute" |
305 | 326 | msgstr "" |
306 | 327 | |
307 | | -#: devel.module:1001 |
| 328 | +#: devel.module:1060 |
308 | 329 | msgid "Enter some code. Do not use <code><?php ?></code> tags." |
309 | 330 | msgstr "" |
310 | 331 | |
311 | | -#: devel.module:1003 |
| 332 | +#: devel.module:1062 |
312 | 333 | msgid "Execute" |
313 | 334 | msgstr "" |
314 | 335 | |
315 | | -#: devel.module:1023 |
| 336 | +#: devel.module:1082 |
316 | 337 | msgid "The menu router has been rebuilt." |
317 | 338 | msgstr "" |
318 | 339 | |
319 | | -#: devel.module:1038 |
| 340 | +#: devel.module:1097 |
320 | 341 | msgid "Uninstall and then install the selected modules. <code>hook_uninstall()</code> and <code>hook_install()</code> will be executed and the schema version number will be set to the most recent update number. You may have to manually clear out any existing tables first if the module doesn't implement <code>hook_uninstall()</code>." |
321 | 342 | msgstr "" |
322 | 343 | |
323 | | -#: devel.module:1041 |
| 344 | +#: devel.module:1100 |
324 | 345 | msgid "Reinstall" |
325 | 346 | msgstr "" |
326 | 347 | |
327 | | -#: devel.module:1045 |
| 348 | +#: devel.module:1104 |
328 | 349 | msgid "Warning - will delete your module tables and variables." |
329 | 350 | msgstr "" |
330 | 351 | |
331 | | -#: devel.module:1064 |
| 352 | +#: devel.module:1123 |
332 | 353 | msgid "Uninstalled and installed the %name module." |
333 | 354 | msgstr "" |
334 | 355 | |
335 | | -#: devel.module:1087;1143 |
| 356 | +#: devel.module:1146;1202 |
336 | 357 | msgid "Name" |
337 | 358 | msgstr "" |
338 | 359 | |
339 | | -#: devel.module:1088;1144 |
| 360 | +#: devel.module:1147;1203 |
340 | 361 | msgid "Value" |
341 | 362 | msgstr "" |
342 | 363 | |
343 | | -#: devel.module:1089;1145 |
| 364 | +#: devel.module:1148;1204 |
344 | 365 | msgid "Length" |
345 | 366 | msgstr "" |
346 | 367 | |
347 | | -#: devel.module:1090;1146 |
| 368 | +#: devel.module:1149;1205 |
348 | 369 | msgid "Operations" |
349 | 370 | msgstr "" |
350 | 371 | |
351 | | -#: devel.module:1118 |
| 372 | +#: devel.module:1177 |
352 | 373 | msgid "edit" |
353 | 374 | msgstr "" |
354 | 375 | |
355 | | -#: devel.module:1123 |
| 376 | +#: devel.module:1182 |
356 | 377 | msgid "Delete" |
357 | 378 | msgstr "" |
358 | 379 | |
359 | | -#: devel.module:1168 |
| 380 | +#: devel.module:1227 |
360 | 381 | msgid "Old value" |
361 | 382 | msgstr "" |
362 | 383 | |
363 | | -#: devel.module:1174;1186 |
| 384 | +#: devel.module:1233;1245 |
364 | 385 | msgid "New value" |
365 | 386 | msgstr "" |
366 | 387 | |
367 | | -#: devel.module:1187 |
| 388 | +#: devel.module:1246 |
368 | 389 | msgid "Sorry, complex variable types may not be edited yet. Use the <em>Execute PHP</em> block and the <a href=\"@variable-set-doc\">variable_set()</a> function." |
369 | 390 | msgstr "" |
370 | 391 | |
371 | | -#: devel.module:1196 |
| 392 | +#: devel.module:1255 |
372 | 393 | msgid "Saved new value for %name." |
373 | 394 | msgstr "" |
374 | 395 | |
375 | | -#: devel.module:1206 |
| 396 | +#: devel.module:1265 |
376 | 397 | msgid "Session name" |
377 | 398 | msgstr "" |
378 | 399 | |
379 | | -#: devel.module:1206 |
| 400 | +#: devel.module:1265 |
380 | 401 | msgid "Session ID" |
381 | 402 | msgstr "" |
382 | 403 | |
383 | | -#: devel.module:1303 |
| 404 | +#: devel.module:1362 |
384 | 405 | msgid "Display of !type !obj" |
385 | 406 | msgstr "" |
386 | 407 | |
387 | | -#: devel.module:1375 |
| 408 | +#: devel.module:1434 |
388 | 409 | msgid "{empty}" |
389 | 410 | msgstr "" |
390 | 411 | |
391 | | -#: devel.module:1389 |
| 412 | +#: devel.module:1448 |
392 | 413 | msgid "TRUE" |
393 | 414 | msgstr "" |
394 | 415 | |
395 | | -#: devel.module:1389 |
| 416 | +#: devel.module:1448 |
396 | 417 | msgid "FALSE" |
397 | 418 | msgstr "" |
398 | 419 | |
399 | | -#: devel.module:1518 |
| 420 | +#: devel.module:1630 |
400 | 421 | msgid "The file could not be written." |
401 | 422 | msgstr "" |
402 | 423 | |
403 | | -#: devel.module:1682 |
| 424 | +#: devel.module:1794 |
404 | 425 | msgid "Total (ms)" |
405 | 426 | msgstr "" |
406 | 427 | |
407 | | -#: devel.module:1683 |
| 428 | +#: devel.module:1795 |
408 | 429 | msgid "Average (ms)" |
409 | 430 | msgstr "" |
410 | 431 | |
411 | | -#: devel.module:1684 |
| 432 | +#: devel.module:1796 |
412 | 433 | msgid "Std deviation (ms)" |
413 | 434 | msgstr "" |
414 | 435 | |
415 | | -#: devel.module:1685 |
| 436 | +#: devel.module:1797 |
416 | 437 | msgid "Count" |
417 | 438 | msgstr "" |
418 | 439 | |
419 | | -#: devel.module:1686 |
| 440 | +#: devel.module:1798 |
420 | 441 | msgid "Function" |
421 | 442 | msgstr "" |
422 | 443 | |
423 | | -#: devel.module:1687 |
| 444 | +#: devel.module:1799 |
424 | 445 | msgid "Query" |
425 | 446 | msgstr "" |
426 | 447 | |
427 | | -#: devel.module:1710 |
| 448 | +#: devel.module:1822 |
428 | 449 | msgid "Delete collected query statistics" |
429 | 450 | msgstr "" |
430 | 451 | |
431 | | -#: devel.module:1718 |
| 452 | +#: devel.module:1830 |
432 | 453 | msgid "Stored query statistics deleted." |
433 | 454 | msgstr "" |
434 | 455 | |
435 | | -#: devel.module:453 |
| 456 | +#: devel.module:492 |
436 | 457 | msgid "php" |
437 | 458 | msgstr "" |
438 | 459 | |
439 | | -#: devel.module:453 |
| 460 | +#: devel.module:492 |
440 | 461 | msgid "%message in %file on line %line." |
441 | 462 | msgstr "" |
442 | 463 | |
443 | | -#: devel.module:1662;0 |
| 464 | +#: devel.module:1774 |
444 | 465 | msgid "devel" |
445 | 466 | msgstr "" |
446 | 467 | |
447 | | -#: devel.module:1662 |
| 468 | +#: devel.module:1774 |
448 | 469 | msgid "Mail sent:<br />Id: %mail_id<br />To: %to<br />From: %from<br />Language: %lang<br />Subject: %subject<br />Body: %body<br /><br />Additional headers: <br />!header" |
449 | 470 | msgstr "" |
450 | 471 | |
451 | | -#: devel.module:1157 |
| 472 | +#: devel.module:1216 |
452 | 473 | msgid "One variable deleted." |
453 | 474 | msgid_plural "@count variables deleted." |
454 | 475 | msgstr[0] "" |
455 | 476 | msgstr[1] "" |
456 | 477 | |
457 | | -#: devel.module:1381 |
| 478 | +#: devel.module:1440 |
458 | 479 | msgid "1 character" |
459 | 480 | msgid_plural "@count characters" |
460 | 481 | msgstr[0] "" |
461 | 482 | msgstr[1] "" |
462 | 483 | |
463 | | -#: devel.module:1386 |
| 484 | +#: devel.module:1445 |
464 | 485 | msgid "1 element" |
465 | 486 | msgid_plural "@count elements" |
466 | 487 | msgstr[0] "" |
467 | 488 | msgstr[1] "" |
468 | 489 | |
469 | | -#: devel.module:461 |
| 490 | +#: devel.module:500 |
470 | 491 | msgid "access devel information" |
471 | 492 | msgstr "" |
472 | 493 | |
473 | | -#: devel.module:461 |
| 494 | +#: devel.module:500 |
474 | 495 | msgid "execute php code" |
475 | 496 | msgstr "" |
476 | 497 | |
477 | | -#: devel.module:461 |
| 498 | +#: devel.module:500 |
478 | 499 | msgid "switch users" |
479 | 500 | msgstr "" |
480 | 501 | |
481 | | -#: devel.module:461 |
| 502 | +#: devel.module:500 |
482 | 503 | msgid "display source code" |
483 | 504 | msgstr "" |
484 | 505 | |
— | — | @@ -605,11 +626,11 @@ |
606 | 627 | msgid "Delete all users (except user id 1) before generating new users." |
607 | 628 | msgstr "" |
608 | 629 | |
609 | | -#: devel_generate.module:62;123 |
| 630 | +#: devel_generate.module:62;108 |
610 | 631 | msgid "Now" |
611 | 632 | msgstr "" |
612 | 633 | |
613 | | -#: devel_generate.module:64;125 |
| 634 | +#: devel_generate.module:64;110 |
614 | 635 | msgid "ago" |
615 | 636 | msgstr "" |
616 | 637 | |
— | — | @@ -621,83 +642,83 @@ |
622 | 643 | msgid "User ages will be distributed randomly from the current time, back to the selected time." |
623 | 644 | msgstr "" |
624 | 645 | |
625 | | -#: devel_generate.module:76;172;216 |
| 646 | +#: devel_generate.module:76;163;207 |
626 | 647 | msgid "Do it!" |
627 | 648 | msgstr "" |
628 | 649 | |
629 | 650 | #: devel_generate.module:92 |
630 | | -msgid ". This type contains CCK fields which will only be populated by fields that implement the content_generate hook." |
631 | | -msgstr "" |
632 | | - |
633 | | -#: devel_generate.module:107 |
634 | 651 | msgid "Which node types do you want to create?" |
635 | 652 | msgstr "" |
636 | 653 | |
637 | | -#: devel_generate.module:113 |
| 654 | +#: devel_generate.module:98 |
638 | 655 | msgid "<strong>Delete all content</strong> in these node types before generating new content." |
639 | 656 | msgstr "" |
640 | 657 | |
641 | | -#: devel_generate.module:118 |
| 658 | +#: devel_generate.module:103 |
642 | 659 | msgid "How many nodes would you like to generate?" |
643 | 660 | msgstr "" |
644 | 661 | |
645 | | -#: devel_generate.module:129 |
| 662 | +#: devel_generate.module:114 |
646 | 663 | msgid "How far back in time should the nodes be dated?" |
647 | 664 | msgstr "" |
648 | 665 | |
649 | | -#: devel_generate.module:130 |
| 666 | +#: devel_generate.module:115 |
650 | 667 | msgid "Node creation dates will be distributed randomly from the current time, back to the selected time." |
651 | 668 | msgstr "" |
652 | 669 | |
653 | | -#: devel_generate.module:137 |
654 | | -msgid "How many comments per node would you like to generate?" |
| 670 | +#: devel_generate.module:122 |
| 671 | +msgid "Maximum number of generated comments per node" |
655 | 672 | msgstr "" |
656 | 673 | |
657 | | -#: devel_generate.module:138 |
| 674 | +#: devel_generate.module:123 |
658 | 675 | msgid "You must also enable comments for the node types you are generating." |
659 | 676 | msgstr "" |
660 | 677 | |
661 | | -#: devel_generate.module:145 |
| 678 | +#: devel_generate.module:130 |
662 | 679 | msgid "Max word length of titles" |
663 | 680 | msgstr "" |
664 | 681 | |
665 | | -#: devel_generate.module:152 |
| 682 | +#: devel_generate.module:137 |
666 | 683 | msgid "Requires upload.module" |
667 | 684 | msgstr "" |
668 | 685 | |
669 | | -#: devel_generate.module:153 |
| 686 | +#: devel_generate.module:138 |
670 | 687 | msgid "Add an upload to each node" |
671 | 688 | msgstr "" |
672 | 689 | |
673 | | -#: devel_generate.module:158 |
| 690 | +#: devel_generate.module:143 |
674 | 691 | msgid "Requires taxonomy.module" |
675 | 692 | msgstr "" |
676 | 693 | |
677 | | -#: devel_generate.module:160 |
| 694 | +#: devel_generate.module:145 |
678 | 695 | msgid "Add taxonomy terms to each node." |
679 | 696 | msgstr "" |
680 | 697 | |
681 | | -#: devel_generate.module:166 |
| 698 | +#: devel_generate.module:151 |
682 | 699 | msgid "Requires path.module" |
683 | 700 | msgstr "" |
684 | 701 | |
685 | | -#: devel_generate.module:167 |
| 702 | +#: devel_generate.module:152 |
686 | 703 | msgid "Add an url alias for each node." |
687 | 704 | msgstr "" |
688 | 705 | |
689 | | -#: devel_generate.module:193 |
| 706 | +#: devel_generate.module:157 |
| 707 | +msgid "Generate node view statistics (node_counter table)." |
| 708 | +msgstr "" |
| 709 | + |
| 710 | +#: devel_generate.module:184 |
690 | 711 | msgid "How many vocabularies would you like to generate?" |
691 | 712 | msgstr "" |
692 | 713 | |
693 | | -#: devel_generate.module:199 |
| 714 | +#: devel_generate.module:190 |
694 | 715 | msgid "How many terms would you like to generate?" |
695 | 716 | msgstr "" |
696 | 717 | |
697 | | -#: devel_generate.module:205 |
| 718 | +#: devel_generate.module:196 |
698 | 719 | msgid "Max word length of term/vocab names" |
699 | 720 | msgstr "" |
700 | 721 | |
701 | | -#: devel_generate.module:211 |
| 722 | +#: devel_generate.module:202 |
702 | 723 | msgid "Delete existing terms and vocabularies before generating new content." |
703 | 724 | msgstr "" |
704 | 725 | |
— | — | @@ -733,10 +754,6 @@ |
734 | 755 | msgid "Generate a given number of vocabularies and terms. Optionally delete current categories." |
735 | 756 | msgstr "" |
736 | 757 | |
737 | | -#: devel_generate.module:0 |
738 | | -msgid "devel_generate" |
739 | | -msgstr "" |
740 | | - |
741 | 758 | #: devel_node_access.module:24 |
742 | 759 | msgid "Development helper for node_access table" |
743 | 760 | msgstr "" |
— | — | @@ -761,7 +778,7 @@ |
762 | 779 | msgid "The second block provided by this module shows the entries in the node_access table for any nodes shown on the current page. You can enable the debug mode on the !settings_page to display much more information, but this can cause considerable overhead. Because the tables shown are wide, it is recommended to enable the blocks in the page footer rather than a sidebar." |
763 | 780 | msgstr "" |
764 | 781 | |
765 | | -#: devel_node_access.module:32 performance/performance.module:337;446 |
| 782 | +#: devel_node_access.module:32 performance/performance.module:317;426 |
766 | 783 | msgid "settings page" |
767 | 784 | msgstr "" |
768 | 785 | |
— | — | @@ -773,27 +790,23 @@ |
774 | 791 | msgid "summary page" |
775 | 792 | msgstr "" |
776 | 793 | |
777 | | -#: devel_node_access.module:37 |
778 | | -msgid "" |
779 | | -msgstr "" |
780 | | - |
781 | | -#: devel_node_access.module:78 |
| 794 | +#: devel_node_access.module:77 |
782 | 795 | msgid "Devel Node Access debug mode" |
783 | 796 | msgstr "" |
784 | 797 | |
785 | | -#: devel_node_access.module:80 |
| 798 | +#: devel_node_access.module:79 |
786 | 799 | msgid "Debug mode verifies the grants in the node_access table against those that would be set by running !Rebuild_permissions, and displays them all; this can cause considerable overhead." |
787 | 800 | msgstr "" |
788 | 801 | |
789 | | -#: devel_node_access.module:98 |
| 802 | +#: devel_node_access.module:97 |
790 | 803 | msgid "Access Granted to All Nodes (All Users)" |
791 | 804 | msgstr "" |
792 | 805 | |
793 | | -#: devel_node_access.module:99 |
| 806 | +#: devel_node_access.module:98 |
794 | 807 | msgid "Your node_access table contains entries that may be granting all users access to all nodes. Depending on which access control module(s) you use, you may want to delete these entries. If you are not using an access control module, you should probably leave these entries as is." |
795 | 808 | msgstr "" |
796 | 809 | |
797 | | -#: devel_node_access.module:100;127;145;163;230;254 |
| 810 | +#: devel_node_access.module:99;132;150;168;235;262 |
798 | 811 | msgid "realm" |
799 | 812 | msgstr "" |
800 | 813 | |
— | — | @@ -806,390 +819,438 @@ |
807 | 820 | msgstr "" |
808 | 821 | |
809 | 822 | #: devel_node_access.module:113 |
| 823 | +msgid "This issue may be masked by the one above, so look into the former first." |
| 824 | +msgstr "" |
| 825 | + |
| 826 | +#: devel_node_access.module:118 |
810 | 827 | msgid "All Nodes Represented" |
811 | 828 | msgstr "" |
812 | 829 | |
813 | | -#: devel_node_access.module:114 |
| 830 | +#: devel_node_access.module:119 |
814 | 831 | msgid "All nodes are represented in the node_access table." |
815 | 832 | msgstr "" |
816 | 833 | |
817 | | -#: devel_node_access.module:125 |
| 834 | +#: devel_node_access.module:130 |
818 | 835 | msgid "Access Granted to All Nodes (Some Users)" |
819 | 836 | msgstr "" |
820 | 837 | |
821 | | -#: devel_node_access.module:126 |
| 838 | +#: devel_node_access.module:131 |
822 | 839 | msgid "Your node_access table contains entries that may be granting some users access to all nodes. This may be perfectly normal, depending on which access control module(s) you use." |
823 | 840 | msgstr "" |
824 | 841 | |
825 | | -#: devel_node_access.module:141 |
| 842 | +#: devel_node_access.module:146 |
826 | 843 | msgid "Access Granted to Some Nodes" |
827 | 844 | msgstr "" |
828 | 845 | |
829 | | -#: devel_node_access.module:143 |
| 846 | +#: devel_node_access.module:148 |
830 | 847 | msgid "The following realms appear to grant all users access to some specific nodes. This may be perfectly normal, if some of your content is available to the public." |
831 | 848 | msgstr "" |
832 | 849 | |
833 | | -#: devel_node_access.module:145 |
| 850 | +#: devel_node_access.module:150 |
834 | 851 | msgid "public nodes" |
835 | 852 | msgstr "" |
836 | 853 | |
837 | | -#: devel_node_access.module:146 |
| 854 | +#: devel_node_access.module:151 |
838 | 855 | msgid "Public Nodes" |
839 | 856 | msgstr "" |
840 | 857 | |
841 | | -#: devel_node_access.module:161 |
| 858 | +#: devel_node_access.module:166 |
842 | 859 | msgid "Summary by Realm" |
843 | 860 | msgstr "" |
844 | 861 | |
845 | | -#: devel_node_access.module:162 |
| 862 | +#: devel_node_access.module:167 |
846 | 863 | msgid "The following realms grant limited access to some specific nodes." |
847 | 864 | msgstr "" |
848 | 865 | |
849 | | -#: devel_node_access.module:163 |
| 866 | +#: devel_node_access.module:168 |
850 | 867 | msgid "private nodes" |
851 | 868 | msgstr "" |
852 | 869 | |
853 | | -#: devel_node_access.module:164 |
| 870 | +#: devel_node_access.module:169 |
854 | 871 | msgid "Protected Nodes" |
855 | 872 | msgstr "" |
856 | 873 | |
857 | | -#: devel_node_access.module:207 |
| 874 | +#: devel_node_access.module:212 |
858 | 875 | msgid "Devel Node Access" |
859 | 876 | msgstr "" |
860 | 877 | |
861 | | -#: devel_node_access.module:210 |
| 878 | +#: devel_node_access.module:215 |
862 | 879 | msgid "Devel Node Access by User" |
863 | 880 | msgstr "" |
864 | 881 | |
865 | | -#: devel_node_access.module:230;254 |
| 882 | +#: devel_node_access.module:235;262 |
866 | 883 | msgid "node" |
867 | 884 | msgstr "" |
868 | 885 | |
869 | | -#: devel_node_access.module:230;254 |
| 886 | +#: devel_node_access.module:235;262 |
870 | 887 | msgid "gid" |
871 | 888 | msgstr "" |
872 | 889 | |
873 | | -#: (duplicate) devel_node_access.module:230;254;441;396 |
| 890 | +#: devel_node_access.module:235;262;465 |
874 | 891 | msgid "view" |
875 | 892 | msgstr "" |
876 | 893 | |
877 | | -#: devel_node_access.module:230;254;441 |
| 894 | +#: devel_node_access.module:235;262;465 |
878 | 895 | msgid "update" |
879 | 896 | msgstr "" |
880 | 897 | |
881 | | -#: devel_node_access.module:230;254;441 |
| 898 | +#: devel_node_access.module:235;262;465 |
882 | 899 | msgid "delete" |
883 | 900 | msgstr "" |
884 | 901 | |
885 | | -#: devel_node_access.module:230;254 |
| 902 | +#: devel_node_access.module:235;262 |
886 | 903 | msgid "explained" |
887 | 904 | msgstr "" |
888 | 905 | |
889 | | -#: devel_node_access.module:247;422 |
| 906 | +#: devel_node_access.module:253 |
| 907 | +msgid "default" |
| 908 | +msgstr "" |
| 909 | + |
| 910 | +#: devel_node_access.module:253 |
| 911 | +msgid "Default grant supplied by core in the absence of any other non-empty grants, in !na." |
| 912 | +msgstr "" |
| 913 | + |
| 914 | +#: devel_node_access.module:254 |
890 | 915 | msgid "ok" |
891 | 916 | msgstr "" |
892 | 917 | |
893 | | -#: devel_node_access.module:247 |
| 918 | +#: devel_node_access.module:254 |
894 | 919 | msgid "Highest priority grant, in !na." |
895 | 920 | msgstr "" |
896 | 921 | |
897 | | -#: devel_node_access.module:248 |
| 922 | +#: devel_node_access.module:255 |
| 923 | +msgid "unexpected" |
| 924 | +msgstr "" |
| 925 | + |
| 926 | +#: devel_node_access.module:255 |
| 927 | +msgid "The 0/0/all/... grant applies to all nodes and all users -- usually it should not be present if any node access module is active!" |
| 928 | +msgstr "" |
| 929 | + |
| 930 | +#: devel_node_access.module:256 |
898 | 931 | msgid "ignored" |
899 | 932 | msgstr "" |
900 | 933 | |
901 | | -#: devel_node_access.module:248 |
| 934 | +#: devel_node_access.module:256 |
902 | 935 | msgid "Lower priority grant, not in !na and thus ignored." |
903 | 936 | msgstr "" |
904 | 937 | |
905 | | -#: devel_node_access.module:249 |
| 938 | +#: devel_node_access.module:257 |
906 | 939 | msgid "empty" |
907 | 940 | msgstr "" |
908 | 941 | |
909 | | -#: devel_node_access.module:249 |
910 | | -msgid "Does not grant any access, but could block lower priority grants." |
| 942 | +#: devel_node_access.module:257 |
| 943 | +msgid "Does not grant any access, but could block lower priority grants; not in !na." |
911 | 944 | msgstr "" |
912 | 945 | |
913 | | -#: devel_node_access.module:250 |
| 946 | +#: devel_node_access.module:258 |
914 | 947 | msgid "missing" |
915 | 948 | msgstr "" |
916 | 949 | |
917 | | -#: devel_node_access.module:250 |
918 | | -msgid "Should be in !na but isn't; run Rebuild Permissions to fix this!" |
| 950 | +#: devel_node_access.module:258 |
| 951 | +msgid "Should be in !na but isn't!" |
919 | 952 | msgstr "" |
920 | 953 | |
921 | | -#: devel_node_access.module:251 |
| 954 | +#: devel_node_access.module:259 |
922 | 955 | msgid "illegitimate" |
923 | 956 | msgstr "" |
924 | 957 | |
925 | | -#: devel_node_access.module:251 |
| 958 | +#: devel_node_access.module:259 |
926 | 959 | msgid "Should NOT be in !na because of lower priority!" |
927 | 960 | msgstr "" |
928 | 961 | |
929 | | -#: devel_node_access.module:252 |
| 962 | +#: devel_node_access.module:260 |
930 | 963 | msgid "alien" |
931 | 964 | msgstr "" |
932 | 965 | |
933 | | -#: devel_node_access.module:252 |
| 966 | +#: devel_node_access.module:260 |
934 | 967 | msgid "Should NOT be in !na because of unknown origin!" |
935 | 968 | msgstr "" |
936 | 969 | |
937 | | -#: devel_node_access.module:254 |
| 970 | +#: devel_node_access.module:262 |
938 | 971 | msgid "prio" |
939 | 972 | msgstr "" |
940 | 973 | |
941 | | -#: devel_node_access.module:254 |
| 974 | +#: devel_node_access.module:262 |
942 | 975 | msgid "status" |
943 | 976 | msgstr "" |
944 | 977 | |
945 | | -#: devel_node_access.module:369 |
| 978 | +#: devel_node_access.module:397 |
946 | 979 | msgid "This entry grants access to this node to this user." |
947 | 980 | msgstr "" |
948 | 981 | |
949 | | -#: devel_node_access.module:390 |
950 | | -msgid "This user has the %administer_nodes permission and thus full access to all nodes." |
| 982 | +#: devel_node_access.module:417 |
| 983 | +msgid "You have errors in your !na table! You may be able to fix these for now by running !Rebuild_permissions, but this is likely to destroy the evidence and make it impossible to identify the underlying issues. If you don't fix those, the errors will probably come back again. <br /> DON'T do this just yet if you intend to ask for help with this situation." |
951 | 984 | msgstr "" |
952 | 985 | |
953 | | -#: devel_node_access.module:396 |
954 | | -msgid "This user is granted %view access to node %nid !by_what" |
| 986 | +#: devel_node_access.module:425 |
| 987 | +msgid "These are the grants returned by hook_node_grants() for this user." |
955 | 988 | msgstr "" |
956 | 989 | |
957 | | -#: devel_node_access.module:406 |
958 | | -msgid "by the %module module itself." |
| 990 | +#: devel_node_access.module:425 |
| 991 | +msgid "!username can use the following grants (if they are present above): !list" |
959 | 992 | msgstr "" |
960 | 993 | |
961 | | -#: devel_node_access.module:422 |
962 | | -msgid "by one or more of the following grants (if they are present above with status '!ok'): !list" |
| 994 | +#: devel_node_access.module:436 |
| 995 | +msgid "!username has the following access" |
963 | 996 | msgstr "" |
964 | 997 | |
965 | | -#: devel_node_access.module:425 |
966 | | -msgid "as author of the node." |
| 998 | +#: devel_node_access.module:442 |
| 999 | +msgid "%op: " |
967 | 1000 | msgstr "" |
968 | 1001 | |
969 | | -#: devel_node_access.module:433 |
| 1002 | +#: devel_node_access.module:444 |
| 1003 | +msgid "to node !nid:" |
| 1004 | +msgstr "" |
| 1005 | + |
| 1006 | +#: devel_node_access.module:457 |
970 | 1007 | msgid "node_access entries for nodes shown on this page" |
971 | 1008 | msgstr "" |
972 | 1009 | |
973 | | -#: devel_node_access.module:441 |
| 1010 | +#: devel_node_access.module:465 |
974 | 1011 | msgid "username" |
975 | 1012 | msgstr "" |
976 | 1013 | |
977 | | -#: devel_node_access.module:458 |
| 1014 | +#: devel_node_access.module:465 |
| 1015 | +msgid "Create nodes of the '@Node_type' type." |
| 1016 | +msgstr "" |
| 1017 | + |
| 1018 | +#: devel_node_access.module:465 |
| 1019 | +msgid "create" |
| 1020 | +msgstr "" |
| 1021 | + |
| 1022 | +#: devel_node_access.module:483 |
| 1023 | +msgid "(This table lists the most-recently active users. Hover your mouse over each result to see the reason for allowing or denying access.)" |
| 1024 | +msgstr "" |
| 1025 | + |
| 1026 | +#: devel_node_access.module:484 |
978 | 1027 | msgid "Access permissions by user" |
979 | 1028 | msgstr "" |
980 | 1029 | |
981 | | -#: devel_node_access.module:500 |
982 | | -msgid "yes" |
| 1030 | +#: devel_node_access.module:508 |
| 1031 | +msgid "Unable to load the node – this should never happen!" |
983 | 1032 | msgstr "" |
984 | 1033 | |
985 | | -#: devel_node_access.module:503 |
986 | | -msgid "no" |
| 1034 | +#: devel_node_access.module:533 |
| 1035 | +msgid "NO" |
987 | 1036 | msgstr "" |
988 | 1037 | |
989 | | -#: (duplicate) devel_node_access.module:80 |
990 | | -msgid "Rebuild permissions" |
| 1038 | +#: devel_node_access.module:534 |
| 1039 | +msgid "YES" |
991 | 1040 | msgstr "" |
992 | 1041 | |
993 | | -#: (duplicate) devel_node_access.module:390 |
994 | | -msgid "administer nodes" |
| 1042 | +#: devel_node_access.module:539 |
| 1043 | +msgid "!NO: input format" |
995 | 1044 | msgstr "" |
996 | 1045 | |
997 | | -#: devel_node_access.module:48 |
998 | | -msgid "Node_access summary" |
| 1046 | +#: devel_node_access.module:540 |
| 1047 | +msgid "!NO: This user is not allowed to use the input format '!format' (!fid)." |
999 | 1048 | msgstr "" |
1000 | 1049 | |
1001 | | -#: devel_node_access.module:56 devel_node_access.info:0 |
1002 | | -msgid "Devel node access" |
| 1050 | +#: devel_node_access.module:548 |
| 1051 | +msgid "!YES: administer nodes" |
1003 | 1052 | msgstr "" |
1004 | 1053 | |
1005 | | -#: devel_node_access.module:57 |
1006 | | -msgid "Helper pages and blocks to assist Drupal developers and admins with node_access. The devel blocks can be managed via the Blocks (admin/build/block) page." |
| 1054 | +#: devel_node_access.module:549 |
| 1055 | +msgid "!YES: This user has the '!administer_nodes' permission and may do everything with nodes." |
1007 | 1056 | msgstr "" |
1008 | 1057 | |
1009 | | -#: devel_node_access.module:0 |
1010 | | -msgid "devel_node_access" |
| 1058 | +#: devel_node_access.module:550 |
| 1059 | +msgid "administer nodes" |
1011 | 1060 | msgstr "" |
1012 | 1061 | |
1013 | | -#: devel_themer.module:85 |
1014 | | -msgid "Display theme log" |
| 1062 | +#: devel_node_access.module:556 |
| 1063 | +msgid "!NO: access content" |
1015 | 1064 | msgstr "" |
1016 | 1065 | |
1017 | | -#: devel_themer.module:87 |
1018 | | -msgid "Display the list of theme templates and theme functions which could have been be used for a given page. The one that was actually used is bolded. This is the same data as the represented in the popup, but all calls are listed in chronological order and can alternately be sorted by time." |
| 1066 | +#: devel_node_access.module:557 |
| 1067 | +msgid "!NO: This user does not have the '!access_content' permission and is denied doing anything with content." |
1019 | 1068 | msgstr "" |
1020 | 1069 | |
1021 | | -#: devel_themer.module:518 |
1022 | | -msgid "Themer info" |
| 1070 | +#: devel_node_access.module:558 |
| 1071 | +msgid "access content" |
1023 | 1072 | msgstr "" |
1024 | 1073 | |
1025 | | -#: devel_themer.module:519 |
1026 | | -msgid "loading" |
| 1074 | +#: devel_node_access.module:574 |
| 1075 | +msgid "!YES: by the module" |
1027 | 1076 | msgstr "" |
1028 | 1077 | |
1029 | | -#: devel_themer.module:520 |
1030 | | -msgid "Parents: " |
| 1078 | +#: devel_node_access.module:575 |
| 1079 | +msgid "!YES: The '@module' module (which defines the '@content_type' content type) allows this, probably based no some permission." |
1031 | 1080 | msgstr "" |
1032 | 1081 | |
1033 | | -#: devel_themer.module:521 |
1034 | | -msgid "Function called: " |
| 1082 | +#: devel_node_access.module:580 |
| 1083 | +msgid "!NO: by the module" |
1035 | 1084 | msgstr "" |
1036 | 1085 | |
1037 | | -#: devel_themer.module:522 |
1038 | | -msgid "Template called: " |
| 1086 | +#: devel_node_access.module:581 |
| 1087 | +msgid "!NO: The '@module' module (which defines the '@content_type' content type) denies this." |
1039 | 1088 | msgstr "" |
1040 | 1089 | |
1041 | | -#: devel_themer.module:523 |
1042 | | -msgid "Candidate template files: " |
| 1090 | +#: devel_node_access.module:589 |
| 1091 | +msgid "!YES: node access" |
1043 | 1092 | msgstr "" |
1044 | 1093 | |
1045 | | -#: devel_themer.module:524 |
1046 | | -msgid "Preprocess functions: " |
| 1094 | +#: devel_node_access.module:590 |
| 1095 | +msgid "!YES: Node access allows this." |
1047 | 1096 | msgstr "" |
1048 | 1097 | |
1049 | | -#: devel_themer.module:525 |
1050 | | -msgid "Candidate function names: " |
| 1098 | +#: devel_node_access.module:595 |
| 1099 | +msgid "!NO: node access" |
1051 | 1100 | msgstr "" |
1052 | 1101 | |
1053 | | -#: devel_themer.module:526 |
1054 | | -msgid "link to Drupal API documentation" |
| 1102 | +#: devel_node_access.module:596 |
| 1103 | +msgid "!NO: Node access denies this." |
1055 | 1104 | msgstr "" |
1056 | 1105 | |
1057 | | -#: devel_themer.module:527 |
1058 | | -msgid "link to source code" |
| 1106 | +#: devel_node_access.module:603 |
| 1107 | +msgid "!YES: own node" |
1059 | 1108 | msgstr "" |
1060 | 1109 | |
1061 | | -#: devel_themer.module:528 |
1062 | | -msgid "Function Arguments" |
| 1110 | +#: devel_node_access.module:604 |
| 1111 | +msgid "!YES: The user may view his/her own node." |
1063 | 1112 | msgstr "" |
1064 | 1113 | |
1065 | | -#: devel_themer.module:529 |
1066 | | -msgid "Template Variables" |
| 1114 | +#: devel_node_access.module:608 |
| 1115 | +msgid "!NO: no reason" |
1067 | 1116 | msgstr "" |
1068 | 1117 | |
1069 | | -#: devel_themer.module:530 |
1070 | | -msgid "File used: " |
| 1118 | +#: devel_node_access.module:609 |
| 1119 | +msgid "!NO: None of the checks resulted in allowing this, so it's denied." |
1071 | 1120 | msgstr "" |
1072 | 1121 | |
1073 | | -#: devel_themer.module:531 |
1074 | | -msgid "Duration: " |
| 1122 | +#: devel_node_access.module:610 |
| 1123 | +msgid "Node access was not checked because the node is not published." |
1075 | 1124 | msgstr "" |
1076 | 1125 | |
1077 | | -#: devel_themer.module:538 |
1078 | | -msgid "Drupal Themer Information" |
| 1126 | +#: devel_node_access.module:611 |
| 1127 | +msgid "Is a permission missing?" |
1079 | 1128 | msgstr "" |
1080 | 1129 | |
1081 | | -#: devel_themer.module:539 |
1082 | | -msgid "Click on any element to see information about the Drupal theme function or template that created it." |
| 1130 | +#: (duplicate) devel_node_access.module:79 |
| 1131 | +msgid "Rebuild permissions" |
1083 | 1132 | msgstr "" |
1084 | 1133 | |
1085 | | -#: devel_themer.module:10 |
1086 | | -msgid "Theme Developer" |
| 1134 | +#: devel_node_access.module:15 |
| 1135 | +msgid "view devel_node_access information" |
1087 | 1136 | msgstr "" |
1088 | 1137 | |
1089 | | -#: devel_themer.module:11 |
1090 | | -msgid "Display or hide the textual template log" |
| 1138 | +#: devel_node_access.module:47 |
| 1139 | +msgid "Node_access summary" |
1091 | 1140 | msgstr "" |
1092 | 1141 | |
1093 | | -#: devel_themer.module:18 |
1094 | | -msgid "Devel Themer Enable" |
| 1142 | +#: devel_node_access.module:55 devel_node_access.info:0 |
| 1143 | +msgid "Devel node access" |
1095 | 1144 | msgstr "" |
1096 | 1145 | |
1097 | | -#: devel_themer.module:25 |
1098 | | -msgid "Theme Development Enable" |
| 1146 | +#: devel_node_access.module:56 |
| 1147 | +msgid "Helper pages and blocks to assist Drupal developers and admins with node_access. The devel blocks can be managed via the Blocks (admin/build/block) page." |
1099 | 1148 | msgstr "" |
1100 | 1149 | |
1101 | | -#: devel_themer.module:32 |
1102 | | -msgid "Theme Development AJAX variables" |
| 1150 | +#: devel_themer.module:79 |
| 1151 | +msgid "Devel Themer module %action." |
1103 | 1152 | msgstr "" |
1104 | 1153 | |
1105 | | -#: devel_themer.module:0 |
1106 | | -msgid "devel_themer" |
| 1154 | +#: devel_themer.module:85 |
| 1155 | +msgid "Display theme log" |
1107 | 1156 | msgstr "" |
1108 | 1157 | |
1109 | | -#: macro.module:15 |
1110 | | -msgid "Todo: Add help text." |
| 1158 | +#: devel_themer.module:87 |
| 1159 | +msgid "Display the list of theme templates and theme functions which could have been be used for a given page. The one that was actually used is bolded. This is the same data as the represented in the popup, but all calls are listed in chronological order and can alternately be sorted by time." |
1111 | 1160 | msgstr "" |
1112 | 1161 | |
1113 | | -#: macro.module:17 |
1114 | | -msgid "This output can be saved to the profile`s .macro file, to be automatically played back upon completed install or used on an import on another site." |
| 1162 | +#: devel_themer.module:529 |
| 1163 | +msgid "Themer info" |
1115 | 1164 | msgstr "" |
1116 | 1165 | |
1117 | | -#: macro.module:19 |
1118 | | -msgid "Insert recorded macro here to be played into your site. All referenced modules needs to be enabled." |
| 1166 | +#: devel_themer.module:530 |
| 1167 | +msgid "loading" |
1119 | 1168 | msgstr "" |
1120 | 1169 | |
1121 | | -#: macro.module:21 |
1122 | | -msgid "Configuration settings for the drupal macro engine." |
| 1170 | +#: devel_themer.module:531 |
| 1171 | +msgid "Parents: " |
1123 | 1172 | msgstr "" |
1124 | 1173 | |
1125 | | -#: macro.module:54 |
1126 | | -msgid "Configure" |
| 1174 | +#: devel_themer.module:532 |
| 1175 | +msgid "Function called: " |
1127 | 1176 | msgstr "" |
1128 | 1177 | |
1129 | | -#: macro.module:173 |
1130 | | -msgid "play macro" |
| 1178 | +#: devel_themer.module:533 |
| 1179 | +msgid "Template called: " |
1131 | 1180 | msgstr "" |
1132 | 1181 | |
1133 | | -#: macro.module:197 |
1134 | | -msgid "Macro settings" |
| 1182 | +#: devel_themer.module:534 |
| 1183 | +msgid "Candidate template files: " |
1135 | 1184 | msgstr "" |
1136 | 1185 | |
1137 | | -#: macro.module:202 |
1138 | | -msgid "Enable macro recording" |
| 1186 | +#: devel_themer.module:535 |
| 1187 | +msgid "Preprocess functions: " |
1139 | 1188 | msgstr "" |
1140 | 1189 | |
1141 | | -#: macro.module:204 |
1142 | | -msgid "Set whether the macro engine will record form submissions." |
| 1190 | +#: devel_themer.module:536 |
| 1191 | +msgid "Candidate function names: " |
1143 | 1192 | msgstr "" |
1144 | 1193 | |
1145 | | -#: macro.module:208 |
1146 | | -msgid "Delete recorded macro" |
| 1194 | +#: devel_themer.module:537 |
| 1195 | +msgid "link to Drupal API documentation" |
1147 | 1196 | msgstr "" |
1148 | 1197 | |
1149 | | -#: macro.module:210 |
1150 | | -msgid "Set whether to clear previously recorded macro." |
| 1198 | +#: devel_themer.module:538 |
| 1199 | +msgid "link to source code" |
1151 | 1200 | msgstr "" |
1152 | 1201 | |
1153 | | -#: macro.module:236 |
1154 | | -msgid "An error has occured with macro #%macro_number , form_id %form_id. Please check the errors displayed for more details." |
| 1202 | +#: devel_themer.module:539 |
| 1203 | +msgid "Function Arguments" |
1155 | 1204 | msgstr "" |
1156 | 1205 | |
1157 | | -#: macro.module:67 |
1158 | | -msgid "administer macro settings" |
| 1206 | +#: devel_themer.module:540 |
| 1207 | +msgid "Template Variables" |
1159 | 1208 | msgstr "" |
1160 | 1209 | |
1161 | | -#: macro.module:67 |
1162 | | -msgid "macro access" |
| 1210 | +#: devel_themer.module:541 |
| 1211 | +msgid "File used: " |
1163 | 1212 | msgstr "" |
1164 | 1213 | |
1165 | | -#: macro.module:32 |
1166 | | -msgid "Macro engine" |
| 1214 | +#: devel_themer.module:542 |
| 1215 | +msgid "Duration: " |
1167 | 1216 | msgstr "" |
1168 | 1217 | |
1169 | | -#: macro.module:33 |
1170 | | -msgid "Configure the Drupal macro engine. Export recorded macros or import previously recorded macros." |
| 1218 | +#: devel_themer.module:549 |
| 1219 | +msgid "Drupal Themer Information" |
1171 | 1220 | msgstr "" |
1172 | 1221 | |
1173 | | -#: macro.module:40 |
1174 | | -msgid "Export" |
| 1222 | +#: devel_themer.module:550 |
| 1223 | +msgid "Click on any element to see information about the Drupal theme function or template that created it." |
1175 | 1224 | msgstr "" |
1176 | 1225 | |
1177 | | -#: macro.module:47 |
1178 | | -msgid "Import" |
| 1226 | +#: devel_themer.module:10 |
| 1227 | +msgid "Theme Developer" |
1179 | 1228 | msgstr "" |
1180 | 1229 | |
1181 | | -#: macro.module:0 |
1182 | | -msgid "macro" |
| 1230 | +#: devel_themer.module:11 |
| 1231 | +msgid "Display or hide the textual template log" |
1183 | 1232 | msgstr "" |
1184 | 1233 | |
1185 | | -#: devel.install:88 |
| 1234 | +#: devel_themer.module:18 |
| 1235 | +msgid "Devel Themer Enable" |
| 1236 | +msgstr "" |
| 1237 | + |
| 1238 | +#: devel_themer.module:25 |
| 1239 | +msgid "Theme Development Enable" |
| 1240 | +msgstr "" |
| 1241 | + |
| 1242 | +#: devel_themer.module:32 |
| 1243 | +msgid "Theme Development AJAX variables" |
| 1244 | +msgstr "" |
| 1245 | + |
| 1246 | +#: devel.install:93 |
1186 | 1247 | msgid "Disabled query logging since devel module is disabled." |
1187 | 1248 | msgstr "" |
1188 | 1249 | |
1189 | | -#: (duplicate) devel.install:40 devel.info:0 devel_generate.info:0 devel_node_access.info:0 devel_themer.info:0 macro.info:0 performance/performance.info:0 |
| 1250 | +#: (duplicate) devel.install:45 devel.info:0 devel_generate.info:0 devel_node_access.info:0 devel_themer.info:0 performance/performance.info:0 |
1190 | 1251 | msgid "Development" |
1191 | 1252 | msgstr "" |
1192 | 1253 | |
1193 | | -#: (duplicate) devel.install:40 |
| 1254 | +#: (duplicate) devel.install:45 |
1194 | 1255 | msgid "Development links." |
1195 | 1256 | msgstr "" |
1196 | 1257 | |
— | — | @@ -1229,14 +1290,6 @@ |
1230 | 1291 | msgid "Essential theme API information for theme developers" |
1231 | 1292 | msgstr "" |
1232 | 1293 | |
1233 | | -#: macro.info:0 |
1234 | | -msgid "Macro" |
1235 | | -msgstr "" |
1236 | | - |
1237 | | -#: macro.info:0 |
1238 | | -msgid "Allows administrators to record and playback form submissions." |
1239 | | -msgstr "" |
1240 | | - |
1241 | 1294 | #: generate/generate-og-users.php:48 |
1242 | 1295 | msgid "Assigned %n users to group %t." |
1243 | 1296 | msgstr "" |
— | — | @@ -1245,287 +1298,299 @@ |
1246 | 1299 | msgid "Y/m/d - G:i" |
1247 | 1300 | msgstr "" |
1248 | 1301 | |
1249 | | -#: performance/performance.module:13 performance/performance.info:0 |
1250 | | -msgid "Performance Logging" |
1251 | | -msgstr "" |
1252 | | - |
1253 | | -#: performance/performance.module:14 |
1254 | | -msgid "Logs performance data: page generation times and memory usage." |
1255 | | -msgstr "" |
1256 | | - |
1257 | | -#: performance/performance.module:21 |
1258 | | -msgid "Clear APC" |
1259 | | -msgstr "" |
1260 | | - |
1261 | | -#: performance/performance.module:22 |
1262 | | -msgid "Clears performance statistics collected in APC." |
1263 | | -msgstr "" |
1264 | | - |
1265 | | -#: performance/performance.module:29 |
1266 | | -msgid "Performance Logs: Summary" |
1267 | | -msgstr "" |
1268 | | - |
1269 | | -#: performance/performance.module:30 |
1270 | | -msgid "View summary performance logs: page generation times and memory usage." |
1271 | | -msgstr "" |
1272 | | - |
1273 | | -#: performance/performance.module:35 |
1274 | | -msgid "Performance Logs: Details" |
1275 | | -msgstr "" |
1276 | | - |
1277 | | -#: performance/performance.module:36 |
1278 | | -msgid "View detailed, per page, performance logs: page generation times and memory usage." |
1279 | | -msgstr "" |
1280 | | - |
1281 | | -#: performance/performance.module:45 |
| 1302 | +#: performance/performance.module:50 |
1282 | 1303 | msgid "Disabled" |
1283 | 1304 | msgstr "" |
1284 | 1305 | |
1285 | | -#: performance/performance.module:46 |
| 1306 | +#: performance/performance.module:51 |
1286 | 1307 | msgid "Enabled" |
1287 | 1308 | msgstr "" |
1288 | 1309 | |
1289 | | -#: performance/performance.module:50 |
| 1310 | +#: performance/performance.module:55 |
1290 | 1311 | msgid "APC is enabled. It is reasonably safe to enable summary logging on live sites." |
1291 | 1312 | msgstr "" |
1292 | 1313 | |
1293 | | -#: performance/performance.module:53 |
| 1314 | +#: performance/performance.module:58 |
1294 | 1315 | msgid "APC is not enabled. It is <strong>not</strong> safe to enable summary logging to the database on live sites." |
1295 | 1316 | msgstr "" |
1296 | 1317 | |
1297 | | -#: performance/performance.module:58 |
| 1318 | +#: performance/performance.module:63 |
1298 | 1319 | msgid "Logging mode" |
1299 | 1320 | msgstr "" |
1300 | 1321 | |
1301 | | -#: performance/performance.module:64 |
| 1322 | +#: performance/performance.module:69 |
1302 | 1323 | msgid "Detailed logging" |
1303 | 1324 | msgstr "" |
1304 | 1325 | |
1305 | | -#: performance/performance.module:67 |
| 1326 | +#: performance/performance.module:72 |
1306 | 1327 | msgid "Log memory usage and page generation times for every page. This logging mode is <strong>not</strong> suitable for large sites, as it can degrade performance severly. It is intended for use by developers, or on a test copy of the site." |
1307 | 1328 | msgstr "" |
1308 | 1329 | |
1309 | | -#: performance/performance.module:72 |
| 1330 | +#: performance/performance.module:77 |
1310 | 1331 | msgid "Summary logging (DB)" |
1311 | 1332 | msgstr "" |
1312 | 1333 | |
1313 | | -#: performance/performance.module:75 |
| 1334 | +#: performance/performance.module:80 |
1314 | 1335 | msgid "Log summary data, such as average and maximum page generation times and memory usage to the database. This logging mode is <strong>not</strong> suitable for most live sites." |
1315 | 1336 | msgstr "" |
1316 | 1337 | |
1317 | | -#: performance/performance.module:85 |
| 1338 | +#: performance/performance.module:90 |
1318 | 1339 | msgid "Summary logging (APC)" |
1319 | 1340 | msgstr "" |
1320 | 1341 | |
1321 | | -#: performance/performance.module:89 |
| 1342 | +#: performance/performance.module:94 |
1322 | 1343 | msgid "Log summary data, such as average and maximum page generation times and memory usage to APC, if installed. The summary will be stored in APC memory, and hence there is no load on the database. This logging to APC is suitable for most live sites, unless the number of unique page accesses is excessively high." |
1323 | 1344 | msgstr "" |
1324 | 1345 | |
1325 | | -#: performance/performance.module:94 |
| 1346 | +#: performance/performance.module:99 |
1326 | 1347 | msgid "Other" |
1327 | 1348 | msgstr "" |
1328 | 1349 | |
1329 | | -#: performance/performance.module:100 |
1330 | | -msgid "Show titles instead of URLs" |
1331 | | -msgstr "" |
1332 | | - |
1333 | | -#: performance/performance.module:103 |
1334 | | -msgid "URLs only" |
1335 | | -msgstr "" |
1336 | | - |
1337 | | -#: performance/performance.module:104 |
1338 | | -msgid "URLs and Titles as hyperlinks" |
1339 | | -msgstr "" |
1340 | | - |
1341 | 1350 | #: performance/performance.module:106 |
1342 | | -msgid "In the reports, show path titles hyperlinked to the URLs, or just the path URLs." |
1343 | | -msgstr "" |
1344 | | - |
1345 | | -#: performance/performance.module:112 |
1346 | 1351 | msgid "Database Query timing and count" |
1347 | 1352 | msgstr "" |
1348 | 1353 | |
1349 | | -#: performance/performance.module:115 |
| 1354 | +#: performance/performance.module:109 |
1350 | 1355 | msgid "Log database query timing and query count for each page. This is useful to know if the bottleneck is in excessive database query counts, or the time required to execute those queries is high. Enabling this will incurr some memory overhead as query times and the actual query strings are cached in memory as arrays for each page, hence skewing the overall page memory reported. Please note that this settings is enabled or disabled in the settings of the devel module." |
1351 | 1356 | msgstr "" |
1352 | 1357 | |
1353 | | -#: performance/performance.module:120 |
| 1358 | +#: performance/performance.module:114 |
1354 | 1359 | msgid "Accesses threshold" |
1355 | 1360 | msgstr "" |
1356 | 1361 | |
1357 | | -#: performance/performance.module:123 |
| 1362 | +#: performance/performance.module:117 |
1358 | 1363 | msgid "When displaying the summary report and using APC, only pages with the number of accesses larger than the specified threshold will be shown. Also, when cron runs, pages with that number of accesses or less will be removed, so as not to overflow APC's shared memory. This is useful on a live site with a high volume of hits. On a development site, you probably want this set to 0, so you can see all pages." |
1359 | 1364 | msgstr "" |
1360 | 1365 | |
1361 | | -#: performance/performance.module:141 |
1362 | | -msgid "Performance detailed logging is !link. This can cause severe issues on live sites." |
| 1366 | +#: performance/performance.module:167;455 |
| 1367 | +msgid "Yes" |
1363 | 1368 | msgstr "" |
1364 | 1369 | |
1365 | | -#: performance/performance.module:141;148 |
1366 | | -msgid "enabled" |
| 1370 | +#: performance/performance.module:167;455 |
| 1371 | +msgid "No" |
1367 | 1372 | msgstr "" |
1368 | 1373 | |
1369 | | -#: performance/performance.module:148 |
1370 | | -msgid "Query timing and count logging is !link. This can cause memory size per page to be larger than normal." |
1371 | | -msgstr "" |
1372 | | - |
1373 | | -#: performance/performance.module:155 |
1374 | | -msgid "APC has been configured for !size, which is less than the recommended 48 MB of memory. If you encounter errors when viewing the summary report, then try to increase that limit for APC." |
1375 | | -msgstr "" |
1376 | | - |
1377 | | -#: performance/performance.module:337 |
| 1374 | +#: performance/performance.module:317 |
1378 | 1375 | msgid "Summary performance log is not enabled. Go to the !link to enable it." |
1379 | 1376 | msgstr "" |
1380 | 1377 | |
1381 | | -#: performance/performance.module:342;452 |
| 1378 | +#: performance/performance.module:322;432 |
1382 | 1379 | msgid "Path" |
1383 | 1380 | msgstr "" |
1384 | 1381 | |
1385 | | -#: performance/performance.module:343 |
| 1382 | +#: performance/performance.module:323 |
1386 | 1383 | msgid "Last access" |
1387 | 1384 | msgstr "" |
1388 | 1385 | |
1389 | | -#: performance/performance.module:344 |
| 1386 | +#: performance/performance.module:324 |
1390 | 1387 | msgid "# accesses" |
1391 | 1388 | msgstr "" |
1392 | 1389 | |
1393 | | -#: performance/performance.module:345 |
| 1390 | +#: performance/performance.module:325 |
1394 | 1391 | msgid "Max Memory (MB)" |
1395 | 1392 | msgstr "" |
1396 | 1393 | |
1397 | | -#: performance/performance.module:346 |
| 1394 | +#: performance/performance.module:326 |
1398 | 1395 | msgid "Avg Memory (MB)" |
1399 | 1396 | msgstr "" |
1400 | 1397 | |
1401 | | -#: performance/performance.module:347 |
| 1398 | +#: performance/performance.module:327 |
1402 | 1399 | msgid "Milliseconds (Max)" |
1403 | 1400 | msgstr "" |
1404 | 1401 | |
1405 | | -#: performance/performance.module:348 |
| 1402 | +#: performance/performance.module:328 |
1406 | 1403 | msgid "Milliseconds (Avg)" |
1407 | 1404 | msgstr "" |
1408 | 1405 | |
1409 | | -#: performance/performance.module:351 |
| 1406 | +#: performance/performance.module:331 |
1410 | 1407 | msgid "Query Millisecs (Max)" |
1411 | 1408 | msgstr "" |
1412 | 1409 | |
1413 | | -#: performance/performance.module:352 |
| 1410 | +#: performance/performance.module:332 |
1414 | 1411 | msgid "Query Millisecs (Avg)" |
1415 | 1412 | msgstr "" |
1416 | 1413 | |
1417 | | -#: performance/performance.module:353 |
| 1414 | +#: performance/performance.module:333 |
1418 | 1415 | msgid "Query Count (Max)" |
1419 | 1416 | msgstr "" |
1420 | 1417 | |
1421 | | -#: performance/performance.module:354 |
| 1418 | +#: performance/performance.module:334 |
1422 | 1419 | msgid "Query Count (Avg)" |
1423 | 1420 | msgstr "" |
1424 | 1421 | |
1425 | | -#: performance/performance.module:410 |
| 1422 | +#: performance/performance.module:390 |
1426 | 1423 | msgid "No statistics available yet." |
1427 | 1424 | msgstr "" |
1428 | 1425 | |
1429 | | -#: performance/performance.module:415 |
| 1426 | +#: performance/performance.module:395 |
1430 | 1427 | msgid "Showing !shown paths with more than !threshold accesses, out of !total total paths." |
1431 | 1428 | msgstr "" |
1432 | 1429 | |
1433 | | -#: performance/performance.module:419 |
| 1430 | +#: performance/performance.module:399 |
1434 | 1431 | msgid "Showing all !total paths." |
1435 | 1432 | msgstr "" |
1436 | 1433 | |
1437 | | -#: performance/performance.module:432 |
| 1434 | +#: performance/performance.module:412 |
1438 | 1435 | msgid "Average memory per page: !mb_avg MB" |
1439 | 1436 | msgstr "" |
1440 | 1437 | |
1441 | | -#: performance/performance.module:433 |
| 1438 | +#: performance/performance.module:413 |
1442 | 1439 | msgid "Average milliseconds per page: !ms_avg" |
1443 | 1440 | msgstr "" |
1444 | 1441 | |
1445 | | -#: performance/performance.module:434 |
| 1442 | +#: performance/performance.module:414 |
1446 | 1443 | msgid "Total number of page accesses: !accesses" |
1447 | 1444 | msgstr "" |
1448 | 1445 | |
1449 | | -#: performance/performance.module:435 |
| 1446 | +#: performance/performance.module:415 |
1450 | 1447 | msgid "First access: !access." |
1451 | 1448 | msgstr "" |
1452 | 1449 | |
1453 | | -#: performance/performance.module:436 |
| 1450 | +#: performance/performance.module:416 |
1454 | 1451 | msgid "Last access: !access." |
1455 | 1452 | msgstr "" |
1456 | 1453 | |
1457 | | -#: performance/performance.module:446 |
| 1454 | +#: performance/performance.module:426 |
1458 | 1455 | msgid "Detail performance log is not enabled. Go to the !link to enable it." |
1459 | 1456 | msgstr "" |
1460 | 1457 | |
1461 | | -#: performance/performance.module:450 |
| 1458 | +#: performance/performance.module:430 |
1462 | 1459 | msgid "#" |
1463 | 1460 | msgstr "" |
1464 | 1461 | |
1465 | | -#: performance/performance.module:451 |
| 1462 | +#: performance/performance.module:431 |
1466 | 1463 | msgid "Date" |
1467 | 1464 | msgstr "" |
1468 | 1465 | |
1469 | | -#: performance/performance.module:453 |
| 1466 | +#: performance/performance.module:433 |
1470 | 1467 | msgid "Memory (MB)" |
1471 | 1468 | msgstr "" |
1472 | 1469 | |
1473 | | -#: performance/performance.module:454 |
| 1470 | +#: performance/performance.module:434 |
1474 | 1471 | msgid "Milliseconds (Total)" |
1475 | 1472 | msgstr "" |
1476 | 1473 | |
1477 | | -#: performance/performance.module:455 |
| 1474 | +#: performance/performance.module:435 |
1478 | 1475 | msgid "Anonymous?" |
1479 | 1476 | msgstr "" |
1480 | 1477 | |
1481 | | -#: performance/performance.module:459 |
| 1478 | +#: performance/performance.module:439 |
1482 | 1479 | msgid "# Queries" |
1483 | 1480 | msgstr "" |
1484 | 1481 | |
1485 | | -#: performance/performance.module:460 |
| 1482 | +#: performance/performance.module:440 |
1486 | 1483 | msgid "Query Milliseconds" |
1487 | 1484 | msgstr "" |
1488 | 1485 | |
1489 | | -#: performance/performance.module:475 |
1490 | | -msgid "Yes" |
1491 | | -msgstr "" |
1492 | | - |
1493 | | -#: performance/performance.module:475 |
1494 | | -msgid "No" |
1495 | | -msgstr "" |
1496 | | - |
1497 | | -#: performance/performance.module:486 |
| 1486 | +#: performance/performance.module:466 |
1498 | 1487 | msgid "No log messages available." |
1499 | 1488 | msgstr "" |
1500 | 1489 | |
1501 | | -#: performance/performance.module:525 |
| 1490 | +#: performance/performance.module:515 |
1502 | 1491 | msgid "Confirm APC clear" |
1503 | 1492 | msgstr "" |
1504 | 1493 | |
1505 | | -#: performance/performance.module:529 |
| 1494 | +#: performance/performance.module:519 |
1506 | 1495 | msgid "Are you sure you want to clear the APC statistics for this site?" |
1507 | 1496 | msgstr "" |
1508 | 1497 | |
1509 | | -#: performance/performance.module:531 |
| 1498 | +#: performance/performance.module:521 |
1510 | 1499 | msgid "This will clear all the collected performance statistics stored in APC. This action cannot be undone." |
1511 | 1500 | msgstr "" |
1512 | 1501 | |
1513 | | -#: performance/performance.module:532 |
| 1502 | +#: performance/performance.module:522 |
1514 | 1503 | msgid "Clear" |
1515 | 1504 | msgstr "" |
1516 | 1505 | |
1517 | | -#: performance/performance.module:533 |
| 1506 | +#: performance/performance.module:523 |
1518 | 1507 | msgid "Cancel" |
1519 | 1508 | msgstr "" |
1520 | 1509 | |
1521 | | -#: performance/performance.module:549 |
| 1510 | +#: performance/performance.module:528 |
| 1511 | +msgid "APC is not enabled. Nothing to do ..." |
| 1512 | +msgstr "" |
| 1513 | + |
| 1514 | +#: performance/performance.module:545 |
1522 | 1515 | msgid "Performance statistics collected in APC has been cleared." |
1523 | 1516 | msgstr "" |
1524 | 1517 | |
1525 | | -#: performance/performance.module:0 |
1526 | | -msgid "performance" |
| 1518 | +#: performance/performance.module:578 |
| 1519 | +msgid "Performance logging is not enabled" |
1527 | 1520 | msgstr "" |
1528 | 1521 | |
| 1522 | +#: performance/performance.module:16 |
| 1523 | +msgid "Performance logging" |
| 1524 | +msgstr "" |
| 1525 | + |
| 1526 | +#: performance/performance.module:17 |
| 1527 | +msgid "Logs performance data: page generation times and memory usage." |
| 1528 | +msgstr "" |
| 1529 | + |
| 1530 | +#: performance/performance.module:24 |
| 1531 | +msgid "Clear APC" |
| 1532 | +msgstr "" |
| 1533 | + |
| 1534 | +#: performance/performance.module:25 |
| 1535 | +msgid "Clears performance statistics collected in APC." |
| 1536 | +msgstr "" |
| 1537 | + |
| 1538 | +#: performance/performance.module:32 |
| 1539 | +msgid "Performance Logs: Summary" |
| 1540 | +msgstr "" |
| 1541 | + |
| 1542 | +#: performance/performance.module:33 |
| 1543 | +msgid "View summary performance logs: page generation times and memory usage." |
| 1544 | +msgstr "" |
| 1545 | + |
| 1546 | +#: performance/performance.module:39 |
| 1547 | +msgid "Performance Logs: Details" |
| 1548 | +msgstr "" |
| 1549 | + |
| 1550 | +#: performance/performance.module:40 |
| 1551 | +msgid "View detailed, per page, performance logs: page generation times and memory usage." |
| 1552 | +msgstr "" |
| 1553 | + |
| 1554 | +#: performance/performance.install:73 |
| 1555 | +msgid "Performance logging details" |
| 1556 | +msgstr "" |
| 1557 | + |
| 1558 | +#: performance/performance.install:76 |
| 1559 | +msgid "Performance detailed logging is !link. This can cause severe issues on live sites." |
| 1560 | +msgstr "" |
| 1561 | + |
| 1562 | +#: performance/performance.install:76;88 |
| 1563 | +msgid "enabled" |
| 1564 | +msgstr "" |
| 1565 | + |
| 1566 | +#: performance/performance.install:85 |
| 1567 | +msgid "Performance logging query" |
| 1568 | +msgstr "" |
| 1569 | + |
| 1570 | +#: performance/performance.install:88 |
| 1571 | +msgid "Query timing and count logging is !link. This can cause memory size per page to be larger than normal." |
| 1572 | +msgstr "" |
| 1573 | + |
| 1574 | +#: performance/performance.install:95 |
| 1575 | +msgid "Performance logging APC" |
| 1576 | +msgstr "" |
| 1577 | + |
| 1578 | +#: performance/performance.install:98 |
| 1579 | +msgid "Performance logging on live web sites works best if APC is enabled." |
| 1580 | +msgstr "" |
| 1581 | + |
| 1582 | +#: performance/performance.install:105 |
| 1583 | +msgid "Performance logging APC memory size" |
| 1584 | +msgstr "" |
| 1585 | + |
| 1586 | +#: performance/performance.install:108 |
| 1587 | +msgid "APC has been configured for !size, which is less than the recommended 48 MB of memory. If you encounter errors when viewing the summary report, then try to increase that limit for APC." |
| 1588 | +msgstr "" |
| 1589 | + |
1529 | 1590 | #: performance/performance.info:0 |
| 1591 | +msgid "Performance Logging" |
| 1592 | +msgstr "" |
| 1593 | + |
| 1594 | +#: performance/performance.info:0 |
1530 | 1595 | msgid "Logs detailed and/or summary page generation time and memory consumption for page requests." |
1531 | 1596 | msgstr "" |
1532 | 1597 | |
Index: civicrm/trunk/sites/all/modules/devel/translations/hu.po |
— | — | @@ -1,67 +1,1533 @@ |
2 | | -# Hungarian translation of Drupal devel.module |
3 | | -# Copyright Weblabor Team <info [at] weblabor.hu> |
| 2 | +# Hungarian translation of Devel (6.x-1.18) |
| 3 | +# Copyright (c) 2009 by the Hungarian translation team |
4 | 4 | # |
5 | 5 | msgid "" |
6 | 6 | msgstr "" |
7 | | -"Project-Id-Version: 1.28\n" |
8 | | -"POT-Creation-Date: 2004-03-06 14:27+0100\n" |
9 | | -"PO-Revision-Date: 2003-03-06 14:44+0100\n" |
10 | | -"Last-Translator: Weblabor Team <info [at] weblabor.hu>\n" |
11 | | -"Language-Team: hu\n" |
| 7 | +"Project-Id-Version: Devel (6.x-1.18)\n" |
| 8 | +"POT-Creation-Date: 2009-12-02 19:21+0000\n" |
| 9 | +"PO-Revision-Date: 2009-12-02 15:18+0000\n" |
| 10 | +"Language-Team: Hungarian\n" |
12 | 11 | "MIME-Version: 1.0\n" |
13 | 12 | "Content-Type: text/plain; charset=utf-8\n" |
14 | 13 | "Content-Transfer-Encoding: 8bit\n" |
15 | | -"Plural-Forms: nplurals=2; plural=n != 1;\n" |
| 14 | +"Plural-Forms: nplurals=2; plural=(n!=1);\n" |
16 | 15 | |
17 | | -#: devel.module:56 |
| 16 | +msgid "delete" |
| 17 | +msgstr "törlés" |
| 18 | +msgid "Delete" |
| 19 | +msgstr "Törlés" |
| 20 | +msgid "Submit" |
| 21 | +msgstr "Beküldés" |
| 22 | +msgid "Operations" |
| 23 | +msgstr "Műveletek" |
| 24 | +msgid "Value" |
| 25 | +msgstr "Érték" |
| 26 | +msgid "Development" |
| 27 | +msgstr "Fejlesztés" |
| 28 | +msgid "yes" |
| 29 | +msgstr "igen" |
| 30 | +msgid "Cancel" |
| 31 | +msgstr "Mégsem" |
| 32 | +msgid "Disabled" |
| 33 | +msgstr "Tiltott" |
| 34 | +msgid "Enabled" |
| 35 | +msgstr "Engedélyezett" |
| 36 | +msgid "Yes" |
| 37 | +msgstr "Igen" |
| 38 | +msgid "No" |
| 39 | +msgstr "Nem" |
| 40 | +msgid "view" |
| 41 | +msgstr "megtekintés" |
| 42 | +msgid "Date" |
| 43 | +msgstr "Dátum" |
| 44 | +msgid "None" |
| 45 | +msgstr "Nincs" |
| 46 | +msgid "default" |
| 47 | +msgstr "alapértelmezés" |
| 48 | +msgid "No log messages available." |
| 49 | +msgstr "Nincs egyetlen rögzített esemény sem." |
| 50 | +msgid "Name" |
| 51 | +msgstr "Név" |
| 52 | +msgid "edit" |
| 53 | +msgstr "szerkesztés" |
| 54 | +msgid "" |
| 55 | +msgstr "-" |
| 56 | +msgid "username" |
| 57 | +msgstr "felhasználói név" |
| 58 | +msgid "Default" |
| 59 | +msgstr "Alapértelmezés" |
| 60 | +msgid "Length" |
| 61 | +msgstr "Hossz" |
| 62 | +msgid "Path" |
| 63 | +msgstr "Útvonal" |
| 64 | +msgid "#" |
| 65 | +msgstr "#" |
| 66 | +msgid "status" |
| 67 | +msgstr "állapot" |
| 68 | +msgid "no" |
| 69 | +msgstr "nem" |
| 70 | +msgid "Adjust module settings for devel module" |
| 71 | +msgstr "A <em>Devel</em> modul beállításai" |
| 72 | +msgid "" |
| 73 | +"Clear the database cache tables which store page, menu, node, and " |
| 74 | +"variable caches." |
| 75 | +msgstr "" |
| 76 | +"Az adatbázis oldal, menü, tartalom és változó gyorstárakat " |
| 77 | +"tartalmazó tábláinak ürítése." |
| 78 | +msgid "" |
| 79 | +"View a list of currently defined user functions with documentation " |
| 80 | +"links" |
| 81 | +msgstr "" |
| 82 | +"Lista a jelenlegi felhasználói függvényekről dokumentációs " |
| 83 | +"hivatkozásokkal." |
| 84 | +msgid "Re-run hook_install() for a given module" |
| 85 | +msgstr "hook_install() újrafuttatása egy megadott modulon" |
| 86 | +msgid "Resets all menu items to their default settings" |
| 87 | +msgstr "" |
| 88 | +"Minden menüelem visszaállítása az alapértelmezés szerinti " |
| 89 | +"értékre" |
| 90 | +msgid "Edit and delete site variables" |
| 91 | +msgstr "Oldal változóinak szerkesztése és törlése" |
| 92 | +msgid "List the contents of $_SESSION" |
| 93 | +msgstr "$_SESSION tartalmának listázása" |
| 94 | +msgid "php" |
| 95 | +msgstr "php" |
| 96 | +msgid "Session ID" |
| 97 | +msgstr "Munkamenet azonosító" |
| 98 | +msgid "Last access" |
| 99 | +msgstr "Utolsó aktivitás" |
| 100 | +msgid "Count" |
| 101 | +msgstr "Mennyiség" |
| 102 | +msgid "node" |
| 103 | +msgstr "tartalom" |
| 104 | +msgid "Now" |
| 105 | +msgstr "Most" |
| 106 | +msgid "Other" |
| 107 | +msgstr "Egyéb" |
| 108 | +msgid "access content" |
| 109 | +msgstr "tartalmak hozzáférése" |
| 110 | +msgid "Function" |
| 111 | +msgstr "Függvény" |
| 112 | +msgid "create" |
| 113 | +msgstr "létrehozás" |
| 114 | +msgid "Database queries" |
| 115 | +msgstr "Adatbázis lekérdezések" |
| 116 | +msgid "Switch" |
| 117 | +msgstr "Váltás" |
| 118 | +msgid "ago" |
| 119 | +msgstr "óta" |
| 120 | +msgid "Clear" |
| 121 | +msgstr "Törlés" |
| 122 | +msgid "update" |
| 123 | +msgstr "frissítés" |
| 124 | +msgid "Query" |
| 125 | +msgstr "Lekérdezés" |
| 126 | +msgid "NO" |
| 127 | +msgstr "NEM" |
| 128 | +msgid "YES" |
| 129 | +msgstr "IGEN" |
| 130 | +msgid "Do it!" |
| 131 | +msgstr "Gyerünk!" |
| 132 | +msgid "missing" |
| 133 | +msgstr "hiányzó" |
| 134 | +msgid "loading" |
| 135 | +msgstr "betöltés" |
| 136 | +msgid "Dev load" |
| 137 | +msgstr "Fejlesztő betöltés" |
| 138 | +msgid "Enter username" |
| 139 | +msgstr "Felhasználónév megadása" |
| 140 | +msgid "Username not found" |
| 141 | +msgstr "Nincs ilyen felhasználó" |
| 142 | +msgid "administer nodes" |
| 143 | +msgstr "tartalmak adminisztrációja" |
| 144 | +msgid "TRUE" |
| 145 | +msgstr "IGAZ" |
| 146 | +msgid "FALSE" |
| 147 | +msgstr "HAMIS" |
| 148 | +msgid "Users deleted." |
| 149 | +msgstr "A felhasználók törölve lettek." |
| 150 | +msgid "!num_users created." |
| 151 | +msgstr "!num_users létrejött." |
| 152 | +msgid "%num nodes created." |
| 153 | +msgstr "%num tartalom létre lett hozva." |
| 154 | +msgid "%num comments created." |
| 155 | +msgstr "%num hozzászólás jött létre." |
| 156 | +msgid "Deleted taxonomy." |
| 157 | +msgstr "Törölt taxonómiák." |
| 158 | +msgid "Created the following new vocabularies: !vocs" |
| 159 | +msgstr "A következő szótárak jöttek létre: !vocs" |
| 160 | +msgid "Created the following new terms: !terms" |
| 161 | +msgstr "A következő kifejezések jöttek létre: !terms" |
| 162 | +msgid "1 user" |
| 163 | +msgid_plural "@count users" |
| 164 | +msgstr[0] "1 felhasználó" |
| 165 | +msgstr[1] "@count felhasználó" |
| 166 | +msgid "" |
| 167 | +"This is a list of defined user functions that generated this current " |
| 168 | +"request lifecycle. Click on a function name to view its documention." |
| 169 | +msgstr "" |
| 170 | +"Ez egy - a jelenlegi lekérdezés életciklusában létrehozott - " |
| 171 | +"lista a felhasználói függvényekről. A függvény nevére " |
| 172 | +"kattintva tekinthető meg annak dokumentációja." |
| 173 | +msgid "" |
| 174 | +"Clicking a module's reinstall button will simulate " |
| 175 | +"uninstalling/installing a module. <code>hook_uninstall()</code> and " |
| 176 | +"<code>hook_install()</code> will be executed and the schema version " |
| 177 | +"number will be set to the most recent update number. You may have to " |
| 178 | +"manually clear out any existing tables first if the module doesn't " |
| 179 | +"implement <code>hook_uninstall()</code>." |
| 180 | +msgstr "" |
| 181 | +"Egy modul újratelepítés gombjára történő kattintás a modul " |
| 182 | +"eltávolítását és telepítését szimulálja. A " |
| 183 | +"<code>hook_uninstall()</code> és a <code>hook_install()</code> lesz " |
| 184 | +"végrehajtva, valamint a séma változatszáma a legutolsó " |
| 185 | +"frissítésére lesz beállítva. Először manuálisan kell törölni " |
| 186 | +"a meglévő táblákat, ha a modulban nincs megvalósítva a " |
| 187 | +"<code>hook_uninstall()</code> hurok." |
| 188 | +msgid "Here are the contents of your <code>$_SESSION</code> variable." |
| 189 | +msgstr "A <code>$_SESSION</code> változó tartalma." |
| 190 | +msgid "" |
| 191 | +"This is a list of the variables and their values currently stored in " |
| 192 | +"variables table and the <code>$conf</code> array of your settings.php " |
| 193 | +"file. These variables are usually accessed with <a " |
| 194 | +"href=\"@variable-get-doc\">variable_get()</a> and <a " |
| 195 | +"href=\"@variable-set-doc\">variable_set()</a>. Variables that are too " |
| 196 | +"long can slow down your pages." |
| 197 | +msgstr "" |
| 198 | +"Ez egy lista a jelenleg a változó táblában tárolt változókról " |
| 199 | +"és értékeikről, valamint a settings.php fájl <code>$conf</code> " |
| 200 | +"tömbjéről. Ezek a változók általában elérhetőek a <a " |
| 201 | +"href=\"@variable-get-doc\">variable_get()</a> és a <a " |
| 202 | +"href=\"@variable-set-doc\">variable_set()</a> függvényekkel. A túl " |
| 203 | +"hosszú változók lassíthatják az oldalt." |
| 204 | +msgid "Empty cache" |
| 205 | +msgstr "Gyorstár ürítése" |
| 206 | +msgid "Rebuild node_comment_statistics table" |
| 207 | +msgstr "A node_comment_statistics tábla újraépítése" |
| 208 | +msgid "Empty database queries" |
| 209 | +msgstr "Üres adatbázis lekérdezések" |
| 210 | +msgid "function reference" |
| 211 | +msgstr "függvény referencia" |
| 212 | +msgid "Reinstall modules" |
| 213 | +msgstr "Modulok újratelepítése" |
| 214 | +msgid "Reset menus" |
| 215 | +msgstr "Menük visszaállítása" |
| 216 | +msgid "Variable editor" |
| 217 | +msgstr "Változó szerkesztő" |
| 218 | +msgid "Session viewer" |
| 219 | +msgstr "Munkafolyamat nézőke" |
| 220 | +msgid "Switch user" |
| 221 | +msgstr "Felhasználóváltás" |
| 222 | +msgid "Devel" |
| 223 | +msgstr "Devel" |
| 224 | +msgid "Dev render" |
| 225 | +msgstr "Fejlesztő megjelenítés" |
| 226 | +msgid "Dev queries" |
| 227 | +msgstr "Dev lekérdezések" |
| 228 | +msgid "Dev items" |
| 229 | +msgstr "Dev elemek" |
| 230 | +msgid "Execute PHP" |
| 231 | +msgstr "PHP futtatása" |
| 232 | +msgid "Number of users to display in the list" |
| 233 | +msgstr "A listában megjelenített felhasználók száma" |
| 234 | +msgid "devel" |
| 235 | +msgstr "fejlesztő" |
| 236 | +msgid "Execute functions scheduled for cron runs." |
| 237 | +msgstr "" |
| 238 | +"Időzített feladatok futtatásakor tervezett műveletek " |
| 239 | +"végrehajtása." |
| 240 | +msgid "Execute php" |
| 241 | +msgstr "PHP futtatása" |
| 242 | +msgid "This user can switch back." |
| 243 | +msgstr "Ez a felhasználó vissza tud váltani." |
| 244 | +msgid "Caution: this user will be unable to switch back." |
| 245 | +msgstr "Vigyázat: ez a felhasználó nem fog tudni visszaváltani." |
| 246 | +msgid "" |
| 247 | +"<p>The user is being redirected to <a " |
| 248 | +"href=\"@destination\">@destination</a>.</p>" |
| 249 | +msgstr "" |
| 250 | +"<p>A felhasználó át lett irányítva ide: <a " |
| 251 | +"href=\"@destination\">@destination</a>.</p>" |
| 252 | +msgid "" |
| 253 | +" Queries taking longer than %threshold ms and queries executed more " |
| 254 | +"than once, are <span class=\"marker\">highlighted</span>." |
| 255 | +msgstr "" |
| 256 | +" %threshold ezredmásodpercnél hosszabb lekérdezések, és az " |
| 257 | +"egynél többször végrehajtott lekérdezések <span " |
| 258 | +"class=\"marker\">kiemelve</span> jelennek meg." |
| 259 | +msgid "Memory used at %type: %value MB" |
| 260 | +msgstr "%type memóriahasználata: %value MB" |
18 | 261 | msgid "Query log" |
19 | | -msgstr "SQL napló" |
20 | | - |
21 | | -#: devel.module:116 |
22 | | -msgid "Development helper functions" |
23 | | -msgstr "Fejlesztést segítő eszközök" |
24 | | - |
25 | | -#: devel.module:123 |
26 | | -msgid "Display Page Timer" |
27 | | -msgstr "Oldal idémérő megjelenítése" |
28 | | - |
29 | | -#: devel.module:123 ;124 |
30 | | -# msgid "Disabled" |
31 | | -# msgstr "" |
32 | | - |
33 | | -#: devel.module:123 ;124 |
34 | | -# msgid "Enabled" |
35 | | -# msgstr "" |
36 | | - |
37 | | -#: devel.module:123 |
38 | | -msgid "Display page execution time in the query log box." |
39 | | -msgstr "Az oldal előállításához szükséges idő megjelenítése." |
40 | | - |
41 | | -#: devel.module:124 |
| 262 | +msgstr "Lekérdezésnapló" |
| 263 | +msgid "Collect query info. If disabled, no query log functionality will work." |
| 264 | +msgstr "" |
| 265 | +"Lekérdezési információk gyűjtése. Tiltott állapotban a " |
| 266 | +"lekérdezések nem lesznek naplózva." |
| 267 | +msgid "" |
| 268 | +"You must disable or upgrade the php Zend Optimizer extension in order " |
| 269 | +"to enable this feature. The minimum required version is 3.2.8. Earlier " |
| 270 | +"versions of Zend Optimizer are <a href=\"!url\">horribly buggy and " |
| 271 | +"segfault your Apache</a> ... " |
| 272 | +msgstr "" |
| 273 | +"A modul engedélyezéséhez a <em>Zend Optimizer</em> PHP " |
| 274 | +"kiterjesztést le kell tiltani, vagy frissíteni kell azt. A " |
| 275 | +"szükséges változat legalább 3.2.8-as. A <em>Zend Optimizer</em> " |
| 276 | +"korábbi változatai <a href=\"!url\">nagyon hibásak és " |
| 277 | +"szegmentálási hibát okoznak az <em>Apache</em> " |
| 278 | +"webkiszolgálóban</a>. " |
| 279 | +msgid "Collect query info" |
| 280 | +msgstr "Lekérdezési információk gyűjtése" |
42 | 281 | msgid "Display query log" |
43 | | -msgstr "SQL napló megjelenítése" |
44 | | - |
45 | | -#: devel.module:124 |
| 282 | +msgstr "Lekérdezésnapló megjelenítése" |
46 | 283 | msgid "" |
47 | | -"Display a log of the database queries needed to generate the current page, " |
48 | | -"the and the execution time for each. Also, a queries which are repeated " |
49 | | -"during a single page view are summed in the # column, and printed in red " |
50 | | -"since they are candidates for caching." |
| 284 | +"Display a log of the database queries needed to generate the current " |
| 285 | +"page, and the execution time for each. Also, queries which are " |
| 286 | +"repeated during a single page view are summed in the # column, and " |
| 287 | +"printed in red since they are candidates for caching." |
51 | 288 | msgstr "" |
52 | | -"Az oldal előállításához szükséges adatbázis lekérdezések naplóját jeleníti " |
53 | | -"meg azok futási idejével. Ismétlődő lekérdezések piros színben jelennek meg, " |
54 | | -"hiszen éppen ezek azok, amelyek gyorsítótárazásra a legjobb jelöltek." |
55 | | - |
56 | | -#: devel.module:125 |
| 289 | +"Megjelenít egy naplót az aktuális oldal létrehozásához " |
| 290 | +"szükséges adatbázis lekérdezésekről és azok végrehajtási " |
| 291 | +"idejejéről. Az oldal megtekintése folyamán megismételt " |
| 292 | +"lekérdezések a # oszlopban vannak összegezve, és vörössel ki " |
| 293 | +"vannak emelve, mivel ezek potenciálisan a gyorstárba kerülhetnek." |
| 294 | +msgid "Sort query log" |
| 295 | +msgstr "Lekérdezésnapló rendezése" |
| 296 | +msgid "by source" |
| 297 | +msgstr "végrehajtás szerint" |
| 298 | +msgid "by duration" |
| 299 | +msgstr "időtartam szerint" |
57 | 300 | msgid "" |
58 | | -"Enter an integer in milliseconds. Any query which takes longer than this " |
59 | | -"many milliseconds will be highlighted in the query log. This indicates a " |
60 | | -"possibliy inefficient query, or a candidate for caching." |
| 301 | +"The query table can be sorted in the order that the queries were " |
| 302 | +"executed or by descending duration." |
61 | 303 | msgstr "" |
62 | | -"Adj meg egy egész számot. Bármely lekérdezés, mely ennyi milliszekundumnál " |
63 | | -"hosszabban fut kiemelt lesz az SQL naplóban. Ezek általában rossz " |
64 | | -"hatékonyságú parancsok vagy gyorsítótárazható lekérdezések." |
65 | | - |
66 | | -#: devel.module:130 |
| 304 | +"A lekérdezési tábla rendezhető a lekérdezés végrehajtási " |
| 305 | +"sorrendje vagy csökkenő sorrendben az időtartama szerint." |
| 306 | +msgid "Slow query highlighting" |
| 307 | +msgstr "Lassú lekérdezések kiemelése" |
| 308 | +msgid "" |
| 309 | +"Enter an integer in milliseconds. Any query which takes longer than " |
| 310 | +"this many milliseconds will be highlighted in the query log. This " |
| 311 | +"indicates a possibly inefficient query, or a candidate for caching." |
| 312 | +msgstr "" |
| 313 | +"Egy egész számot kell megadni ezredmásodpercnek. Minden " |
| 314 | +"lekérdezés, ami ennél tovább tart, ki lesz emelve a lekérdezések " |
| 315 | +"naplójában. A kiemelés egy nem megfelelő lekérdezés, vagy egy " |
| 316 | +"lehetséges gyorstárazás jele lehet." |
| 317 | +msgid "Store executed queries" |
| 318 | +msgstr "Végrehajtott lekérdezések tárolása" |
| 319 | +msgid "" |
| 320 | +"Store statistics about executed queries. See the devel_x tables. This " |
| 321 | +"feature is currently only available for the MySQL database backend." |
| 322 | +msgstr "" |
| 323 | +"Statisztika tárolása a végrehajtott lekérdezésekről a {devel_x} " |
| 324 | +"táblákban. Ez a lehetőség csak MySQL adatbáziskezelő esetén " |
| 325 | +"elérhető." |
| 326 | +msgid "Sampling interval" |
| 327 | +msgstr "Mintavételi időköz" |
| 328 | +msgid "" |
| 329 | +"If storing query statistics, only store every nth page view. 1 means " |
| 330 | +"every page view, 2 every second, and so on." |
| 331 | +msgstr "" |
| 332 | +"A lekérdezések statisztikáinak tárolásakor csak minden X. " |
| 333 | +"oldalmegtekintés lesz tárolva. Az 1 minden oldalmegtekintést " |
| 334 | +"jelent, a 2 minden másodikat, stb..." |
| 335 | +msgid "Display page timer" |
| 336 | +msgstr "Oldalidőzítő megjelenítése" |
| 337 | +msgid "Display page execution time in the query log box." |
| 338 | +msgstr "" |
| 339 | +"Oldal létrehozási idejének megjelenítése a lekérdezésnapló " |
| 340 | +"dobozában." |
| 341 | +msgid "Display memory usage" |
| 342 | +msgstr "Memóriahasználat megjelenítése" |
| 343 | +msgid "" |
| 344 | +"Display how much memory is used to generate the current page. This " |
| 345 | +"will show memory usage when devel_init() is called and when " |
| 346 | +"devel_exit() is called. PHP must have been compiled with the " |
| 347 | +"<em>--enable-memory-limit</em> configuration option for this feature " |
| 348 | +"to work." |
| 349 | +msgstr "" |
| 350 | +"Az aktuális oldal létrehozásához szükséges memória " |
| 351 | +"megjelenítése. Megmutatja a memóriahasználatot a devel_init() és " |
| 352 | +"a devel_exit() meghívásakor. Ennek a lehetőségnek a " |
| 353 | +"használatához a PHP-t az <em>--enable-memory-limit</em> " |
| 354 | +"konfigurációs lehetőséggel kell lefordítani." |
| 355 | +msgid "Display redirection page" |
| 356 | +msgstr "Átirányított oldalak megjelenítése" |
| 357 | +msgid "" |
| 358 | +"When a module executes drupal_goto(), the query log and other " |
| 359 | +"developer information is lost. Enabling this setting presents an " |
| 360 | +"intermediate page to developers so that the log can be examined before " |
| 361 | +"continuing to the destination page." |
| 362 | +msgstr "" |
| 363 | +"Amikor egy modul a drupal_goto() függvényt használja, a " |
| 364 | +"lekérdezések naplója és a többi fejlesztői információ " |
| 365 | +"elveszik. A beállítás engedélyezése egy közbeeső oldalt " |
| 366 | +"jelenít meg a fejlesztőknek, ahol meg lehet vizsgálni a naplót a " |
| 367 | +"cél oldal megjelenítése előtt." |
| 368 | +msgid "Display form element keys and weights" |
| 369 | +msgstr "Űrlapelemek kulcsainak és súlyainak megjelenítése" |
| 370 | +msgid "" |
| 371 | +"Form element names are needed for performing themeing or altering a " |
| 372 | +"form. Their weights determine the position of the element. Enabling " |
| 373 | +"this setting will show these keys and weights beside each form item." |
| 374 | +msgstr "" |
| 375 | +"Az űrlapelemek neveire sminkelésnél vagy egy űrlap " |
| 376 | +"módosításánál van szükség. A súly az elem helyét határozza " |
| 377 | +"meg. Ez a beállítás ezeket a kulcsokat és súlyokat jeleníti meg " |
| 378 | +"minden elem mellett." |
| 379 | +msgid "Error handler" |
| 380 | +msgstr "Hibakezelő" |
| 381 | +msgid "Standard drupal" |
| 382 | +msgstr "Szabványos Drupal" |
| 383 | +msgid "Backtrace" |
| 384 | +msgstr "Backtrace" |
| 385 | +msgid "Log only" |
| 386 | +msgstr "Csak naplózás" |
| 387 | +msgid "Other (!library)" |
| 388 | +msgstr "Más (!library)" |
| 389 | +msgid "SMTP library" |
| 390 | +msgstr "SMTP könyvtár" |
| 391 | +msgid "PHP code to execute" |
| 392 | +msgstr "Futtatandó PHP kód" |
| 393 | +msgid "Enter some code. Do not use <code><?php ?></code> tags." |
| 394 | +msgstr "" |
| 395 | +"Kód megadása. A <code><?php ?></code> jelölést nem szabad " |
| 396 | +"használni." |
| 397 | +msgid "Execute" |
| 398 | +msgstr "Végrehajt" |
| 399 | +msgid "" |
| 400 | +"Are you sure you want to reset all menu items to their default " |
| 401 | +"settings?" |
| 402 | +msgstr "" |
| 403 | +"Biztos, hogy visszaállítható minden menüelem az alapértelmezés " |
| 404 | +"szerinti beállításra?" |
| 405 | +msgid "Any custom additions or changes to the menu will be lost." |
| 406 | +msgstr "A menü minden egyéni beállítása és módosítása el fog veszni." |
| 407 | +msgid "Reset all" |
| 408 | +msgstr "Összes visszaállítása" |
| 409 | +msgid "Primary links" |
| 410 | +msgstr "Elsődleges hivatkozások" |
| 411 | +msgid "The menu items have been reset to their default settings." |
| 412 | +msgstr "" |
| 413 | +"A menüelemek alapértelmezés szerinti beállításai vissza lettek " |
| 414 | +"állítva." |
| 415 | +msgid "Reinstall @name module" |
| 416 | +msgstr "@name modul újratelepítése" |
| 417 | +msgid "Warning - will delete your module tables and variables." |
| 418 | +msgstr "Figyelmeztetés - törli a modul tábláit és változóit." |
| 419 | +msgid "Reinstalled the %name module." |
| 420 | +msgstr "%name modul újra lett telepítve." |
| 421 | +msgid "Old value" |
| 422 | +msgstr "Régi érték" |
| 423 | +msgid "New value" |
| 424 | +msgstr "Új érték" |
| 425 | +msgid "" |
| 426 | +"Sorry, complex variable types may not be edited yet. Use the " |
| 427 | +"<em>Execute PHP</em> block and the <a " |
| 428 | +"href=\"@variable-set-doc\">variable_set()</a> function." |
| 429 | +msgstr "" |
| 430 | +"Sajnos összetett változótípusokat még nem lehet szerkeszteni. A " |
| 431 | +"<em>PHP futtatása</em> blokkban a <a " |
| 432 | +"href=\"@variable-set-doc\">variable_set()</a> függvény használható " |
| 433 | +"erre a célra." |
| 434 | +msgid "Saved new value for %name" |
| 435 | +msgstr "%name új értékének mentése megtörtént" |
| 436 | +msgid "Session name" |
| 437 | +msgstr "Munkamenetnév" |
| 438 | +msgid " Page execution time was %time ms." |
| 439 | +msgstr " Az oldal létrehozásának ideje %time ms volt." |
| 440 | +msgid "" |
| 441 | +"Mail sent:<br />Key: %mailkey<br />To: %to<br />From: %from<br " |
| 442 | +"/>Subject: %subject<br />Body: %body<br /><br />Additional headers: " |
| 443 | +"!header" |
| 444 | +msgstr "" |
| 445 | +"Elküldött levél: <br />Kulcs: %mailkey<br />Címzett: %to<br " |
| 446 | +"/>Feladó: %from<br />Tárgy: %subject<br />Törzs: %body<br /><br " |
| 447 | +"/>További fejlécek: !header" |
| 448 | +msgid "Total (ms)" |
| 449 | +msgstr "Összes (ms)" |
| 450 | +msgid "Average (ms)" |
| 451 | +msgstr "Átlag (ms)" |
| 452 | +msgid "Std deviation (ms)" |
| 453 | +msgstr "Szokásos eltérés (ms)" |
| 454 | +msgid "Delete collected query statistics" |
| 455 | +msgstr "Összegyűjtött lekérdezési statisztikák törlése" |
| 456 | +msgid "Stored query statistics deleted." |
| 457 | +msgstr "A tárolt lekérdezési statisztikák törölve lettek." |
| 458 | +msgid "one variable deleted" |
| 459 | +msgid_plural "@count variables deleted" |
| 460 | +msgstr[0] "egy változó törölve lett" |
| 461 | +msgstr[1] "@count változó törölve lett" |
67 | 462 | msgid "access devel information" |
68 | | -msgstr "elérés: fejlesztői információk" |
| 463 | +msgstr "hozzáférés a fejlesztő információihoz" |
| 464 | +msgid "execute php code" |
| 465 | +msgstr "php kód futtatása" |
| 466 | +msgid "switch users" |
| 467 | +msgstr "felhasználóváltás" |
| 468 | +msgid "Generate users" |
| 469 | +msgstr "Felhasználók létrehozása" |
| 470 | +msgid "Generate a given number of users. Optionally delete current users." |
| 471 | +msgstr "" |
| 472 | +"Megadott számú felhasználó létrehozása. Lehetséges a létező " |
| 473 | +"felhasználók törlése is." |
| 474 | +msgid "Generate content" |
| 475 | +msgstr "Tartalom létrehozása" |
| 476 | +msgid "" |
| 477 | +"Generate a given number of nodes and comments. Optionally delete " |
| 478 | +"current items." |
| 479 | +msgstr "" |
| 480 | +"Megadott számú tartalom és hozzászólás létrehozása. " |
| 481 | +"Lehetséges a meglévő elemek törlése is." |
| 482 | +msgid "Generate categories" |
| 483 | +msgstr "Kategóriák létrehozása" |
| 484 | +msgid "" |
| 485 | +"Generate a given number of vocabularies and terms. Optionally delete " |
| 486 | +"current categories." |
| 487 | +msgstr "" |
| 488 | +"Megadott számú szótár és kifejezés létrehozása. Lehetséges a " |
| 489 | +"meglévő kategóriák törlése is." |
| 490 | +msgid "How many users would you like to generate?" |
| 491 | +msgstr "Létrehozandó felhasználók száma" |
| 492 | +msgid "Delete all users but user 1 before generating new users." |
| 493 | +msgstr "" |
| 494 | +"Az 1-es kivételével az összes felhasználó törlése az újak " |
| 495 | +"létrehozása előtt." |
| 496 | +msgid "" |
| 497 | +". <strong>Warning</strong>. This type contains CCK fields which won't " |
| 498 | +"be populated. See !url" |
| 499 | +msgstr "" |
| 500 | +". <strong>Figyelmeztetés</strong>. Ez a típus olyan CCK mezőket " |
| 501 | +"tartalmaz, melyeket nem lehet feltölteni. Lásd: !url" |
| 502 | +msgid "this CCK issue." |
| 503 | +msgstr "ez CCK probléma." |
| 504 | +msgid "Which node types do you want to create?" |
| 505 | +msgstr "Milyen tartalomtípusok legyenek létrehozva?" |
| 506 | +msgid "" |
| 507 | +"<strong>Delete existing content</strong> before generating new " |
| 508 | +"content." |
| 509 | +msgstr "" |
| 510 | +"<strong>Meglévő tartalmak törlése</strong> az újak létrehozása " |
| 511 | +"előtt." |
| 512 | +msgid "How many nodes would you like to generate?" |
| 513 | +msgstr "Létrehozandó tartalmak száma" |
| 514 | +msgid "How many comments would you like to generate?" |
| 515 | +msgstr "Hány hozzászólás legyen létrehozva?" |
| 516 | +msgid "Max word length of titles" |
| 517 | +msgstr "Címben szereplő szavak legnagyobb hossza" |
| 518 | +msgid "How many vocabularies would you like to generate?" |
| 519 | +msgstr "Létrehozandó szótárak száma" |
| 520 | +msgid "How many terms would you like to generate?" |
| 521 | +msgstr "Létrehozandó kifejezések száma" |
| 522 | +msgid "Max word length of term/vocab names" |
| 523 | +msgstr "Kifejezésekben/szótárakban szereplő szavak legnagyobb hossza" |
| 524 | +msgid "Delete existing terms and vocabularies before generating new content." |
| 525 | +msgstr "" |
| 526 | +"Meglévő kifejezések és szótárak törlése az újak létrehozása " |
| 527 | +"előtt." |
| 528 | +msgid "Development helper for node_access table" |
| 529 | +msgstr "Fejlesztői segítség a node_access táblához" |
| 530 | +msgid "" |
| 531 | +"This module helps in site development. Specifically, when an access " |
| 532 | +"control module is used to limit access to some or all nodes, this " |
| 533 | +"module provides some feedback showing the node_access table in the " |
| 534 | +"database." |
| 535 | +msgstr "" |
| 536 | +"Ez a modul az oldal fejlesztésében segít. Különösképp amikor " |
| 537 | +"egy hozzáférés vezérlő modult használunk arra, hogy korlátozzuk " |
| 538 | +"a hozzáféréseket néhány, vagy minden tartalomnál. Ez a modul " |
| 539 | +"visszajelzéseket ad, megmutatva az adatbázis node_access " |
| 540 | +"tábláját." |
| 541 | +msgid "" |
| 542 | +"The node_access table is one method Drupal provides to hide content " |
| 543 | +"from some users while displaying it to others. By default, Drupal " |
| 544 | +"shows all nodes to all users. There are a number of optional modules " |
| 545 | +"which may be installed to hide content from some users." |
| 546 | +msgstr "" |
| 547 | +"A node_access tábla egy módszer, amit a Drupal nyújt a tartalmak " |
| 548 | +"elrejtéséhez egyes felhasználók elől, míg azok másoknak " |
| 549 | +"megjelennek. Alapértelmezés szerint a Drupal minden tartalmat " |
| 550 | +"megjelenít minden felhasználónak. A tartalmak néhány " |
| 551 | +"felhasználó előli elrejtéséhez több lehetséges modult is lehet " |
| 552 | +"telepíteni." |
| 553 | +msgid "" |
| 554 | +"If you have not installed any of these modules, you really have no " |
| 555 | +"need for the devel_node_access module. This module is intended for " |
| 556 | +"use during development, so that developers and admins can confirm that " |
| 557 | +"the node_access table is working as expected. You probably do not " |
| 558 | +"want this module enabled on a production site." |
| 559 | +msgstr "" |
| 560 | +"Ha egyik ilyen modul sincs telepítve, akkor igazából nincs " |
| 561 | +"szükség a devel_node_access modulra. Ez a modul a fejlesztés során " |
| 562 | +"történő használatra van szánva, hogy a fejlesztők és az " |
| 563 | +"adminisztrátorok meggyőződhessenek arról, hogy a node_access " |
| 564 | +"tábla megfelelően működik. Egy éles webhelyen valószínűleg " |
| 565 | +"nincs szükség az engedélyezésére." |
| 566 | +msgid "" |
| 567 | +"This module provides two blocks. One called Devel Node Access by User " |
| 568 | +"is visible when a single node is shown on a page. This block shows " |
| 569 | +"which users can view, update or delete the node shown. Note that this " |
| 570 | +"block uses an inefficient algorithm to produce its output. You should " |
| 571 | +"only enable this block on sites with very few user accounts." |
| 572 | +msgstr "" |
| 573 | +"Ez a modul két blokkot biztosít. A <em>Devel</em> " |
| 574 | +"tartalomhozzáférés felhasználónként akkor látható amikor egy " |
| 575 | +"oldalon egy tartalom jelenik meg. Ez a blokk megmutatja, hogy mely " |
| 576 | +"felhasználók tekinthetik meg, módosíthatják vagy törölhetik a " |
| 577 | +"megjelenített tartalmat. Meg kell jegyezni, hogy ez a blokk egy nem " |
| 578 | +"túl hatékony algoritmust használ a kimenet előállítására. Csak " |
| 579 | +"olyan oldalon érdemes használni ahol kevés felhasználó van." |
| 580 | +msgid "node_access summary" |
| 581 | +msgstr "node_access összefoglaló" |
| 582 | +msgid "Access Granted to All Nodes (All Users)" |
| 583 | +msgstr "" |
| 584 | +"A hozzáférés engedélyezett minden tartalomhoz (minden " |
| 585 | +"felhasználó)" |
| 586 | +msgid "" |
| 587 | +"Your node_access table contains entries that may be granting all users " |
| 588 | +"access to all nodes. Depending on which access control module(s) you " |
| 589 | +"use, you may want to delete these entries. If you are not using an " |
| 590 | +"access control module, you should probably leave these entries as is." |
| 591 | +msgstr "" |
| 592 | +"A node_access tábla olyan bejegyzéseket tartalmaz, ami alapján " |
| 593 | +"minden felhasználó hozzáférhet az összes tartalomhoz. A használt " |
| 594 | +"hozzáférés vezérlő moduloktól függően ezeket a bejegyzéseket " |
| 595 | +"érdemes törölni. Ha nincs használatban hozzáférés vezérlő " |
| 596 | +"modul, akkor valószínűleg így lehet hagyni." |
| 597 | +msgid "realm" |
| 598 | +msgstr "tartomány" |
| 599 | +msgid "Legacy Nodes" |
| 600 | +msgstr "Örökölt tartalmak" |
| 601 | +msgid "" |
| 602 | +"You have !num nodes in your node table which are not represented in " |
| 603 | +"your node_access table. If you have an access control module " |
| 604 | +"installed, these nodes may be hidden from all users. This could be " |
| 605 | +"caused by publishing nodes before enabling the access control module. " |
| 606 | +"If this is the case, manually updating each node should add it to the " |
| 607 | +"node_access table and fix the problem." |
| 608 | +msgstr "" |
| 609 | +"!num olyan tartalom van a node táblában, ami nem szerepel a " |
| 610 | +"node_access táblában. Ha van telepített hozzáférés vezérlő " |
| 611 | +"modul, akkor ezek a tartalmak valószínűleg el vannak rejtve a " |
| 612 | +"felhasználók elől. Ezt az okozhatja, hogy a tartalom a " |
| 613 | +"hozzáférés vezérlő modul engedélyezése előtt lett " |
| 614 | +"közzétéve. Ebben az esetben a tartalmak manuális módosítása " |
| 615 | +"hozzáadja a node_access táblához, amivel megoldja ezt a " |
| 616 | +"problémát." |
| 617 | +msgid "All Nodes Represented" |
| 618 | +msgstr "Minden tartalom szerepel" |
| 619 | +msgid "All nodes are represented in the node_access table." |
| 620 | +msgstr "Minden tartalom szerepel a node_access táblában." |
| 621 | +msgid "Access Granted to All Nodes (Some Users)" |
| 622 | +msgstr "" |
| 623 | +"A hozzáférés engedélyezve lett minden tartalomhoz (néhány " |
| 624 | +"felhasználónak)" |
| 625 | +msgid "" |
| 626 | +"Your node_access table contains entries that may be granting some " |
| 627 | +"users access to all nodes. This may be perfectly normal, depending on " |
| 628 | +"which access control module(s) you use." |
| 629 | +msgstr "" |
| 630 | +"A node_access tábla olyan bejegyzéseket tartalmaz, ami alapján " |
| 631 | +"néhány felhasználó hozzáférhet az összes tartalomhoz. Ez " |
| 632 | +"teljesen normális lehet, függően a használt hozzáférés " |
| 633 | +"vezérlő moduloktól." |
| 634 | +msgid "Access Granted to Some Nodes" |
| 635 | +msgstr "A hozzáférés engedélyezve lett néhány tartalomhoz" |
| 636 | +msgid "" |
| 637 | +"The following realms appear to grant all users access to some specific " |
| 638 | +"nodes. This may be perfectly normal, if some of your content is " |
| 639 | +"available to the public." |
| 640 | +msgstr "" |
| 641 | +"A következő tartomány úgy tűnik, hogy néhány meghatározott " |
| 642 | +"tartalomhoz teljes felhasználói hozzáférést biztosít. Ez " |
| 643 | +"teljesen normális, ha a tartalom egy része nyilvánosan elérhető." |
| 644 | +msgid "public nodes" |
| 645 | +msgstr "nyilvános tartalmak" |
| 646 | +msgid "Public Nodes" |
| 647 | +msgstr "Nyilvános tartalmak" |
| 648 | +msgid "Summary by Realm" |
| 649 | +msgstr "Összegzés tartomány szerint" |
| 650 | +msgid "The following realms grant limited access to some specific nodes." |
| 651 | +msgstr "" |
| 652 | +"A következő tartomány korlátozott hozzáférést biztosít " |
| 653 | +"néhány meghatározott tartalomhoz." |
| 654 | +msgid "private nodes" |
| 655 | +msgstr "Privát tartalmak" |
| 656 | +msgid "Protected Nodes" |
| 657 | +msgstr "Védett tartalmak" |
| 658 | +msgid "Devel Node Access debug mode" |
| 659 | +msgstr "<em>Devel Node Access</em> hibakereső mód" |
| 660 | +msgid "" |
| 661 | +"Debug mode verifies the grants in the node_access table against those " |
| 662 | +"that would be set by running !Rebuild_permissions, and displays them " |
| 663 | +"all; this can cause considerable overhead." |
| 664 | +msgstr "" |
| 665 | +"A hibakereső mód ellenőrzi a node_access táblában szereplő " |
| 666 | +"jogokat azokkal szemben, amik a !Rebuild_permissions futtatásakor " |
| 667 | +"kerülnek beállításra, és megjeleníti azokat. Tekintélyes " |
| 668 | +"többletterhelést okoz." |
| 669 | +msgid "Devel Node Access" |
| 670 | +msgstr "Devel Node Access" |
| 671 | +msgid "Devel Node Access by User" |
| 672 | +msgstr "Devel Node Access felhasználónként" |
| 673 | +msgid "gid" |
| 674 | +msgstr "gid" |
| 675 | +msgid "explained" |
| 676 | +msgstr "magyarázat" |
| 677 | +msgid "ok" |
| 678 | +msgstr "rendben" |
| 679 | +msgid "Highest priority grant, in !na." |
| 680 | +msgstr "Legfontosabb, ebben: !na." |
| 681 | +msgid "ignored" |
| 682 | +msgstr "mellőzött" |
| 683 | +msgid "Lower priority grant, not in !na and thus ignored." |
| 684 | +msgstr "Kevésbé fontos, nincs !na értékben, ezért nincs figyelembevéve." |
| 685 | +msgid "empty" |
| 686 | +msgstr "üres" |
| 687 | +msgid "illegitimate" |
| 688 | +msgstr "jogtalan" |
| 689 | +msgid "Should NOT be in !na because of lower priority!" |
| 690 | +msgstr "Az alacsonyabb prioritás miatt NEM kell ebben lennie: !na" |
| 691 | +msgid "alien" |
| 692 | +msgstr "idegen" |
| 693 | +msgid "Should NOT be in !na because of unknown origin!" |
| 694 | +msgstr "Az ismeretlen származás miatt NEM kell ebben lennie: !na." |
| 695 | +msgid "prio" |
| 696 | +msgstr "prio" |
| 697 | +msgid "This entry grants access to this node to this user." |
| 698 | +msgstr "" |
| 699 | +"Ez a bejegyzés hozzéférést biztosít ehhez a tartalomhoz, ennek a " |
| 700 | +"felhasználónak." |
| 701 | +msgid "" |
| 702 | +"This user has the %administer_nodes permission and thus full access to " |
| 703 | +"all nodes." |
| 704 | +msgstr "" |
| 705 | +"Ez a felhasználó %administer_nodes jogosultsággal rendelkezik, " |
| 706 | +"ezért teljes hozzáférése van minden tartalomhoz." |
| 707 | +msgid "This user is granted %view access to node %nid !by_what" |
| 708 | +msgstr "" |
| 709 | +"Ez a felhasználó %view hozzáférési jogosultsággal rendelkezik a " |
| 710 | +"%nid tartalomhoz !by_what" |
| 711 | +msgid "by the %module module itself." |
| 712 | +msgstr "<em>%module</em> modul maga biztosítja." |
| 713 | +msgid "as author of the node." |
| 714 | +msgstr "mint a tartalom szerzője." |
| 715 | +msgid "node_access entries for nodes shown on this page" |
| 716 | +msgstr "node_access bejegyzések az oldalon látható tartalmakhoz" |
| 717 | +msgid "Access permissions by user" |
| 718 | +msgstr "Hozzáférési jogosultságok felhasználónként" |
| 719 | +msgid "Node Access: realm" |
| 720 | +msgstr "<em>Node Access</em>: tartomány" |
| 721 | +msgid "Node Access Realm" |
| 722 | +msgstr "<em>Node Access</em> tartomány" |
| 723 | +msgid "Node Access: Realm" |
| 724 | +msgstr "<em>Node Access</em>: Tartomány" |
| 725 | +msgid "Disabled query logging since devel module is disabled." |
| 726 | +msgstr "" |
| 727 | +"Lekérdezések naplózásának tiltása, amíg a <em>Devel</em> modul " |
| 728 | +"tiltott." |
| 729 | +msgid "Various blocks, pages, and functions for developers." |
| 730 | +msgstr "Különböző blokkok, oldalak és lehetőségek fejlesztőknek." |
| 731 | +msgid "Generator" |
| 732 | +msgstr "Generator" |
| 733 | +msgid "Generate dummy users, nodes, and taxonomy terms." |
| 734 | +msgstr "" |
| 735 | +"Ál-felhasználók, -tartalmak, és -taxonómia kifejezések " |
| 736 | +"létrehozása." |
| 737 | +msgid "Developer block and page illustrating relevant node_access records." |
| 738 | +msgstr "" |
| 739 | +"Fejlesztői blokk és oldal a lényeges node_access rekordok " |
| 740 | +"ábrázolásához." |
| 741 | +msgid "Assigned %n users to group %t." |
| 742 | +msgstr "%n felhasználó hozzá lett rendelve a %t csoporthoz." |
| 743 | +msgid "Y/m/d - G:i" |
| 744 | +msgstr "Y. m. d - G:i" |
| 745 | +msgid "Performance Logging" |
| 746 | +msgstr "Performance Logging" |
| 747 | +msgid "Logs performance data: page generation times and memory usage." |
| 748 | +msgstr "" |
| 749 | +"Teljesítmény adatokat naplóz: oldallétrehozási idők és " |
| 750 | +"memóriahasználat." |
| 751 | +msgid "Clear APC" |
| 752 | +msgstr "APC kiürítése" |
| 753 | +msgid "Clears performance statistics collected in APC." |
| 754 | +msgstr "Az APC-ben összegyűjtött teljesítménystatisztikák törlése." |
| 755 | +msgid "Performance Logs: Summary" |
| 756 | +msgstr "Teljesítménynapló összegzés" |
| 757 | +msgid "View summary performance logs: page generation times and memory usage." |
| 758 | +msgstr "" |
| 759 | +"Összegző teljesítménynaplók megtekintése: oldallétrehozási " |
| 760 | +"idők és memóriahasználat." |
| 761 | +msgid "Performance Logs: Details" |
| 762 | +msgstr "Teljesítménynapló részletek" |
| 763 | +msgid "" |
| 764 | +"View detailed, per page, performance logs: page generation times and " |
| 765 | +"memory usage." |
| 766 | +msgstr "" |
| 767 | +"Részletes, oldalankénti teljesítménynaplók megtekintése: " |
| 768 | +"oldallétrehozási idők és memóriahasználat." |
| 769 | +msgid "" |
| 770 | +"APC is enabled. It is reasonably safe to enable summary logging on " |
| 771 | +"live sites." |
| 772 | +msgstr "" |
| 773 | +"Az APC engedélyezve van. Az összegző naplózás engedélyezése " |
| 774 | +"éles webhelyeken biztonságos." |
| 775 | +msgid "" |
| 776 | +"APC is not enabled. It is <strong>not</strong> safe to enable summary " |
| 777 | +"logging to the database on live sites." |
| 778 | +msgstr "" |
| 779 | +"Az APC nem engedélyezett. Az összegző naplózás engedélyezése " |
| 780 | +"éles webhelyeken <strong>nem</strong> bizonságos." |
| 781 | +msgid "Logging mode" |
| 782 | +msgstr "Naplózási mód" |
| 783 | +msgid "Detailed logging" |
| 784 | +msgstr "Részletes naplózás" |
| 785 | +msgid "" |
| 786 | +"Log memory usage and page generation times for every page. This " |
| 787 | +"logging mode is <strong>not</strong> suitable for large sites, as it " |
| 788 | +"can degrade performance severly. It is intended for use by developers, " |
| 789 | +"or on a test copy of the site." |
| 790 | +msgstr "" |
| 791 | +"Memórihasználat és oldallétrehozási idők naplózása minden " |
| 792 | +"oldalon. Ez a naplózási mód nagyméretű oldalakhoz " |
| 793 | +"<strong>nem</strong> megfelelő, mivel komoly teljesítményromlást " |
| 794 | +"okoz. Fejlesztői, vagy a webhely egy tesztmásolatán történő " |
| 795 | +"használatra van szánva." |
| 796 | +msgid "Summary logging (DB)" |
| 797 | +msgstr "Összegző naplózás (DB)" |
| 798 | +msgid "" |
| 799 | +"Log summary data, such as average and maximum page generation times " |
| 800 | +"and memory usage to the database. This logging mode is " |
| 801 | +"<strong>not</strong> suitable for most live sites." |
| 802 | +msgstr "" |
| 803 | +"Összegző adatok naplózása, mint az átlagos és legnagyobb " |
| 804 | +"oldallétrehozási idők, valamint az adatbázis memóriahasználata. " |
| 805 | +"Ez a naplózási mód a legtöbb éles webhely számára " |
| 806 | +"<strong>nem</strong> ajánlott." |
| 807 | +msgid "Summary logging (APC)" |
| 808 | +msgstr "Összegző naplózás (APC)" |
| 809 | +msgid "" |
| 810 | +"Log summary data, such as average and maximum page generation times " |
| 811 | +"and memory usage to APC, if installed. The summary will be stored in " |
| 812 | +"APC memory, and hence there is no load on the database. This logging " |
| 813 | +"to APC is suitable for most live sites, unless the number of unique " |
| 814 | +"page accesses is excessively high." |
| 815 | +msgstr "" |
| 816 | +"Összegző adatok naplózása az APC-vel (ha telepítve van), mint az " |
| 817 | +"átlagos és legnagyobb oldallétrehozási idők valamint a " |
| 818 | +"memóriahasználat. Az összegzés az APC memóriában lesz tárolva, " |
| 819 | +"ezért nem terheli az adatbázist. Az APC-vel történő naplózás a " |
| 820 | +"legtöbb éles webhely számára megfelelő, kivéve, ha az egyedi " |
| 821 | +"oldallekérések száma szélsőségesen magas." |
| 822 | +msgid "Database Query timing and count" |
| 823 | +msgstr "Adatbázislekérdezés időmérő és számláló" |
| 824 | +msgid "" |
| 825 | +"Log database timing and count for each page. This is useful to know if " |
| 826 | +"the bottleneck is in excessive database query counts, or the time " |
| 827 | +"required to execute those queries is high. Please note that this will " |
| 828 | +"automatically be enabled and disabled in the settings of the devel " |
| 829 | +"module. Also note that enabling this will incurr some memory overhead " |
| 830 | +"as query times and the actual query strings are cached in memory as " |
| 831 | +"arrays." |
| 832 | +msgstr "" |
| 833 | +"Adatbázis időzítő és számláló naplózása minden oldalon. " |
| 834 | +"Hasznos, ha meg akarjuk tudni, hogy a szűk keresztmetszet az " |
| 835 | +"adatbázis lekérdezések nagy száma, vagy pedig a lekérdezésekre " |
| 836 | +"fordított idő nagysága. Meg kell jegyezni, hogy ez automatikusan " |
| 837 | +"engedélyezve, vagy tiltva lesz a <em>Devel</em> modul " |
| 838 | +"beállításaiban. Továbbá, az engedélyezés memória " |
| 839 | +"többletfelhasználással jár a lekérdezések alatt és a " |
| 840 | +"lekérdezések karaktersorozatai tömbként kerülnek gyorstárazásra " |
| 841 | +"a memóriában." |
| 842 | +msgid "Accesses threshold" |
| 843 | +msgstr "Hozzáférések küszöbértéke" |
| 844 | +msgid "" |
| 845 | +"When displaying the summary report and using APC, only pages with the " |
| 846 | +"number of accesses larger than the specified threshold will be shown. " |
| 847 | +"Also, when cron runs, pages with that number of accesses or less will " |
| 848 | +"be removed, so as not to overflow APC's shared memory. This is useful " |
| 849 | +"on a live site with a high volume of hits. On a development site, you " |
| 850 | +"probably want this set to 0, so you can see all pages." |
| 851 | +msgstr "" |
| 852 | +"Az összegző jelentés megtekintésekor és az APC használatakor " |
| 853 | +"csak azok az oldalak lesznek mutatva, melyek hozzáféréseinek száma " |
| 854 | +"nagyobb mint a megadott küszöbérték. Továbbá, az időzített " |
| 855 | +"feladatok végrehajtásakor az evvel azonos, vagy ennél kisebb " |
| 856 | +"számú hozzáféréssel rendelkező oldalak törölve lesznek, hogy " |
| 857 | +"az APC megosztott memóriája ne töltődjön túl. Hasznos a sok " |
| 858 | +"találattal rendelkező éles webhelyeken. Fejlesztői oldalon " |
| 859 | +"érdemes 0-ra állítani, hogy minden oldal megjelenjen." |
| 860 | +msgid "# accesses" |
| 861 | +msgstr "# hozzáférés" |
| 862 | +msgid "Max Memory (MB)" |
| 863 | +msgstr "Max memória (MB)" |
| 864 | +msgid "Avg Memory (MB)" |
| 865 | +msgstr "Átlag memória (MB)" |
| 866 | +msgid "Milliseconds (Max)" |
| 867 | +msgstr "Ezredmásodperc (Max)" |
| 868 | +msgid "Milliseconds (Avg)" |
| 869 | +msgstr "Ezredmásodperc (Átlag)" |
| 870 | +msgid "Query Millisecs (Max)" |
| 871 | +msgstr "Lekérdezés ezredmásodperc (Max)" |
| 872 | +msgid "Query Millisecs (Avg)" |
| 873 | +msgstr "Lekérdezés ezredmásodperc (Átlag)" |
| 874 | +msgid "Query Count (Max)" |
| 875 | +msgstr "Lekérdezés szám (Max)" |
| 876 | +msgid "Query Count (Avg)" |
| 877 | +msgstr "Lekérdezésszám (Átlag)" |
| 878 | +msgid "No statistics available yet." |
| 879 | +msgstr "Még nincs elérhető statisztika." |
| 880 | +msgid "" |
| 881 | +"Showing !shown paths with more than !threshold accesses, out of !total " |
| 882 | +"total paths." |
| 883 | +msgstr "" |
| 884 | +"!shown elérési út megmutatása, több mint !threshold " |
| 885 | +"hozzáféréssel, a !total elérési útból." |
| 886 | +msgid "Showing all !total paths." |
| 887 | +msgstr "!total elérési utat jelenít meg." |
| 888 | +msgid "Average memory per page: !mb_avg MB" |
| 889 | +msgstr "Átlagos memóriahasználat oldalanként: !mb_avg MB" |
| 890 | +msgid "Average milliseconds per page: !ms_avg" |
| 891 | +msgstr "Átlag futásidő oldalanként: !ms_avg ms" |
| 892 | +msgid "Total number of page accesses: !accesses" |
| 893 | +msgstr "Összes oldalletöltés: !accesses" |
| 894 | +msgid "First access: !access." |
| 895 | +msgstr "Első hozzáférés: !access." |
| 896 | +msgid "Last access: !access." |
| 897 | +msgstr "Utolsó hozzáférés: !access." |
| 898 | +msgid "Memory (MB)" |
| 899 | +msgstr "Memória (MB)" |
| 900 | +msgid "Milliseconds (Total)" |
| 901 | +msgstr "Ezredmásodpercek (összesen)" |
| 902 | +msgid "Anonymous?" |
| 903 | +msgstr "Anonymous?" |
| 904 | +msgid "# Queries" |
| 905 | +msgstr "# Lekérdezés" |
| 906 | +msgid "Query Milliseconds" |
| 907 | +msgstr "Lekérdezés időtartama ezredmásodpercekben" |
| 908 | +msgid "Confirm APC clear" |
| 909 | +msgstr "APC kiürítésének jóváhagyása" |
| 910 | +msgid "Are you sure you want to clear the APC statistics for this site?" |
| 911 | +msgstr "Biztosan törölhető ennek a webhelynek az APC statisztikája?" |
| 912 | +msgid "" |
| 913 | +"This will clear all the collected performance statistics stored in " |
| 914 | +"APC. This action cannot be undone." |
| 915 | +msgstr "" |
| 916 | +"Az összes APC gyorstárban tárolt teljesítménystatisztikát " |
| 917 | +"törli. Ez a művelet nem vonható vissza." |
| 918 | +msgid "Performance statistics collected in APC has been cleared." |
| 919 | +msgstr "" |
| 920 | +"Az APC által összegyűjtött teljesítménystatisztikák törölve " |
| 921 | +"lettek." |
| 922 | +msgid "" |
| 923 | +"Logs detailed and/or summary page generation time and memory " |
| 924 | +"consumption for page requests." |
| 925 | +msgstr "" |
| 926 | +"Részletes és/vagy összegző oldallétrehozási idő és " |
| 927 | +"memóriafelhasználás naplózása minden oldalbetöltésnél." |
| 928 | +msgid "The menu router has been rebuilt." |
| 929 | +msgstr "Az útvonalirányító újraépítése megtörtént." |
| 930 | +msgid "1 node created." |
| 931 | +msgid_plural "@count nodes created" |
| 932 | +msgstr[0] "1 tartalom létre lett hozva." |
| 933 | +msgstr[1] "@count tartalom létre lett hozva." |
| 934 | +msgid "Deleted one post" |
| 935 | +msgid_plural "Deleted @count posts" |
| 936 | +msgstr[0] "Egy beküldés törölve lett" |
| 937 | +msgstr[1] "@count beküldés törölve lett" |
| 938 | +msgid "Generating Content" |
| 939 | +msgstr "Tartalom létrehozása" |
| 940 | +msgid "Finished @num_nids nodes created successfully." |
| 941 | +msgstr "@num_nids tartalom sikeresen létre lett hozva." |
| 942 | +msgid "Finished with an error." |
| 943 | +msgstr "Hibával fejeződött be." |
| 944 | +msgid "Disable Theme developer" |
| 945 | +msgstr "Sminkfejlesztő tiltása" |
| 946 | +msgid "Enable Theme developer" |
| 947 | +msgstr "Sminkfejlesztő engedélyezése" |
| 948 | +msgid "Invalid file path" |
| 949 | +msgstr "Érvénytelen elérési út" |
| 950 | +msgid "" |
| 951 | +"The theme registry is being rebuilt on every request. Remember to <a " |
| 952 | +"href=\"!url\">turn off</a> this feature on production websites." |
| 953 | +msgstr "" |
| 954 | +"A smink gyorstár minden lekérésnél újra van építve. Éles " |
| 955 | +"oldalakon <a href=\"!url\">ki kell kapcsolni</a> ezt a lehetőséget." |
| 956 | +msgid "Caution: this user will be unable switch back." |
| 957 | +msgstr "Figyelem: ez a felhasználó nem képes visszaváltani." |
| 958 | +msgid "Enter function name for api lookup" |
| 959 | +msgstr "Függvénynév megadása az API-ban való kereséshez" |
| 960 | +msgid "Store statistics about executed queries. See the devel_x tables." |
| 961 | +msgstr "" |
| 962 | +"Statisztikákat tárol a végrehajtott lekérdezésekről. Lásd a " |
| 963 | +"devel_x táblákat." |
| 964 | +msgid "API Site" |
| 965 | +msgstr "API webhely" |
| 966 | +msgid "" |
| 967 | +"The base URL for your developer documentation links. You might change " |
| 968 | +"this if you run <a href=\"!url\">api.module</a> locally." |
| 969 | +msgstr "" |
| 970 | +"Fejlesztői dokumentáció oldalának webcíme. Megváltoztatható az " |
| 971 | +"<a href=\"!url\">api.module</a> helyi használatakor." |
| 972 | +msgid "Krumo display" |
| 973 | +msgstr "<em>Krumo</em> képernyő" |
| 974 | +msgid "" |
| 975 | +"Select a skin for your debug messages or select <em>disabled</em> to " |
| 976 | +"display object and array output in standard PHP format." |
| 977 | +msgstr "" |
| 978 | +"Smink kiválasztása a hibakeresési üzenetekhez, vagy " |
| 979 | +"<em>tiltás</em> az objektumok és tömbök megjelenítése standard " |
| 980 | +"PHP formátumban történő megjelenítéséhez." |
| 981 | +msgid "Rebuild the theme registry on every page load" |
| 982 | +msgstr "Smink gyorstár újraépítése minden oldalbetöltésnél" |
| 983 | +msgid "" |
| 984 | +"While creating new templates and theme_ overrides the theme registry " |
| 985 | +"needs to be rebuilt." |
| 986 | +msgstr "" |
| 987 | +"Új sablonok és theme_ felülírások létrehozásakor szükséges a " |
| 988 | +"smink gyorstár újraépítése." |
| 989 | +msgid "" |
| 990 | +"Uninstall and then install the selected modules. " |
| 991 | +"<code>hook_uninstall()</code> and <code>hook_install()</code> will be " |
| 992 | +"executed and the schema version number will be set to the most recent " |
| 993 | +"update number. You may have to manually clear out any existing tables " |
| 994 | +"first if the module doesn't implement <code>hook_uninstall()</code>." |
| 995 | +msgstr "" |
| 996 | +"A kiválasztott modulok törlése, majd telepítése. A " |
| 997 | +"<code>hook_uninstall()</code> és a <code>hook_install()</code> lesz " |
| 998 | +"végrehajtva és a séma változatszáma a legfrissebb frissítés " |
| 999 | +"szerint lesz beállítva. Először manuálisan törölni kell a " |
| 1000 | +"meglévő táblákat, ha a modulban nincs megvalósítva a " |
| 1001 | +"<code>hook_uninstall()</code> hurok." |
| 1002 | +msgid "Reinstall" |
| 1003 | +msgstr "Újratelepítés" |
| 1004 | +msgid "Uninstalled and installed the %name module." |
| 1005 | +msgstr "%name modul eltávolítása majd újratelepítése megtörtént." |
| 1006 | +msgid "Saved new value for %name." |
| 1007 | +msgstr "%name új értéke el lett mentve." |
| 1008 | +msgid "Display of !type !obj" |
| 1009 | +msgstr "!type !obj megjelenítése" |
| 1010 | +msgid "{empty}" |
| 1011 | +msgstr "{üres}" |
| 1012 | +msgid "The file could not be written." |
| 1013 | +msgstr "A fájl nem írható." |
| 1014 | +msgid "%message in %file on line %line." |
| 1015 | +msgstr "%message - %file - %line. sor." |
| 1016 | +msgid "" |
| 1017 | +"Mail sent:<br />Id: %mail_id<br />To: %to<br />From: %from<br " |
| 1018 | +"/>Language: %lang<br />Subject: %subject<br />Body: %body<br /><br " |
| 1019 | +"/>Additional headers: <br />!header" |
| 1020 | +msgstr "" |
| 1021 | +"Elküldött levél: <br />Azonosító: %mail_id<br />Címzett: %to<br " |
| 1022 | +"/>Feladó: %from<br />Nyelv: %lang<br />Tárgy: %subject<br />Törzs: " |
| 1023 | +"%body<br /><br />További fejlécek: <br />!header" |
| 1024 | +msgid "One variable deleted." |
| 1025 | +msgid_plural "@count variables deleted." |
| 1026 | +msgstr[0] "Egy változó törölve lett." |
| 1027 | +msgstr[1] "@count változó törölve lett." |
| 1028 | +msgid "1 character" |
| 1029 | +msgid_plural "@count characters" |
| 1030 | +msgstr[0] "1 karakter" |
| 1031 | +msgstr[1] "@count karakter" |
| 1032 | +msgid "1 element" |
| 1033 | +msgid_plural "@count elements" |
| 1034 | +msgstr[0] "1 elem" |
| 1035 | +msgstr[1] "@count elem" |
| 1036 | +msgid "display source code" |
| 1037 | +msgstr "forráskód megjelenítése" |
| 1038 | +msgid "" |
| 1039 | +"Clear the CSS cache and all database cache tables which store page, " |
| 1040 | +"node, theme and variable caches." |
| 1041 | +msgstr "" |
| 1042 | +"Az összes oldal, tartalom, smink és változó gyorstárat " |
| 1043 | +"tartalmazó adatbázis gyorstár és a CSS gyorstár kiürítése." |
| 1044 | +msgid "Function reference" |
| 1045 | +msgstr "Függvényreferencia" |
| 1046 | +msgid "" |
| 1047 | +"View a list of currently defined user functions with documentation " |
| 1048 | +"links." |
| 1049 | +msgstr "" |
| 1050 | +"Lista a jelenlegi felhasználói függvényekről dokumentációs " |
| 1051 | +"hivatkozásokkal." |
| 1052 | +msgid "Run hook_uninstall() and then hook_install() for a given module." |
| 1053 | +msgstr "" |
| 1054 | +"Az adott modul hook_uninstall() majd a hook_install() függvényének " |
| 1055 | +"futtatása." |
| 1056 | +msgid "foo" |
| 1057 | +msgstr "blabla" |
| 1058 | +msgid "" |
| 1059 | +"Quickly enable or disable theme developer module. Useful for removing " |
| 1060 | +"HTML cruft added by that module." |
| 1061 | +msgstr "" |
| 1062 | +"Sminkfejlesztő modul gyors engedélyezése és tiltása. A modul " |
| 1063 | +"által hozzáadott zavaró HTML kódok eltávolításához " |
| 1064 | +"használható." |
| 1065 | +msgid "Display the PHP code of any file in your Drupal installation" |
| 1066 | +msgstr "" |
| 1067 | +"A Drupal telepítésben található bármely fájl PHP kódjának " |
| 1068 | +"megjelenítése." |
| 1069 | +msgid "Rebuild menus" |
| 1070 | +msgstr "Menük újraépítése" |
| 1071 | +msgid "" |
| 1072 | +"Rebuild menu based on hook_menu() and revert any custom changes. All " |
| 1073 | +"menu items return to their default settings." |
| 1074 | +msgstr "" |
| 1075 | +"Menü újraépítése a hook_menu() alapján és az egyéni " |
| 1076 | +"módosítások törlése. Minden menüelem visszakapja az " |
| 1077 | +"alapértelmezés szerinti beállításait." |
| 1078 | +msgid "Edit and delete site variables." |
| 1079 | +msgstr "Oldal változóinak törlése és szerkesztése." |
| 1080 | +msgid "PHPinfo()" |
| 1081 | +msgstr "PHPinfo()" |
| 1082 | +msgid "View your server's PHP configuration" |
| 1083 | +msgstr "A kiszolgáló PHP beállításainak megtekintése" |
| 1084 | +msgid "Execute PHP Code" |
| 1085 | +msgstr "PHP kód futtatása" |
| 1086 | +msgid "Execute some PHP code" |
| 1087 | +msgstr "PHP kód futtatása" |
| 1088 | +msgid "Theme registry" |
| 1089 | +msgstr "Smink gyorstár" |
| 1090 | +msgid "View a list of available theme functions across the whole site." |
| 1091 | +msgstr "" |
| 1092 | +"A webhelyen rendelkezésre álló összes sminkfüggvény listájának " |
| 1093 | +"megtekintése." |
| 1094 | +msgid "Hook_elements()" |
| 1095 | +msgstr "Hook_elements()" |
| 1096 | +msgid "View the active form/render elements for this site." |
| 1097 | +msgstr "A webhely aktív űrlap/környezet elemeinek megtekintése." |
| 1098 | +msgid "List the contents of $_SESSION." |
| 1099 | +msgstr "$_SESSION tartalmának listázása." |
| 1100 | +msgid "Devel settings" |
| 1101 | +msgstr "Fejlesztő beállításai" |
| 1102 | +msgid "Delete all users (except user id 1) before generating new users." |
| 1103 | +msgstr "" |
| 1104 | +"Az összes felhasználó törlése (az 1-es kivételével) az újak " |
| 1105 | +"létrehozása előtt." |
| 1106 | +msgid "How old should user accounts be?" |
| 1107 | +msgstr "Mikortól jöhetnek létre a felhasználói profilok" |
| 1108 | +msgid "" |
| 1109 | +"User ages will be distributed randomly from the current time, back to " |
| 1110 | +"the selected time." |
| 1111 | +msgstr "" |
| 1112 | +"A felhasználók csatlakozási ideje véletlenszerűen lesz elosztva " |
| 1113 | +"az aktuális időpont és a kiválasztott időtartam között." |
| 1114 | +msgid "" |
| 1115 | +". This type contains CCK fields which will only be populated by fields " |
| 1116 | +"that implement the content_generate hook." |
| 1117 | +msgstr "" |
| 1118 | +". Ez a típus olyan CCK mezőket tartalmaz, melyek csak akkor " |
| 1119 | +"tölthetőek fel, ha megvalósítják a content_generate hurkot." |
| 1120 | +msgid "" |
| 1121 | +"<strong>Delete all content</strong> in these node types before " |
| 1122 | +"generating new content." |
| 1123 | +msgstr "" |
| 1124 | +"<strong>Minden tartalom törlése</strong> ebből a típusból az új " |
| 1125 | +"tartalmak létrehozása előtt." |
| 1126 | +msgid "How far back in time should the nodes be dated?" |
| 1127 | +msgstr "Mikortól jöhetnek létre a tartalmak" |
| 1128 | +msgid "" |
| 1129 | +"Node creation dates will be distributed randomly from the current " |
| 1130 | +"time, back to the selected time." |
| 1131 | +msgstr "" |
| 1132 | +"A tartalmak létrehozási dátuma véletlenszerűen lesz elosztva az " |
| 1133 | +"aktuális, és a kiválasztott időpont között." |
| 1134 | +msgid "Maximum number of generated comments per node" |
| 1135 | +msgstr "" |
| 1136 | +"A létrehozott hozzászólások számának felső határa " |
| 1137 | +"tartalmanként" |
| 1138 | +msgid "You must also enable comments for the node types you are generating." |
| 1139 | +msgstr "" |
| 1140 | +"Engedélyezni kell a hozzászólásokat a létrehozni kívánt " |
| 1141 | +"tartalomtípusoknál." |
| 1142 | +msgid "Requires upload.module" |
| 1143 | +msgstr "<em>Upload</em> modult igényel" |
| 1144 | +msgid "Add an upload to each node" |
| 1145 | +msgstr "Feltöltés hozzáadása minden tartalomhoz" |
| 1146 | +msgid "Requires taxonomy.module" |
| 1147 | +msgstr "<em>Taxonomy</em> modult igényel" |
| 1148 | +msgid "Add taxonomy terms to each node." |
| 1149 | +msgstr "Taxonómia kifejezések hozzáadása minden tartalomhoz" |
| 1150 | +msgid "Requires path.module" |
| 1151 | +msgstr "<em>Path</em> modult igényel" |
| 1152 | +msgid "Add an url alias for each node." |
| 1153 | +msgstr "Webcímálnév hozzáadása minden tartalomhoz" |
| 1154 | +msgid "Generate node view statistics (node_counter table)." |
| 1155 | +msgstr "" |
| 1156 | +"Tartalom megtekintési statisztikák létrehozása (node_counter " |
| 1157 | +"tábla)" |
| 1158 | +msgid "Generate items" |
| 1159 | +msgstr "Elemek létrehozása" |
| 1160 | +msgid "Populate your database with dummy items." |
| 1161 | +msgstr "Az adatbázis feltöltése ál-elemekkel." |
| 1162 | +msgid "" |
| 1163 | +"Default grant supplied by core in the absence of any other non-empty " |
| 1164 | +"grants, in !na." |
| 1165 | +msgstr "" |
| 1166 | +"Az alaprendszer által biztosított jogok bármilyen más, nem üres " |
| 1167 | +"jogok hiányában, itt: !na." |
| 1168 | +msgid "" |
| 1169 | +"Does not grant any access, but could block lower priority grants; not " |
| 1170 | +"in !na." |
| 1171 | +msgstr "" |
| 1172 | +"Nem biztosít hozzáférést, de blokkolhatja az alacsonyabb " |
| 1173 | +"prioritású jogokat. Nincs itt: !na." |
| 1174 | +msgid "Should be in !na but isn't!" |
| 1175 | +msgstr "Itt kellene lennie, de nincs: !na." |
| 1176 | +msgid "Node_access summary" |
| 1177 | +msgstr "Node_access összefoglaló" |
| 1178 | +msgid "Devel node access" |
| 1179 | +msgstr "<em>Devel</em> tartalomhozzáférés" |
| 1180 | +msgid "" |
| 1181 | +"Helper pages and blocks to assist Drupal developers and admins with " |
| 1182 | +"node_access. The devel blocks can be managed via the Blocks " |
| 1183 | +"(admin/build/block) page." |
| 1184 | +msgstr "" |
| 1185 | +"A Drupal fejlesztőket és adminisztrátorokat a node_access " |
| 1186 | +"használatában segítő oldalak és blokkok. A <em>Devel</em> " |
| 1187 | +"blokkokat a Blokkok (admin/build/block) oldalon lehet beállítani." |
| 1188 | +msgid "Devel Themer module %action." |
| 1189 | +msgstr "<em>Devel Themer</em> modul %action." |
| 1190 | +msgid "Display theme log" |
| 1191 | +msgstr "Sminknapló megjelenítése" |
| 1192 | +msgid "" |
| 1193 | +"Display the list of theme templates and theme functions which could " |
| 1194 | +"have been be used for a given page. The one that was actually used is " |
| 1195 | +"bolded. This is the same data as the represented in the popup, but all " |
| 1196 | +"calls are listed in chronological order and can alternately be sorted " |
| 1197 | +"by time." |
| 1198 | +msgstr "" |
| 1199 | +"Megjelenít egy listát azokról a sminksablonokról és " |
| 1200 | +"sminkfüggvényekről, melyek egy adott oldalon használatban " |
| 1201 | +"lehetnek. Az aktuálisan használt vastag betűvel van kiemelve. Ez " |
| 1202 | +"ugyanaz az adat, mint ami a felugró ablakban jelenik meg, de minden " |
| 1203 | +"hívás időrendben van listázva, és idő szerint rendezhető." |
| 1204 | +msgid "Themer info" |
| 1205 | +msgstr "Sminkinformáció" |
| 1206 | +msgid "Parents: " |
| 1207 | +msgstr "Szülők: " |
| 1208 | +msgid "Function called: " |
| 1209 | +msgstr "Hívott függvények: " |
| 1210 | +msgid "Template called: " |
| 1211 | +msgstr "Hívott sablonok: " |
| 1212 | +msgid "Candidate template files: " |
| 1213 | +msgstr "Lehetséges sablonfájlok: " |
| 1214 | +msgid "Preprocess functions: " |
| 1215 | +msgstr "Előfeldolgozó függvények: " |
| 1216 | +msgid "Candidate function names: " |
| 1217 | +msgstr "Lehetséges függvények nevei: " |
| 1218 | +msgid "link to Drupal API documentation" |
| 1219 | +msgstr "hivatkozás a Drupal API dokumentációra" |
| 1220 | +msgid "link to source code" |
| 1221 | +msgstr "hivatkozás a forráskódra" |
| 1222 | +msgid "Function Arguments" |
| 1223 | +msgstr "Függvényargumentumok" |
| 1224 | +msgid "Template Variables" |
| 1225 | +msgstr "Sablon változói" |
| 1226 | +msgid "File used: " |
| 1227 | +msgstr "Használt fájl: " |
| 1228 | +msgid "Duration: " |
| 1229 | +msgstr "Időtartam: " |
| 1230 | +msgid "Drupal Themer Information" |
| 1231 | +msgstr "<em>Drupal Themer</em> információ" |
| 1232 | +msgid "" |
| 1233 | +"Click on any element to see information about the Drupal theme " |
| 1234 | +"function or template that created it." |
| 1235 | +msgstr "" |
| 1236 | +"Bármelyik elemre kattintva információ jeleníthető meg az elemet " |
| 1237 | +"létrehozó Drupal sminkfüggvényről vagy sablonról." |
| 1238 | +msgid "Theme Developer" |
| 1239 | +msgstr "Sminkfejlesztő" |
| 1240 | +msgid "Display or hide the textual template log" |
| 1241 | +msgstr "Szöveges sablonnapló megjelenítése vagy elrejtése" |
| 1242 | +msgid "Devel Themer Enable" |
| 1243 | +msgstr "<em>Devel Themer</em> engedélyezése" |
| 1244 | +msgid "Theme Development Enable" |
| 1245 | +msgstr "Sminkfejlesztés engedélyezése" |
| 1246 | +msgid "Theme Development AJAX variables" |
| 1247 | +msgstr "Sminkfejlesztés AJAX változók" |
| 1248 | +msgid "Development links." |
| 1249 | +msgstr "Fejlesztési hivatkozások." |
| 1250 | +msgid "Zend Optimizer" |
| 1251 | +msgstr "Zend Optimizer" |
| 1252 | +msgid "" |
| 1253 | +"You must disable the Zend Optimizer php extension in order to enable " |
| 1254 | +"this module. Zend Optimizer is <a href=\"!url\">horribly buggy and " |
| 1255 | +"segfaults your Apache</a>." |
| 1256 | +msgstr "" |
| 1257 | +"A modul engedélyezéséhez a <em>Zend Optimizer</em> PHP " |
| 1258 | +"kiterjesztést le kell tiltani. A <em>Zend Optimizer</em> <a " |
| 1259 | +"href=\"!url\">szörnyű szegmentálási hibákat okoz az Apache " |
| 1260 | +"webkiszolgálóban</a>." |
| 1261 | +msgid "Devel generate" |
| 1262 | +msgstr "Devel generate" |
| 1263 | +msgid "Theme developer" |
| 1264 | +msgstr "Sminkfejlesztő" |
| 1265 | +msgid "Essential theme API information for theme developers" |
| 1266 | +msgstr "Alapvető smink API információk sminkfejlesztőknek" |
| 1267 | +msgid "" |
| 1268 | +"Log database query timing and query count for each page. This is " |
| 1269 | +"useful to know if the bottleneck is in excessive database query " |
| 1270 | +"counts, or the time required to execute those queries is high. " |
| 1271 | +"Enabling this will incurr some memory overhead as query times and the " |
| 1272 | +"actual query strings are cached in memory as arrays for each page, " |
| 1273 | +"hence skewing the overall page memory reported. Please note that this " |
| 1274 | +"settings is enabled or disabled in the settings of the devel module." |
| 1275 | +msgstr "" |
| 1276 | +"Adatbázis lekérdezés időzítő és lekérdezés számláló " |
| 1277 | +"naplózása minden oldalon. Hasznos, ha meg akarjuk tudni, hogy a " |
| 1278 | +"szűk keresztmetszet az adatbázis lekérdezések nagy száma, vagy " |
| 1279 | +"pedig a lekérdezésekre fordított idő nagysága. Az engedélyezés " |
| 1280 | +"memória többletfelhasználással jár a lekérdezések alatt, " |
| 1281 | +"illetve a lekérdezések karaktersorozatai tömbként kerülnek " |
| 1282 | +"gyorstárazásra a memóriában, ezért az oldalról jelentett teljes " |
| 1283 | +"memóriafelhasználás értéke torzíthat. Ezt a lehetőséget a " |
| 1284 | +"<em>Devel</em> modul beállításainál lehet engedélyezni vagy " |
| 1285 | +"tiltani." |
| 1286 | +msgid "APC is not enabled. Nothing to do ..." |
| 1287 | +msgstr "Az APC nincs bekapcsolva. Nincs teendő ..." |
| 1288 | +msgid "Performance logging is not enabled" |
| 1289 | +msgstr "A teljesítmény naplózása nincs engedélyezve" |
| 1290 | +msgid "Performance logging" |
| 1291 | +msgstr "Teljesítmény naplózása" |
| 1292 | +msgid "Performance logging details" |
| 1293 | +msgstr "Teljesítménynaplózás részletei" |
| 1294 | +msgid "Performance logging query" |
| 1295 | +msgstr "Teljesítménynaplózás lekérdezések" |
| 1296 | +msgid "Performance logging APC" |
| 1297 | +msgstr "Teljesítménynaplózás APC" |
| 1298 | +msgid "Performance logging on live web sites works best if APC is enabled." |
| 1299 | +msgstr "" |
| 1300 | +"A teljesítménynaplózás éles webhelyeken jobban működik, ha az " |
| 1301 | +"APC engedélyezve van." |
| 1302 | +msgid "Performance logging APC memory size" |
| 1303 | +msgstr "Teljesítménynaplózás APC memóriamérete" |
| 1304 | +msgid "" |
| 1305 | +"APC has been configured for !size, which is less than the recommended " |
| 1306 | +"48 MB of memory. If you encounter errors when viewing the summary " |
| 1307 | +"report, then try to increase that limit for APC." |
| 1308 | +msgstr "" |
| 1309 | +"Az APC beállításaiban !size szerepel, ami kisebb, mint a javasolt " |
| 1310 | +"48MB. Ha az összegző jelentés megtekintésekor hibák történnek, " |
| 1311 | +"akkor meg kell növelni az APC méretét." |
| 1312 | +msgid "" |
| 1313 | +"This issue may be masked by the one above, so look into the former " |
| 1314 | +"first." |
| 1315 | +msgstr "" |
| 1316 | +"Ezt a probléma egy fentebb lévő következménye is lehet, tehát " |
| 1317 | +"először a korábbit kell vizsgálni." |
| 1318 | +msgid "unexpected" |
| 1319 | +msgstr "váratlan" |
| 1320 | +msgid "" |
| 1321 | +"The 0/0/all/... grant applies to all nodes and all users -- usually it " |
| 1322 | +"should not be present if any node access module is active!" |
| 1323 | +msgstr "" |
| 1324 | +"A 0/0/all/... jog minden tartalomra és felhasználóra alkalmazva " |
| 1325 | +"van. Ennek általában nem kellene megjelennie, ha egy " |
| 1326 | +"tartalomhozzáférési modul használatban van." |
| 1327 | +msgid "" |
| 1328 | +"You have errors in your !na table! You may be able to fix these for " |
| 1329 | +"now by running !Rebuild_permissions, but this is likely to destroy the " |
| 1330 | +"evidence and make it impossible to identify the underlying issues. If " |
| 1331 | +"you don't fix those, the errors will probably come back again. <br /> " |
| 1332 | +"DON'T do this just yet if you intend to ask for help with this " |
| 1333 | +"situation." |
| 1334 | +msgstr "" |
| 1335 | +"!na táblában hibák vannak! Lehet, hogy most ki lehet javítani a " |
| 1336 | +"!Rebuild_permissions futtatásával, de ez valószínűleg " |
| 1337 | +"megsemmisíti a bizonyítékot és lehetetlenné teszi az alapvető " |
| 1338 | +"probléma azonosítását. Ha nincs kijavítva, akkor a hibák " |
| 1339 | +"valószínűleg újból jelentkeznek. <br /> További " |
| 1340 | +"segítségkérés előtt NEM érdemes javítani a hibákat." |
| 1341 | +msgid "" |
| 1342 | +"by one or more of the following grants (if they are present above): " |
| 1343 | +"!list" |
| 1344 | +msgstr "" |
| 1345 | +"a következő egy vagy több jog által (ha feljebb jelen vannak): " |
| 1346 | +"!list" |
| 1347 | +msgid "" |
| 1348 | +"Choose an error handler for your site. <em>Backtrace</em> prints nice " |
| 1349 | +"debug information when an error is noticed, and you <a " |
| 1350 | +"href=\"@choose\">choose to show errors on screen</a>. " |
| 1351 | +"<strong>Backtrace requires the <a href=\"@krumo\">krumo " |
| 1352 | +"library</a></strong>. <em>None</em> is a good option when stepping " |
| 1353 | +"through the site in your debugger." |
| 1354 | +msgstr "" |
| 1355 | +"Az oldal hibakezelőjének kiválasztása. A <em>Backtrace</em> hiba " |
| 1356 | +"észlelésénél szép kimenetet ad és <a " |
| 1357 | +"href=\"@choose\">kiválasztható a hibák képernyőre írása</a>. A " |
| 1358 | +"<strong><em>Backtrace</em> használatához szükséges a <a " |
| 1359 | +"href=\"@krumo\"><em>Krumo</em> könyvtár</a></strong>. A „Nincs” " |
| 1360 | +"egy jó választás saját hibakereső használatakor." |
| 1361 | +msgid "" |
| 1362 | +"Helper functions, pages, and blocks to assist Drupal developers. The " |
| 1363 | +"devel blocks can be managed via the <a href=\"!block\">block " |
| 1364 | +"administration</a> page." |
| 1365 | +msgstr "" |
| 1366 | +"Drupal fejlesztőket segítő funkciók, oldalak és blokkok. A " |
| 1367 | +"<em>Devel</em> blokkokat a <a href=\"!block\">blokk " |
| 1368 | +"adminisztrációs</a> oldalon lehet beállítani." |
| 1369 | +msgid "" |
| 1370 | +"The second block provided by this module shows the entries in the " |
| 1371 | +"node_access table for any nodes shown on the current page. You can " |
| 1372 | +"enable the debug mode on the <a href=\"@settings_page\">settings " |
| 1373 | +"page</a> to display much more information, but this can cause " |
| 1374 | +"considerable overhead. Because the tables shown are wide, it is " |
| 1375 | +"recommended to enable the blocks in the page footer rather than a " |
| 1376 | +"sidebar." |
| 1377 | +msgstr "" |
| 1378 | +"A modul által biztosított második blokk a node_acess táblának " |
| 1379 | +"bármely, az aktuális oldalon megjelenő tartalomra vonatkozó " |
| 1380 | +"bejegyzését mutatja meg. Több információ megjelenítéséhez " |
| 1381 | +"lehetőség van a hibakereső mód engedélyezésére a <a " |
| 1382 | +"href=\"@settings_page\">beállítások oldalon</a>, de ez tekintélyes " |
| 1383 | +"többletterhelést okoz. Mivel a táblák megjelenítése széles, " |
| 1384 | +"javasolt a blokkot az oldalsávok helyett a láblécben " |
| 1385 | +"megjeleníteni." |
| 1386 | +msgid "" |
| 1387 | +"This module also provides a <a href=\"@summary_page\">summary page</a> " |
| 1388 | +"which shows general information about your node_access table. If you " |
| 1389 | +"have installed the Views module, you may browse node_access by realm." |
| 1390 | +msgstr "" |
| 1391 | +"Ez a modul biztosít még egy <a href=\"@summary_page\">összefoglaló " |
| 1392 | +"oldalt</a>, ahol általános információk találhatóak a node_access " |
| 1393 | +"tábláról. Ha a <em>Views</em> modul telepítve van, akkor a " |
| 1394 | +"node_access tábla tartományok szerint is böngészhető." |
| 1395 | +msgid "" |
| 1396 | +"For per-user access permissions enable the second DNA <a " |
| 1397 | +"href=\"@block\">block</a>." |
| 1398 | +msgstr "" |
| 1399 | +"A felhasználók szerinti hozzáférési jogosultságokhoz " |
| 1400 | +"engedélyezni kell a második DNA <a href=\"@block\">blokkot</a>." |
| 1401 | +msgid "To see more details enable <a href=\"@debug_mode\">debug mode</a>." |
| 1402 | +msgstr "" |
| 1403 | +"További részletek megtekintéséhez engedélyezni kell a <a " |
| 1404 | +"href=\"@debug_mode\">hibakereső módot</a>." |
| 1405 | +msgid "" |
| 1406 | +"!username has the %administer_nodes permission and thus full access to " |
| 1407 | +"all nodes." |
| 1408 | +msgstr "" |
| 1409 | +"!username %administer_nodes jogosultsággal rendelkezik, így teljes " |
| 1410 | +"hozzáférése van minden tartalomhoz." |
| 1411 | +msgid "These are the grants returned by hook_node_grants() for this user." |
| 1412 | +msgstr "" |
| 1413 | +"A hook_node_grants() ezeket a jogokat adta vissza ennek a " |
| 1414 | +"felhasználónak." |
| 1415 | +msgid "!username can use these grants (if they are present above): !list" |
| 1416 | +msgstr "" |
| 1417 | +"!username ezeket a jogokat használhatja (ha fentebb megjelennek): " |
| 1418 | +"!list" |
| 1419 | +msgid "!username has the following access" |
| 1420 | +msgstr "!username felhasználónak a következő hozzáférése van" |
| 1421 | +msgid "%op:" |
| 1422 | +msgstr "%op:" |
| 1423 | +msgid "to node !nid:" |
| 1424 | +msgstr "!nid tartalomhoz:" |
| 1425 | +msgid "Create nodes of the '@Node_type' type." |
| 1426 | +msgstr "„@Node_type” típusú tartalmak létrehozása." |
| 1427 | +msgid "" |
| 1428 | +"(This table lists the most-recently active users. Hover your mouse " |
| 1429 | +"over each result to see the reason for allowing or denying access.)" |
| 1430 | +msgstr "" |
| 1431 | +"(Ez a tábla a legutóbbi aktív felhasználókat listázza ki. Az " |
| 1432 | +"egeret az eredmények fölé mozgatva megtekinthető a hozzéférés " |
| 1433 | +"engedélyezésének vagy tiltásának oka.)" |
| 1434 | +msgid "Unable to load the node – this should never happen!" |
| 1435 | +msgstr "Nem lehet betölteni a tartalmat –! Ez sosem történhet meg!" |
| 1436 | +msgid "!NO: input format" |
| 1437 | +msgstr "!NO: beviteli forma" |
| 1438 | +msgid "" |
| 1439 | +"!NO: This user is not allowed to use the input format '!format' " |
| 1440 | +"(!fid)." |
| 1441 | +msgstr "" |
| 1442 | +"!NO: ez a felhasználó nem használhatja a „!format” (!fid) " |
| 1443 | +"beviteli formát." |
| 1444 | +msgid "!YES: administer nodes" |
| 1445 | +msgstr "!YES: tartalmak adminisztrációja" |
| 1446 | +msgid "" |
| 1447 | +"!YES: This user has the '!administer_nodes' permission and may do " |
| 1448 | +"everything with nodes." |
| 1449 | +msgstr "" |
| 1450 | +"!YES: ez a felhasználó „!administer_nodes” jogosultsággal " |
| 1451 | +"rendelkezik és mindent megtehet a tartalmakkal." |
| 1452 | +msgid "!NO: access content" |
| 1453 | +msgstr "!NO: tartalom elérése" |
| 1454 | +msgid "" |
| 1455 | +"!NO: This user does not have the '!access_content' permission and is " |
| 1456 | +"denied doing anything with content." |
| 1457 | +msgstr "" |
| 1458 | +"!NO: ez a felhasználó nem rendelkezik „!access_content” joggal, " |
| 1459 | +"ezért tiltott, hogy bármit is tegyen a tartalommal." |
| 1460 | +msgid "!YES: by the module" |
| 1461 | +msgstr "!YES: a modul által" |
| 1462 | +msgid "" |
| 1463 | +"!YES: The '@module' module (which defines the '@content_type' content " |
| 1464 | +"type) allows this, probably based on some permission." |
| 1465 | +msgstr "" |
| 1466 | +"!YES: a „@module” modul (ami meghatározza a „@content_type” " |
| 1467 | +"tartalomtípust) engedélyezi, valószínűleg egyéb engedélyek " |
| 1468 | +"alapján." |
| 1469 | +msgid "!NO: by the module" |
| 1470 | +msgstr "!NO: a modul által" |
| 1471 | +msgid "" |
| 1472 | +"!NO: The '@module' module (which defines the '@content_type' content " |
| 1473 | +"type) denies this." |
| 1474 | +msgstr "" |
| 1475 | +"!NO: a @module modul (ami meghatározza a „@content_type” " |
| 1476 | +"tartalomtípust) tiltja." |
| 1477 | +msgid "!YES: node access" |
| 1478 | +msgstr "!YES: Node access" |
| 1479 | +msgid "!YES: Node access allows this." |
| 1480 | +msgstr "!YES: Node access engedélyezi." |
| 1481 | +msgid "!NO: node access" |
| 1482 | +msgstr "!NO: node access" |
| 1483 | +msgid "!NO: Node access denies this." |
| 1484 | +msgstr "!NO: a Node access tiltja." |
| 1485 | +msgid "!YES: own node" |
| 1486 | +msgstr "!YES: saját tartalom" |
| 1487 | +msgid "!YES: The user may view his/her own node." |
| 1488 | +msgstr "!YES: a felhasználó megtekintheti a saját tartalmát." |
| 1489 | +msgid "!NO: no reason" |
| 1490 | +msgstr "!NO: nincs ok." |
| 1491 | +msgid "!NO: None of the checks resulted in allowing this, so it's denied." |
| 1492 | +msgstr "!NO: Az ellenőrzések egyike sem engedélyezi, tehát tiltott." |
| 1493 | +msgid "Node access was not checked because the node is not published." |
| 1494 | +msgstr "" |
| 1495 | +"A tartalom hozzáférése nem volt ellenőrizve, mert a tartalom " |
| 1496 | +"rejtett." |
| 1497 | +msgid "This is most likely due to a missing permission." |
| 1498 | +msgstr "Ez általában egy hiányzó jogosultság miatt következik be." |
| 1499 | +msgid "view devel_node_access information" |
| 1500 | +msgstr "devel_node_access információinak megtekintése" |
| 1501 | +msgid "" |
| 1502 | +"Summary performance log is not enabled. Go to the <a " |
| 1503 | +"href=\"@link\">settings page</a> to enable it." |
| 1504 | +msgstr "" |
| 1505 | +"Az összegző teljesítménynaplózás nincs engedélyezve. A <a " |
| 1506 | +"href=\"@link\">beállítások oldalon</a> lehet engedélyezni." |
| 1507 | +msgid "" |
| 1508 | +"Detail performance log is not enabled. Go to the <a " |
| 1509 | +"href=\"@link\">settings page</a> to enable it." |
| 1510 | +msgstr "" |
| 1511 | +"A részletes teljesítménynaplózás nincs engedélyezve. A <a " |
| 1512 | +"href=\"@link\">beállítások oldalon</a> lehet engedélyezni." |
| 1513 | +msgid "" |
| 1514 | +"Performance detailed logging is <a href=\"@link\">enabled</a>. This " |
| 1515 | +"can cause severe issues on live sites." |
| 1516 | +msgstr "" |
| 1517 | +"Az összegző teljesítménynaplózás <a " |
| 1518 | +"href=\"@link\">engedélyezve</a> van. Éles webhelyeken komoly " |
| 1519 | +"problémákat okozhat." |
| 1520 | +msgid "" |
| 1521 | +"Query timing and count logging is <a href=\"@link\">enabled</a>. This " |
| 1522 | +"can cause memory size per page to be larger than normal." |
| 1523 | +msgstr "" |
| 1524 | +"A lekérdezés időzítő és a számláló naplózása <a " |
| 1525 | +"href=\"@link\">engedélyezve van</a>. Emiatt az oldalanként " |
| 1526 | +"felhasznált memória mérete nagyobb lehet a szokásosnál." |
| 1527 | +msgid "" |
| 1528 | +"Helper functions, pages, and blocks to assist Drupal developers. The " |
| 1529 | +"devel blocks can be managed via the <a href=\"@block\">block " |
| 1530 | +"administration</a> page." |
| 1531 | +msgstr "" |
| 1532 | +"Drupal fejlesztőket segítő funkciók, oldalak és blokkok. A " |
| 1533 | +"<em>Devel</em> blokkokat a <a href=\"!block\">blokk " |
| 1534 | +"adminisztrációs</a> oldalon lehet beállítani." |
Index: civicrm/trunk/sites/all/modules/devel/devel_generate.inc |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel_generate.inc,v 1.14.2.14 2009/06/09 03:22:39 weitzman Exp $ |
| 3 | +// $Id: devel_generate.inc,v 1.14.2.22 2010/07/21 15:12:58 weitzman Exp $ |
4 | 4 | // If not in 'safe mode', increase the maximum execution time: |
5 | 5 | if (!ini_get('safe_mode')) { |
6 | 6 | set_time_limit(240); |
— | — | @@ -32,7 +32,8 @@ |
33 | 33 | $pass = md5(user_password()); |
34 | 34 | $mail = $name .'@'. $url['host']; |
35 | 35 | $now = time(); |
36 | | - db_query("INSERT INTO {users} (name, pass, mail, status, created, access) VALUES ('%s', '%s', '%s', %d, %d, %d)", $name, $pass, $mail, 1, $now, $now); |
| 36 | + $created = ($age ? $now - $age : $now - 1); |
| 37 | + $account = user_save(NULL, array('name' => $name, 'pass' => $pass, 'mail' => $mail, 'status' =>'1', 'created' => $created, 'access' => $now, 'devel_generate' => TRUE)); |
37 | 38 | } |
38 | 39 | drupal_set_message(t('!num_users created.', array('!num_users' => format_plural($num, '1 user', '@count users')))); |
39 | 40 | } |
— | — | @@ -245,6 +246,8 @@ |
246 | 247 | |
247 | 248 | // Return an $options array of content types. |
248 | 249 | function devel_generate_content_types() { |
| 250 | + $options = array(); |
| 251 | + |
249 | 252 | if (module_exists('content')) { |
250 | 253 | $types = content_types(); |
251 | 254 | foreach ($types as $type) { |
— | — | @@ -355,12 +358,7 @@ |
356 | 359 | $sql = "SELECT tid FROM {term_data} WHERE vid = %d ORDER BY RAND()"; |
357 | 360 | $result = db_query_range($sql, $vocab->vid, 0, 5); |
358 | 361 | while ($row = db_fetch_object($result)) { |
359 | | - if ($vocab->tags) { |
360 | | - $node->taxonomy['tags'][] = $row->tid; |
361 | | - } |
362 | | - else { |
363 | | - $node->taxonomy[$row->tid] = $row->tid; |
364 | | - } |
| 362 | + $node->taxonomy[] = $row->tid; |
365 | 363 | if (!$vocab->multiple) { |
366 | 364 | break; |
367 | 365 | } |
— | — | @@ -391,12 +389,11 @@ |
392 | 390 | $file->description = 'b log.png was here'; |
393 | 391 | $file->filesize = $size; |
394 | 392 | $file->weight = mt_rand(0,10); |
| 393 | + $file->new = TRUE; |
395 | 394 | |
396 | 395 | // If we made it this far it's safe to record this file in the database. |
397 | 396 | db_query("INSERT INTO {files} (uid, filename, filepath, filemime, filesize, status, timestamp) VALUES (%d, '%s', '%s', '%s', %d, %d, %d)", $node->uid, $file->filename, $file->filepath, $file->filemime, $file->filesize, FILE_STATUS_TEMPORARY, time()); |
398 | 397 | $file->fid = db_last_insert_id('files', 'fid'); |
399 | | - |
400 | | - $_SESSION['upload_files'][$file->fid] = $file; |
401 | 398 | $node->files[$file->fid] = $file; |
402 | 399 | } |
403 | 400 | |
— | — | @@ -457,15 +454,18 @@ |
458 | 455 | // Insert new data: |
459 | 456 | $node->type = array_rand($results['node_types']); |
460 | 457 | module_load_include('inc', 'node', 'node.pages'); |
| 458 | + $type = node_get_types('type', $node->type); |
461 | 459 | node_object_prepare($node); |
462 | 460 | $users = $results['users']; |
463 | 461 | $node->uid = $users[array_rand($users)]; |
464 | 462 | |
465 | 463 | $node->title = devel_create_greeking(mt_rand(1, $results['title_length']), TRUE); |
466 | | - $node->body = "node ($node->type) - ". devel_create_content(); |
467 | | - $node->teaser = node_teaser($node->body); |
468 | | - $node->filter = variable_get('filter_default_format', 1); |
469 | | - $node->format = FILTER_FORMAT_DEFAULT; |
| 464 | + if ($type->has_body) { |
| 465 | + $node->body = "node ($node->type) - ". devel_create_content(); |
| 466 | + $node->teaser = node_teaser($node->body); |
| 467 | + $node->filter = variable_get('filter_default_format', 1); |
| 468 | + $node->format = FILTER_FORMAT_DEFAULT; |
| 469 | + } |
470 | 470 | $node->language = ''; |
471 | 471 | $node->revision = mt_rand(0,1); |
472 | 472 | $node->promote = mt_rand(0, 1); |
— | — | @@ -473,7 +473,6 @@ |
474 | 474 | |
475 | 475 | // A flag to let hook_nodeapi() implementations know that this is a generated node. |
476 | 476 | $node->devel_generate = $results; |
477 | | - |
478 | 477 | // See devel_generate_nodeapi() for actions that happen before and after this save. |
479 | 478 | node_save($node); |
480 | 479 | |
— | — | @@ -482,7 +481,6 @@ |
483 | 482 | function devel_generate_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { |
484 | 483 | if (isset($node->devel_generate)) { |
485 | 484 | $results = $node->devel_generate; |
486 | | - |
487 | 485 | switch ($op) { |
488 | 486 | // Modules that want to affect generated nodes may implement hook_nodeapi('presave'). See OG module or CCK. |
489 | 487 | // A few implementations live here because core doesn't do bulk node generation. |
— | — | @@ -494,6 +492,10 @@ |
495 | 493 | if ($results['add_terms']) { |
496 | 494 | devel_generate_add_terms($node); |
497 | 495 | } |
| 496 | + if (isset($results['add_language']) && variable_get('language_content_type_' . $node->type, 0)) { |
| 497 | + $languages = array_keys($results['add_language']); |
| 498 | + $node->language = $languages[array_rand($languages)]; |
| 499 | + } |
498 | 500 | break; |
499 | 501 | case 'insert': |
500 | 502 | if ($results['max_comments']) { |
Index: civicrm/trunk/sites/all/modules/devel/devel.module |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel.module,v 1.258.2.55 2009/08/19 20:16:09 weitzman Exp $ |
| 3 | +// $Id: devel.module,v 1.258.2.75 2010/08/02 15:04:55 weitzman Exp $ |
4 | 4 | |
5 | 5 | // This module holds functions useful for Drupal development. |
6 | 6 | // Please contribute! |
— | — | @@ -73,15 +73,6 @@ |
74 | 74 | 'access arguments' => array('access devel information'), |
75 | 75 | 'menu_name' => 'devel', |
76 | 76 | ); |
77 | | - $items['devel/devel_themer'] = array( |
78 | | - 'title callback' => 'devel_menu_title_theme_developer', |
79 | | - 'title arguments' => array(NULL), |
80 | | - 'title' => 'foo', |
81 | | - 'description' => 'Quickly enable or disable theme developer module. Useful for removing HTML cruft added by that module.', |
82 | | - 'page callback' => 'devel_devel_themer_toggle', |
83 | | - 'access arguments' => array('access devel information'), |
84 | | - 'menu_name' => 'devel', |
85 | | - ); |
86 | 77 | $items['devel/source'] = array( |
87 | 78 | 'title' => 'Display the PHP code of any file in your Drupal installation', |
88 | 79 | 'page callback' => 'devel_display_source', |
— | — | @@ -120,13 +111,6 @@ |
121 | 112 | 'access arguments' => array('execute php code'), |
122 | 113 | 'menu_name' => 'devel', |
123 | 114 | ); |
124 | | - $items['devel/theme/registry'] = array( |
125 | | - 'title' => 'Theme registry', |
126 | | - 'description' => 'View a list of available theme functions across the whole site.', |
127 | | - 'page callback' => 'devel_theme_registry', |
128 | | - 'access arguments' => array('access devel information'), |
129 | | - 'menu_name' => 'devel', |
130 | | - ); |
131 | 115 | $items['devel/elements'] = array( |
132 | 116 | 'title' => 'Hook_elements()', |
133 | 117 | 'description' => 'View the active form/render elements for this site.', |
— | — | @@ -158,14 +142,14 @@ |
159 | 143 | ); |
160 | 144 | $items['admin/settings/devel'] = array( |
161 | 145 | 'title' => 'Devel settings', |
162 | | - 'description' => 'Helper functions, pages, and blocks to assist Drupal developers. The devel blocks can be managed via the !block page.', array('!block' => l(t('block administration'), 'admin/build/block')), |
| 146 | + 'description' => 'Helper functions, pages, and blocks to assist Drupal developers. The devel blocks can be managed via the <a href="https://www.mediawiki.org/admin/build/block">block administration</a> page.', |
163 | 147 | 'page callback' => 'drupal_get_form', |
164 | 148 | 'page arguments' => array('devel_admin_settings'), |
165 | 149 | 'access arguments' => array('administer site configuration'), |
166 | 150 | 'menu_name' => 'devel', |
167 | 151 | ); |
168 | | - $items['node/%node/devel/load'] = array( |
169 | | - 'title' => 'Dev load', |
| 152 | + $items['node/%node/devel'] = array( |
| 153 | + 'title' => 'Devel', |
170 | 154 | 'page callback' => 'devel_load_object', |
171 | 155 | 'page arguments' => array(1, 'node'), |
172 | 156 | 'access callback' => 'user_access', |
— | — | @@ -173,6 +157,15 @@ |
174 | 158 | 'type' => MENU_LOCAL_TASK, |
175 | 159 | 'weight' => 100, |
176 | 160 | ); |
| 161 | + $items['node/%node/devel/load'] = array( |
| 162 | + 'title' => 'Dev load', |
| 163 | + 'page callback' => 'devel_load_object', |
| 164 | + 'page arguments' => array(1, 'node'), |
| 165 | + 'access callback' => 'user_access', |
| 166 | + 'access arguments' => array('access devel information'), |
| 167 | + 'type' => MENU_DEFAULT_LOCAL_TASK, |
| 168 | + 'weight' => 0, |
| 169 | + ); |
177 | 170 | $items['node/%node/devel/render'] = array( |
178 | 171 | 'title' => 'Dev render', |
179 | 172 | 'page callback' => 'devel_render_object', |
— | — | @@ -180,6 +173,15 @@ |
181 | 174 | 'access callback' => 'user_access', |
182 | 175 | 'access arguments' => array('access devel information'), |
183 | 176 | 'type' => MENU_LOCAL_TASK, |
| 177 | + 'weight' => 10, |
| 178 | + ); |
| 179 | + $items['user/%user/devel'] = array( |
| 180 | + 'title' => 'Devel', |
| 181 | + 'page callback' => 'devel_load_object', |
| 182 | + 'page arguments' => array(1, 'user'), |
| 183 | + 'access callback' => 'user_access', |
| 184 | + 'access arguments' => array('access devel information'), |
| 185 | + 'type' => MENU_LOCAL_TASK, |
184 | 186 | 'weight' => 100, |
185 | 187 | ); |
186 | 188 | $items['user/%user/devel/load'] = array( |
— | — | @@ -188,8 +190,8 @@ |
189 | 191 | 'page arguments' => array(1, 'user'), |
190 | 192 | 'access callback' => 'user_access', |
191 | 193 | 'access arguments' => array('access devel information'), |
192 | | - 'type' => MENU_LOCAL_TASK, |
193 | | - 'weight' => 100, |
| 194 | + 'type' => MENU_DEFAULT_LOCAL_TASK, |
| 195 | + 'weight' => 0, |
194 | 196 | ); |
195 | 197 | $items['user/%user/devel/render'] = array( |
196 | 198 | 'title' => 'Dev render', |
— | — | @@ -198,14 +200,21 @@ |
199 | 201 | 'access callback' => 'user_access', |
200 | 202 | 'access arguments' => array('access devel information'), |
201 | 203 | 'type' => MENU_LOCAL_TASK, |
202 | | - 'weight' => 100, |
| 204 | + 'weight' => 10, |
203 | 205 | ); |
| 206 | + $items['devel/theme/registry'] = array( |
| 207 | + 'title' => 'Theme registry', |
| 208 | + 'description' => 'View a list of available theme functions across the whole site.', |
| 209 | + 'page callback' => 'devel_theme_registry', |
| 210 | + 'access arguments' => array('access devel information'), |
| 211 | + 'menu_name' => 'devel', |
| 212 | + ); |
204 | 213 | |
205 | 214 | return $items; |
206 | 215 | } |
207 | 216 | |
208 | 217 | function devel_menu_need_destination() { |
209 | | - return array('devel/cache/clear', 'devel/devel_themer', 'devel/reinstall', 'devel/menu/reset', 'admin/og/og', 'devel/variable', 'admin/reports/status/run-cron'); |
| 218 | + return array('devel/cache/clear', 'devel/reinstall', 'devel/menu/reset', 'admin/og/og', 'devel/variable', 'admin/reports/status/run-cron'); |
210 | 219 | } |
211 | 220 | |
212 | 221 | /** |
— | — | @@ -234,34 +243,6 @@ |
235 | 244 | return user_access('access devel information') && variable_get('devel_store_queries', 0); |
236 | 245 | } |
237 | 246 | |
238 | | -function devel_menu_title_theme_developer() { |
239 | | - if (module_exists('devel_themer')) { |
240 | | - return t('Disable Theme developer'); |
241 | | - } |
242 | | - else { |
243 | | - return t('Enable Theme developer'); |
244 | | - } |
245 | | -} |
246 | | - |
247 | | -function devel_devel_themer_toggle() { |
248 | | - if (module_exists('devel_themer')) { |
249 | | - module_disable(array('devel_themer')); |
250 | | - } |
251 | | - else { |
252 | | - // Sanity check in case the devel_themer schema is not installed. |
253 | | - include_once('./includes/install.inc'); |
254 | | - if (drupal_get_schema_versions('devel_themer') == FALSE) { |
255 | | - drupal_install_modules(array('devel_themer')); |
256 | | - } |
257 | | - else { |
258 | | - module_enable(array('devel_themer')); |
259 | | - } |
260 | | - } |
261 | | - drupal_rebuild_theme_registry(); |
262 | | - menu_rebuild(); |
263 | | - drupal_goto(); |
264 | | -} |
265 | | - |
266 | 247 | /** |
267 | 248 | * Implementation of hook_theme() |
268 | 249 | */ |
— | — | @@ -346,11 +327,19 @@ |
347 | 328 | devel_set_handler(variable_get('devel_error_handler', DEVEL_ERROR_HANDLER_STANDARD)); |
348 | 329 | // We want to include the class early so that anyone may call krumo() as needed. See http://krumo.sourceforge.net/ |
349 | 330 | has_krumo(); |
350 | | - // See http://www.firephp.org/ |
351 | | - $path = './'. drupal_get_path('module', 'devel') .'/FirePHPCore/lib/FirePHPCore/fb.php'; |
352 | | - if (file_exists($path)) { |
353 | | - include_once $path; |
| 331 | + |
| 332 | + // See http://www.firephp.org/. |
| 333 | + // Support Libraries API - http://drupal.org/project/libraries |
| 334 | + if (module_exists('libraries')) { |
| 335 | + $path = libraries_get_path('FirePHPCore') . '/lib/FirePHPCore/'; |
354 | 336 | } |
| 337 | + else { |
| 338 | + $path = './'. drupal_get_path('module', 'devel') .'/FirePHPCore/lib/FirePHPCore/'; |
| 339 | + } |
| 340 | + if (file_exists($path .'fb.php')) { |
| 341 | + include_once $path .'fb.php'; |
| 342 | + include_once $path .'FirePHP.class.php'; |
| 343 | + } |
355 | 344 | // Add CSS for query log if should be displayed. |
356 | 345 | if (variable_get('devel_query_display', 0)) { |
357 | 346 | drupal_add_css(drupal_get_path('module', 'devel') .'/devel.css'); |
— | — | @@ -402,7 +391,50 @@ |
403 | 392 | } |
404 | 393 | } |
405 | 394 | |
| 395 | +/** |
| 396 | + * Calls dfb() to output a backtrace. |
| 397 | + */ |
| 398 | +function dfbt($label) { |
| 399 | + dfb($label, FirePHP::TRACE); |
| 400 | +} |
406 | 401 | |
| 402 | +/** |
| 403 | + * Implements hook_watchdog(). |
| 404 | + */ |
| 405 | +function devel_watchdog(array $log_entry) { |
| 406 | + if (class_exists('FirePHP')) { |
| 407 | + switch ($log_entry['severity']) { |
| 408 | + case WATCHDOG_EMERG: |
| 409 | + case WATCHDOG_ALERT: |
| 410 | + case WATCHDOG_CRITICAL: |
| 411 | + case WATCHDOG_ERROR: |
| 412 | + $type = FirePHP::ERROR; |
| 413 | + break; |
| 414 | + case WATCHDOG_WARNING: |
| 415 | + $type = FirePHP::WARN; |
| 416 | + break; |
| 417 | + case WATCHDOG_NOTICE: |
| 418 | + case WATCHDOG_INFO: |
| 419 | + $type = FirePHP::INFO; |
| 420 | + break; |
| 421 | + case WATCHDOG_DEBUG: |
| 422 | + DEFAULT: |
| 423 | + $type = FirePHP::LOG; |
| 424 | + } |
| 425 | + } |
| 426 | + else { |
| 427 | + $type = 'watchdog'; |
| 428 | + } |
| 429 | + $watchdog = array( |
| 430 | + 'type' => $log_entry['type'], |
| 431 | + 'message' => decode_entities(strtr($log_entry['message'], (array)$log_entry['variables'])), |
| 432 | + ); |
| 433 | + if (isset($log_entry['link'])) { |
| 434 | + $watchdog['link'] = $log_entry['link']; |
| 435 | + } |
| 436 | + dfb($watchdog, $type); |
| 437 | +} |
| 438 | + |
407 | 439 | function devel_set_handler($handler) { |
408 | 440 | switch ($handler) { |
409 | 441 | case DEVEL_ERROR_HANDLER_STANDARD: |
— | — | @@ -507,7 +539,11 @@ |
508 | 540 | if ($op == 'list') { |
509 | 541 | $blocks[0]['info'] = t('Switch user'); |
510 | 542 | // $blocks[1]['info'] = t('Devel'); |
511 | | - $blocks[2]['info'] = t('Execute PHP'); |
| 543 | + $blocks[2] = array( |
| 544 | + 'info' => t('Execute PHP'), |
| 545 | + 'visibility' => 0, |
| 546 | + 'pages' => 'devel/php', |
| 547 | + ); |
512 | 548 | return $blocks; |
513 | 549 | } |
514 | 550 | elseif ($op == 'configure' && $delta == 0) { |
— | — | @@ -534,8 +570,7 @@ |
535 | 571 | break; |
536 | 572 | case 2: |
537 | 573 | if (user_access('execute php code')) { |
538 | | - $block['subject'] = t('Execute PHP'); |
539 | | - $block['content'] = drupal_get_form('devel_execute_form'); |
| 574 | + $block['content'] = drupal_get_form('devel_execute_block_form'); |
540 | 575 | } |
541 | 576 | break; |
542 | 577 | } |
— | — | @@ -545,7 +580,7 @@ |
546 | 581 | |
547 | 582 | function devel_block_switch_user() { |
548 | 583 | $links = devel_switch_user_list(); |
549 | | - if (!empty($links)) { |
| 584 | + if (!empty($links) || user_access('switch users')) { |
550 | 585 | $block['subject'] = t('Switch user'); |
551 | 586 | $block['content'] = theme('links', $links); |
552 | 587 | $block['content'] .= drupal_get_form('devel_switch_user_form'); |
— | — | @@ -641,7 +676,7 @@ |
642 | 677 | $version = $form_state['values']['version']; |
643 | 678 | $function = $form_state['values']['function']; |
644 | 679 | $api = variable_get('devel_api_url', 'api.drupal.org'); |
645 | | - $form_state['redirect'] = "http://$api/api/$version/function/$function"; |
| 680 | + $form_state['redirect'] = "http://$api/api/function/$function/$version"; |
646 | 681 | } |
647 | 682 | |
648 | 683 | function devel_switch_user_form_validate($form, &$form_state) { |
— | — | @@ -654,37 +689,6 @@ |
655 | 690 | $form_state['redirect'] = 'devel/switch/'. $form_state['values']['username']; |
656 | 691 | } |
657 | 692 | |
658 | | - |
659 | | -/** |
660 | | - * TODO: i switched params as per http://drupal.org/node/144132#form-alter but needs work still |
661 | | - * Implementation of hook_form_alter(). |
662 | | - */ |
663 | | -function devel_form_alter(&$form, $form_state, $form_id, $key_in = NULL) { |
664 | | - if (user_access('access devel information') && variable_get('devel_form_weights', 0)) { |
665 | | - $children = element_children($form); |
666 | | - if (empty($children)) { |
667 | | - if (isset($form['#type']) && !in_array($form['#type'], array('value', 'hidden'))) { |
668 | | - if (!isset($form['#title'])) { |
669 | | - $form['#title'] = ''; |
670 | | - } |
671 | | - $form['#title'] .= " (key=$key_in, weight=". (isset($form['#weight']) ? $form['#weight'] : 0) .')'; |
672 | | - } |
673 | | - } |
674 | | - else { |
675 | | - foreach (element_children($form) as $key) { |
676 | | - // We need to add the weight to fieldsets. |
677 | | - if (element_children($form[$key])) { // Which are a container of others. |
678 | | - if (!isset($form[$key]['#title'])) { |
679 | | - $form[$key]['#title'] = ''; |
680 | | - } |
681 | | - $form[$key]['#title'] .= " (key=$key, weight=". (isset($form[$key]['#weight']) ? $form[$key]['#weight'] : 0) .')'; |
682 | | - } |
683 | | - devel_form_alter($form[$key], $form_state, $form_id, $key); |
684 | | - } |
685 | | - } |
686 | | - } |
687 | | -} |
688 | | - |
689 | 693 | function devel_exit($destination = NULL) { |
690 | 694 | global $user; |
691 | 695 | |
— | — | @@ -813,7 +817,7 @@ |
814 | 818 | $qids[$hash] = db_result(devel_db_query("SELECT qid FROM {devel_queries} WHERE hash = '%s'", $hash)); |
815 | 819 | if (!$qids[$hash]) { |
816 | 820 | devel_db_query("INSERT INTO {devel_queries} (query, function, hash) VALUES ('%s', '%s', '%s')", $query, $function, $hash); |
817 | | - db_last_insert_id('devel_queries', 'qid'); |
| 821 | + $qids[$hash] = db_last_insert_id('devel_queries', 'qid'); |
818 | 822 | } |
819 | 823 | } |
820 | 824 | $fields[] = "(%d, '%f')"; |
— | — | @@ -861,7 +865,7 @@ |
862 | 866 | sort($ufunctions); |
863 | 867 | $api = variable_get('devel_api_url', 'api.drupal.org'); |
864 | 868 | foreach ($ufunctions as $function) { |
865 | | - $links[] = l($function, "http://$api/api/$version/function/$function"); |
| 869 | + $links[] = l($function, "http://$api/api/function/$function/$version"); |
866 | 870 | } |
867 | 871 | return theme('item_list', $links); |
868 | 872 | } |
— | — | @@ -986,22 +990,17 @@ |
987 | 991 | '#default_value' => variable_get('devel_redirect_page', 0), |
988 | 992 | '#description' => t('When a module executes drupal_goto(), the query log and other developer information is lost. Enabling this setting presents an intermediate page to developers so that the log can be examined before continuing to the destination page.'), |
989 | 993 | ); |
990 | | - $form['devel_form_weights'] = array('#type' => 'checkbox', |
991 | | - '#title' => t('Display form element keys and weights'), |
992 | | - '#default_value' => variable_get('devel_form_weights', 0), |
993 | | - '#description' => t('Form element names are needed for performing themeing or altering a form. Their weights determine the position of the element. Enabling this setting will show these keys and weights beside each form item.'), |
994 | | - ); |
995 | 994 | $form['devel_error_handler'] = array('#type' => 'radios', |
996 | 995 | '#title' => t('Error handler'), |
997 | 996 | '#default_value' => variable_get('devel_error_handler', DEVEL_ERROR_HANDLER_STANDARD), |
998 | 997 | '#options' => array(DEVEL_ERROR_HANDLER_NONE => t('None'), DEVEL_ERROR_HANDLER_STANDARD => t('Standard drupal')), |
999 | | - '#description' => t('Choose an error handler for your site. <em>Backtrace</em> prints nice debug information when an error is noticed, and you !choose. <strong>Backtrace requires the <a href="!krumo">krumo library</a></strong>. <em>None</em> is a good option when stepping through the site in your debugger.', array('!krumo' => url("http://krumo.sourceforge.net"), '!choose' => l(t('choose to show errors on screen'), 'admin/settings/error-reporting'))), |
| 998 | + '#description' => t('Choose an error handler for your site. <em>Backtrace</em> prints nice debug information when an error is noticed, and you <a href="@choose">choose to show errors on screen</a>. <strong>Backtrace requires the <a href="@krumo">krumo library</a></strong>. <em>None</em> is a good option when stepping through the site in your debugger.', array('@krumo' => url('http://krumo.sourceforge.net'), '@choose' => url('admin/settings/error-reporting'))), |
1000 | 999 | ); |
1001 | 1000 | if (has_krumo()) { |
1002 | 1001 | $form['devel_error_handler']['#options'][DEVEL_ERROR_HANDLER_BACKTRACE] = t('Backtrace'); |
1003 | 1002 | } |
1004 | 1003 | |
1005 | | - $options = drupal_map_assoc(array('default', 'blue', 'green', 'orange', 'schablon.com', 'disabled')); |
| 1004 | + $options = drupal_map_assoc(array('default', 'blue', 'green', 'orange', 'white', 'disabled')); |
1006 | 1005 | $form['devel_krumo_skin'] = array( |
1007 | 1006 | '#type' => 'radios', |
1008 | 1007 | '#title' => t('Krumo display'), |
— | — | @@ -1053,13 +1052,27 @@ |
1054 | 1053 | /** |
1055 | 1054 | * Generates the execute block form. |
1056 | 1055 | */ |
| 1056 | +function devel_execute_block_form() { |
| 1057 | + $form['execute'] = array( |
| 1058 | + '#type' => 'fieldset', |
| 1059 | + '#title' => t('Execute PHP Code'), |
| 1060 | + '#collapsible' => TRUE, |
| 1061 | + '#collapsed' => (!isset($_POST['code'])), |
| 1062 | + ); |
| 1063 | + $form['#submit'] = array('devel_execute_form_submit'); |
| 1064 | + return array_merge_recursive($form, devel_execute_form()); |
| 1065 | +} |
| 1066 | + |
| 1067 | +/** |
| 1068 | + * Generates the execute form. |
| 1069 | + */ |
1057 | 1070 | function devel_execute_form() { |
1058 | | - $form['code'] = array( |
| 1071 | + $form['execute']['code'] = array( |
1059 | 1072 | '#type' => 'textarea', |
1060 | 1073 | '#title' => t('PHP code to execute'), |
1061 | | - '#description' => t('Enter some code. Do not use <code><?php ?></code> tags.') |
| 1074 | + '#description' => t('Enter some code. Do not use <code><?php ?></code> tags.'), |
1062 | 1075 | ); |
1063 | | - $form['op'] = array('#type' => 'submit', '#value' => t('Execute')); |
| 1076 | + $form['execute']['op'] = array('#type' => 'submit', '#value' => t('Execute')); |
1064 | 1077 | $form['#redirect'] = FALSE; |
1065 | 1078 | $form['#skip_duplicate_check'] = TRUE; |
1066 | 1079 | return $form; |
— | — | @@ -1213,7 +1226,9 @@ |
1214 | 1227 | function devel_variable_form_submit($form, &$form_state) { |
1215 | 1228 | $deletes = array_filter($form_state['values']['variables']); |
1216 | 1229 | array_walk($deletes, 'variable_del'); |
1217 | | - drupal_set_message(format_plural(count($deletes), 'One variable deleted.', '@count variables deleted.')); |
| 1230 | + if (count($deletes)) { |
| 1231 | + drupal_set_message(format_plural(count($deletes), 'One variable deleted.', '@count variables deleted.')); |
| 1232 | + } |
1218 | 1233 | } |
1219 | 1234 | |
1220 | 1235 | function devel_variable_edit($form_state, $name) { |
— | — | @@ -1246,7 +1261,7 @@ |
1247 | 1262 | '#value' => t('Sorry, complex variable types may not be edited yet. Use the <em>Execute PHP</em> block and the <a href="@variable-set-doc">variable_set()</a> function.', array('@variable-set-doc' => "http://$api/api/HEAD/function/variable_set")) |
1248 | 1263 | ); |
1249 | 1264 | } |
1250 | | - drupal_set_title($name); |
| 1265 | + drupal_set_title(check_plain($name)); |
1251 | 1266 | return $form; |
1252 | 1267 | } |
1253 | 1268 | |
— | — | @@ -1682,7 +1697,7 @@ |
1683 | 1698 | // We do not want to krumo() strings and integers and such |
1684 | 1699 | if (merits_krumo($input)) { |
1685 | 1700 | if (user_access('access devel information')) { |
1686 | | - return $return ? krumo_ob($input) : krumo($input); |
| 1701 | + return $return ? (isset($name) ? $name .' => ' : '') . krumo_ob($input) : krumo($input); |
1687 | 1702 | } |
1688 | 1703 | } |
1689 | 1704 | else { |
— | — | @@ -1847,9 +1862,7 @@ |
1848 | 1863 | } |
1849 | 1864 | |
1850 | 1865 | /** |
1851 | | - * Update node_comment_statistics table for nodes with comments. |
1852 | | - * TODO: if 2 comments have exact same timestamp, the function can get wrong uid and name fields. |
1853 | | - * Handles when comment timestamps have been manually set in admin |
| 1866 | + * Regenerate the data in node_comment_statistics table. |
1854 | 1867 | * |
1855 | 1868 | * @return void |
1856 | 1869 | **/ |
— | — | @@ -1858,51 +1871,10 @@ |
1859 | 1872 | $sql = "DELETE FROM {node_comment_statistics}"; |
1860 | 1873 | db_query($sql); |
1861 | 1874 | |
1862 | | - $sql = "INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) (select nid, c.timestamp, name, uid, comment_count FROM {comments} c INNER JOIN (SELECT MAX(timestamp) AS timestamp, COUNT(*) AS comment_count FROM {comments} WHERE status=%d GROUP BY nid) as c2 ON c.timestamp=c2.timestamp)"; |
| 1875 | + $sql = "INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) (select nid, c.timestamp, name, uid, comment_count FROM {comments} c INNER JOIN (SELECT MAX(timestamp) AS timestamp, COUNT(*) AS comment_count FROM {comments} WHERE status=%d GROUP BY nid) AS c2 ON c.nid = c2.nid AND c.timestamp=c2.timestamp)"; |
1863 | 1876 | db_query($sql, COMMENT_PUBLISHED); |
1864 | 1877 | |
1865 | 1878 | // Insert 0 count records into the node_comment_statistics for nodes that are missing. See comment_enable() |
1866 | | - db_query_temporary("SELECT n.nid, n.changed, n.uid FROM {node} n LEFT JOIN {node_comment_statistics} c ON n.nid = c.nid WHERE c.comment_count IS NULL", 'missing_nids'); |
1867 | | - db_query("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) SELECT n.nid, n.changed, NULL, n.uid, 0 FROM missing_nids n"); |
| 1879 | + db_query_temporary("SELECT n.nid, n.created, n.uid FROM {node} n LEFT JOIN {node_comment_statistics} c ON n.nid = c.nid WHERE c.comment_count IS NULL", 'missing_nids'); |
| 1880 | + db_query("INSERT INTO {node_comment_statistics} (nid, last_comment_timestamp, last_comment_name, last_comment_uid, comment_count) SELECT n.nid, n.created, NULL, n.uid, 0 FROM missing_nids n"); |
1868 | 1881 | } |
1869 | | - |
1870 | | -/** |
1871 | | - * Set sequences table to a sane state. Useful after a bulk import. |
1872 | | - * |
1873 | | - * @return void |
1874 | | - **/ |
1875 | | -function sequence_reset($table, $column) { |
1876 | | - $max = db_result(db_query("SELECT MAX($column) FROM {$table}")); |
1877 | | - $max = ($max ? $max+1 : 2); |
1878 | | - db_query("UPDATE {sequences} SET id = $max WHERE name='${table}_$column'"); |
1879 | | -} |
1880 | | - |
1881 | | -/** |
1882 | | - * Enable or disable indexes for a given table. Useful during a bulk import. |
1883 | | - * |
1884 | | - * @return void |
1885 | | - **/ |
1886 | | -function devel_table_keys($tables, $verb = 'ENABLE') { |
1887 | | - foreach ($tables as $table) { |
1888 | | - db_query("ALTER TABLE $table $verb KEYS"); |
1889 | | - } |
1890 | | -} |
1891 | | - |
1892 | | -/** |
1893 | | - * Save contents of an url to filesystem. Works for images. |
1894 | | - * |
1895 | | - * @return void |
1896 | | - **/ |
1897 | | -function wget($url, $file) { |
1898 | | - if (file_exists($file)) { |
1899 | | - return; |
1900 | | - } |
1901 | | - print "get: $url\n"; |
1902 | | - $ch = curl_init($url); |
1903 | | - $fp = fopen($file, "w"); |
1904 | | - curl_setopt($ch, CURLOPT_FILE, $fp); |
1905 | | - curl_setopt($ch, CURLOPT_HEADER, 0); |
1906 | | - curl_exec($ch); |
1907 | | - curl_close($ch); |
1908 | | - fclose($fp); |
1909 | | -} |
Index: civicrm/trunk/sites/all/modules/devel/devel.info |
— | — | @@ -5,9 +5,9 @@ |
6 | 6 | dependencies[] = menu |
7 | 7 | core = 6.x |
8 | 8 | |
9 | | -; Information added by drupal.org packaging script on 2009-08-19 |
10 | | -version = "6.x-1.17" |
| 9 | +; Information added by drupal.org packaging script on 2010-08-04 |
| 10 | +version = "6.x-1.21" |
11 | 11 | core = "6.x" |
12 | 12 | project = "devel" |
13 | | -datestamp = "1250713853" |
| 13 | +datestamp = "1280961078" |
14 | 14 | |
Index: civicrm/trunk/sites/all/modules/devel/devel_node_access.install |
— | — | @@ -1,6 +1,13 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel_node_access.install,v 1.1.4.3 2008/10/07 03:29:57 salvis Exp $ |
| 3 | +// $Id: devel_node_access.install,v 1.1.4.4 2009/09/05 00:52:09 salvis Exp $ |
4 | 4 | |
| 5 | +/** |
| 6 | + * @file |
| 7 | + * This module gives developers feedback as to what their |
| 8 | + * node_access table contains, and which nodes are protected or |
| 9 | + * visible to the public. |
| 10 | + */ |
| 11 | + |
5 | 12 | function devel_node_access_install() { |
6 | 13 | } |
7 | 14 | |
Index: civicrm/trunk/sites/all/modules/devel/devel_generate.module |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel_generate.module,v 1.11.2.13 2009/07/03 00:30:31 weitzman Exp $ |
| 3 | +// $Id: devel_generate.module,v 1.11.2.15 2010/04/03 23:45:08 weitzman Exp $ |
4 | 4 | |
5 | 5 | require_once('devel_generate_batch.inc'); |
6 | 6 | |
— | — | @@ -86,7 +86,12 @@ |
87 | 87 | function devel_generate_content_form() { |
88 | 88 | require_once('devel_generate.inc'); |
89 | 89 | $options = devel_generate_content_types(); |
90 | | - |
| 90 | + |
| 91 | + if (empty($options)) { |
| 92 | + drupal_set_message(t('You do not have any content types that can be generated. <a href="@create-type">Go create a new content type</a> already!</a>', array('@create-type' => url('admin/content/types/add'))), 'error', FALSE); |
| 93 | + return; |
| 94 | + } |
| 95 | + |
91 | 96 | $form['node_types'] = array( |
92 | 97 | '#type' => 'checkboxes', |
93 | 98 | '#title' => t('Which node types do you want to create?'), |
— | — | @@ -158,6 +163,16 @@ |
159 | 164 | '#default_value' => TRUE, |
160 | 165 | '#access' => module_exists('statistics'), |
161 | 166 | ); |
| 167 | + if (module_exists('locale')) { |
| 168 | + $form['add_language'] = array( |
| 169 | + '#type' => 'select', |
| 170 | + '#title' => t('Set language on nodes'), |
| 171 | + '#multiple' => TRUE, |
| 172 | + '#description' => t('Requires locale.module'), |
| 173 | + '#options' => array_merge(array('' => t('Language neutral')), locale_language_list()), |
| 174 | + '#default_value' => '', |
| 175 | + ); |
| 176 | + } |
162 | 177 | $form['submit'] = array( |
163 | 178 | '#type' => 'submit', |
164 | 179 | '#value' => t('Do it!'), |
Index: civicrm/trunk/sites/all/modules/devel/krumo/class.krumo.php |
— | — | @@ -1,1281 +1,1281 @@ |
2 | | -<?php
|
3 | | -/**
|
4 | | -* Krumo: Structured information display solution
|
5 | | -*
|
6 | | -* Krumo is a debugging tool (PHP4/PHP5), which displays structured information
|
7 | | -* about any PHP variable. It is a nice replacement for print_r() or var_dump()
|
8 | | -* which are used by a lot of PHP developers.
|
9 | | -*
|
10 | | -* @author Kaloyan K. Tsvetkov <kaloyan@kaloyan.info>
|
11 | | -* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License Version 2.1
|
12 | | -*
|
13 | | -* @package Krumo
|
14 | | -* @version $Id: class.krumo.php,v 1.1.2.4 2009/02/11 04:01:01 weitzman Exp $
|
15 | | -*/
|
16 | | -
|
17 | | -//////////////////////////////////////////////////////////////////////////////
|
18 | | -
|
19 | | -/**
|
20 | | -* backward compatibility: the DIR_SEP constant isn't used anymore
|
21 | | -*/
|
22 | | -if(!defined('DIR_SEP')) {
|
23 | | - define('DIR_SEP', DIRECTORY_SEPARATOR);
|
24 | | - }
|
25 | | -/**
|
26 | | -* backward compatibility: the PATH_SEPARATOR constant is availble since 4.3.0RC2
|
27 | | -*/
|
28 | | -if (!defined('PATH_SEPARATOR')) {
|
29 | | - define('PATH_SEPARATOR', OS_WINDOWS ? ';' : ':');
|
30 | | - }
|
31 | | -
|
32 | | -// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
33 | | -
|
34 | | -/**
|
35 | | -* Set the KRUMO_DIR constant up with the absolute path to Krumo files. If it is
|
36 | | -* not defined, include_path will be used. Set KRUMO_DIR only if any other module
|
37 | | -* or application has not already set it up.
|
38 | | -*/
|
39 | | -if (!defined('KRUMO_DIR')) {
|
40 | | - define('KRUMO_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
|
41 | | - }
|
42 | | -
|
43 | | -/**
|
44 | | -* This constant sets the maximum strings of strings that will be shown
|
45 | | -* as they are. Longer strings will be truncated with this length, and
|
46 | | -* their `full form` will be shown in a child node.
|
47 | | -*/
|
48 | | -if (!defined('KRUMO_TRUNCATE_LENGTH')) {
|
49 | | - define('KRUMO_TRUNCATE_LENGTH', 50);
|
50 | | - }
|
51 | | -
|
52 | | -//////////////////////////////////////////////////////////////////////////////
|
53 | | -
|
54 | | -/**
|
55 | | -* Krumo API
|
56 | | -*
|
57 | | -* This class stores the Krumo API for rendering and
|
58 | | -* displaying the structured information it is reporting
|
59 | | -*
|
60 | | -* @package Krumo
|
61 | | -*/
|
62 | | -Class krumo {
|
63 | | -
|
64 | | - /**
|
65 | | - * Return Krumo version
|
66 | | - *
|
67 | | - * @return string
|
68 | | - * @access public
|
69 | | - * @static
|
70 | | - */
|
71 | | - Function version() {
|
72 | | - return '0.2a';
|
73 | | - }
|
74 | | -
|
75 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
76 | | -
|
77 | | - /**
|
78 | | - * Prints a debug backtrace
|
79 | | - *
|
80 | | - * @access public
|
81 | | - * @static
|
82 | | - */
|
83 | | - Function backtrace() {
|
84 | | -
|
85 | | - // disabled ?
|
86 | | - //
|
87 | | - if (!krumo::_debug()) {
|
88 | | - return false;
|
89 | | - }
|
90 | | -
|
91 | | - // render it
|
92 | | - //
|
93 | | - return krumo::dump(debug_backtrace());
|
94 | | - }
|
95 | | -
|
96 | | - /**
|
97 | | - * Prints a list of all currently declared classes.
|
98 | | - *
|
99 | | - * @access public
|
100 | | - * @static
|
101 | | - */
|
102 | | - Function classes() {
|
103 | | -
|
104 | | - // disabled ?
|
105 | | - //
|
106 | | - if (!krumo::_debug()) {
|
107 | | - return false;
|
108 | | - }
|
109 | | -
|
110 | | - // render it
|
111 | | - //
|
112 | | - ?>
|
113 | | -<div class="krumo-title">
|
114 | | -This is a list of all currently declared classes.
|
115 | | -</div>
|
116 | | - <?php
|
117 | | - return krumo::dump(get_declared_classes());
|
118 | | - }
|
119 | | -
|
120 | | - /**
|
121 | | - * Prints a list of all currently declared interfaces (PHP5 only).
|
122 | | - *
|
123 | | - * @access public
|
124 | | - * @static
|
125 | | - */
|
126 | | - Function interfaces() {
|
127 | | -
|
128 | | - // disabled ?
|
129 | | - //
|
130 | | - if (!krumo::_debug()) {
|
131 | | - return false;
|
132 | | - }
|
133 | | -
|
134 | | - // render it
|
135 | | - //
|
136 | | - ?>
|
137 | | -<div class="krumo-title">
|
138 | | -This is a list of all currently declared interfaces.
|
139 | | -</div>
|
140 | | - <?php
|
141 | | - return krumo::dump(get_declared_interfaces());
|
142 | | - }
|
143 | | -
|
144 | | - /**
|
145 | | - * Prints a list of all currently included (or required) files.
|
146 | | - *
|
147 | | - * @access public
|
148 | | - * @static
|
149 | | - */
|
150 | | - Function includes() {
|
151 | | -
|
152 | | - // disabled ?
|
153 | | - //
|
154 | | - if (!krumo::_debug()) {
|
155 | | - return false;
|
156 | | - }
|
157 | | -
|
158 | | - // render it
|
159 | | - //
|
160 | | - ?>
|
161 | | -<div class="krumo-title">
|
162 | | -This is a list of all currently included (or required) files.
|
163 | | -</div>
|
164 | | - <?php
|
165 | | - return krumo::dump(get_included_files());
|
166 | | - }
|
167 | | -
|
168 | | - /**
|
169 | | - * Prints a list of all currently declared functions.
|
170 | | - *
|
171 | | - * @access public
|
172 | | - * @static
|
173 | | - */
|
174 | | - Function functions() {
|
175 | | -
|
176 | | - // disabled ?
|
177 | | - //
|
178 | | - if (!krumo::_debug()) {
|
179 | | - return false;
|
180 | | - }
|
181 | | -
|
182 | | - // render it
|
183 | | - //
|
184 | | - ?>
|
185 | | -<div class="krumo-title">
|
186 | | -This is a list of all currently declared functions.
|
187 | | -</div>
|
188 | | - <?php
|
189 | | - return krumo::dump(get_defined_functions());
|
190 | | - }
|
191 | | -
|
192 | | - /**
|
193 | | - * Prints a list of all currently declared constants.
|
194 | | - *
|
195 | | - * @access public
|
196 | | - * @static
|
197 | | - */
|
198 | | - Function defines() {
|
199 | | -
|
200 | | - // disabled ?
|
201 | | - //
|
202 | | - if (!krumo::_debug()) {
|
203 | | - return false;
|
204 | | - }
|
205 | | -
|
206 | | - // render it
|
207 | | - //
|
208 | | - ?>
|
209 | | -<div class="krumo-title">
|
210 | | -This is a list of all currently declared constants (defines).
|
211 | | -</div>
|
212 | | - <?php
|
213 | | - return krumo::dump(get_defined_constants());
|
214 | | - }
|
215 | | -
|
216 | | - /**
|
217 | | - * Prints a list of all currently loaded PHP extensions.
|
218 | | - *
|
219 | | - * @access public
|
220 | | - * @static
|
221 | | - */
|
222 | | - Function extensions() {
|
223 | | -
|
224 | | - // disabled ?
|
225 | | - //
|
226 | | - if (!krumo::_debug()) {
|
227 | | - return false;
|
228 | | - }
|
229 | | -
|
230 | | - // render it
|
231 | | - //
|
232 | | - ?>
|
233 | | -<div class="krumo-title">
|
234 | | -This is a list of all currently loaded PHP extensions.
|
235 | | -</div>
|
236 | | - <?php
|
237 | | - return krumo::dump(get_loaded_extensions());
|
238 | | - }
|
239 | | -
|
240 | | - /**
|
241 | | - * Prints a list of all HTTP request headers.
|
242 | | - *
|
243 | | - * @access public
|
244 | | - * @static
|
245 | | - */
|
246 | | - Function headers() {
|
247 | | -
|
248 | | - // disabled ?
|
249 | | - //
|
250 | | - if (!krumo::_debug()) {
|
251 | | - return false;
|
252 | | - }
|
253 | | -
|
254 | | - // render it
|
255 | | - //
|
256 | | - ?>
|
257 | | -<div class="krumo-title">
|
258 | | -This is a list of all HTTP request headers.
|
259 | | -</div>
|
260 | | - <?php
|
261 | | - return krumo::dump(getAllHeaders());
|
262 | | - }
|
263 | | -
|
264 | | - /**
|
265 | | - * Prints a list of the configuration settings read from <i>php.ini</i>
|
266 | | - *
|
267 | | - * @access public
|
268 | | - * @static
|
269 | | - */
|
270 | | - Function phpini() {
|
271 | | -
|
272 | | - // disabled ?
|
273 | | - //
|
274 | | - if (!krumo::_debug()) {
|
275 | | - return false;
|
276 | | - }
|
277 | | -
|
278 | | - // render it
|
279 | | - //
|
280 | | - ?>
|
281 | | -<div class="krumo-title">
|
282 | | -This is a list of the configuration settings read from <code><b><?php echo get_cfg_var('cfg_file_path');?></b></code>.
|
283 | | -</div>
|
284 | | - <?php
|
285 | | - return krumo::dump(parse_ini_file(get_cfg_var('cfg_file_path'), true));
|
286 | | - }
|
287 | | -
|
288 | | - /**
|
289 | | - * Prints a list of all your configuration settings.
|
290 | | - *
|
291 | | - * @access public
|
292 | | - * @static
|
293 | | - */
|
294 | | - Function conf() {
|
295 | | -
|
296 | | - // disabled ?
|
297 | | - //
|
298 | | - if (!krumo::_debug()) {
|
299 | | - return false;
|
300 | | - }
|
301 | | -
|
302 | | - // render it
|
303 | | - //
|
304 | | - ?>
|
305 | | -<div class="krumo-title">
|
306 | | -This is a list of all your configuration settings.
|
307 | | -</div>
|
308 | | - <?php
|
309 | | - return krumo::dump(ini_get_all());
|
310 | | - }
|
311 | | -
|
312 | | - /**
|
313 | | - * Prints a list of the specified directories under your <i>include_path</i> option.
|
314 | | - *
|
315 | | - * @access public
|
316 | | - * @static
|
317 | | - */
|
318 | | - Function path() {
|
319 | | -
|
320 | | - // disabled ?
|
321 | | - //
|
322 | | - if (!krumo::_debug()) {
|
323 | | - return false;
|
324 | | - }
|
325 | | -
|
326 | | - // render it
|
327 | | - //
|
328 | | - ?>
|
329 | | -<div class="krumo-title">
|
330 | | -This is a list of the specified directories under your <code><b>include_path</b></code> option.
|
331 | | -</div>
|
332 | | - <?php
|
333 | | - return krumo::dump(explode(PATH_SEPARATOR, ini_get('include_path')));
|
334 | | - }
|
335 | | -
|
336 | | - /**
|
337 | | - * Prints a list of all the values from the <i>$_REQUEST</i> array.
|
338 | | - *
|
339 | | - * @access public
|
340 | | - * @static
|
341 | | - */
|
342 | | - Function request() {
|
343 | | -
|
344 | | - // disabled ?
|
345 | | - //
|
346 | | - if (!krumo::_debug()) {
|
347 | | - return false;
|
348 | | - }
|
349 | | -
|
350 | | - // render it
|
351 | | - //
|
352 | | - ?>
|
353 | | -<div class="krumo-title">
|
354 | | -This is a list of all the values from the <code><b>$_REQUEST</b></code> array.
|
355 | | -</div>
|
356 | | - <?php
|
357 | | - return krumo::dump($_REQUEST);
|
358 | | - }
|
359 | | -
|
360 | | - /**
|
361 | | - * Prints a list of all the values from the <i>$_GET</i> array.
|
362 | | - *
|
363 | | - * @access public
|
364 | | - * @static
|
365 | | - */
|
366 | | - Function get() {
|
367 | | -
|
368 | | - // disabled ?
|
369 | | - //
|
370 | | - if (!krumo::_debug()) {
|
371 | | - return false;
|
372 | | - }
|
373 | | -
|
374 | | - // render it
|
375 | | - //
|
376 | | - ?>
|
377 | | -<div class="krumo-title">
|
378 | | -This is a list of all the values from the <code><b>$_GET</b></code> array.
|
379 | | -</div>
|
380 | | - <?php
|
381 | | - return krumo::dump($_GET);
|
382 | | - }
|
383 | | -
|
384 | | - /**
|
385 | | - * Prints a list of all the values from the <i>$_POST</i> array.
|
386 | | - *
|
387 | | - * @access public
|
388 | | - * @static
|
389 | | - */
|
390 | | - Function post() {
|
391 | | -
|
392 | | - // disabled ?
|
393 | | - //
|
394 | | - if (!krumo::_debug()) {
|
395 | | - return false;
|
396 | | - }
|
397 | | -
|
398 | | - // render it
|
399 | | - //
|
400 | | - ?>
|
401 | | -<div class="krumo-title">
|
402 | | -This is a list of all the values from the <code><b>$_POST</b></code> array.
|
403 | | -</div>
|
404 | | - <?php
|
405 | | - return krumo::dump($_POST);
|
406 | | - }
|
407 | | -
|
408 | | - /**
|
409 | | - * Prints a list of all the values from the <i>$_SERVER</i> array.
|
410 | | - *
|
411 | | - * @access public
|
412 | | - * @static
|
413 | | - */
|
414 | | - Function server() {
|
415 | | -
|
416 | | - // disabled ?
|
417 | | - //
|
418 | | - if (!krumo::_debug()) {
|
419 | | - return false;
|
420 | | - }
|
421 | | -
|
422 | | - // render it
|
423 | | - //
|
424 | | - ?>
|
425 | | -<div class="krumo-title">
|
426 | | -This is a list of all the values from the <code><b>$_SERVER</b></code> array.
|
427 | | -</div>
|
428 | | - <?php
|
429 | | - return krumo::dump($_SERVER);
|
430 | | - }
|
431 | | -
|
432 | | - /**
|
433 | | - * Prints a list of all the values from the <i>$_COOKIE</i> array.
|
434 | | - *
|
435 | | - * @access public
|
436 | | - * @static
|
437 | | - */
|
438 | | - Function cookie() {
|
439 | | -
|
440 | | - // disabled ?
|
441 | | - //
|
442 | | - if (!krumo::_debug()) {
|
443 | | - return false;
|
444 | | - }
|
445 | | -
|
446 | | - // render it
|
447 | | - //
|
448 | | - ?>
|
449 | | -<div class="krumo-title">
|
450 | | -This is a list of all the values from the <code><b>$_COOKIE</b></code> array.
|
451 | | -</div>
|
452 | | - <?php
|
453 | | - return krumo::dump($_COOKIE);
|
454 | | - }
|
455 | | -
|
456 | | - /**
|
457 | | - * Prints a list of all the values from the <i>$_ENV</i> array.
|
458 | | - *
|
459 | | - * @access public
|
460 | | - * @static
|
461 | | - */
|
462 | | - Function env() {
|
463 | | -
|
464 | | - // disabled ?
|
465 | | - //
|
466 | | - if (!krumo::_debug()) {
|
467 | | - return false;
|
468 | | - }
|
469 | | -
|
470 | | - // render it
|
471 | | - //
|
472 | | - ?>
|
473 | | -<div class="krumo-title">
|
474 | | -This is a list of all the values from the <code><b>$_ENV</b></code> array.
|
475 | | -</div>
|
476 | | - <?php
|
477 | | - return krumo::dump($_ENV);
|
478 | | - }
|
479 | | -
|
480 | | - /**
|
481 | | - * Prints a list of all the values from the <i>$_SESSION</i> array.
|
482 | | - *
|
483 | | - * @access public
|
484 | | - * @static
|
485 | | - */
|
486 | | - Function session() {
|
487 | | -
|
488 | | - // disabled ?
|
489 | | - //
|
490 | | - if (!krumo::_debug()) {
|
491 | | - return false;
|
492 | | - }
|
493 | | -
|
494 | | - // render it
|
495 | | - //
|
496 | | - ?>
|
497 | | -<div class="krumo-title">
|
498 | | -This is a list of all the values from the <code><b>$_SESSION</b></code> array.
|
499 | | -</div>
|
500 | | - <?php
|
501 | | - return krumo::dump($_SESSION);
|
502 | | - }
|
503 | | -
|
504 | | - /**
|
505 | | - * Prints a list of all the values from an INI file.
|
506 | | - *
|
507 | | - * @param string $ini_file
|
508 | | - *
|
509 | | - * @access public
|
510 | | - * @static
|
511 | | - */
|
512 | | - Function ini($ini_file) {
|
513 | | -
|
514 | | - // disabled ?
|
515 | | - //
|
516 | | - if (!krumo::_debug()) {
|
517 | | - return false;
|
518 | | - }
|
519 | | -
|
520 | | - // read it
|
521 | | - //
|
522 | | - if (!$_ = @parse_ini_file($ini_file, 1)) {
|
523 | | - return false;
|
524 | | - }
|
525 | | -
|
526 | | - // render it
|
527 | | - //
|
528 | | - ?>
|
529 | | -<div class="krumo-title">
|
530 | | -This is a list of all the values from the <code><b><?php echo realpath($ini_file) ? realpath($ini_file) : $ini_file;?></b></code> INI file.
|
531 | | -</div>
|
532 | | - <?php
|
533 | | - return krumo::dump($_);
|
534 | | - }
|
535 | | -
|
536 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
537 | | -
|
538 | | - /**
|
539 | | - * Dump information about a variable
|
540 | | - *
|
541 | | - * @param mixed $data,...
|
542 | | - * @access public
|
543 | | - * @static
|
544 | | - */
|
545 | | - Function dump($data) {
|
546 | | -
|
547 | | - // disabled ?
|
548 | | - //
|
549 | | - if (!krumo::_debug()) {
|
550 | | - return false;
|
551 | | - }
|
552 | | -
|
553 | | - // more arguments ?
|
554 | | - //
|
555 | | - if (func_num_args() > 1) {
|
556 | | - $_ = func_get_args();
|
557 | | - foreach($_ as $d) {
|
558 | | - krumo::dump($d);
|
559 | | - }
|
560 | | - return;
|
561 | | - }
|
562 | | -
|
563 | | - // the css ?
|
564 | | - //
|
565 | | - krumo::_css();
|
566 | | -
|
567 | | - // find caller
|
568 | | -
|
569 | | - // DEVEL: we added array_reverse() so the proper file+line number is found.
|
570 | | - $_ = array_reverse(debug_backtrace());
|
571 | | - while($d = array_pop($_)) {
|
572 | | - // DEVEL: changed if() condition below
|
573 | | - if ((strpos(@$d['file'], 'devel') === FALSE) && (strpos(@$d['file'], 'krumo') === FALSE) && @$d['class'] != 'krumo') {
|
574 | | - break;
|
575 | | - }
|
576 | | - }
|
577 | | -
|
578 | | - // the content
|
579 | | - //
|
580 | | - ?>
|
581 | | -<div class="krumo-root" dir="ltr">
|
582 | | - <ul class="krumo-node krumo-first">
|
583 | | - <?php echo krumo::_dump($data);?>
|
584 | | - <li class="krumo-footnote">
|
585 | | - <div class="krumo-version" style="white-space:nowrap;">
|
586 | | - <h6>Krumo version <?php echo krumo::version();?></h6> | <a
|
587 | | - href="http://krumo.sourceforge.net"
|
588 | | - target="_blank">http://krumo.sourceforge.net</a>
|
589 | | - </div>
|
590 | | -
|
591 | | - <?php if (@$d['file']) { ?>
|
592 | | - <span class="krumo-call" style="white-space:nowrap;">
|
593 | | - Called from <code><?php echo $d['file']?></code>,
|
594 | | - line <code><?php echo $d['line']?></code></span>
|
595 | | - <?php } ?>
|
596 | | -
|
597 | | - </li>
|
598 | | - </ul>
|
599 | | -</div>
|
600 | | -<?php
|
601 | | - // flee the hive
|
602 | | - //
|
603 | | - $_recursion_marker = krumo::_marker();
|
604 | | - if ($hive =& krumo::_hive($dummy)) {
|
605 | | - foreach($hive as $i=>$bee){
|
606 | | - if (is_object($bee)) {
|
607 | | - unset($hive[$i]->$_recursion_marker);
|
608 | | - } else {
|
609 | | - unset($hive[$i][$_recursion_marker]);
|
610 | | - }
|
611 | | - }
|
612 | | - }
|
613 | | -
|
614 | | - // PHP 4.x.x array reference bug...
|
615 | | - //
|
616 | | - if (is_array($data) && version_compare(PHP_VERSION, "5", "<")) {
|
617 | | - unset($GLOBALS[krumo::_marker()]);
|
618 | | - }
|
619 | | - }
|
620 | | -
|
621 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
622 | | -
|
623 | | - /**
|
624 | | - * Print the skin (CSS)
|
625 | | - *
|
626 | | - * @return boolean
|
627 | | - * @access private
|
628 | | - * @static
|
629 | | - */
|
630 | | - Function _css() {
|
631 | | -
|
632 | | - static $_css = false;
|
633 | | -
|
634 | | - // already set ?
|
635 | | - //
|
636 | | - if ($_css) {
|
637 | | - return true;
|
638 | | - }
|
639 | | -
|
640 | | - $css = '';
|
641 | | -
|
642 | | - // DEVEL: changed for Drupal variables system
|
643 | | - $skin = variable_get('devel_krumo_skin', 'orange');
|
644 | | -
|
645 | | - // custom selected skin ?
|
646 | | - //
|
647 | | - $_ = KRUMO_DIR . "skins/{$skin}/skin.css";
|
648 | | - if ($fp = @fopen($_, 'r', 1)) {
|
649 | | - $css = fread($fp, filesize($_));
|
650 | | - fclose($fp);
|
651 | | - }
|
652 | | -
|
653 | | - // defautl skin ?
|
654 | | - //
|
655 | | - if (!$css && ($skin != 'default')) {
|
656 | | - $skin = 'default';
|
657 | | - $_ = KRUMO_DIR . "skins/default/skin.css";
|
658 | | - $css = join('', @file($_));
|
659 | | - }
|
660 | | -
|
661 | | - // print ?
|
662 | | - //
|
663 | | - if ($_css = $css != '') {
|
664 | | -
|
665 | | - // fix the urls
|
666 | | - //
|
667 | | -
|
668 | | - // DEVEL: changed for Drupal path system.
|
669 | | - $css_url = url(drupal_get_path('module', 'devel')) . "/krumo/skins/{$skin}/";
|
670 | | -
|
671 | | - $css = preg_replace('~%url%~Uis', $css_url, $css);
|
672 | | -
|
673 | | - // the CSS
|
674 | | - //
|
675 | | - ?>
|
676 | | -<!-- Using Krumo Skin: <?php echo preg_replace('~^' . preg_quote(realpath(KRUMO_DIR) . DIRECTORY_SEPARATOR) . '~Uis', '', realpath($_));?> -->
|
677 | | -<style type="text/css">
|
678 | | -<!--/**/
|
679 | | -<?php echo $css?>
|
680 | | -
|
681 | | -/**/-->
|
682 | | -</style>
|
683 | | -<?php
|
684 | | - // the JS
|
685 | | - //
|
686 | | - ?>
|
687 | | -<script type="text/javascript">
|
688 | | -<!--//
|
689 | | -<?php echo join(file(KRUMO_DIR . "krumo.js"));?>
|
690 | | -
|
691 | | -//-->
|
692 | | -</script>
|
693 | | -<?php
|
694 | | - }
|
695 | | -
|
696 | | - return $_css;
|
697 | | - }
|
698 | | -
|
699 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
700 | | -
|
701 | | - /**
|
702 | | - * Enable Krumo
|
703 | | - *
|
704 | | - * @return boolean
|
705 | | - * @access public
|
706 | | - * @static
|
707 | | - */
|
708 | | - Function enable() {
|
709 | | - return true === krumo::_debug(true);
|
710 | | - }
|
711 | | -
|
712 | | - /**
|
713 | | - * Disable Krumo
|
714 | | - *
|
715 | | - * @return boolean
|
716 | | - * @access public
|
717 | | - * @static
|
718 | | - */
|
719 | | - Function disable() {
|
720 | | - return false === krumo::_debug(false);
|
721 | | - }
|
722 | | -
|
723 | | - /**
|
724 | | - * Get\Set Krumo state: whether it is enabled or disabled
|
725 | | - *
|
726 | | - * @param boolean $state
|
727 | | - * @return boolean
|
728 | | - * @access private
|
729 | | - * @static
|
730 | | - */
|
731 | | - Function _debug($state=null) {
|
732 | | -
|
733 | | - static $_ = true;
|
734 | | -
|
735 | | - // set
|
736 | | - //
|
737 | | - if (isset($state)) {
|
738 | | - $_ = (boolean) $state;
|
739 | | - }
|
740 | | -
|
741 | | - // get
|
742 | | - //
|
743 | | - return $_;
|
744 | | - }
|
745 | | -
|
746 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
747 | | -
|
748 | | - /**
|
749 | | - * Dump information about a variable
|
750 | | - *
|
751 | | - * @param mixed $data
|
752 | | - * @param string $name
|
753 | | - * @access private
|
754 | | - * @static
|
755 | | - */
|
756 | | - Function _dump(&$data, $name='...') {
|
757 | | -
|
758 | | - // object ?
|
759 | | - //
|
760 | | - if (is_object($data)) {
|
761 | | - return krumo::_object($data, $name);
|
762 | | - }
|
763 | | -
|
764 | | - // array ?
|
765 | | - //
|
766 | | - if (is_array($data)) {
|
767 | | -
|
768 | | - // PHP 4.x.x array reference bug...
|
769 | | - //
|
770 | | - if (version_compare(PHP_VERSION, "5", "<")) {
|
771 | | -
|
772 | | - // prepare the GLOBAL reference list...
|
773 | | - //
|
774 | | - if (!isset($GLOBALS[krumo::_marker()])) {
|
775 | | - $GLOBALS[krumo::_marker()] = array();
|
776 | | - }
|
777 | | - if (!is_array($GLOBALS[krumo::_marker()])) {
|
778 | | - $GLOBALS[krumo::_marker()] = (array) $GLOBALS[krumo::_marker()];
|
779 | | - }
|
780 | | -
|
781 | | - // extract ?
|
782 | | - //
|
783 | | - if (!empty($GLOBALS[krumo::_marker()])) {
|
784 | | - $d = array_shift($GLOBALS[krumo::_marker()]);
|
785 | | - if (is_array($d)) {
|
786 | | - $data = $d;
|
787 | | - }
|
788 | | - }
|
789 | | - }
|
790 | | -
|
791 | | - return krumo::_array($data, $name);
|
792 | | - }
|
793 | | -
|
794 | | - // resource ?
|
795 | | - //
|
796 | | - if (is_resource($data)) {
|
797 | | - return krumo::_resource($data, $name);
|
798 | | - }
|
799 | | -
|
800 | | - // scalar ?
|
801 | | - //
|
802 | | - if (is_string($data)) {
|
803 | | - return krumo::_string($data, $name);
|
804 | | - }
|
805 | | -
|
806 | | - if (is_float($data)) {
|
807 | | - return krumo::_float($data, $name);
|
808 | | - }
|
809 | | -
|
810 | | - if (is_integer($data)) {
|
811 | | - return krumo::_integer($data, $name);
|
812 | | - }
|
813 | | -
|
814 | | - if (is_bool($data)) {
|
815 | | - return krumo::_boolean($data, $name);
|
816 | | - }
|
817 | | -
|
818 | | - // null ?
|
819 | | - //
|
820 | | - if (is_null($data)) {
|
821 | | - return krumo::_null($name);
|
822 | | - }
|
823 | | - }
|
824 | | -
|
825 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
826 | | -
|
827 | | - /**
|
828 | | - * Render a dump for a NULL value
|
829 | | - *
|
830 | | - * @param string $name
|
831 | | - * @return string
|
832 | | - * @access private
|
833 | | - * @static
|
834 | | - */
|
835 | | - Function _null($name) {
|
836 | | -?>
|
837 | | -<li class="krumo-child">
|
838 | | - <div class="krumo-element"
|
839 | | - onMouseOver="krumo.over(this);"
|
840 | | - onMouseOut="krumo.out(this);">
|
841 | | -
|
842 | | - <a class="krumo-name"><?php echo $name;?></a>
|
843 | | - (<em class="krumo-type krumo-null">NULL</em>)
|
844 | | - </div>
|
845 | | -</li>
|
846 | | -<?php
|
847 | | - }
|
848 | | -
|
849 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
850 | | -
|
851 | | - /**
|
852 | | - * Return the marked used to stain arrays
|
853 | | - * and objects in order to detect recursions
|
854 | | - *
|
855 | | - * @return string
|
856 | | - * @access private
|
857 | | - * @static
|
858 | | - */
|
859 | | - Function _marker() {
|
860 | | -
|
861 | | - static $_recursion_marker;
|
862 | | - if (!isset($_recursion_marker)) {
|
863 | | - $_recursion_marker = uniqid('krumo');
|
864 | | - }
|
865 | | -
|
866 | | - return $_recursion_marker;
|
867 | | - }
|
868 | | -
|
869 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
870 | | -
|
871 | | - /**
|
872 | | - * Adds a variable to the hive of arrays and objects which
|
873 | | - * are tracked for whether they have recursive entries
|
874 | | - *
|
875 | | - * @param mixed &$bee either array or object, not a scallar vale
|
876 | | - * @return array all the bees
|
877 | | - *
|
878 | | - * @access private
|
879 | | - * @static
|
880 | | - */
|
881 | | - Function &_hive(&$bee) {
|
882 | | -
|
883 | | - static $_ = array();
|
884 | | -
|
885 | | - // new bee ?
|
886 | | - //
|
887 | | - if (!is_null($bee)) {
|
888 | | -
|
889 | | - // stain it
|
890 | | - //
|
891 | | - $_recursion_marker = krumo::_marker();
|
892 | | - (is_object($bee))
|
893 | | - ? @($bee->$_recursion_marker++)
|
894 | | - : @($bee[$_recursion_marker]++);
|
895 | | -
|
896 | | - $_[0][] =& $bee;
|
897 | | - }
|
898 | | -
|
899 | | - // return all bees
|
900 | | - //
|
901 | | - return $_[0];
|
902 | | - }
|
903 | | -
|
904 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
905 | | -
|
906 | | - /**
|
907 | | - * Render a dump for the properties of an array or objeect
|
908 | | - *
|
909 | | - * @param mixed &$data
|
910 | | - * @access private
|
911 | | - * @static
|
912 | | - */
|
913 | | - Function _vars(&$data) {
|
914 | | -
|
915 | | - $_is_object = is_object($data);
|
916 | | -
|
917 | | - // test for references in order to
|
918 | | - // prevent endless recursion loops
|
919 | | - //
|
920 | | - $_recursion_marker = krumo::_marker();
|
921 | | - $_r = ($_is_object)
|
922 | | - ? @$data->$_recursion_marker
|
923 | | - : @$data[$_recursion_marker] ;
|
924 | | - $_r = (integer) $_r;
|
925 | | -
|
926 | | - // recursion detected
|
927 | | - //
|
928 | | - if ($_r > 0) {
|
929 | | - return krumo::_recursion();
|
930 | | - }
|
931 | | -
|
932 | | - // stain it
|
933 | | - //
|
934 | | - krumo::_hive($data);
|
935 | | -
|
936 | | - // render it
|
937 | | - //
|
938 | | - ?>
|
939 | | -<div class="krumo-nest" style="display:none;">
|
940 | | - <ul class="krumo-node">
|
941 | | - <?php
|
942 | | -
|
943 | | - // keys ?
|
944 | | - //
|
945 | | - $keys = ($_is_object)
|
946 | | - ? array_keys(get_object_vars($data))
|
947 | | - : array_keys($data);
|
948 | | -
|
949 | | - // itterate
|
950 | | - //
|
951 | | - foreach($keys as $k) {
|
952 | | -
|
953 | | - // skip marker
|
954 | | - //
|
955 | | - if ($k === $_recursion_marker) {
|
956 | | - continue;
|
957 | | - }
|
958 | | -
|
959 | | - // get real value
|
960 | | - //
|
961 | | - if ($_is_object) {
|
962 | | - $v =& $data->$k;
|
963 | | - } else {
|
964 | | - $v =& $data[$k];
|
965 | | - }
|
966 | | -
|
967 | | - // PHP 4.x.x array reference bug...
|
968 | | - //
|
969 | | - if (is_array($data) && version_compare(PHP_VERSION, "5", "<")) {
|
970 | | - $GLOBALS[krumo::_marker()][] =& $v;
|
971 | | - }
|
972 | | -
|
973 | | - krumo::_dump($v,$k);
|
974 | | - } ?>
|
975 | | - </ul>
|
976 | | -</div>
|
977 | | -<?php
|
978 | | - }
|
979 | | -
|
980 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
981 | | -
|
982 | | - /**
|
983 | | - * Render a block that detected recursion
|
984 | | - *
|
985 | | - * @access private
|
986 | | - * @static
|
987 | | - */
|
988 | | - Function _recursion() {
|
989 | | -?>
|
990 | | -<div class="krumo-nest" style="display:none;">
|
991 | | - <ul class="krumo-node">
|
992 | | - <li class="krumo-child">
|
993 | | - <div class="krumo-element"
|
994 | | - onMouseOver="krumo.over(this);"
|
995 | | - onMouseOut="krumo.out(this);">
|
996 | | - <a class="krumo-name"><big>∞</big></a>
|
997 | | - (<em class="krumo-type">Recursion</em>)
|
998 | | - </div>
|
999 | | -
|
1000 | | - </li>
|
1001 | | - </ul>
|
1002 | | -</div>
|
1003 | | -<?php
|
1004 | | - }
|
1005 | | -
|
1006 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1007 | | -
|
1008 | | - /**
|
1009 | | - * Render a dump for an array
|
1010 | | - *
|
1011 | | - * @param mixed $data
|
1012 | | - * @param string $name
|
1013 | | - * @access private
|
1014 | | - * @static
|
1015 | | - */
|
1016 | | - Function _array(&$data, $name) {
|
1017 | | -?>
|
1018 | | -<li class="krumo-child">
|
1019 | | -
|
1020 | | - <div class="krumo-element<?php echo count($data) > 0 ? ' krumo-expand' : '';?>"
|
1021 | | - <?php if (count($data) > 0) {?> onClick="krumo.toggle(this);"<?php } ?>
|
1022 | | - onMouseOver="krumo.over(this);"
|
1023 | | - onMouseOut="krumo.out(this);">
|
1024 | | -
|
1025 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1026 | | - (<em class="krumo-type">Array, <strong class="krumo-array-length"><?php echo
|
1027 | | - (count($data)==1)
|
1028 | | - ?("1 element")
|
1029 | | - :(count($data)." elements");
|
1030 | | - ?></strong></em>)
|
1031 | | -
|
1032 | | -
|
1033 | | - <?php
|
1034 | | - // callback ?
|
1035 | | - //
|
1036 | | - if (is_callable($data)) {
|
1037 | | - $_ = array_values($data);
|
1038 | | - ?>
|
1039 | | - <span class="krumo-callback"> |
|
1040 | | - (<em class="krumo-type">Callback</em>)
|
1041 | | - <strong class="krumo-string"><?php
|
1042 | | - echo htmlSpecialChars($_[0]);?>::<?php
|
1043 | | - echo htmlSpecialChars($_[1]);?>();</strong></span>
|
1044 | | - <?php
|
1045 | | - }
|
1046 | | - ?>
|
1047 | | -
|
1048 | | - </div>
|
1049 | | -
|
1050 | | - <?php if (count($data)) {
|
1051 | | - krumo::_vars($data);
|
1052 | | - } ?>
|
1053 | | -</li>
|
1054 | | -<?php
|
1055 | | - }
|
1056 | | -
|
1057 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1058 | | -
|
1059 | | - /**
|
1060 | | - * Render a dump for an object
|
1061 | | - *
|
1062 | | - * @param mixed $data
|
1063 | | - * @param string $name
|
1064 | | - * @access private
|
1065 | | - * @static
|
1066 | | - */
|
1067 | | - Function _object(&$data, $name) {
|
1068 | | -?>
|
1069 | | -<li class="krumo-child">
|
1070 | | -
|
1071 | | - <div class="krumo-element<?php echo count($data) > 0 ? ' krumo-expand' : '';?>"
|
1072 | | - <?php if (count($data) > 0) {?> onClick="krumo.toggle(this);"<?php } ?>
|
1073 | | - onMouseOver="krumo.over(this);"
|
1074 | | - onMouseOut="krumo.out(this);">
|
1075 | | -
|
1076 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1077 | | - (<em class="krumo-type">Object</em>)
|
1078 | | - <strong class="krumo-class"><?php echo get_class($data);?></strong>
|
1079 | | - </div>
|
1080 | | -
|
1081 | | - <?php if (count($data)) {
|
1082 | | - krumo::_vars($data);
|
1083 | | - } ?>
|
1084 | | -</li>
|
1085 | | -<?php
|
1086 | | - }
|
1087 | | -
|
1088 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1089 | | -
|
1090 | | - /**
|
1091 | | - * Render a dump for a resource
|
1092 | | - *
|
1093 | | - * @param mixed $data
|
1094 | | - * @param string $name
|
1095 | | - * @access private
|
1096 | | - * @static
|
1097 | | - */
|
1098 | | - Function _resource($data, $name) {
|
1099 | | -?>
|
1100 | | -<li class="krumo-child">
|
1101 | | -
|
1102 | | - <div class="krumo-element"
|
1103 | | - onMouseOver="krumo.over(this);"
|
1104 | | - onMouseOut="krumo.out(this);">
|
1105 | | -
|
1106 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1107 | | - (<em class="krumo-type">Resource</em>)
|
1108 | | - <strong class="krumo-resource"><?php echo get_resource_type($data);?></strong>
|
1109 | | - </div>
|
1110 | | -
|
1111 | | -</li>
|
1112 | | -<?php
|
1113 | | - }
|
1114 | | -
|
1115 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1116 | | -
|
1117 | | - /**
|
1118 | | - * Render a dump for a boolean value
|
1119 | | - *
|
1120 | | - * @param mixed $data
|
1121 | | - * @param string $name
|
1122 | | - * @access private
|
1123 | | - * @static
|
1124 | | - */
|
1125 | | - Function _boolean($data, $name) {
|
1126 | | -?>
|
1127 | | -<li class="krumo-child">
|
1128 | | -
|
1129 | | - <div class="krumo-element"
|
1130 | | - onMouseOver="krumo.over(this);"
|
1131 | | - onMouseOut="krumo.out(this);">
|
1132 | | -
|
1133 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1134 | | - (<em class="krumo-type">Boolean</em>)
|
1135 | | - <strong class="krumo-boolean"><?php echo $data?'TRUE':'FALSE'?></strong>
|
1136 | | - </div>
|
1137 | | -
|
1138 | | -</li>
|
1139 | | -<?php
|
1140 | | - }
|
1141 | | -
|
1142 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1143 | | -
|
1144 | | - /**
|
1145 | | - * Render a dump for a integer value
|
1146 | | - *
|
1147 | | - * @param mixed $data
|
1148 | | - * @param string $name
|
1149 | | - * @access private
|
1150 | | - * @static
|
1151 | | - */
|
1152 | | - Function _integer($data, $name) {
|
1153 | | -?>
|
1154 | | -<li class="krumo-child">
|
1155 | | -
|
1156 | | - <div class="krumo-element"
|
1157 | | - onMouseOver="krumo.over(this);"
|
1158 | | - onMouseOut="krumo.out(this);">
|
1159 | | -
|
1160 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1161 | | - (<em class="krumo-type">Integer</em>)
|
1162 | | - <strong class="krumo-integer"><?php echo $data;?></strong>
|
1163 | | - </div>
|
1164 | | -
|
1165 | | -</li>
|
1166 | | -<?php
|
1167 | | - }
|
1168 | | -
|
1169 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1170 | | -
|
1171 | | - /**
|
1172 | | - * Render a dump for a float value
|
1173 | | - *
|
1174 | | - * @param mixed $data
|
1175 | | - * @param string $name
|
1176 | | - * @access private
|
1177 | | - * @static
|
1178 | | - */
|
1179 | | - Function _float($data, $name) {
|
1180 | | -?>
|
1181 | | -<li class="krumo-child">
|
1182 | | -
|
1183 | | - <div class="krumo-element"
|
1184 | | - onMouseOver="krumo.over(this);"
|
1185 | | - onMouseOut="krumo.out(this);">
|
1186 | | -
|
1187 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1188 | | - (<em class="krumo-type">Float</em>)
|
1189 | | - <strong class="krumo-float"><?php echo $data;?></strong>
|
1190 | | - </div>
|
1191 | | -
|
1192 | | -</li>
|
1193 | | -<?php
|
1194 | | - }
|
1195 | | -
|
1196 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1197 | | -
|
1198 | | - /**
|
1199 | | - * Render a dump for a string value
|
1200 | | - *
|
1201 | | - * @param mixed $data
|
1202 | | - * @param string $name
|
1203 | | - * @access private
|
1204 | | - * @static
|
1205 | | - */
|
1206 | | - Function _string($data, $name) {
|
1207 | | -
|
1208 | | - // extra ?
|
1209 | | - //
|
1210 | | - $_extra = false;
|
1211 | | - $_ = $data;
|
1212 | | - if (strLen($data) > KRUMO_TRUNCATE_LENGTH) {
|
1213 | | - $_ = substr($data, 0, KRUMO_TRUNCATE_LENGTH - 3) . '...';
|
1214 | | - $_extra = true;
|
1215 | | - }
|
1216 | | -?>
|
1217 | | -<li class="krumo-child">
|
1218 | | -
|
1219 | | - <div class="krumo-element<?php echo $_extra ? ' krumo-expand' : '';?>"
|
1220 | | - <?php if ($_extra) {?> onClick="krumo.toggle(this);"<?php } ?>
|
1221 | | - onMouseOver="krumo.over(this);"
|
1222 | | - onMouseOut="krumo.out(this);">
|
1223 | | -
|
1224 | | - <a class="krumo-name"><?php echo $name;?></a>
|
1225 | | - (<em class="krumo-type">String,
|
1226 | | - <strong class="krumo-string-length"><?php
|
1227 | | - echo strlen($data) ?> characters</strong> </em>)
|
1228 | | - <strong class="krumo-string"><?php echo htmlSpecialChars($_);?></strong>
|
1229 | | -
|
1230 | | - <?php
|
1231 | | - // callback ?
|
1232 | | - //
|
1233 | | - if (is_callable($data)) {
|
1234 | | - ?>
|
1235 | | - <span class="krumo-callback"> |
|
1236 | | - (<em class="krumo-type">Callback</em>)
|
1237 | | - <strong class="krumo-string"><?php echo htmlSpecialChars($_);?>();</strong></span>
|
1238 | | - <?php
|
1239 | | - }
|
1240 | | - ?>
|
1241 | | -
|
1242 | | - </div>
|
1243 | | -
|
1244 | | - <?php if ($_extra) { ?>
|
1245 | | - <div class="krumo-nest" style="display:none;">
|
1246 | | - <ul class="krumo-node">
|
1247 | | -
|
1248 | | - <li class="krumo-child">
|
1249 | | - <div class="krumo-preview"><?php echo htmlSpecialChars($data);?></div>
|
1250 | | - </li>
|
1251 | | -
|
1252 | | - </ul>
|
1253 | | - </div>
|
1254 | | - <?php } ?>
|
1255 | | -</li>
|
1256 | | -<?php
|
1257 | | - }
|
1258 | | -
|
1259 | | - // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
|
1260 | | -
|
1261 | | -//--end-of-class--
|
1262 | | -}
|
1263 | | -
|
1264 | | -//////////////////////////////////////////////////////////////////////////////
|
1265 | | -
|
1266 | | -/**
|
1267 | | -* Alias of {@link krumo::dump()}
|
1268 | | -*
|
1269 | | -* @param mixed $data,...
|
1270 | | -*
|
1271 | | -* @see krumo::dump()
|
1272 | | -*/
|
1273 | | -Function krumo() {
|
1274 | | - $_ = func_get_args();
|
1275 | | - return call_user_func_array(
|
1276 | | - array('krumo', 'dump'), $_
|
1277 | | - );
|
1278 | | - }
|
1279 | | -
|
1280 | | -//////////////////////////////////////////////////////////////////////////////
|
1281 | | -
|
1282 | | -?> |
\ No newline at end of file |
| 2 | +<?php |
| 3 | +/** |
| 4 | +* Krumo: Structured information display solution |
| 5 | +* |
| 6 | +* Krumo is a debugging tool (PHP4/PHP5), which displays structured information |
| 7 | +* about any PHP variable. It is a nice replacement for print_r() or var_dump() |
| 8 | +* which are used by a lot of PHP developers. |
| 9 | +* |
| 10 | +* @author Kaloyan K. Tsvetkov <kaloyan@kaloyan.info> |
| 11 | +* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License Version 2.1 |
| 12 | +* |
| 13 | +* @package Krumo |
| 14 | +* @version $Id: class.krumo.php,v 1.1.2.5 2009/09/23 18:14:19 davereid Exp $ |
| 15 | +*/ |
| 16 | + |
| 17 | +////////////////////////////////////////////////////////////////////////////// |
| 18 | + |
| 19 | +/** |
| 20 | +* backward compatibility: the DIR_SEP constant isn't used anymore |
| 21 | +*/ |
| 22 | +if(!defined('DIR_SEP')) { |
| 23 | + define('DIR_SEP', DIRECTORY_SEPARATOR); |
| 24 | + } |
| 25 | +/** |
| 26 | +* backward compatibility: the PATH_SEPARATOR constant is availble since 4.3.0RC2 |
| 27 | +*/ |
| 28 | +if (!defined('PATH_SEPARATOR')) { |
| 29 | + define('PATH_SEPARATOR', OS_WINDOWS ? ';' : ':'); |
| 30 | + } |
| 31 | + |
| 32 | +// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 33 | + |
| 34 | +/** |
| 35 | +* Set the KRUMO_DIR constant up with the absolute path to Krumo files. If it is |
| 36 | +* not defined, include_path will be used. Set KRUMO_DIR only if any other module |
| 37 | +* or application has not already set it up. |
| 38 | +*/ |
| 39 | +if (!defined('KRUMO_DIR')) { |
| 40 | + define('KRUMO_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR); |
| 41 | + } |
| 42 | + |
| 43 | +/** |
| 44 | +* This constant sets the maximum strings of strings that will be shown |
| 45 | +* as they are. Longer strings will be truncated with this length, and |
| 46 | +* their `full form` will be shown in a child node. |
| 47 | +*/ |
| 48 | +if (!defined('KRUMO_TRUNCATE_LENGTH')) { |
| 49 | + define('KRUMO_TRUNCATE_LENGTH', 50); |
| 50 | + } |
| 51 | + |
| 52 | +////////////////////////////////////////////////////////////////////////////// |
| 53 | + |
| 54 | +/** |
| 55 | +* Krumo API |
| 56 | +* |
| 57 | +* This class stores the Krumo API for rendering and |
| 58 | +* displaying the structured information it is reporting |
| 59 | +* |
| 60 | +* @package Krumo |
| 61 | +*/ |
| 62 | +Class krumo { |
| 63 | + |
| 64 | + /** |
| 65 | + * Return Krumo version |
| 66 | + * |
| 67 | + * @return string |
| 68 | + * @access public |
| 69 | + * @static |
| 70 | + */ |
| 71 | + Function version() { |
| 72 | + return '0.2a'; |
| 73 | + } |
| 74 | + |
| 75 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 76 | + |
| 77 | + /** |
| 78 | + * Prints a debug backtrace |
| 79 | + * |
| 80 | + * @access public |
| 81 | + * @static |
| 82 | + */ |
| 83 | + Function backtrace() { |
| 84 | + |
| 85 | + // disabled ? |
| 86 | + // |
| 87 | + if (!krumo::_debug()) { |
| 88 | + return false; |
| 89 | + } |
| 90 | + |
| 91 | + // render it |
| 92 | + // |
| 93 | + return krumo::dump(debug_backtrace()); |
| 94 | + } |
| 95 | + |
| 96 | + /** |
| 97 | + * Prints a list of all currently declared classes. |
| 98 | + * |
| 99 | + * @access public |
| 100 | + * @static |
| 101 | + */ |
| 102 | + Function classes() { |
| 103 | + |
| 104 | + // disabled ? |
| 105 | + // |
| 106 | + if (!krumo::_debug()) { |
| 107 | + return false; |
| 108 | + } |
| 109 | + |
| 110 | + // render it |
| 111 | + // |
| 112 | + ?> |
| 113 | +<div class="krumo-title"> |
| 114 | +This is a list of all currently declared classes. |
| 115 | +</div> |
| 116 | + <?php |
| 117 | + return krumo::dump(get_declared_classes()); |
| 118 | + } |
| 119 | + |
| 120 | + /** |
| 121 | + * Prints a list of all currently declared interfaces (PHP5 only). |
| 122 | + * |
| 123 | + * @access public |
| 124 | + * @static |
| 125 | + */ |
| 126 | + Function interfaces() { |
| 127 | + |
| 128 | + // disabled ? |
| 129 | + // |
| 130 | + if (!krumo::_debug()) { |
| 131 | + return false; |
| 132 | + } |
| 133 | + |
| 134 | + // render it |
| 135 | + // |
| 136 | + ?> |
| 137 | +<div class="krumo-title"> |
| 138 | +This is a list of all currently declared interfaces. |
| 139 | +</div> |
| 140 | + <?php |
| 141 | + return krumo::dump(get_declared_interfaces()); |
| 142 | + } |
| 143 | + |
| 144 | + /** |
| 145 | + * Prints a list of all currently included (or required) files. |
| 146 | + * |
| 147 | + * @access public |
| 148 | + * @static |
| 149 | + */ |
| 150 | + Function includes() { |
| 151 | + |
| 152 | + // disabled ? |
| 153 | + // |
| 154 | + if (!krumo::_debug()) { |
| 155 | + return false; |
| 156 | + } |
| 157 | + |
| 158 | + // render it |
| 159 | + // |
| 160 | + ?> |
| 161 | +<div class="krumo-title"> |
| 162 | +This is a list of all currently included (or required) files. |
| 163 | +</div> |
| 164 | + <?php |
| 165 | + return krumo::dump(get_included_files()); |
| 166 | + } |
| 167 | + |
| 168 | + /** |
| 169 | + * Prints a list of all currently declared functions. |
| 170 | + * |
| 171 | + * @access public |
| 172 | + * @static |
| 173 | + */ |
| 174 | + Function functions() { |
| 175 | + |
| 176 | + // disabled ? |
| 177 | + // |
| 178 | + if (!krumo::_debug()) { |
| 179 | + return false; |
| 180 | + } |
| 181 | + |
| 182 | + // render it |
| 183 | + // |
| 184 | + ?> |
| 185 | +<div class="krumo-title"> |
| 186 | +This is a list of all currently declared functions. |
| 187 | +</div> |
| 188 | + <?php |
| 189 | + return krumo::dump(get_defined_functions()); |
| 190 | + } |
| 191 | + |
| 192 | + /** |
| 193 | + * Prints a list of all currently declared constants. |
| 194 | + * |
| 195 | + * @access public |
| 196 | + * @static |
| 197 | + */ |
| 198 | + Function defines() { |
| 199 | + |
| 200 | + // disabled ? |
| 201 | + // |
| 202 | + if (!krumo::_debug()) { |
| 203 | + return false; |
| 204 | + } |
| 205 | + |
| 206 | + // render it |
| 207 | + // |
| 208 | + ?> |
| 209 | +<div class="krumo-title"> |
| 210 | +This is a list of all currently declared constants (defines). |
| 211 | +</div> |
| 212 | + <?php |
| 213 | + return krumo::dump(get_defined_constants()); |
| 214 | + } |
| 215 | + |
| 216 | + /** |
| 217 | + * Prints a list of all currently loaded PHP extensions. |
| 218 | + * |
| 219 | + * @access public |
| 220 | + * @static |
| 221 | + */ |
| 222 | + Function extensions() { |
| 223 | + |
| 224 | + // disabled ? |
| 225 | + // |
| 226 | + if (!krumo::_debug()) { |
| 227 | + return false; |
| 228 | + } |
| 229 | + |
| 230 | + // render it |
| 231 | + // |
| 232 | + ?> |
| 233 | +<div class="krumo-title"> |
| 234 | +This is a list of all currently loaded PHP extensions. |
| 235 | +</div> |
| 236 | + <?php |
| 237 | + return krumo::dump(get_loaded_extensions()); |
| 238 | + } |
| 239 | + |
| 240 | + /** |
| 241 | + * Prints a list of all HTTP request headers. |
| 242 | + * |
| 243 | + * @access public |
| 244 | + * @static |
| 245 | + */ |
| 246 | + Function headers() { |
| 247 | + |
| 248 | + // disabled ? |
| 249 | + // |
| 250 | + if (!krumo::_debug()) { |
| 251 | + return false; |
| 252 | + } |
| 253 | + |
| 254 | + // render it |
| 255 | + // |
| 256 | + ?> |
| 257 | +<div class="krumo-title"> |
| 258 | +This is a list of all HTTP request headers. |
| 259 | +</div> |
| 260 | + <?php |
| 261 | + return krumo::dump(getAllHeaders()); |
| 262 | + } |
| 263 | + |
| 264 | + /** |
| 265 | + * Prints a list of the configuration settings read from <i>php.ini</i> |
| 266 | + * |
| 267 | + * @access public |
| 268 | + * @static |
| 269 | + */ |
| 270 | + Function phpini() { |
| 271 | + |
| 272 | + // disabled ? |
| 273 | + // |
| 274 | + if (!krumo::_debug()) { |
| 275 | + return false; |
| 276 | + } |
| 277 | + |
| 278 | + // render it |
| 279 | + // |
| 280 | + ?> |
| 281 | +<div class="krumo-title"> |
| 282 | +This is a list of the configuration settings read from <code><b><?php echo get_cfg_var('cfg_file_path');?></b></code>. |
| 283 | +</div> |
| 284 | + <?php |
| 285 | + return krumo::dump(parse_ini_file(get_cfg_var('cfg_file_path'), true)); |
| 286 | + } |
| 287 | + |
| 288 | + /** |
| 289 | + * Prints a list of all your configuration settings. |
| 290 | + * |
| 291 | + * @access public |
| 292 | + * @static |
| 293 | + */ |
| 294 | + Function conf() { |
| 295 | + |
| 296 | + // disabled ? |
| 297 | + // |
| 298 | + if (!krumo::_debug()) { |
| 299 | + return false; |
| 300 | + } |
| 301 | + |
| 302 | + // render it |
| 303 | + // |
| 304 | + ?> |
| 305 | +<div class="krumo-title"> |
| 306 | +This is a list of all your configuration settings. |
| 307 | +</div> |
| 308 | + <?php |
| 309 | + return krumo::dump(ini_get_all()); |
| 310 | + } |
| 311 | + |
| 312 | + /** |
| 313 | + * Prints a list of the specified directories under your <i>include_path</i> option. |
| 314 | + * |
| 315 | + * @access public |
| 316 | + * @static |
| 317 | + */ |
| 318 | + Function path() { |
| 319 | + |
| 320 | + // disabled ? |
| 321 | + // |
| 322 | + if (!krumo::_debug()) { |
| 323 | + return false; |
| 324 | + } |
| 325 | + |
| 326 | + // render it |
| 327 | + // |
| 328 | + ?> |
| 329 | +<div class="krumo-title"> |
| 330 | +This is a list of the specified directories under your <code><b>include_path</b></code> option. |
| 331 | +</div> |
| 332 | + <?php |
| 333 | + return krumo::dump(explode(PATH_SEPARATOR, ini_get('include_path'))); |
| 334 | + } |
| 335 | + |
| 336 | + /** |
| 337 | + * Prints a list of all the values from the <i>$_REQUEST</i> array. |
| 338 | + * |
| 339 | + * @access public |
| 340 | + * @static |
| 341 | + */ |
| 342 | + Function request() { |
| 343 | + |
| 344 | + // disabled ? |
| 345 | + // |
| 346 | + if (!krumo::_debug()) { |
| 347 | + return false; |
| 348 | + } |
| 349 | + |
| 350 | + // render it |
| 351 | + // |
| 352 | + ?> |
| 353 | +<div class="krumo-title"> |
| 354 | +This is a list of all the values from the <code><b>$_REQUEST</b></code> array. |
| 355 | +</div> |
| 356 | + <?php |
| 357 | + return krumo::dump($_REQUEST); |
| 358 | + } |
| 359 | + |
| 360 | + /** |
| 361 | + * Prints a list of all the values from the <i>$_GET</i> array. |
| 362 | + * |
| 363 | + * @access public |
| 364 | + * @static |
| 365 | + */ |
| 366 | + Function get() { |
| 367 | + |
| 368 | + // disabled ? |
| 369 | + // |
| 370 | + if (!krumo::_debug()) { |
| 371 | + return false; |
| 372 | + } |
| 373 | + |
| 374 | + // render it |
| 375 | + // |
| 376 | + ?> |
| 377 | +<div class="krumo-title"> |
| 378 | +This is a list of all the values from the <code><b>$_GET</b></code> array. |
| 379 | +</div> |
| 380 | + <?php |
| 381 | + return krumo::dump($_GET); |
| 382 | + } |
| 383 | + |
| 384 | + /** |
| 385 | + * Prints a list of all the values from the <i>$_POST</i> array. |
| 386 | + * |
| 387 | + * @access public |
| 388 | + * @static |
| 389 | + */ |
| 390 | + Function post() { |
| 391 | + |
| 392 | + // disabled ? |
| 393 | + // |
| 394 | + if (!krumo::_debug()) { |
| 395 | + return false; |
| 396 | + } |
| 397 | + |
| 398 | + // render it |
| 399 | + // |
| 400 | + ?> |
| 401 | +<div class="krumo-title"> |
| 402 | +This is a list of all the values from the <code><b>$_POST</b></code> array. |
| 403 | +</div> |
| 404 | + <?php |
| 405 | + return krumo::dump($_POST); |
| 406 | + } |
| 407 | + |
| 408 | + /** |
| 409 | + * Prints a list of all the values from the <i>$_SERVER</i> array. |
| 410 | + * |
| 411 | + * @access public |
| 412 | + * @static |
| 413 | + */ |
| 414 | + Function server() { |
| 415 | + |
| 416 | + // disabled ? |
| 417 | + // |
| 418 | + if (!krumo::_debug()) { |
| 419 | + return false; |
| 420 | + } |
| 421 | + |
| 422 | + // render it |
| 423 | + // |
| 424 | + ?> |
| 425 | +<div class="krumo-title"> |
| 426 | +This is a list of all the values from the <code><b>$_SERVER</b></code> array. |
| 427 | +</div> |
| 428 | + <?php |
| 429 | + return krumo::dump($_SERVER); |
| 430 | + } |
| 431 | + |
| 432 | + /** |
| 433 | + * Prints a list of all the values from the <i>$_COOKIE</i> array. |
| 434 | + * |
| 435 | + * @access public |
| 436 | + * @static |
| 437 | + */ |
| 438 | + Function cookie() { |
| 439 | + |
| 440 | + // disabled ? |
| 441 | + // |
| 442 | + if (!krumo::_debug()) { |
| 443 | + return false; |
| 444 | + } |
| 445 | + |
| 446 | + // render it |
| 447 | + // |
| 448 | + ?> |
| 449 | +<div class="krumo-title"> |
| 450 | +This is a list of all the values from the <code><b>$_COOKIE</b></code> array. |
| 451 | +</div> |
| 452 | + <?php |
| 453 | + return krumo::dump($_COOKIE); |
| 454 | + } |
| 455 | + |
| 456 | + /** |
| 457 | + * Prints a list of all the values from the <i>$_ENV</i> array. |
| 458 | + * |
| 459 | + * @access public |
| 460 | + * @static |
| 461 | + */ |
| 462 | + Function env() { |
| 463 | + |
| 464 | + // disabled ? |
| 465 | + // |
| 466 | + if (!krumo::_debug()) { |
| 467 | + return false; |
| 468 | + } |
| 469 | + |
| 470 | + // render it |
| 471 | + // |
| 472 | + ?> |
| 473 | +<div class="krumo-title"> |
| 474 | +This is a list of all the values from the <code><b>$_ENV</b></code> array. |
| 475 | +</div> |
| 476 | + <?php |
| 477 | + return krumo::dump($_ENV); |
| 478 | + } |
| 479 | + |
| 480 | + /** |
| 481 | + * Prints a list of all the values from the <i>$_SESSION</i> array. |
| 482 | + * |
| 483 | + * @access public |
| 484 | + * @static |
| 485 | + */ |
| 486 | + Function session() { |
| 487 | + |
| 488 | + // disabled ? |
| 489 | + // |
| 490 | + if (!krumo::_debug()) { |
| 491 | + return false; |
| 492 | + } |
| 493 | + |
| 494 | + // render it |
| 495 | + // |
| 496 | + ?> |
| 497 | +<div class="krumo-title"> |
| 498 | +This is a list of all the values from the <code><b>$_SESSION</b></code> array. |
| 499 | +</div> |
| 500 | + <?php |
| 501 | + return krumo::dump($_SESSION); |
| 502 | + } |
| 503 | + |
| 504 | + /** |
| 505 | + * Prints a list of all the values from an INI file. |
| 506 | + * |
| 507 | + * @param string $ini_file |
| 508 | + * |
| 509 | + * @access public |
| 510 | + * @static |
| 511 | + */ |
| 512 | + Function ini($ini_file) { |
| 513 | + |
| 514 | + // disabled ? |
| 515 | + // |
| 516 | + if (!krumo::_debug()) { |
| 517 | + return false; |
| 518 | + } |
| 519 | + |
| 520 | + // read it |
| 521 | + // |
| 522 | + if (!$_ = @parse_ini_file($ini_file, 1)) { |
| 523 | + return false; |
| 524 | + } |
| 525 | + |
| 526 | + // render it |
| 527 | + // |
| 528 | + ?> |
| 529 | +<div class="krumo-title"> |
| 530 | +This is a list of all the values from the <code><b><?php echo realpath($ini_file) ? realpath($ini_file) : $ini_file;?></b></code> INI file. |
| 531 | +</div> |
| 532 | + <?php |
| 533 | + return krumo::dump($_); |
| 534 | + } |
| 535 | + |
| 536 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 537 | + |
| 538 | + /** |
| 539 | + * Dump information about a variable |
| 540 | + * |
| 541 | + * @param mixed $data,... |
| 542 | + * @access public |
| 543 | + * @static |
| 544 | + */ |
| 545 | + Function dump($data) { |
| 546 | + |
| 547 | + // disabled ? |
| 548 | + // |
| 549 | + if (!krumo::_debug()) { |
| 550 | + return false; |
| 551 | + } |
| 552 | + |
| 553 | + // more arguments ? |
| 554 | + // |
| 555 | + if (func_num_args() > 1) { |
| 556 | + $_ = func_get_args(); |
| 557 | + foreach($_ as $d) { |
| 558 | + krumo::dump($d); |
| 559 | + } |
| 560 | + return; |
| 561 | + } |
| 562 | + |
| 563 | + // the css ? |
| 564 | + // |
| 565 | + krumo::_css(); |
| 566 | + |
| 567 | + // find caller |
| 568 | + |
| 569 | + // DEVEL: we added array_reverse() so the proper file+line number is found. |
| 570 | + $_ = array_reverse(debug_backtrace()); |
| 571 | + while($d = array_pop($_)) { |
| 572 | + // DEVEL: changed if() condition below |
| 573 | + if ((strpos(@$d['file'], 'devel') === FALSE) && (strpos(@$d['file'], 'krumo') === FALSE) && @$d['class'] != 'krumo') { |
| 574 | + break; |
| 575 | + } |
| 576 | + } |
| 577 | + |
| 578 | + // the content |
| 579 | + // |
| 580 | + ?> |
| 581 | +<div class="krumo-root" dir="ltr"> |
| 582 | + <ul class="krumo-node krumo-first"> |
| 583 | + <?php echo krumo::_dump($data);?> |
| 584 | + <li class="krumo-footnote"> |
| 585 | + <div class="krumo-version" style="white-space:nowrap;"> |
| 586 | + <h6>Krumo version <?php echo krumo::version();?></h6> | <a |
| 587 | + href="http://krumo.sourceforge.net" |
| 588 | + target="_blank">http://krumo.sourceforge.net</a> |
| 589 | + </div> |
| 590 | + |
| 591 | + <?php if (@$d['file']) { ?> |
| 592 | + <span class="krumo-call" style="white-space:nowrap;"> |
| 593 | + Called from <code><?php echo $d['file']?></code>, |
| 594 | + line <code><?php echo $d['line']?></code></span> |
| 595 | + <?php } ?> |
| 596 | + |
| 597 | + </li> |
| 598 | + </ul> |
| 599 | +</div> |
| 600 | +<?php |
| 601 | + // flee the hive |
| 602 | + // |
| 603 | + $_recursion_marker = krumo::_marker(); |
| 604 | + if ($hive =& krumo::_hive($dummy)) { |
| 605 | + foreach($hive as $i=>$bee){ |
| 606 | + if (is_object($bee)) { |
| 607 | + unset($hive[$i]->$_recursion_marker); |
| 608 | + } else { |
| 609 | + unset($hive[$i][$_recursion_marker]); |
| 610 | + } |
| 611 | + } |
| 612 | + } |
| 613 | + |
| 614 | + // PHP 4.x.x array reference bug... |
| 615 | + // |
| 616 | + if (is_array($data) && version_compare(PHP_VERSION, "5", "<")) { |
| 617 | + unset($GLOBALS[krumo::_marker()]); |
| 618 | + } |
| 619 | + } |
| 620 | + |
| 621 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 622 | + |
| 623 | + /** |
| 624 | + * Print the skin (CSS) |
| 625 | + * |
| 626 | + * @return boolean |
| 627 | + * @access private |
| 628 | + * @static |
| 629 | + */ |
| 630 | + Function _css() { |
| 631 | + |
| 632 | + static $_css = false; |
| 633 | + |
| 634 | + // already set ? |
| 635 | + // |
| 636 | + if ($_css) { |
| 637 | + return true; |
| 638 | + } |
| 639 | + |
| 640 | + $css = ''; |
| 641 | + |
| 642 | + // DEVEL: changed for Drupal variables system |
| 643 | + $skin = variable_get('devel_krumo_skin', 'orange'); |
| 644 | + |
| 645 | + // custom selected skin ? |
| 646 | + // |
| 647 | + $_ = KRUMO_DIR . "skins/{$skin}/skin.css"; |
| 648 | + if ($fp = @fopen($_, 'r', 1)) { |
| 649 | + $css = fread($fp, filesize($_)); |
| 650 | + fclose($fp); |
| 651 | + } |
| 652 | + |
| 653 | + // defautl skin ? |
| 654 | + // |
| 655 | + if (!$css && ($skin != 'default')) { |
| 656 | + $skin = 'default'; |
| 657 | + $_ = KRUMO_DIR . "skins/default/skin.css"; |
| 658 | + $css = join('', @file($_)); |
| 659 | + } |
| 660 | + |
| 661 | + // print ? |
| 662 | + // |
| 663 | + if ($_css = $css != '') { |
| 664 | + |
| 665 | + // fix the urls |
| 666 | + // |
| 667 | + |
| 668 | + // DEVEL: changed for Drupal path system. |
| 669 | + $css_url = base_path() . drupal_get_path('module', 'devel') . "/krumo/skins/{$skin}/"; |
| 670 | + |
| 671 | + $css = preg_replace('~%url%~Uis', $css_url, $css); |
| 672 | + |
| 673 | + // the CSS |
| 674 | + // |
| 675 | + ?> |
| 676 | +<!-- Using Krumo Skin: <?php echo preg_replace('~^' . preg_quote(realpath(KRUMO_DIR) . DIRECTORY_SEPARATOR) . '~Uis', '', realpath($_));?> --> |
| 677 | +<style type="text/css"> |
| 678 | +<!--/**/ |
| 679 | +<?php echo $css?> |
| 680 | + |
| 681 | +/**/--> |
| 682 | +</style> |
| 683 | +<?php |
| 684 | + // the JS |
| 685 | + // |
| 686 | + ?> |
| 687 | +<script type="text/javascript"> |
| 688 | +<!--// |
| 689 | +<?php echo join(file(KRUMO_DIR . "krumo.js"));?> |
| 690 | + |
| 691 | +//--> |
| 692 | +</script> |
| 693 | +<?php |
| 694 | + } |
| 695 | + |
| 696 | + return $_css; |
| 697 | + } |
| 698 | + |
| 699 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 700 | + |
| 701 | + /** |
| 702 | + * Enable Krumo |
| 703 | + * |
| 704 | + * @return boolean |
| 705 | + * @access public |
| 706 | + * @static |
| 707 | + */ |
| 708 | + Function enable() { |
| 709 | + return true === krumo::_debug(true); |
| 710 | + } |
| 711 | + |
| 712 | + /** |
| 713 | + * Disable Krumo |
| 714 | + * |
| 715 | + * @return boolean |
| 716 | + * @access public |
| 717 | + * @static |
| 718 | + */ |
| 719 | + Function disable() { |
| 720 | + return false === krumo::_debug(false); |
| 721 | + } |
| 722 | + |
| 723 | + /** |
| 724 | + * Get\Set Krumo state: whether it is enabled or disabled |
| 725 | + * |
| 726 | + * @param boolean $state |
| 727 | + * @return boolean |
| 728 | + * @access private |
| 729 | + * @static |
| 730 | + */ |
| 731 | + Function _debug($state=null) { |
| 732 | + |
| 733 | + static $_ = true; |
| 734 | + |
| 735 | + // set |
| 736 | + // |
| 737 | + if (isset($state)) { |
| 738 | + $_ = (boolean) $state; |
| 739 | + } |
| 740 | + |
| 741 | + // get |
| 742 | + // |
| 743 | + return $_; |
| 744 | + } |
| 745 | + |
| 746 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 747 | + |
| 748 | + /** |
| 749 | + * Dump information about a variable |
| 750 | + * |
| 751 | + * @param mixed $data |
| 752 | + * @param string $name |
| 753 | + * @access private |
| 754 | + * @static |
| 755 | + */ |
| 756 | + Function _dump(&$data, $name='...') { |
| 757 | + |
| 758 | + // object ? |
| 759 | + // |
| 760 | + if (is_object($data)) { |
| 761 | + return krumo::_object($data, $name); |
| 762 | + } |
| 763 | + |
| 764 | + // array ? |
| 765 | + // |
| 766 | + if (is_array($data)) { |
| 767 | + |
| 768 | + // PHP 4.x.x array reference bug... |
| 769 | + // |
| 770 | + if (version_compare(PHP_VERSION, "5", "<")) { |
| 771 | + |
| 772 | + // prepare the GLOBAL reference list... |
| 773 | + // |
| 774 | + if (!isset($GLOBALS[krumo::_marker()])) { |
| 775 | + $GLOBALS[krumo::_marker()] = array(); |
| 776 | + } |
| 777 | + if (!is_array($GLOBALS[krumo::_marker()])) { |
| 778 | + $GLOBALS[krumo::_marker()] = (array) $GLOBALS[krumo::_marker()]; |
| 779 | + } |
| 780 | + |
| 781 | + // extract ? |
| 782 | + // |
| 783 | + if (!empty($GLOBALS[krumo::_marker()])) { |
| 784 | + $d = array_shift($GLOBALS[krumo::_marker()]); |
| 785 | + if (is_array($d)) { |
| 786 | + $data = $d; |
| 787 | + } |
| 788 | + } |
| 789 | + } |
| 790 | + |
| 791 | + return krumo::_array($data, $name); |
| 792 | + } |
| 793 | + |
| 794 | + // resource ? |
| 795 | + // |
| 796 | + if (is_resource($data)) { |
| 797 | + return krumo::_resource($data, $name); |
| 798 | + } |
| 799 | + |
| 800 | + // scalar ? |
| 801 | + // |
| 802 | + if (is_string($data)) { |
| 803 | + return krumo::_string($data, $name); |
| 804 | + } |
| 805 | + |
| 806 | + if (is_float($data)) { |
| 807 | + return krumo::_float($data, $name); |
| 808 | + } |
| 809 | + |
| 810 | + if (is_integer($data)) { |
| 811 | + return krumo::_integer($data, $name); |
| 812 | + } |
| 813 | + |
| 814 | + if (is_bool($data)) { |
| 815 | + return krumo::_boolean($data, $name); |
| 816 | + } |
| 817 | + |
| 818 | + // null ? |
| 819 | + // |
| 820 | + if (is_null($data)) { |
| 821 | + return krumo::_null($name); |
| 822 | + } |
| 823 | + } |
| 824 | + |
| 825 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 826 | + |
| 827 | + /** |
| 828 | + * Render a dump for a NULL value |
| 829 | + * |
| 830 | + * @param string $name |
| 831 | + * @return string |
| 832 | + * @access private |
| 833 | + * @static |
| 834 | + */ |
| 835 | + Function _null($name) { |
| 836 | +?> |
| 837 | +<li class="krumo-child"> |
| 838 | + <div class="krumo-element" |
| 839 | + onMouseOver="krumo.over(this);" |
| 840 | + onMouseOut="krumo.out(this);"> |
| 841 | + |
| 842 | + <a class="krumo-name"><?php echo $name;?></a> |
| 843 | + (<em class="krumo-type krumo-null">NULL</em>) |
| 844 | + </div> |
| 845 | +</li> |
| 846 | +<?php |
| 847 | + } |
| 848 | + |
| 849 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 850 | + |
| 851 | + /** |
| 852 | + * Return the marked used to stain arrays |
| 853 | + * and objects in order to detect recursions |
| 854 | + * |
| 855 | + * @return string |
| 856 | + * @access private |
| 857 | + * @static |
| 858 | + */ |
| 859 | + Function _marker() { |
| 860 | + |
| 861 | + static $_recursion_marker; |
| 862 | + if (!isset($_recursion_marker)) { |
| 863 | + $_recursion_marker = uniqid('krumo'); |
| 864 | + } |
| 865 | + |
| 866 | + return $_recursion_marker; |
| 867 | + } |
| 868 | + |
| 869 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 870 | + |
| 871 | + /** |
| 872 | + * Adds a variable to the hive of arrays and objects which |
| 873 | + * are tracked for whether they have recursive entries |
| 874 | + * |
| 875 | + * @param mixed &$bee either array or object, not a scallar vale |
| 876 | + * @return array all the bees |
| 877 | + * |
| 878 | + * @access private |
| 879 | + * @static |
| 880 | + */ |
| 881 | + Function &_hive(&$bee) { |
| 882 | + |
| 883 | + static $_ = array(); |
| 884 | + |
| 885 | + // new bee ? |
| 886 | + // |
| 887 | + if (!is_null($bee)) { |
| 888 | + |
| 889 | + // stain it |
| 890 | + // |
| 891 | + $_recursion_marker = krumo::_marker(); |
| 892 | + (is_object($bee)) |
| 893 | + ? @($bee->$_recursion_marker++) |
| 894 | + : @($bee[$_recursion_marker]++); |
| 895 | + |
| 896 | + $_[0][] =& $bee; |
| 897 | + } |
| 898 | + |
| 899 | + // return all bees |
| 900 | + // |
| 901 | + return $_[0]; |
| 902 | + } |
| 903 | + |
| 904 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 905 | + |
| 906 | + /** |
| 907 | + * Render a dump for the properties of an array or objeect |
| 908 | + * |
| 909 | + * @param mixed &$data |
| 910 | + * @access private |
| 911 | + * @static |
| 912 | + */ |
| 913 | + Function _vars(&$data) { |
| 914 | + |
| 915 | + $_is_object = is_object($data); |
| 916 | + |
| 917 | + // test for references in order to |
| 918 | + // prevent endless recursion loops |
| 919 | + // |
| 920 | + $_recursion_marker = krumo::_marker(); |
| 921 | + $_r = ($_is_object) |
| 922 | + ? @$data->$_recursion_marker |
| 923 | + : @$data[$_recursion_marker] ; |
| 924 | + $_r = (integer) $_r; |
| 925 | + |
| 926 | + // recursion detected |
| 927 | + // |
| 928 | + if ($_r > 0) { |
| 929 | + return krumo::_recursion(); |
| 930 | + } |
| 931 | + |
| 932 | + // stain it |
| 933 | + // |
| 934 | + krumo::_hive($data); |
| 935 | + |
| 936 | + // render it |
| 937 | + // |
| 938 | + ?> |
| 939 | +<div class="krumo-nest" style="display:none;"> |
| 940 | + <ul class="krumo-node"> |
| 941 | + <?php |
| 942 | + |
| 943 | + // keys ? |
| 944 | + // |
| 945 | + $keys = ($_is_object) |
| 946 | + ? array_keys(get_object_vars($data)) |
| 947 | + : array_keys($data); |
| 948 | + |
| 949 | + // itterate |
| 950 | + // |
| 951 | + foreach($keys as $k) { |
| 952 | + |
| 953 | + // skip marker |
| 954 | + // |
| 955 | + if ($k === $_recursion_marker) { |
| 956 | + continue; |
| 957 | + } |
| 958 | + |
| 959 | + // get real value |
| 960 | + // |
| 961 | + if ($_is_object) { |
| 962 | + $v =& $data->$k; |
| 963 | + } else { |
| 964 | + $v =& $data[$k]; |
| 965 | + } |
| 966 | + |
| 967 | + // PHP 4.x.x array reference bug... |
| 968 | + // |
| 969 | + if (is_array($data) && version_compare(PHP_VERSION, "5", "<")) { |
| 970 | + $GLOBALS[krumo::_marker()][] =& $v; |
| 971 | + } |
| 972 | + |
| 973 | + krumo::_dump($v,$k); |
| 974 | + } ?> |
| 975 | + </ul> |
| 976 | +</div> |
| 977 | +<?php |
| 978 | + } |
| 979 | + |
| 980 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 981 | + |
| 982 | + /** |
| 983 | + * Render a block that detected recursion |
| 984 | + * |
| 985 | + * @access private |
| 986 | + * @static |
| 987 | + */ |
| 988 | + Function _recursion() { |
| 989 | +?> |
| 990 | +<div class="krumo-nest" style="display:none;"> |
| 991 | + <ul class="krumo-node"> |
| 992 | + <li class="krumo-child"> |
| 993 | + <div class="krumo-element" |
| 994 | + onMouseOver="krumo.over(this);" |
| 995 | + onMouseOut="krumo.out(this);"> |
| 996 | + <a class="krumo-name"><big>∞</big></a> |
| 997 | + (<em class="krumo-type">Recursion</em>) |
| 998 | + </div> |
| 999 | + |
| 1000 | + </li> |
| 1001 | + </ul> |
| 1002 | +</div> |
| 1003 | +<?php |
| 1004 | + } |
| 1005 | + |
| 1006 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1007 | + |
| 1008 | + /** |
| 1009 | + * Render a dump for an array |
| 1010 | + * |
| 1011 | + * @param mixed $data |
| 1012 | + * @param string $name |
| 1013 | + * @access private |
| 1014 | + * @static |
| 1015 | + */ |
| 1016 | + Function _array(&$data, $name) { |
| 1017 | +?> |
| 1018 | +<li class="krumo-child"> |
| 1019 | + |
| 1020 | + <div class="krumo-element<?php echo count($data) > 0 ? ' krumo-expand' : '';?>" |
| 1021 | + <?php if (count($data) > 0) {?> onClick="krumo.toggle(this);"<?php } ?> |
| 1022 | + onMouseOver="krumo.over(this);" |
| 1023 | + onMouseOut="krumo.out(this);"> |
| 1024 | + |
| 1025 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1026 | + (<em class="krumo-type">Array, <strong class="krumo-array-length"><?php echo |
| 1027 | + (count($data)==1) |
| 1028 | + ?("1 element") |
| 1029 | + :(count($data)." elements"); |
| 1030 | + ?></strong></em>) |
| 1031 | + |
| 1032 | + |
| 1033 | + <?php |
| 1034 | + // callback ? |
| 1035 | + // |
| 1036 | + if (is_callable($data)) { |
| 1037 | + $_ = array_values($data); |
| 1038 | + ?> |
| 1039 | + <span class="krumo-callback"> | |
| 1040 | + (<em class="krumo-type">Callback</em>) |
| 1041 | + <strong class="krumo-string"><?php |
| 1042 | + echo htmlSpecialChars($_[0]);?>::<?php |
| 1043 | + echo htmlSpecialChars($_[1]);?>();</strong></span> |
| 1044 | + <?php |
| 1045 | + } |
| 1046 | + ?> |
| 1047 | + |
| 1048 | + </div> |
| 1049 | + |
| 1050 | + <?php if (count($data)) { |
| 1051 | + krumo::_vars($data); |
| 1052 | + } ?> |
| 1053 | +</li> |
| 1054 | +<?php |
| 1055 | + } |
| 1056 | + |
| 1057 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1058 | + |
| 1059 | + /** |
| 1060 | + * Render a dump for an object |
| 1061 | + * |
| 1062 | + * @param mixed $data |
| 1063 | + * @param string $name |
| 1064 | + * @access private |
| 1065 | + * @static |
| 1066 | + */ |
| 1067 | + Function _object(&$data, $name) { |
| 1068 | +?> |
| 1069 | +<li class="krumo-child"> |
| 1070 | + |
| 1071 | + <div class="krumo-element<?php echo count($data) > 0 ? ' krumo-expand' : '';?>" |
| 1072 | + <?php if (count($data) > 0) {?> onClick="krumo.toggle(this);"<?php } ?> |
| 1073 | + onMouseOver="krumo.over(this);" |
| 1074 | + onMouseOut="krumo.out(this);"> |
| 1075 | + |
| 1076 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1077 | + (<em class="krumo-type">Object</em>) |
| 1078 | + <strong class="krumo-class"><?php echo get_class($data);?></strong> |
| 1079 | + </div> |
| 1080 | + |
| 1081 | + <?php if (count($data)) { |
| 1082 | + krumo::_vars($data); |
| 1083 | + } ?> |
| 1084 | +</li> |
| 1085 | +<?php |
| 1086 | + } |
| 1087 | + |
| 1088 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1089 | + |
| 1090 | + /** |
| 1091 | + * Render a dump for a resource |
| 1092 | + * |
| 1093 | + * @param mixed $data |
| 1094 | + * @param string $name |
| 1095 | + * @access private |
| 1096 | + * @static |
| 1097 | + */ |
| 1098 | + Function _resource($data, $name) { |
| 1099 | +?> |
| 1100 | +<li class="krumo-child"> |
| 1101 | + |
| 1102 | + <div class="krumo-element" |
| 1103 | + onMouseOver="krumo.over(this);" |
| 1104 | + onMouseOut="krumo.out(this);"> |
| 1105 | + |
| 1106 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1107 | + (<em class="krumo-type">Resource</em>) |
| 1108 | + <strong class="krumo-resource"><?php echo get_resource_type($data);?></strong> |
| 1109 | + </div> |
| 1110 | + |
| 1111 | +</li> |
| 1112 | +<?php |
| 1113 | + } |
| 1114 | + |
| 1115 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1116 | + |
| 1117 | + /** |
| 1118 | + * Render a dump for a boolean value |
| 1119 | + * |
| 1120 | + * @param mixed $data |
| 1121 | + * @param string $name |
| 1122 | + * @access private |
| 1123 | + * @static |
| 1124 | + */ |
| 1125 | + Function _boolean($data, $name) { |
| 1126 | +?> |
| 1127 | +<li class="krumo-child"> |
| 1128 | + |
| 1129 | + <div class="krumo-element" |
| 1130 | + onMouseOver="krumo.over(this);" |
| 1131 | + onMouseOut="krumo.out(this);"> |
| 1132 | + |
| 1133 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1134 | + (<em class="krumo-type">Boolean</em>) |
| 1135 | + <strong class="krumo-boolean"><?php echo $data?'TRUE':'FALSE'?></strong> |
| 1136 | + </div> |
| 1137 | + |
| 1138 | +</li> |
| 1139 | +<?php |
| 1140 | + } |
| 1141 | + |
| 1142 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1143 | + |
| 1144 | + /** |
| 1145 | + * Render a dump for a integer value |
| 1146 | + * |
| 1147 | + * @param mixed $data |
| 1148 | + * @param string $name |
| 1149 | + * @access private |
| 1150 | + * @static |
| 1151 | + */ |
| 1152 | + Function _integer($data, $name) { |
| 1153 | +?> |
| 1154 | +<li class="krumo-child"> |
| 1155 | + |
| 1156 | + <div class="krumo-element" |
| 1157 | + onMouseOver="krumo.over(this);" |
| 1158 | + onMouseOut="krumo.out(this);"> |
| 1159 | + |
| 1160 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1161 | + (<em class="krumo-type">Integer</em>) |
| 1162 | + <strong class="krumo-integer"><?php echo $data;?></strong> |
| 1163 | + </div> |
| 1164 | + |
| 1165 | +</li> |
| 1166 | +<?php |
| 1167 | + } |
| 1168 | + |
| 1169 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1170 | + |
| 1171 | + /** |
| 1172 | + * Render a dump for a float value |
| 1173 | + * |
| 1174 | + * @param mixed $data |
| 1175 | + * @param string $name |
| 1176 | + * @access private |
| 1177 | + * @static |
| 1178 | + */ |
| 1179 | + Function _float($data, $name) { |
| 1180 | +?> |
| 1181 | +<li class="krumo-child"> |
| 1182 | + |
| 1183 | + <div class="krumo-element" |
| 1184 | + onMouseOver="krumo.over(this);" |
| 1185 | + onMouseOut="krumo.out(this);"> |
| 1186 | + |
| 1187 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1188 | + (<em class="krumo-type">Float</em>) |
| 1189 | + <strong class="krumo-float"><?php echo $data;?></strong> |
| 1190 | + </div> |
| 1191 | + |
| 1192 | +</li> |
| 1193 | +<?php |
| 1194 | + } |
| 1195 | + |
| 1196 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1197 | + |
| 1198 | + /** |
| 1199 | + * Render a dump for a string value |
| 1200 | + * |
| 1201 | + * @param mixed $data |
| 1202 | + * @param string $name |
| 1203 | + * @access private |
| 1204 | + * @static |
| 1205 | + */ |
| 1206 | + Function _string($data, $name) { |
| 1207 | + |
| 1208 | + // extra ? |
| 1209 | + // |
| 1210 | + $_extra = false; |
| 1211 | + $_ = $data; |
| 1212 | + if (strLen($data) > KRUMO_TRUNCATE_LENGTH) { |
| 1213 | + $_ = substr($data, 0, KRUMO_TRUNCATE_LENGTH - 3) . '...'; |
| 1214 | + $_extra = true; |
| 1215 | + } |
| 1216 | +?> |
| 1217 | +<li class="krumo-child"> |
| 1218 | + |
| 1219 | + <div class="krumo-element<?php echo $_extra ? ' krumo-expand' : '';?>" |
| 1220 | + <?php if ($_extra) {?> onClick="krumo.toggle(this);"<?php } ?> |
| 1221 | + onMouseOver="krumo.over(this);" |
| 1222 | + onMouseOut="krumo.out(this);"> |
| 1223 | + |
| 1224 | + <a class="krumo-name"><?php echo $name;?></a> |
| 1225 | + (<em class="krumo-type">String, |
| 1226 | + <strong class="krumo-string-length"><?php |
| 1227 | + echo strlen($data) ?> characters</strong> </em>) |
| 1228 | + <strong class="krumo-string"><?php echo htmlSpecialChars($_);?></strong> |
| 1229 | + |
| 1230 | + <?php |
| 1231 | + // callback ? |
| 1232 | + // |
| 1233 | + if (is_callable($data)) { |
| 1234 | + ?> |
| 1235 | + <span class="krumo-callback"> | |
| 1236 | + (<em class="krumo-type">Callback</em>) |
| 1237 | + <strong class="krumo-string"><?php echo htmlSpecialChars($_);?>();</strong></span> |
| 1238 | + <?php |
| 1239 | + } |
| 1240 | + ?> |
| 1241 | + |
| 1242 | + </div> |
| 1243 | + |
| 1244 | + <?php if ($_extra) { ?> |
| 1245 | + <div class="krumo-nest" style="display:none;"> |
| 1246 | + <ul class="krumo-node"> |
| 1247 | + |
| 1248 | + <li class="krumo-child"> |
| 1249 | + <div class="krumo-preview"><?php echo htmlSpecialChars($data);?></div> |
| 1250 | + </li> |
| 1251 | + |
| 1252 | + </ul> |
| 1253 | + </div> |
| 1254 | + <?php } ?> |
| 1255 | +</li> |
| 1256 | +<?php |
| 1257 | + } |
| 1258 | + |
| 1259 | + // -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |
| 1260 | + |
| 1261 | +//--end-of-class-- |
| 1262 | +} |
| 1263 | + |
| 1264 | +////////////////////////////////////////////////////////////////////////////// |
| 1265 | + |
| 1266 | +/** |
| 1267 | +* Alias of {@link krumo::dump()} |
| 1268 | +* |
| 1269 | +* @param mixed $data,... |
| 1270 | +* |
| 1271 | +* @see krumo::dump() |
| 1272 | +*/ |
| 1273 | +Function krumo() { |
| 1274 | + $_ = func_get_args(); |
| 1275 | + return call_user_func_array( |
| 1276 | + array('krumo', 'dump'), $_ |
| 1277 | + ); |
| 1278 | + } |
| 1279 | + |
| 1280 | +////////////////////////////////////////////////////////////////////////////// |
| 1281 | + |
| 1282 | +?> |
Index: civicrm/trunk/sites/all/modules/devel/krumo/krumo.ini |
— | — | @@ -3,7 +3,7 @@ |
4 | 4 | ;
|
5 | 5 |
|
6 | 6 | [skin]
|
7 | | -selected = "schablon.com"
|
| 7 | +selected = "white"
|
8 | 8 | ;
|
9 | 9 | ; Change the above value to set the CSS skin used to render
|
10 | 10 | ; Krumo layout. If the skin is not found, then the "default" one
|
— | — | @@ -17,4 +17,4 @@ |
18 | 18 | ; where the Krumo folder is. This is required in
|
19 | 19 | ; order to have web access to Krumo's CSS and
|
20 | 20 | ; image files.
|
21 | | -; |
\ No newline at end of file |
| 21 | +;
|
Index: civicrm/trunk/sites/all/modules/devel/performance/performance.module |
— | — | @@ -1,10 +1,27 @@ |
2 | 2 | <?php |
3 | | -// $Id: performance.module,v 1.2.2.24 2009/06/25 02:51:54 kbahey Exp $ |
| 3 | +// $Id: performance.module,v 1.2.2.33 2010/08/04 22:26:53 kbahey Exp $ |
4 | 4 | |
5 | | -// Copyright Khalid Baheyeldin 2008 of http://2bits.com |
| 5 | +/** |
| 6 | + * @file |
| 7 | + * |
| 8 | + * Logs detailed and/or summary page generation time and memory |
| 9 | + * consumption for page requests. |
| 10 | + * |
| 11 | + * Copyright Khalid Baheyeldin 2008 of http://2bits.com |
| 12 | + */ |
6 | 13 | |
7 | | -define('PERFORMANCE_KEY', 'dru-perf:' . $_SERVER['HTTP_HOST'] . ':'); |
| 14 | +define('PERFORMANCE_KEY', 'dru-perf:'. $_SERVER['HTTP_HOST'] .':'); |
| 15 | +define('PERFORMANCE_MEMCACHE_BIN', 'cache_performance'); |
8 | 16 | |
| 17 | +function performance_memcache_enabled() { |
| 18 | + global $conf; |
| 19 | + |
| 20 | + if (function_exists('dmemcache_set') && isset($conf['memcache_bins']['cache_performance'])) { |
| 21 | + return TRUE; |
| 22 | + } |
| 23 | + return FALSE; |
| 24 | +} |
| 25 | + |
9 | 26 | function performance_menu() { |
10 | 27 | $items = array(); |
11 | 28 | |
— | — | @@ -24,6 +41,14 @@ |
25 | 42 | 'access arguments' => array('access administration pages'), |
26 | 43 | ); |
27 | 44 | |
| 45 | + $items['admin/settings/performance_logging/memcache_clear'] = array( |
| 46 | + 'title' => 'Clear Memcache', |
| 47 | + 'description' => 'Clears performance statistics collected in Memcache.', |
| 48 | + 'page callback' => 'drupal_get_form', |
| 49 | + 'page arguments' => array('performance_clear_memcache_confirm'), |
| 50 | + 'access arguments' => array('access administration pages'), |
| 51 | + ); |
| 52 | + |
28 | 53 | $items['admin/reports/performance_logging_summary'] = array( |
29 | 54 | 'title' => 'Performance Logs: Summary', |
30 | 55 | 'description' => 'View summary performance logs: page generation times and memory usage.', |
— | — | @@ -90,6 +115,20 @@ |
91 | 116 | '#description' => t('Log summary data, such as average and maximum page generation times and memory usage to APC, if installed. The summary will be stored in APC memory, and hence there is no load on the database. This logging to APC is suitable for most live sites, unless the number of unique page accesses is excessively high.'), |
92 | 117 | ); |
93 | 118 | |
| 119 | + $disabled = TRUE; |
| 120 | + if (performance_memcache_enabled()) { |
| 121 | + $disabled = FALSE; |
| 122 | + } |
| 123 | + |
| 124 | + $form['mode']['performance_summary_memcache'] = array( |
| 125 | + '#type' => 'select', |
| 126 | + '#title' => t('Summary logging (Memcached)'), |
| 127 | + '#default_value' => variable_get('performance_summary_memcache', 0), |
| 128 | + '#options' => $options, |
| 129 | + '#disabled' => $disabled, |
| 130 | + '#description' => t('Log summary data, such as average and maximum page generation times and memory usage to Memcached, if installed. The summary will be stored in Memcached memory, and hence there is no load on the database. This logging to Memcached is suitable for most live sites, unless the number of unique page accesses is excessively high.'), |
| 131 | + ); |
| 132 | + |
94 | 133 | $form['other'] = array( |
95 | 134 | '#type' => 'fieldset', |
96 | 135 | '#title' => t('Other'), |
— | — | @@ -123,7 +162,8 @@ |
124 | 163 | function performance_shutdown() { |
125 | 164 | global $queries; |
126 | 165 | |
127 | | - if ($_GET['q']) { |
| 166 | +// if ($_GET['q']) { |
| 167 | + if (isset($_GET['q']) && ($_GET['q'])) { |
128 | 168 | // q= has a value, use that for the path |
129 | 169 | $path = $_GET['q']; |
130 | 170 | } |
— | — | @@ -144,7 +184,7 @@ |
145 | 185 | else { |
146 | 186 | $params['mem'] = 0; |
147 | 187 | } |
148 | | - |
| 188 | + |
149 | 189 | // Query time and count |
150 | 190 | $query_count = 0; |
151 | 191 | $query_timer = 0; |
— | — | @@ -160,7 +200,7 @@ |
161 | 201 | $params['query_count'] = $query_count; |
162 | 202 | $params['query_timer'] = $query_timer; |
163 | 203 | |
164 | | - $anon = ($data['anon']) ? t('Yes') : t('No'); |
| 204 | + $anon = (!empty($data['anon']))? 'Yes' : 'No'; |
165 | 205 | |
166 | 206 | $header = array( |
167 | 207 | 'path' => $path, |
— | — | @@ -190,6 +230,12 @@ |
191 | 231 | performance_log_summary_apc($params); |
192 | 232 | } |
193 | 233 | } |
| 234 | + |
| 235 | + if (variable_get('performance_summary_memcache', 0)) { |
| 236 | + if (performance_memcache_enabled()) { |
| 237 | + performance_log_summary_memcache($params); |
| 238 | + } |
| 239 | + } |
194 | 240 | } |
195 | 241 | |
196 | 242 | function performance_log_summary_apc($params = array()) { |
— | — | @@ -200,8 +246,8 @@ |
201 | 247 | 'last_access' => time(), |
202 | 248 | 'bytes_max' => max($params['mem'], $data['bytes_max']), |
203 | 249 | 'bytes_avg' => ($data['bytes_avg'] + $params['mem']) / 2, |
204 | | - 'millisecs_max' => max($params['timer'], $data['millisecs_max']), |
205 | | - 'millisecs_avg' => ($data['millisecs_avg'] + $params['timer']) / 2, |
| 250 | + 'ms_max' => max($params['timer'], $data['ms_max']), |
| 251 | + 'ms_avg' => ($data['ms_avg'] + $params['timer']) / 2, |
206 | 252 | 'query_timer_max' => max($params['query_timer'], $data['query_timer_max']), |
207 | 253 | 'query_timer_avg' => ($data['query_timer_avg'] + $params['query_timer']) / 2, |
208 | 254 | 'query_count_max' => max($params['query_count'], $data['query_count_max']), |
— | — | @@ -212,10 +258,10 @@ |
213 | 259 | else { |
214 | 260 | $data = array( |
215 | 261 | 'path' => $params['path'], |
216 | | - 'bytes_max' => $params['mem'], |
| 262 | + 'bytes_max' => $params['mem'], |
217 | 263 | 'bytes_avg' => $params['mem'], |
218 | | - 'millisecs_max' => $params['timer'], |
219 | | - 'millisecs_avg' => $params['timer'], |
| 264 | + 'ms_max' => $params['timer'], |
| 265 | + 'ms_avg' => $params['timer'], |
220 | 266 | 'query_timer_max' => $params['query_timer'], |
221 | 267 | 'query_timer_avg' => $params['query_timer'], |
222 | 268 | 'query_count_max' => $params['query_count'], |
— | — | @@ -227,16 +273,61 @@ |
228 | 274 | apc_store($key, $data); |
229 | 275 | } |
230 | 276 | |
| 277 | +function performance_log_summary_memcache($params = array()) { |
| 278 | + $key = PERFORMANCE_KEY . $params['path']; |
| 279 | + if ($cache = cache_get($key, PERFORMANCE_MEMCACHE_BIN)) { |
| 280 | + $type = 'existing'; |
| 281 | + $values = $cache->data; |
| 282 | + $values = array( |
| 283 | + 'path' => $params['path'], |
| 284 | + 'last_access' => time(), |
| 285 | + 'bytes_max' => max($params['mem'], $values['bytes_max']), |
| 286 | + 'bytes_avg' => ($values['bytes_avg'] + $params['mem']) / 2, |
| 287 | + 'ms_max' => max($params['timer'], $values['ms_max']), |
| 288 | + 'ms_avg' => ($values['ms_avg'] + $params['timer']) / 2, |
| 289 | + 'query_timer_max' => max($params['query_timer'], $values['query_timer_max']), |
| 290 | + 'query_timer_avg' => ($values['query_timer_avg'] + $params['query_timer']) / 2, |
| 291 | + 'query_count_max' => max($params['query_count'], $values['query_count_max']), |
| 292 | + 'query_count_avg' => ($values['query_count_avg'] + $params['query_count']) / 2, |
| 293 | + 'num_accesses' => $values['num_accesses'] + 1, |
| 294 | + ); |
| 295 | + } |
| 296 | + else { |
| 297 | + $type = 'new'; |
| 298 | + // It is a new key |
| 299 | + $values = array( |
| 300 | + 'path' => $params['path'], |
| 301 | + 'bytes_max' => $params['mem'], |
| 302 | + 'bytes_avg' => $params['mem'], |
| 303 | + 'ms_max' => $params['timer'], |
| 304 | + 'ms_avg' => $params['timer'], |
| 305 | + 'query_timer_max' => $params['query_timer'], |
| 306 | + 'query_timer_avg' => $params['query_timer'], |
| 307 | + 'query_count_max' => $params['query_count'], |
| 308 | + 'query_count_avg' => $params['query_count'], |
| 309 | + 'num_accesses' => 1, |
| 310 | + 'last_access' => time(), |
| 311 | + ); |
| 312 | + |
| 313 | + if ($keys_cache = cache_get(PERFORMANCE_KEY, PERFORMANCE_MEMCACHE_BIN)) { |
| 314 | + $keys_values = $keys_cache->data; |
| 315 | + } |
| 316 | + $keys_values[$key] = 1; |
| 317 | + cache_set(PERFORMANCE_KEY, $keys_values, PERFORMANCE_MEMCACHE_BIN, CACHE_PERMANENT); |
| 318 | + } |
| 319 | + cache_set($key, $values, PERFORMANCE_MEMCACHE_BIN, CACHE_PERMANENT); |
| 320 | +} |
| 321 | + |
231 | 322 | function performance_log_summary_db($params = array()) { |
232 | 323 | $row = db_fetch_object(db_query("SELECT * FROM {performance_summary} WHERE path = '%s'", $params['path'])); |
233 | 324 | if (!empty($row)) { |
234 | | - db_query("UPDATE {performance_summary} |
| 325 | + db_query("UPDATE {performance_summary} |
235 | 326 | SET last_access = %d, |
236 | 327 | num_accesses = num_accesses + 1, |
237 | 328 | bytes_max = %d, |
238 | 329 | bytes_avg = %d, |
239 | | - millisecs_max = %d, |
240 | | - millisecs_avg = %d, |
| 330 | + ms_max = %d, |
| 331 | + ms_avg = %d, |
241 | 332 | query_timer_max = %d, |
242 | 333 | query_timer_avg = %d, |
243 | 334 | query_count_max = %d, |
— | — | @@ -245,8 +336,8 @@ |
246 | 337 | time(), |
247 | 338 | max($params['mem'], $row->bytes_max), |
248 | 339 | ($row->bytes_avg + $params['mem']) / 2, |
249 | | - max($params['timer'], $row->millisecs_max), |
250 | | - ($row->millisecs_avg + $params['timer']) / 2, |
| 340 | + max($params['timer'], $row->ms_max), |
| 341 | + ($row->ms_avg + $params['timer']) / 2, |
251 | 342 | max($params['query_timer'], $row->query_timer_max), |
252 | 343 | ($row->query_timer_avg + $params['query_timer']) / 2, |
253 | 344 | max($params['query_count'], $row->query_count_max), |
— | — | @@ -257,15 +348,15 @@ |
258 | 349 | // First time we log this path, write fresh values |
259 | 350 | db_query("INSERT INTO {performance_summary} |
260 | 351 | (path, last_access, num_accesses, |
261 | | - bytes_max, bytes_avg, millisecs_max, millisecs_avg, |
| 352 | + bytes_max, bytes_avg, ms_max, ms_avg, |
262 | 353 | query_count_max, query_count_avg, query_timer_max, query_timer_avg) |
263 | | - VALUES |
| 354 | + VALUES |
264 | 355 | ('%s', %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", |
265 | 356 | $params['path'], |
266 | 357 | time(), |
267 | 358 | 1, |
268 | | - $params['mem'], |
269 | 359 | $params['mem'], |
| 360 | + $params['mem'], |
270 | 361 | $params['timer'], |
271 | 362 | $params['timer'], |
272 | 363 | $params['query_count'], |
— | — | @@ -279,7 +370,7 @@ |
280 | 371 | function performance_log_details($params = array()) { |
281 | 372 | global $user; |
282 | 373 | $anon = ($user->uid) ? FALSE : TRUE; |
283 | | - db_query("INSERT INTO {performance_detail} (path, anon, bytes, millisecs, timestamp, query_timer, query_count, data) VALUES ('%s', %d, %d, %d, %d, %d, %d, '%s')", |
| 374 | + db_query("INSERT INTO {performance_detail} (path, anon, bytes, ms, timestamp, query_timer, query_count, data) VALUES ('%s', %d, %d, %d, %d, %d, %d, '%s')", |
284 | 375 | $params['path'], |
285 | 376 | $anon, |
286 | 377 | $params['mem'], |
— | — | @@ -294,8 +385,8 @@ |
295 | 386 | function performance_apc_list_all() { |
296 | 387 | $key_list = array(); |
297 | 388 | $list = apc_cache_info('user'); |
298 | | - foreach($list['cache_list'] as $cache_id => $cache_data) { |
299 | | - $regex = '/^' . PERFORMANCE_KEY . '/'; |
| 389 | + foreach ($list['cache_list'] as $cache_id => $cache_data) { |
| 390 | + $regex = '/^'. PERFORMANCE_KEY .'/'; |
300 | 391 | if (preg_match($regex, $cache_data['info'])) { |
301 | 392 | $key_list[] = $cache_data['info']; |
302 | 393 | } |
— | — | @@ -303,14 +394,30 @@ |
304 | 395 | return $key_list; |
305 | 396 | } |
306 | 397 | |
| 398 | +/** |
| 399 | + * Custom sort for summary performance report |
| 400 | + * |
| 401 | + * @param $x |
| 402 | + * @param $y |
| 403 | + * @return int |
| 404 | + */ |
| 405 | +function performance_summary_sort($x, $y) { |
| 406 | + // This function is not working |
| 407 | + return 0; |
| 408 | +} |
| 409 | + |
307 | 410 | function performance_view_summary() { |
308 | 411 | $sum = array(); |
| 412 | + $data_list = array(); |
| 413 | + $rows = array(); |
| 414 | + |
309 | 415 | $sum[] = variable_get('performance_summary_db', 0); |
310 | 416 | $sum[] = variable_get('performance_summary_apc', 0); |
| 417 | + $sum[] = variable_get('performance_summary_memcache', 0); |
311 | 418 | $go = array_sum($sum); |
312 | 419 | |
313 | 420 | if (!$go) { |
314 | | - return t('Summary performance log is not enabled. Go to the !link to enable it.', array('!link' => l(t('settings page'), 'admin/settings/performance_logging'))); |
| 421 | + return t('Summary performance log is not enabled. Go to the <a href="@link">settings page</a> to enable it.', array('@link' => url('admin/settings/performance_logging'))); |
315 | 422 | } |
316 | 423 | |
317 | 424 | $header = array(); |
— | — | @@ -320,58 +427,73 @@ |
321 | 428 | $header[] = array('data' => t('# accesses'), 'field' => 'num_accesses'); |
322 | 429 | $header[] = array('data' => t('Max Memory (MB)'), 'field' => 'bytes_max'); |
323 | 430 | $header[] = array('data' => t('Avg Memory (MB)'), 'field' => 'bytes_avg'); |
324 | | - $header[] = array('data' => t('Milliseconds (Max)'), 'field' => 'millisecs_max'); |
325 | | - $header[] = array('data' => t('Milliseconds (Avg)'), 'field' => 'millisecs_avg'); |
| 431 | + $header[] = array('data' => t('ms (Max)'), 'field' => 'ms_max'); |
| 432 | + $header[] = array('data' => t('ms (Avg)'), 'field' => 'ms_avg'); |
326 | 433 | |
327 | 434 | if (variable_get('dev_query', 0)) { |
328 | | - $header[] = array('data' => t('Query Millisecs (Max)'), 'field' => 'query_timer_max'); |
329 | | - $header[] = array('data' => t('Query Millisecs (Avg)'), 'field' => 'query_timer_avg'); |
330 | | - $header[] = array('data' => t('Query Count (Max)'), 'field' => 'query_count_max'); |
331 | | - $header[] = array('data' => t('Query Count (Avg)'), 'field' => 'query_count_avg'); |
| 435 | + $header[] = array('data' => t('Query ms (Max)'), 'field' => 'query_timer_max'); |
| 436 | + $header[] = array('data' => t('Query ms (Avg)'), 'field' => 'query_timer_avg'); |
| 437 | + $header[] = array('data' => t('Query Count (Max)'), 'field' => 'query_count_max'); |
| 438 | + $header[] = array('data' => t('Query Count (Avg)'), 'field' => 'query_count_avg'); |
332 | 439 | } |
333 | 440 | |
334 | | - $total_rows = $shown = $last_max = $total_bytes = $total_millisecs = $total_accesses = 0; |
| 441 | + $total_rows = $shown = $last_max = $total_bytes = $total_ms = $total_accesses = 0; |
335 | 442 | $last_min = time(); |
336 | 443 | |
337 | 444 | $threshold = variable_get('performance_threshold_accesses', 0); |
338 | 445 | |
339 | | - if (variable_get('performance_summary_apc', 0) && function_exists('apc_cache_info')) { |
| 446 | + if (variable_get('performance_summary_memcache', 0) && performance_memcache_enabled()) { |
| 447 | + $tablesort = tablesort_init($header); |
| 448 | + // Get the data from memcache |
| 449 | + if ($keys_cache = cache_get(PERFORMANCE_KEY, PERFORMANCE_MEMCACHE_BIN)) { |
| 450 | + if ($keys_cache->data) { |
| 451 | + foreach ($keys_cache->data as $key => $v) { |
| 452 | + $cache = cache_get($key, PERFORMANCE_MEMCACHE_BIN); |
| 453 | + $data_list[] = $cache->data; |
| 454 | + } |
| 455 | + } |
| 456 | + } |
| 457 | + usort($data_list, 'performance_summary_sort'); |
| 458 | + } |
| 459 | + else if (variable_get('performance_summary_apc', 0) && function_exists('apc_cache_info')) { |
| 460 | + $tablesort = tablesort_init($header); |
340 | 461 | // Get the data from the APC cache |
341 | | - foreach(performance_apc_list_all() as $key) { |
342 | | - $data_list[] = apc_fetch($key); |
| 462 | + foreach (performance_apc_list_all() as $key) { |
| 463 | + $data_list[] = apc_fetch($key) + $tablesort; |
343 | 464 | } |
| 465 | + usort($data_list, 'performance_summary_sort'); |
344 | 466 | } |
345 | 467 | else { |
346 | 468 | // Get the data form the database table |
347 | 469 | $sql = "SELECT * FROM {performance_summary}"; |
348 | 470 | $tablesort = tablesort_sql($header); |
349 | 471 | $result = pager_query($sql . $tablesort, 50); |
350 | | - while($row = db_fetch_array($result)) { |
| 472 | + while ($row = db_fetch_array($result)) { |
351 | 473 | $data_list[] = $row; |
352 | 474 | } |
353 | 475 | } |
354 | 476 | |
355 | | - foreach($data_list as $data) { |
| 477 | + foreach ($data_list as $data) { |
356 | 478 | $total_rows++; |
357 | 479 | $last_max = max($last_max, $data['last_access']); |
358 | 480 | $last_min = min($last_min, $data['last_access']); |
359 | 481 | |
360 | 482 | // Calculate running averages |
361 | 483 | $total_bytes += $data['bytes_avg']; |
362 | | - $total_millisecs += $data['millisecs_avg']; |
| 484 | + $total_ms += $data['ms_avg']; |
363 | 485 | $total_accesses += $data['num_accesses']; |
364 | 486 | |
365 | 487 | $row_data = array(); |
366 | 488 | |
367 | 489 | if ($data['num_accesses'] > $threshold) { |
368 | 490 | $shown++; |
369 | | - $row_data[] = $data['path']; |
| 491 | + $row_data[] = check_plain($data['path']); |
370 | 492 | $row_data[] = format_date($data['last_access'], 'small'); |
371 | 493 | $row_data[] = $data['num_accesses']; |
372 | 494 | $row_data[] = number_format($data['bytes_max']/1024/1024, 2); |
373 | 495 | $row_data[] = number_format($data['bytes_avg']/1024/1024, 2); |
374 | | - $row_data[] = number_format($data['millisecs_max'], 1); |
375 | | - $row_data[] = number_format($data['millisecs_avg'], 1); |
| 496 | + $row_data[] = number_format($data['ms_max'], 1); |
| 497 | + $row_data[] = number_format($data['ms_avg'], 1); |
376 | 498 | if (variable_get('dev_query', 0)) { |
377 | 499 | $row_data[] = number_format($data['query_timer_max'], 1); |
378 | 500 | $row_data[] = number_format($data['query_timer_avg'], 1); |
— | — | @@ -389,27 +511,27 @@ |
390 | 512 | $output = ''; |
391 | 513 | if ($threshold) { |
392 | 514 | $output .= t('Showing !shown paths with more than !threshold accesses, out of !total total paths.', |
393 | | - array('!threshold' => $threshold, '!shown' => $shown, '!total' => $total_rows)) . '<br/>'; |
| 515 | + array('!threshold' => $threshold, '!shown' => $shown, '!total' => $total_rows)) .'<br/>'; |
394 | 516 | } |
395 | 517 | else { |
396 | | - $output .= t('Showing all !total paths.', array('!total' => $total_rows)) . '<br/>'; |
| 518 | + $output .= t('Showing all !total paths.', array('!total' => $total_rows)) .'<br/>'; |
397 | 519 | } |
398 | 520 | |
399 | 521 | // Protect against divide by zero |
400 | 522 | if ($total_rows > 0) { |
401 | 523 | $mb_avg = number_format($total_bytes/$total_rows/1024/1024, 1); |
402 | | - $ms_avg = number_format($total_millisecs/$total_rows, 2); |
| 524 | + $ms_avg = number_format($total_ms/$total_rows, 2); |
403 | 525 | } |
404 | 526 | else { |
405 | 527 | $mb_avg = 'n/a'; |
406 | 528 | $ms_avg = 'n/a'; |
407 | 529 | } |
408 | 530 | |
409 | | - $output .= t('Average memory per page: !mb_avg MB', array('!mb_avg' => $mb_avg)) . '<br/>'; |
410 | | - $output .= t('Average milliseconds per page: !ms_avg', array('!ms_avg' => $ms_avg)) . '<br/>'; |
411 | | - $output .= t('Total number of page accesses: !accesses', array('!accesses' => $total_accesses)) . '<br/>'; |
412 | | - $output .= t('First access: !access.', array('!access' => format_date($last_min, 'small'))) . '<br/>'; |
413 | | - $output .= t('Last access: !access.', array('!access' => format_date($last_max, 'small'))) . '<br/>'; |
| 531 | + $output .= t('Average memory per page: !mb_avg MB', array('!mb_avg' => $mb_avg)) .'<br/>'; |
| 532 | + $output .= t('Average ms per page: !ms_avg', array('!ms_avg' => $ms_avg)) .'<br/>'; |
| 533 | + $output .= t('Total number of page accesses: !accesses', array('!accesses' => $total_accesses)) .'<br/>'; |
| 534 | + $output .= t('First access: !access.', array('!access' => format_date($last_min, 'small'))) .'<br/>'; |
| 535 | + $output .= t('Last access: !access.', array('!access' => format_date($last_max, 'small'))) .'<br/>'; |
414 | 536 | |
415 | 537 | $output .= theme('table', $header, $rows); |
416 | 538 | $output .= theme('pager', NULL, 50, 0); |
— | — | @@ -419,21 +541,21 @@ |
420 | 542 | |
421 | 543 | function performance_view_details() { |
422 | 544 | if (!variable_get('performance_detail', 0)) { |
423 | | - return t('Detail performance log is not enabled. Go to the !link to enable it.', array('!link' => l(t('settings page'), 'admin/settings/performance_logging'))); |
| 545 | + return t('Detail performance log is not enabled. Go to the <a href="@link">settings page</a> to enable it.', array('@link' => url('admin/settings/performance_logging'))); |
424 | 546 | } |
425 | 547 | |
426 | 548 | $header = array( |
427 | | - array('data' => t('#'), 'field' => 'pid', 'sort' => 'desc'), |
428 | | - array('data' => t('Date'), 'field' => 'timestamp'), |
429 | | - array('data' => t('Path'), 'field' => 'path'), |
430 | | - array('data' => t('Memory (MB)'), 'field' => 'bytes'), |
431 | | - array('data' => t('Milliseconds (Total)'), 'field' => 'millisecs'), |
432 | | - array('data' => t('Anonymous?'), 'field' => 'anon'), |
| 549 | + array('data' => t('#'), 'field' => 'pid', 'sort' => 'desc'), |
| 550 | + array('data' => t('Date'), 'field' => 'timestamp'), |
| 551 | + array('data' => t('Path'), 'field' => 'path'), |
| 552 | + array('data' => t('Memory (MB)'), 'field' => 'bytes'), |
| 553 | + array('data' => t('ms (Total)'), 'field' => 'ms'), |
| 554 | + array('data' => t('Anonymous?'), 'field' => 'anon'), |
433 | 555 | ); |
434 | 556 | |
435 | 557 | if (variable_get('dev_query', 0)) { |
436 | | - $header[] = array('data' => t('# Queries'), 'field' => 'query_count'); |
437 | | - $header[] = array('data' => t('Query Milliseconds'), 'field' => 'query_timer'); |
| 558 | + $header[] = array('data' => t('# Queries'), 'field' => 'query_count'); |
| 559 | + $header[] = array('data' => t('Query ms'), 'field' => 'query_timer'); |
438 | 560 | } |
439 | 561 | |
440 | 562 | $sql = "SELECT * FROM {performance_detail}"; |
— | — | @@ -445,9 +567,9 @@ |
446 | 568 | |
447 | 569 | $row_data[] = $data['pid']; |
448 | 570 | $row_data[] = format_date($data['timestamp'], 'small'); |
449 | | - $row_data[] = $data['path']; |
| 571 | + $row_data[] = check_plain($data['path']); |
450 | 572 | $row_data[] = number_format($data['bytes']/1024/1024, 2); |
451 | | - $row_data[] = $data['millisecs']; |
| 573 | + $row_data[] = $data['ms']; |
452 | 574 | $row_data[] = ($data['anon']) ? t('Yes') : t('No'); |
453 | 575 | |
454 | 576 | if (variable_get('dev_query', 0)) { |
— | — | @@ -497,7 +619,7 @@ |
498 | 620 | return; |
499 | 621 | } |
500 | 622 | |
501 | | - foreach($list as $key) { |
| 623 | + foreach ($list as $key) { |
502 | 624 | if ($data = apc_fetch($key)) { |
503 | 625 | if ($data['last_access'] <= $timestamp) { |
504 | 626 | apc_delete($key); |
— | — | @@ -508,7 +630,7 @@ |
509 | 631 | |
510 | 632 | function performance_clear_apc_confirm() { |
511 | 633 | $form['confirm'] = array( |
512 | | - '#value' => t('Confirm APC clear'), |
| 634 | + '#value' => t('Confirm APC clear'), |
513 | 635 | ); |
514 | 636 | return confirm_form( |
515 | 637 | $form, |
— | — | @@ -519,7 +641,7 @@ |
520 | 642 | t('Cancel')); |
521 | 643 | } |
522 | 644 | |
523 | | -function performance_clear_apc_confirm_submit($form_id, &$form) { |
| 645 | +function performance_clear_apc_confirm_submit($form, &$form_state) { |
524 | 646 | if (!function_exists('apc_cache_info')) { |
525 | 647 | drupal_set_message(t('APC is not enabled. Nothing to do ...'), 'status', FALSE); |
526 | 648 | drupal_goto('admin/settings/performance'); |
— | — | @@ -532,7 +654,7 @@ |
533 | 655 | return; |
534 | 656 | } |
535 | 657 | |
536 | | - foreach($list as $key) { |
| 658 | + foreach ($list as $key) { |
537 | 659 | if ($data = apc_fetch($key)) { |
538 | 660 | apc_delete($key); |
539 | 661 | } |
— | — | @@ -542,8 +664,44 @@ |
543 | 665 | drupal_goto('admin/settings/performance'); |
544 | 666 | } |
545 | 667 | |
| 668 | +function performance_clear_memcache_confirm() { |
| 669 | + $form['confirm'] = array( |
| 670 | + '#value' => t('Confirm Memcache clear'), |
| 671 | + ); |
| 672 | + return confirm_form( |
| 673 | + $form, |
| 674 | + t('Are you sure you want to clear the Memcache statistics for this site?'), |
| 675 | + 'admin/settings/performance_logging', |
| 676 | + t('This will clear all the collected performance statistics stored in Memcache. This action cannot be undone.'), |
| 677 | + t('Clear'), |
| 678 | + t('Cancel')); |
| 679 | +} |
| 680 | + |
| 681 | +function performance_clear_memcache_confirm_submit($form, &$form_state) { |
| 682 | + if (!performance_memcache_enabled()) { |
| 683 | + drupal_set_message(t('Memcache is not enabled. Nothing to do ...'), 'status', FALSE); |
| 684 | + drupal_goto('admin/settings/performance'); |
| 685 | + return; |
| 686 | + } |
| 687 | + |
| 688 | + // We have to iterate over all entries and delete them, reaching down |
| 689 | + // the API stack and calling dmemcache_delete directly. |
| 690 | + // This is suboptimal, but there is no other alternative |
| 691 | + if ($keys_cache = cache_get(PERFORMANCE_KEY, PERFORMANCE_MEMCACHE_BIN)) { |
| 692 | + if ($keys_cache->data) { |
| 693 | + foreach ($keys_cache->data as $key => $v) { |
| 694 | + dmemcache_delete($key, PERFORMANCE_MEMCACHE_BIN); |
| 695 | + } |
| 696 | + dmemcache_delete(PERFORMANCE_KEY, PERFORMANCE_MEMCACHE_BIN); |
| 697 | + } |
| 698 | + } |
| 699 | + |
| 700 | + drupal_set_message(t('Performance statistics collected in Memcache has been cleared.'), 'status', FALSE); |
| 701 | + drupal_goto('admin/settings/performance'); |
| 702 | +} |
| 703 | + |
546 | 704 | /** |
547 | | - * Implementation of hook_nagios_info() |
| 705 | + * Implementation of hook_nagios_info(). |
548 | 706 | */ |
549 | 707 | function performance_nagios_info() { |
550 | 708 | return array( |
— | — | @@ -553,11 +711,11 @@ |
554 | 712 | } |
555 | 713 | |
556 | 714 | /** |
557 | | - * Implementation of hook_nagios() |
| 715 | + * Implementation of hook_nagios(). |
558 | 716 | */ |
559 | 717 | function performance_nagios() { |
560 | 718 | $info = performance_nagios_info(); |
561 | | - $id = $info['id']; |
| 719 | + $id = $info['id']; |
562 | 720 | |
563 | 721 | // Find out if we have what we need enabled |
564 | 722 | $sum = array(); |
— | — | @@ -577,29 +735,29 @@ |
578 | 736 | } |
579 | 737 | |
580 | 738 | // Initialize variables |
581 | | - $total_rows = $total_bytes = $total_millisecs = $total_accesses = $total_query_time = $total_query_count = 0; |
| 739 | + $total_rows = $total_bytes = $total_ms = $total_accesses = $total_query_time = $total_query_count = 0; |
582 | 740 | |
583 | 741 | // Check which data store to use |
584 | 742 | if (variable_get('performance_summary_apc', 0) && function_exists('apc_cache_info')) { |
585 | 743 | // Get the data from the APC cache |
586 | | - foreach(performance_apc_list_all() as $key) { |
| 744 | + foreach (performance_apc_list_all() as $key) { |
587 | 745 | $data_list[] = apc_fetch($key); |
588 | 746 | } |
589 | 747 | } |
590 | 748 | else { |
591 | 749 | // Get the data form the database table for URLs that have been accessed in the last 15 minutes |
592 | 750 | $result = db_query("SELECT * FROM {performance_summary} WHERE last_access >= %d", time() - 15*60); |
593 | | - while($row = db_fetch_array($result)) { |
| 751 | + while (is_array($row = db_fetch_array($result))) { |
594 | 752 | $data_list[] = $row; |
595 | 753 | } |
596 | 754 | } |
597 | 755 | |
598 | | - foreach($data_list as $data) { |
| 756 | + foreach ($data_list as $data) { |
599 | 757 | $total_rows++; |
600 | 758 | |
601 | 759 | // Calculate running averages |
602 | 760 | $total_bytes += $data['bytes_avg']; |
603 | | - $total_millisecs += $data['millisecs_avg']; |
| 761 | + $total_ms += $data['ms_avg']; |
604 | 762 | $total_accesses += $data['num_accesses']; |
605 | 763 | $total_query_time += $data['query_timer_avg']; |
606 | 764 | $total_query_count += $data['query_count_avg']; |
— | — | @@ -607,7 +765,7 @@ |
608 | 766 | |
609 | 767 | // Protect against divide by zero |
610 | 768 | if ($total_rows > 0) { |
611 | | - $ms_avg = number_format($total_millisecs / $total_rows, 1, '.', ''); |
| 769 | + $ms_avg = number_format($total_ms / $total_rows, 1, '.', ''); |
612 | 770 | $ms_query = number_format($total_query_time / $total_rows, 1, '.', ''); |
613 | 771 | $query_count = number_format($total_query_count / $total_rows, 2, '.', ''); |
614 | 772 | $mb_avg = number_format($total_bytes / $total_rows/1024/1024, 1); |
— | — | @@ -649,4 +807,3 @@ |
650 | 808 | ), |
651 | 809 | ); |
652 | 810 | } |
653 | | - |
Index: civicrm/trunk/sites/all/modules/devel/performance/performance.install |
— | — | @@ -1,8 +1,16 @@ |
2 | 2 | <?php |
3 | | -// $Id: performance.install,v 1.1.4.7 2009/06/25 02:51:54 kbahey Exp $ |
| 3 | +// $Id: performance.install,v 1.1.4.12 2010/02/08 03:56:14 kbahey Exp $ |
4 | 4 | |
5 | | -// Copyright Khalid Baheyeldin 2008 of http://2bits.com |
| 5 | +/** |
| 6 | + * @file |
| 7 | + * Install and update for Performance Logging |
| 8 | + * |
| 9 | + * Copyright Khalid Baheyeldin 2008 of http://2bits.com |
| 10 | + */ |
6 | 11 | |
| 12 | +// Minimum APC shm memory size to require |
| 13 | +define('PERFORMANCE_MIN_MEMORY', 48); |
| 14 | + |
7 | 15 | function performance_schema() { |
8 | 16 | $schema = array(); |
9 | 17 | |
— | — | @@ -12,8 +20,8 @@ |
13 | 21 | 'last_access' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
14 | 22 | 'bytes_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
15 | 23 | 'bytes_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
16 | | - 'millisecs_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
17 | | - 'millisecs_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
| 24 | + 'ms_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
| 25 | + 'ms_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
18 | 26 | 'query_count_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
19 | 27 | 'query_count_avg' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
20 | 28 | 'query_timer_max' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
— | — | @@ -30,7 +38,7 @@ |
31 | 39 | 'pid' => array('type' => 'serial', 'not null' => TRUE, 'disp-width' => '11'), |
32 | 40 | 'timestamp' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
33 | 41 | 'bytes' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
34 | | - 'millisecs' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
| 42 | + 'ms' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
35 | 43 | 'query_count' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
36 | 44 | 'query_timer' => array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'), |
37 | 45 | 'anon' => array('type' => 'int', 'not null' => FALSE, 'default' => 1, 'disp-width' => '1'), |
— | — | @@ -64,45 +72,45 @@ |
65 | 73 | return $requirements; |
66 | 74 | } |
67 | 75 | |
68 | | - if (variable_get('performance_detail', 0)) { |
69 | | - $requirements['performance_detail'] = array( |
70 | | - 'title' => t('Performance logging details'), |
71 | | - 'value' => 'Enabled', |
72 | | - 'severity' => REQUIREMENT_WARNING, |
73 | | - 'description' => t('Performance detailed logging is !link. This can cause severe issues on live sites.', array('!link' => l(t('enabled'), 'admin/settings/performance_logging'))), |
74 | | - ); |
75 | | - } |
| 76 | + if (variable_get('performance_detail', 0)) { |
| 77 | + $requirements['performance_detail'] = array( |
| 78 | + 'title' => t('Performance logging details'), |
| 79 | + 'value' => 'Enabled', |
| 80 | + 'severity' => REQUIREMENT_WARNING, |
| 81 | + 'description' => t('Performance detailed logging is <a href="@link">enabled</a>. This can cause severe issues on live sites.', array('@link' => url('admin/settings/performance_logging'))), |
| 82 | + ); |
| 83 | + } |
76 | 84 | |
77 | | - if (variable_get('dev_query', 0)) { |
78 | | - if (variable_get('performance_detail', 0) || |
79 | | - variable_get('performance_summary_db', 0) || |
80 | | - variable_get('performance_summary_apc', 0)) { |
81 | | - $requirements['performance_query'] = array( |
82 | | - 'title' => t('Performance logging query'), |
83 | | - 'value' => 'Enabled', |
84 | | - 'severity' => REQUIREMENT_WARNING, |
85 | | - 'description' => t('Query timing and count logging is !link. This can cause memory size per page to be larger than normal.', array('!link' => l(t('enabled'), 'admin/settings/performance_logging'))), |
86 | | - ); |
87 | | - } |
88 | | - } |
| 85 | + if (variable_get('dev_query', 0)) { |
| 86 | + if (variable_get('performance_detail', 0) || |
| 87 | + variable_get('performance_summary_db', 0) || |
| 88 | + variable_get('performance_summary_apc', 0)) { |
| 89 | + $requirements['performance_query'] = array( |
| 90 | + 'title' => t('Performance logging query'), |
| 91 | + 'value' => 'Enabled', |
| 92 | + 'severity' => REQUIREMENT_WARNING, |
| 93 | + 'description' => t('Query timing and count logging is <a href="@link">enabled</a>. This can cause memory size per page to be larger than normal.', array('@link' => url('admin/settings/performance_logging'))), |
| 94 | + ); |
| 95 | + } |
| 96 | + } |
89 | 97 | |
90 | | - if (!function_exists('apc_fetch')) { |
91 | | - $requirements['performance_apc'] = array( |
92 | | - 'title' => t('Performance logging APC'), |
93 | | - 'value' => 'Disabled', |
94 | | - 'severity' => REQUIREMENT_WARNING, |
95 | | - 'description' => t('Performance logging on live web sites works best if APC is enabled.'), |
96 | | - ); |
97 | | - } |
| 98 | + if (!function_exists('apc_fetch')) { |
| 99 | + $requirements['performance_apc'] = array( |
| 100 | + 'title' => t('Performance logging APC'), |
| 101 | + 'value' => 'Disabled', |
| 102 | + 'severity' => REQUIREMENT_WARNING, |
| 103 | + 'description' => t('Performance logging on live web sites works best if APC is enabled.'), |
| 104 | + ); |
| 105 | + } |
98 | 106 | |
99 | | - $shm_size = ini_get('apc.shm_size'); |
100 | | - if ($shm_size < 48) { |
101 | | - $requirements['performance_apc_mem'] = array( |
102 | | - 'title' => t('Performance logging APC memory size'), |
103 | | - 'value' => $shm_size, |
104 | | - 'severity' => REQUIREMENT_WARNING, |
105 | | - 'description' => t('APC has been configured for !size, which is less than the recommended 48 MB of memory. If you encounter errors when viewing the summary report, then try to increase that limit for APC.', array('!size' => $shm_size)), |
106 | | - ); |
| 107 | + $shm_size = ini_get('apc.shm_size'); |
| 108 | + if (function_exists('apc_fetch') && $shm_size < PERFORMANCE_MIN_MEMORY) { |
| 109 | + $requirements['performance_apc_mem'] = array( |
| 110 | + 'title' => t('Performance logging APC memory size'), |
| 111 | + 'value' => $shm_size, |
| 112 | + 'severity' => REQUIREMENT_WARNING, |
| 113 | + 'description' => t('APC has been configured for !size, which is less than the recommended !min_memory MB of memory. If you encounter errors when viewing the summary report, then try to increase that limit for APC.', array('!size' => 1*$shm_size, '!min_memory' => PERFORMANCE_MIN_MEMORY)), |
| 114 | + ); |
107 | 115 | } |
108 | 116 | |
109 | 117 | return $requirements; |
— | — | @@ -120,3 +128,23 @@ |
121 | 129 | db_add_field($ret, 'performance_detail', 'data', array('type' => 'blob', 'not null' => FALSE, 'size' => 'big')); |
122 | 130 | return $ret; |
123 | 131 | } |
| 132 | + |
| 133 | +/** |
| 134 | + * Harmonize notations for milliseconds to "ms". |
| 135 | + * |
| 136 | + * @return array |
| 137 | + */ |
| 138 | +function performance_update_6001() { |
| 139 | + $int_field = array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'); |
| 140 | + |
| 141 | + $ret = array(); |
| 142 | + db_change_field($ret, 'performance_summary', 'millisecs_max', 'ms_max', $int_field); |
| 143 | + db_change_field($ret, 'performance_summary', 'millisecs_avg', 'ms_avg', $int_field); |
| 144 | + db_change_field($ret, 'performance_detail', 'millisecs', 'ms', $int_field); |
| 145 | + |
| 146 | + // We don't have a cache update method, so it's better to clear it |
| 147 | + if (function_exists('apc_fetch')) { |
| 148 | + apc_clear_cache('user'); |
| 149 | + } |
| 150 | + return $ret; |
| 151 | +} |
Index: civicrm/trunk/sites/all/modules/devel/performance/README.txt |
— | — | @@ -1,4 +1,4 @@ |
2 | | -$Id: README.txt,v 1.1 2008/10/20 19:33:59 kbahey Exp $ |
| 2 | +$Id: README.txt,v 1.1.4.1 2010/05/16 22:14:28 kbahey Exp $ |
3 | 3 | |
4 | 4 | By Khalid Baheyeldin |
5 | 5 | |
— | — | @@ -23,33 +23,64 @@ |
24 | 24 | * Summary logging logs the average and maximum page generation time, average and maximum memory |
25 | 25 | usage, last access time, and number of accesses for each path. |
26 | 26 | |
27 | | -* Summary is logged to APC, if installed, so as to not cause extra load on the database. This is |
28 | | - the only mode recommended for live sites. |
| 27 | +* Summary can be logged to memcache, if configured, so as to not cause extra load on the database. |
| 28 | + This works when APC cannot be used (e.g. certain FastCGI configurations, or when you have many |
| 29 | + web servers on different boxes. This mode is recommended for live sites. |
29 | 30 | |
| 31 | +* Summary can be logged to APC, if installed, and the APC data cache is shared, so as to not cause |
| 32 | + extra load on the database. This mode is recommended for live sites. |
| 33 | + |
30 | 34 | * A settings option is available when using summary mode with APC, to exclude pages with less |
31 | 35 | than a certain number of accesses. Useful for large sites. |
32 | 36 | |
33 | 37 | * Support for normal page cache. |
34 | 38 | |
35 | | -Note that detailed logging is only suitable for a site that is in development or testing. Do NOT enable |
36 | | -detailed logging on a live site. |
| 39 | +Note that detailed logging is only suitable for a site that is in development or testing. Do NOT |
| 40 | +enable detailed logging on a live site. |
37 | 41 | |
38 | | -The memory measurement feature of this module depends on the memory_get_peak_usage() function, available |
39 | | -only in PHP 5.2.x or later. |
| 42 | +The memory measurement feature of this module depends on the memory_get_peak_usage() function, |
| 43 | +available only in PHP 5.2.x or later. |
40 | 44 | |
41 | | -Only summary logging with APC is the recommended mode for live sites, with a threshold of 2 or more. |
| 45 | +Only summary logging with Memcache or APC are recommended mode for live sites, with a threshold of |
| 46 | +2 or more. |
42 | 47 | |
43 | | -Patches: |
44 | | -For Drupal 5.x, a simple patch is needed if you want to use the module with Drupal's normal page caching |
45 | | -mode. |
| 48 | +Note on Completeness: |
| 49 | +--------------------- |
| 50 | +Please note that when summary logging to APC or Memcache, the data captured in the summary will |
| 51 | +not be comprehensive reflecting every single page view for every URL. |
46 | 52 | |
47 | | -The patch is included in the patches directory in the module's tarball. |
| 53 | +The reason for this is that there is no atomic locking when updating the data structures that |
| 54 | +store per-URL statistics in this module. |
48 | 55 | |
49 | | -To apply the patch, check http://drupal.org/patch for instructions. |
| 56 | +This means that the values you get when using these storage caches are only samples, and would |
| 57 | +miss some page views, depending on how busy the site is. |
50 | 58 | |
51 | | -If you are using Drupal 6.x or higher, there is no need for this patch. |
| 59 | +For memcache, there is way to implement locking using the $mc->increment and/or $mc->add as well. |
| 60 | +However, there is a risk if these are implemented, that there will be less concurrency and we |
| 61 | +can cause a site to slow down. |
52 | 62 | |
| 63 | +Configuration: |
| 64 | +-------------- |
| 65 | +If you are using memcache, then you need to configure an extra bin for performance. |
| 66 | +If you have multiple web server boxes, then it is best to centralize this bin for |
| 67 | +all the boxes, so you get combined statistics. |
| 68 | + |
| 69 | +Your settings.php looks like this: |
| 70 | + |
| 71 | + $conf = array( |
| 72 | + 'cache_inc' => './sites/all/modules/memcache/memcache.inc', |
| 73 | + |
| 74 | + 'memcache_servers' => array( |
| 75 | + '127.0.0.1:11211' => 'default', |
| 76 | + // More bins here .... |
| 77 | + '127.0.0.1:11311' => 'performance', |
| 78 | + ), |
| 79 | + |
| 80 | + 'memcache_bins' => array( |
| 81 | + 'cache_performance' => 'performance', |
| 82 | + ), |
| 83 | + ); |
| 84 | + |
53 | 85 | Bugs/Features/Patches: |
54 | 86 | ---------------------- |
55 | 87 | If you want to report bugs, feature requests, or submit a patch, please do so at the project page on |
Index: civicrm/trunk/sites/all/modules/devel/performance/performance.info |
— | — | @@ -4,9 +4,9 @@ |
5 | 5 | package = Development |
6 | 6 | core = 6.x |
7 | 7 | |
8 | | -; Information added by drupal.org packaging script on 2009-08-19 |
9 | | -version = "6.x-1.17" |
| 8 | +; Information added by drupal.org packaging script on 2010-08-04 |
| 9 | +version = "6.x-1.21" |
10 | 10 | core = "6.x" |
11 | 11 | project = "devel" |
12 | | -datestamp = "1250713853" |
| 12 | +datestamp = "1280961078" |
13 | 13 | |
Index: civicrm/trunk/sites/all/modules/devel/devel_generate.info |
— | — | @@ -4,9 +4,9 @@ |
5 | 5 | package = Development |
6 | 6 | core = 6.x |
7 | 7 | |
8 | | -; Information added by drupal.org packaging script on 2009-08-19 |
9 | | -version = "6.x-1.17" |
| 8 | +; Information added by drupal.org packaging script on 2010-08-04 |
| 9 | +version = "6.x-1.21" |
10 | 10 | core = "6.x" |
11 | 11 | project = "devel" |
12 | | -datestamp = "1250713853" |
| 12 | +datestamp = "1280961078" |
13 | 13 | |
Index: civicrm/trunk/sites/all/modules/devel/devel.install |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel.install,v 1.24.2.7 2009/07/30 19:38:48 weitzman Exp $ |
| 3 | +// $Id: devel.install,v 1.24.2.8 2010/08/02 15:04:55 weitzman Exp $ |
4 | 4 | /** |
5 | 5 | * @file |
6 | 6 | * Install file for devel module. |
— | — | @@ -172,3 +172,12 @@ |
173 | 173 | menu_link_save($item); |
174 | 174 | return array(); |
175 | 175 | } |
| 176 | + |
| 177 | +/** |
| 178 | + * As per issue #813132: change schablon.com to white for krumo. |
| 179 | + */ |
| 180 | +function devel_update_6003() { |
| 181 | + if (variable_get('devel_krumo_skin', 'white') == 'schablon.com') { |
| 182 | + variable_set('devel_krumo_skin', 'white'); |
| 183 | + } |
| 184 | +} |
Index: civicrm/trunk/sites/all/modules/devel/devel_generate.drush.inc |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel_generate.drush.inc,v 1.1.2.7 2009/05/30 04:34:47 weitzman Exp $ |
| 3 | +// $Id: devel_generate.drush.inc,v 1.1.2.14 2010/07/07 16:46:37 weitzman Exp $ |
4 | 4 | |
5 | 5 | /** |
6 | 6 | * @file |
— | — | @@ -11,11 +11,11 @@ |
12 | 12 | */ |
13 | 13 | function devel_generate_drush_help($section) { |
14 | 14 | switch ($section) { |
15 | | - case 'drush:generate users': |
| 15 | + case 'drush:generate-users': |
16 | 16 | return dt('Generate user accounts.'); |
17 | | - case 'drush:generate taxonomy': |
| 17 | + case 'drush:generate-taxonomy': |
18 | 18 | return dt('Generate taxonomy terms for a given vocabulary.'); |
19 | | - case 'drush:generate content': |
| 19 | + case 'drush:generate-content': |
20 | 20 | return dt('Generate nodes and comments.'); |
21 | 21 | } |
22 | 22 | } |
— | — | @@ -24,8 +24,7 @@ |
25 | 25 | * Implementation of hook_drush_command(). |
26 | 26 | */ |
27 | 27 | function devel_generate_drush_command() { |
28 | | - $items['generate users'] = array( |
29 | | - 'callback' => 'drush_generate_users', |
| 28 | + $items['generate-users'] = array( |
30 | 29 | 'description' => 'Creates users.', |
31 | 30 | 'arguments' => array( |
32 | 31 | 'num_users' => 'Number of users to generate.', |
— | — | @@ -33,9 +32,9 @@ |
34 | 33 | 'options' => array( |
35 | 34 | 'kill' => 'Delete all users before generating new ones.', |
36 | 35 | ), |
| 36 | + 'aliases' => array('genu'), |
37 | 37 | ); |
38 | | - $items['generate taxonomy'] = array( |
39 | | - 'callback' => 'drush_generate_taxonomy', |
| 38 | + $items['generate-taxonomy'] = array( |
40 | 39 | 'description' => 'Creates taxonomy.', |
41 | 40 | 'arguments' => array( |
42 | 41 | 'vid' => 'Vocabulary ID into which new terms will be inserted.', |
— | — | @@ -44,18 +43,23 @@ |
45 | 44 | 'options' => array( |
46 | 45 | 'kill' => 'Delete all terms in specified vocab before generating.' |
47 | 46 | ), |
48 | | - |
| 47 | + 'aliases' => array('gent'), |
49 | 48 | ); |
50 | | - $items['generate content'] = array( |
51 | | - 'callback' => 'drush_generate_nodescontent', |
| 49 | + $items['generate-content'] = array( |
52 | 50 | 'description' => 'Creates content.', |
| 51 | + 'drupal dependencies' => array('devel_generate'), |
53 | 52 | 'arguments' => array( |
54 | 53 | 'num_nodes' => 'Number of nodes to generate.', |
55 | | - 'num_comments' => 'Number of comments to generate.', |
| 54 | + 'max_comments' => 'Maximum number of comments to generate.', |
56 | 55 | ), |
57 | 56 | 'options' => array( |
58 | | - 'kill' => 'Delete all content before generating new content.' |
| 57 | + 'kill' => 'Delete all content before generating new content.', |
| 58 | + 'add-terms' => 'Add terms to generated nodes.', |
| 59 | + 'add-upload' => 'Add an attached file to generated nodes.', |
| 60 | + 'types' => 'Specify which types of nodes to generate. Should be a comma-separated list.', |
| 61 | + 'languages' => 'A comma-separated list of language codes', |
59 | 62 | ), |
| 63 | + 'aliases' => array('genc'), |
60 | 64 | ); |
61 | 65 | return $items; |
62 | 66 | } |
— | — | @@ -63,7 +67,7 @@ |
64 | 68 | /** |
65 | 69 | * Command callback. Generate a number of users. |
66 | 70 | */ |
67 | | -function drush_generate_users($num_users = NULL) { |
| 71 | +function drush_devel_generate_generate_users($num_users = NULL) { |
68 | 72 | if (drush_generate_is_number($num_users) == FALSE) { |
69 | 73 | drush_set_error('DEVEL_GENERATE_INVALID_NUMBER', dt('Invalid number of users.')); |
70 | 74 | } |
— | — | @@ -75,7 +79,7 @@ |
76 | 80 | /** |
77 | 81 | * Command callback. Generate a number of taxonomy. |
78 | 82 | */ |
79 | | -function drush_generate_taxonomy($num_vocab = NULL, $num_terms = NULL) { |
| 83 | +function drush_devel_generate_generate_taxonomy($num_vocab = NULL, $num_terms = NULL) { |
80 | 84 | if (drush_generate_is_number($num_vocab) == FALSE) { |
81 | 85 | drush_set_error('DEVEL_GENERATE_INVALID_VID', dt('Invalid vocabulary ID.')); |
82 | 86 | } |
— | — | @@ -90,14 +94,22 @@ |
91 | 95 | /** |
92 | 96 | * Command callback. Generate a number of content. |
93 | 97 | */ |
94 | | -function drush_generate_nodescontent($num_nodes = NULL, $num_comments = NULL) { |
| 98 | +function drush_devel_generate_generate_content($num_nodes = NULL, $max_comments = NULL, $add_language = NULL) { |
95 | 99 | if (drush_generate_is_number($num_nodes) == FALSE) { |
96 | 100 | drush_set_error('DEVEL_GENERATE_INVALID_NUM_NODES', dt('Invalid number of nodes')); |
97 | 101 | } |
98 | | - if (!empty($num_comments) && drush_generate_is_number($num_comments) == FALSE) { |
| 102 | + if (!empty($max_comments) && drush_generate_is_number($max_comments) == FALSE) { |
99 | 103 | drush_set_error('DEVEL_GENERATE_INVALID_NUM_COMMENTS', dt('Invalid number of comments.')); |
100 | 104 | } |
101 | 105 | |
| 106 | + $add_language = drush_get_option('languages'); |
| 107 | + if (!empty($add_language)) { |
| 108 | + $add_language = explode(',', str_replace(' ', '', $add_language)); |
| 109 | + // Intersect with the enabled languages to make sure the language args |
| 110 | + // passed are actually enabled. |
| 111 | + $values['values']['add_language'] = array_flip(array_intersect($add_language, array_keys(locale_language_list()))); |
| 112 | + } |
| 113 | + |
102 | 114 | // Let's load user 1, seems to be need for creating comments. |
103 | 115 | global $user; |
104 | 116 | $user_one = user_load(array('uid' => '1')); |
— | — | @@ -109,9 +121,12 @@ |
110 | 122 | if (drush_get_option('kill')) $values['values']['kill_content'] = 1; |
111 | 123 | $values['values']['title_length'] = '8'; |
112 | 124 | $values['values']['num_nodes'] = $num_nodes; |
113 | | - $values['values']['num_comments'] = $num_comments; |
| 125 | + $values['values']['max_comments'] = $max_comments; |
| 126 | + $values['values']['add_terms'] = drush_get_option('add-terms', FALSE); |
| 127 | + $values['values']['add_upload'] = drush_get_option('add-upload', FALSE); |
114 | 128 | $all_types = array_keys(devel_generate_content_types()); |
115 | | - if ($types = drush_get_option('types')) { |
| 129 | + if (drush_get_option('types')) { |
| 130 | + $types = explode(',', drush_get_option('types')); |
116 | 131 | $types = array_intersect($types, $all_types); |
117 | 132 | } |
118 | 133 | else { |
— | — | @@ -120,7 +135,7 @@ |
121 | 136 | $values['values']['node_types'] = drupal_map_assoc($types); |
122 | 137 | |
123 | 138 | drush_op('devel_generate_content', $values); |
124 | | - drush_log(dt('Generated @num_nodes nodes, @num_comments comments per node', array('@num_nodes' => $num_nodes, '@num_comments' => $num_comments)), 'ok'); |
| 139 | + drush_log(dt('Generated @num_nodes nodes, @max_comments comments per node', array('@num_nodes' => $num_nodes, '@max_comments' => $max_comments)), 'ok'); |
125 | 140 | } |
126 | 141 | |
127 | 142 | ////////////////////////////////////////////////////////////////////////////// |
Index: civicrm/trunk/sites/all/modules/devel/devel_node_access.module |
— | — | @@ -1,5 +1,5 @@ |
2 | 2 | <?php |
3 | | -// $Id: devel_node_access.module,v 1.15.2.14 2009/07/25 19:59:18 salvis Exp $ |
| 3 | +// $Id: devel_node_access.module,v 1.15.2.31 2010/07/13 19:50:10 salvis Exp $ |
4 | 4 | /** |
5 | 5 | * @file |
6 | 6 | * |
— | — | @@ -12,7 +12,7 @@ |
13 | 13 | define('DNA_ACCESS_VIEW', 'view devel_node_access information'); |
14 | 14 | |
15 | 15 | function devel_node_access_perm() { |
16 | | - return array(DNA_ACCESS_VIEW); |
| 16 | + return array('view devel_node_access information'); |
17 | 17 | } |
18 | 18 | |
19 | 19 | /** |
— | — | @@ -28,18 +28,16 @@ |
29 | 29 | $output .= '<p>'. t('The node_access table is one method Drupal provides to hide content from some users while displaying it to others. By default, Drupal shows all nodes to all users. There are a number of optional modules which may be installed to hide content from some users.') ."</p>\n"; |
30 | 30 | $output .= '<p>'. t('If you have not installed any of these modules, you really have no need for the devel_node_access module. This module is intended for use during development, so that developers and admins can confirm that the node_access table is working as expected. You probably do not want this module enabled on a production site.') ."</p>\n"; |
31 | 31 | $output .= '<p>'. t('This module provides two blocks. One called Devel Node Access by User is visible when a single node is shown on a page. This block shows which users can view, update or delete the node shown. Note that this block uses an inefficient algorithm to produce its output. You should only enable this block on sites with very few user accounts.') ."</p>\n"; |
32 | | - $output .= '<p>'. t('The second block provided by this module shows the entries in the node_access table for any nodes shown on the current page. You can enable the debug mode on the !settings_page to display much more information, but this can cause considerable overhead. Because the tables shown are wide, it is recommended to enable the blocks in the page footer rather than a sidebar.', |
33 | | - array('!settings_page' => l(t('settings page'), 'admin/settings/devel', array('fragment' => 'edit-devel-node-access-debug-mode'))) |
| 32 | + $output .= '<p>'. t('The second block provided by this module shows the entries in the node_access table for any nodes shown on the current page. You can enable the debug mode on the <a href="@settings_page">settings page</a> to display much more information, but this can cause considerable overhead. Because the tables shown are wide, it is recommended to enable the blocks in the page footer rather than a sidebar.', |
| 33 | + array('@settings_page' => url('admin/settings/devel', array('fragment' => 'edit-devel-node-access-debug-mode'))) |
34 | 34 | ) ."</p>\n"; |
35 | | - $output .= '<p>'. t('This module also provides a !summary_page which shows general information about your node_access table. If you have installed the Views module, you may browse node_access by realm.', |
36 | | - array('!summary_page' => l(t('summary page'), 'devel/node_access/summary')) |
| 35 | + $output .= '<p>'. t('This module also provides a <a href="@summary_page">summary page</a> which shows general information about your node_access table. If you have installed the Views module, you may browse node_access by realm.', |
| 36 | + array('@summary_page' => url('devel/node_access/summary')) |
37 | 37 | ) ."</p>\n"; |
38 | | - $output .= '<p>'. t('') ."</p>\n"; |
39 | 38 | return $output; |
40 | 39 | } |
41 | 40 | } |
42 | 41 | |
43 | | - |
44 | 42 | function devel_node_access_menu() { |
45 | 43 | $items = array(); |
46 | 44 | |
— | — | @@ -71,13 +69,13 @@ |
72 | 70 | } |
73 | 71 | |
74 | 72 | function devel_node_access_form_alter(&$form, $form_state, $form_id) { |
75 | | - $t = 't'; |
| 73 | + $tr = 't'; |
76 | 74 | if ($form_id == 'devel_admin_settings' || $form_id == 'devel_node_access_admin_settings') { |
77 | 75 | $form['devel_node_access_debug_mode'] = array( |
78 | 76 | '#type' => 'checkbox', |
79 | 77 | '#title' => t('Devel Node Access debug mode'), |
80 | 78 | '#default_value' => variable_get('devel_node_access_debug_mode', FALSE), |
81 | | - '#description' => t('Debug mode verifies the grants in the node_access table against those that would be set by running !Rebuild_permissions, and displays them all; this can cause considerable overhead.', array('!Rebuild_permissions' => l('['. $t('Rebuild permissions') .']', 'admin/content/node-settings'))), |
| 79 | + '#description' => t('Debug mode verifies the grant records in the node_access table against those that would be set by running !Rebuild_permissions, and displays them all; this can cause considerable overhead.', array('!Rebuild_permissions' => l('['. $tr('Rebuild permissions') .']', 'admin/content/node-settings'))), |
82 | 80 | ); |
83 | 81 | // push these down: |
84 | 82 | $form['devel_error_handler']['#weight'] = 1; |
— | — | @@ -103,7 +101,7 @@ |
104 | 102 | } |
105 | 103 | |
106 | 104 | // how many nodes are not represented in the node_access table |
107 | | - $result = db_fetch_object(db_query('SELECT COUNT(n.nid) as num_nodes FROM {node} n LEFT JOIN {node_access} na ON n.nid = na.nid WHERE na.nid IS NULL')); |
| 105 | + $result = db_fetch_object(db_query('SELECT COUNT(n.nid) AS num_nodes FROM {node} n LEFT JOIN {node_access} na ON n.nid = na.nid WHERE na.nid IS NULL')); |
108 | 106 | if ($num = $result->num_nodes) { |
109 | 107 | $output .= '<h3>'. t('Legacy Nodes') ."</h3>\n"; |
110 | 108 | $output .= '<p>'. |
— | — | @@ -188,7 +186,7 @@ |
189 | 187 | } |
190 | 188 | } |
191 | 189 | |
192 | | -function _devel_node_access_module_invoke_all() { // array returns only! |
| 190 | +function _devel_node_access_module_invoke_all() { // array and scalar returns only! |
193 | 191 | $args = func_get_args(); |
194 | 192 | $hook = array_shift($args); |
195 | 193 | $return = array(); |
— | — | @@ -196,10 +194,16 @@ |
197 | 195 | $function = $module .'_'. $hook; |
198 | 196 | $result = call_user_func_array($function, $args); |
199 | 197 | if (isset($result)) { |
200 | | - foreach ($result as $key => $value) { |
201 | | - // add name of module that returned the value: |
202 | | - $result[$key]['#module'] = $module; |
| 198 | + if (is_array($result)) { |
| 199 | + foreach ($result as $key => $value) { |
| 200 | + // add name of module that returned the value: |
| 201 | + $result[$key]['#module'] = $module; |
| 202 | + } |
203 | 203 | } |
| 204 | + else { |
| 205 | + // build array with result keyed by $module: |
| 206 | + $result = array($module => $result); |
| 207 | + } |
204 | 208 | $return = array_merge($return, $result); |
205 | 209 | } |
206 | 210 | } |
— | — | @@ -208,6 +212,15 @@ |
209 | 213 | |
210 | 214 | function devel_node_access_block($op = 'list', $delta = 0) { |
211 | 215 | global $user; |
| 216 | + global $theme_key; |
| 217 | + static $block1_visible, $hint = ''; |
| 218 | + if (!isset($block1_visible)) { |
| 219 | + $block1_visible = db_result(db_query("SELECT status FROM {blocks} WHERE module = 'devel_node_access' AND delta = '1' AND theme = '%s'", $theme_key)); |
| 220 | + if (!$block1_visible) { |
| 221 | + $hint = t('For per-user access permissions enable the second DNA <a href="@block">block</a>.', array('@block' => url('admin/build/block'))); |
| 222 | + } |
| 223 | + } |
| 224 | + |
212 | 225 | switch ($op) { |
213 | 226 | case 'list': |
214 | 227 | $blocks[0]['info'] = t('Devel Node Access'); |
— | — | @@ -230,36 +243,39 @@ |
231 | 244 | |
232 | 245 | // include rows where nid == 0 |
233 | 246 | $nids = array_merge(array(0 => 0), dna_visible_nodes()); |
234 | | - $result = db_query('SELECT na.*, n.title FROM {node_access} na LEFT JOIN {node} n ON n.nid = na.nid WHERE na.nid IN (%s) ORDER BY na.nid, na.realm, na.gid', implode(',', $nids)); |
| 247 | + $result = db_query('SELECT na.*, n.title FROM {node_access} na LEFT JOIN {node} n ON n.nid = na.nid WHERE na.nid IN ('. db_placeholders($nids) .') ORDER BY na.nid, na.realm, na.gid', $nids); |
235 | 248 | |
236 | 249 | if (!variable_get('devel_node_access_debug_mode', FALSE)) { |
237 | 250 | $headers = array(t('node'), t('realm'), t('gid'), t('view'), t('update'), t('delete'), t('explained')); |
238 | 251 | $rows = array(); |
239 | 252 | while ($row = db_fetch_object($result)) { |
240 | 253 | $explained = module_invoke_all('node_access_explain', $row); |
241 | | - $rows[] = array(!empty($row->title) ? check_plain($row->title) : $row->nid, |
| 254 | + $rows[] = array('<a href="#node-'. $row->nid .'">'. _devel_node_access_get_node_title($row, TRUE) .'</a>', |
242 | 255 | $row->realm, |
243 | 256 | $row->gid, |
244 | 257 | $row->grant_view, |
245 | 258 | $row->grant_update, |
246 | 259 | $row->grant_delete, |
247 | | - implode('; ', $explained)); |
| 260 | + implode('<br />', $explained)); |
248 | 261 | } |
249 | 262 | $output = theme('table', $headers, $rows, array('style' => 'text-align: left')); |
| 263 | + $hint = t('To see more details enable <a href="@debug_mode">debug mode</a>.', array('@debug_mode' => url('admin/settings/devel', array('fragment' => 'edit-devel-node-access-debug-mode')))) .' '. $hint; |
250 | 264 | } |
251 | 265 | else { |
252 | 266 | $tr = 't'; |
253 | | - $tokens = array('!na' => '{node_access}'); |
| 267 | + $variables = array('!na' => '{node_access}'); |
254 | 268 | $states = array( |
255 | | - 'default' => array(t('default'), 'ok', t('Default grant supplied by core in the absence of any other non-empty grants, in !na.', $tokens)), |
256 | | - 'ok' => array(t('ok'), 'ok', t('Highest priority grant, in !na.', $tokens)), |
| 269 | + 'default' => array(t('default'), 'ok', t('Default grant supplied by core in the absence of any other non-empty grants, in !na.', $variables)), |
| 270 | + 'ok' => array(t('ok'), 'ok', t('Highest priority grant, in !na.', $variables)), |
| 271 | + 'static' => array(t('static'), 'ok', t('Non-standard grant in !na.', $variables)), |
257 | 272 | 'unexpected' => array(t('unexpected'), 'warning', t('The 0/0/all/... grant applies to all nodes and all users -- usually it should not be present if any node access module is active!')), |
258 | | - 'ignored' => array(t('ignored'), 'warning', t('Lower priority grant, not in !na and thus ignored.', $tokens)), |
259 | | - 'empty' => array(t('empty'), 'warning', t('Does not grant any access, but could block lower priority grants; not in !na.', $tokens)), |
260 | | - 'missing' => array(t('missing'), 'error', t("Should be in !na but isn't!", $tokens)), |
261 | | - 'illegitimate' => array(t('illegitimate'), 'error', t('Should NOT be in !na because of lower priority!', $tokens)), |
262 | | - 'alien' => array(t('alien'), 'error', t('Should NOT be in !na because of unknown origin!', $tokens)), |
| 273 | + 'ignored' => array(t('ignored'), 'warning', t('Lower priority grant, not in !na and thus ignored.', $variables)), |
| 274 | + 'empty' => array(t('empty'), 'warning', t('Does not grant any access, but could block lower priority grants; not in !na.', $variables)), |
| 275 | + 'missing' => array(t('missing'), 'error', t("Should be in !na but isn't!", $variables)), |
| 276 | + 'illegitimate' => array(t('illegitimate'), 'error', t('Should NOT be in !na because of lower priority!', $variables)), |
| 277 | + 'alien' => array(t('alien'), 'error', t('Should NOT be in !na because of unknown origin!', $variables)), |
263 | 278 | ); |
| 279 | + $active_states = array('default', 'ok', 'static', 'unexpected', 'illegitimate', 'alien'); |
264 | 280 | $headers = array(t('node'), t('prio'), t('status'), t('realm'), t('gid'), t('view'), t('update'), t('delete'), t('explained')); |
265 | 281 | $active_grants = array(); |
266 | 282 | while ($active_grant = db_fetch_object($result)) { |
— | — | @@ -268,7 +284,7 @@ |
269 | 285 | $all_grants = $checked_grants = $checked_status = array(); |
270 | 286 | foreach ($nids as $nid) { |
271 | 287 | $acquired_grants_nid = array(); |
272 | | - if ($node = node_load(array('nid' => $nid))) { |
| 288 | + if ($node = node_load($nid)) { |
273 | 289 | // check node_access_acquire_grants() |
274 | 290 | $grants = _devel_node_access_module_invoke_all('node_access_records', $node); |
275 | 291 | if (!empty($grants)) { |
— | — | @@ -278,7 +294,7 @@ |
279 | 295 | $top_priority = (isset($top_priority) ? max($top_priority, $priority) : $priority); |
280 | 296 | $grant['priority'] = (isset($grant['priority']) ? $priority : '– '); |
281 | 297 | $acquired_grants_nid[$priority][$grant['realm']][$grant['gid']] = $grant + array( |
282 | | - '#title' => ($node->title ? check_plain($node->title) : $node->nid), |
| 298 | + '#title' => _devel_node_access_get_node_title($node), |
283 | 299 | '#module' => (isset($grant['#module']) ? $grant['#module'] : ''), |
284 | 300 | ); |
285 | 301 | } |
— | — | @@ -296,10 +312,10 @@ |
297 | 313 | } |
298 | 314 | } |
299 | 315 | // check for grants in the node_access table that aren't returned by node_access_acquire_grants() |
300 | | - $found = FALSE; |
301 | 316 | if (isset($active_grants[$nid])) { |
302 | 317 | foreach ($active_grants[$nid] as $realm => $active_grants_realm) { |
303 | 318 | foreach ($active_grants_realm as $gid => $active_grant) { |
| 319 | + $found = FALSE; |
304 | 320 | $count_nonempty_grants = 0; |
305 | 321 | foreach ($acquired_grants_nid as $priority => $acquired_grants_nid_priority) { |
306 | 322 | if (isset($acquired_grants_nid_priority[$realm][$gid])) { |
— | — | @@ -313,24 +329,37 @@ |
314 | 330 | } |
315 | 331 | } |
316 | 332 | } |
| 333 | + $fixed_grant = (array) $active_grant; |
317 | 334 | if ($count_nonempty_grants == 0 && $realm == 'all' && $gid == 0 ) { |
318 | | - $fixed_grant = ((array) $active_grant) + array( |
| 335 | + $fixed_grant += array( |
319 | 336 | 'priority' => '–', |
320 | 337 | 'state' => 'default', |
321 | 338 | ); |
322 | 339 | } |
323 | 340 | elseif (!$found) { |
324 | | - $fixed_grant = ((array) $active_grant) + array( |
325 | | - 'priority' => '?', |
326 | | - 'state' => 'alien', |
327 | | - ); |
| 341 | + $acknowledged = _devel_node_access_module_invoke_all('node_access_acknowledge', $fixed_grant); |
| 342 | + if (empty($acknowledged)) { |
| 343 | + // no one acknowledged this record, mark it as alien: |
| 344 | + $fixed_grant += array( |
| 345 | + 'priority' => '?', |
| 346 | + 'state' => 'alien', |
| 347 | + ); |
| 348 | + } |
| 349 | + else { |
| 350 | + // at least one module acknowledged the record, attribute it to the first one: |
| 351 | + $fixed_grant += array( |
| 352 | + 'priority' => '–', |
| 353 | + 'state' => 'static', |
| 354 | + '#module' => reset(array_keys($acknowledged)), |
| 355 | + ); |
| 356 | + } |
328 | 357 | } |
329 | 358 | else { |
330 | 359 | continue; |
331 | 360 | } |
332 | 361 | $fixed_grant += array( |
333 | | - 'nid' => $nid, |
334 | | - '#title' => (empty($node) ? '—' : (isset($node->title) ? check_plain($node->title) : $node->nid)), |
| 362 | + 'nid' => $nid, |
| 363 | + '#title' => _devel_node_access_get_node_title($node), |
335 | 364 | ); |
336 | 365 | $all_grants[] = $fixed_grant; |
337 | 366 | } |
— | — | @@ -380,8 +409,8 @@ |
381 | 410 | $row->grant_view = $grant['grant_view']; |
382 | 411 | $row->grant_update = $grant['grant_update']; |
383 | 412 | $row->grant_delete = $grant['grant_delete']; |
384 | | - $row->explained = implode('; ', module_invoke_all('node_access_explain', $row)); |
385 | | - unset($row->title); |
| 413 | + $row->explained = implode('<br />', module_invoke_all('node_access_explain', $row)); |
| 414 | + unset($row->title); // possibly needed above |
386 | 415 | if ($row->nid == 0 && $row->gid == 0 && $row->realm == 'all' && count($all_grants) > 1) { |
387 | 416 | $row->state = array('data' => $states['unexpected'][0], 'title' => $states['unexpected'][2]); |
388 | 417 | $class = $states['unexpected'][1]; |
— | — | @@ -393,15 +422,16 @@ |
394 | 423 | $row = (array) $row; |
395 | 424 | foreach (array('view', 'update', 'delete') as $op) { |
396 | 425 | $row["grant_$op"] = array('data' => $row["grant_$op"]); |
397 | | - if ((isset($checked_grants[$grant['nid']][$op][$grant['realm']]) && in_array($grant['gid'], $checked_grants[$grant['nid']][$op][$grant['realm']]) || ($row['nid'] == 0 && $row['gid'] == 0 && $row['realm'] == 'all')) && !empty($row["grant_$op"]['data'])) { |
| 426 | + if ((isset($checked_grants[$grant['nid']][$op][$grant['realm']]) && in_array($grant['gid'], $checked_grants[$grant['nid']][$op][$grant['realm']]) || ($row['nid'] == 0 && $row['gid'] == 0 && $row['realm'] == 'all')) && !empty($row["grant_$op"]['data']) && in_array($grant['state'], $active_states)) { |
398 | 427 | $row["grant_$op"]['data'] .= '′'; |
399 | 428 | $row["grant_$op"]['title'] = t('This entry grants access to this node to this user.'); |
400 | 429 | } |
401 | 430 | if (isset($grant["grant_$op!"])) { |
402 | | - $row["grant_$op"]['data'] = $grant["grant_$op!"] .'>'. $row["grant_$op"]['data']; |
| 431 | + $row["grant_$op"]['data'] = $grant["grant_$op!"] .'>'. (!$row["grant_$op"]['data'] ? 0 : $row["grant_$op"]['data']); |
403 | 432 | $row["grant_$op"]['class'] = 'error'; |
404 | 433 | } |
405 | 434 | } |
| 435 | + $row['nid'] = '<a href="#node-'. $grant['nid'] .'">'. $row['nid'] .'</a>'; |
406 | 436 | foreach (array('nid', 'priority', 'gid') as $key) { |
407 | 437 | $row[$key] = array('data' => $row[$key], 'style' => 'text-align: right'); |
408 | 438 | } |
— | — | @@ -409,72 +439,72 @@ |
410 | 440 | $row['realm'] = (empty($grant['#module']) || strpos($grant['realm'], $grant['#module']) === 0 ? '' : $grant['#module'] .':<br />') . $grant['realm']; |
411 | 441 | $rows[] = array('data' => array_values($row), 'class' => 'even '. $class); |
412 | 442 | } |
413 | | - $output = theme_table($headers, $rows, array('class' => 'system-status-report', 'style' => 'text-align: left')); |
| 443 | + $output = theme('table', $headers, $rows, array('class' => 'system-status-report', 'style' => 'text-align: left')); |
414 | 444 | |
415 | 445 | $output .= theme_item(array('#value' => '', '#description' => '(Some of the table elements provide additional information if you hover your mouse over them.)')); |
416 | 446 | |
417 | 447 | if ($error_count > 0) { |
418 | | - $tokens['!Rebuild_permissions'] = '<a href="'. url('admin/content/node-settings/rebuild') .'">'. $tr('Rebuild permissions') .'</a>'; |
419 | | - $output .= theme_item(array('#value' => '<div class="error">'. t("You have errors in your !na table! You may be able to fix these for now by running !Rebuild_permissions, but this is likely to destroy the evidence and make it impossible to identify the underlying issues. If you don't fix those, the errors will probably come back again. <br /> DON'T do this just yet if you intend to ask for help with this situation.", $tokens) .'</div>')); |
| 448 | + $variables['!Rebuild_permissions'] = '<a href="'. url('admin/content/node-settings/rebuild') .'">'. $tr('Rebuild permissions') .'</a>'; |
| 449 | + $output .= theme_item(array('#value' => '<div class="error">'. t("You have errors in your !na table! You may be able to fix these for now by running !Rebuild_permissions, but this is likely to destroy the evidence and make it impossible to identify the underlying issues. If you don't fix those, the errors will probably come back again. <br /> DON'T do this just yet if you intend to ask for help with this situation.", $variables) .'</div>')); |
420 | 450 | } |
421 | 451 | |
422 | | - // explain how access is granted (code from node_access()) |
423 | | - $t = 't'; |
| 452 | + // Explain whether access is granted or denied, and why (using code from node_access()). |
| 453 | + $tr = 't'; |
| 454 | + array_shift($nids); // remove the 0 |
| 455 | + $accounts = array(); |
| 456 | + $variables += array( |
| 457 | + '!username' => theme('username', $user), |
| 458 | + '%uid' => $user->uid, |
| 459 | + ); |
| 460 | + |
424 | 461 | if (user_access('administer nodes')) { |
425 | | - $output .= t('This user has the %administer_nodes permission and thus full access to all nodes.', array('%administer_nodes' => $t('administer nodes'))); |
| 462 | + $variables['%administer_nodes'] = $tr('administer nodes'); |
| 463 | + $output .= t('!username has the %administer_nodes permission and thus full access to all nodes.', $variables) .'<br /> '; |
426 | 464 | } |
427 | 465 | else { |
428 | | - |
429 | | - function devel_node_access_message($nid, $by_what) { |
430 | | - $t = 't'; |
431 | | - return '<div class="form-item" style="text-align: left">'. theme_markup(array('#value' => t('This user is granted %view access to node %nid !by_what', array('%view' => $t('view'), '%nid' => $nid, '!by_what' => $by_what)))) .'</div>'; |
| 466 | + $variables['!list'] = '<div style="margin-left: 2em">'. _devel_node_access_get_grant_list($nid, $checked_status, $checked_grants) .'</div>'; |
| 467 | + $variables['%access'] = 'view'; |
| 468 | + $output .= "\n<div style='text-align: left' title='". t('These are the grants returned by hook_node_grants() for this user.') ."'>". t('!username (user %uid) can use these grants for %access access (if they are present above): !list', $variables) ."</div>\n"; |
| 469 | + $accounts[] = $user; |
| 470 | + } |
| 471 | + if (arg(0) == 'node' && is_numeric(arg(1)) && !$block1_visible) { // only for single nodes |
| 472 | + if (user_is_logged_in()) { |
| 473 | + $accounts[] = user_load(0); // Anonymous, too |
432 | 474 | } |
433 | | - |
434 | | - foreach ($nids as $nid) { |
435 | | - if ($node = node_load(array('nid' => $nid))) { |
436 | | - $module = node_get_types('module', $node); |
437 | | - if ($module == 'node') { |
438 | | - $module = 'node_content'; // Avoid function name collisions. |
| 475 | + foreach ($accounts as $account) { |
| 476 | + $variables['!username'] = theme('username', $account); |
| 477 | + $output .= "\n<div style='text-align: left'>". t("!username has the following access", $variables) .' '; |
| 478 | + $nid_items = array(); |
| 479 | + foreach ($nids as $nid) { |
| 480 | + $op_items = array(); |
| 481 | + foreach (array('create', 'view', 'update', 'delete') as $op) { |
| 482 | + $explain = _devel_node_access_explain_access($op, $nid, $account); |
| 483 | + $op_items[] = "<div style='width: 5em; display: inline-block'>". t('%op:', array('%op' => $op)) .' </div>'. $explain[2]; |
439 | 484 | } |
440 | | - $access = module_invoke($module, 'access', 'view', $node, $user); |
441 | | - if (!empty($access)) { |
442 | | - $output .= devel_node_access_message($nid, t('by the %module module itself.', array('%module' => $module))); |
443 | | - } |
444 | | - else { |
445 | | - if (!empty($checked_status[$nid])) { |
446 | | - $cgs_by_realm = array(); |
447 | | - foreach ($checked_grants[$nid]['view'] as $realm => $cg) { |
448 | | - if (isset($cg['#module'])) { |
449 | | - $module = $cg['#module']; |
450 | | - unset($cg['#module']); |
451 | | - if (!empty($module) && (strpos($realm, $module) !== 0)) { |
452 | | - $realm = $module .':'. $realm; |
453 | | - } |
454 | | - } |
455 | | - $cgs_by_realm[$realm] = $realm .': '. implode(', ', $cg); |
456 | | - } |
457 | | - if (!empty($cgs_by_realm)) { |
458 | | - $output .= devel_node_access_message($nid, t("by one or more of the following grants (if they are present above): !list", array('!list' => theme('item_list', array_values($cgs_by_realm), NULL, 'ul')))); |
459 | | - } |
460 | | - elseif ($user->uid == $node->uid && $user->uid != 0) { |
461 | | - $output .= devel_node_access_message($nid, t('as author of the node.')); |
462 | | - } |
463 | | - } |
464 | | - } |
| 485 | + $nid_items[] = t('to node !nid:', array('!nid' => l($nid, 'node/'. $nid))) |
| 486 | + ."\n<div style='margin-left: 2em'>". theme('item_list', $op_items, NULL, 'ul') .'</div>'; |
465 | 487 | } |
| 488 | + if (count($nid_items) == 1) { |
| 489 | + $output .= $nid_items[0]; |
| 490 | + } |
| 491 | + else { |
| 492 | + $output .= "\n<div style='margin-left: 2em'>". theme('item_list', $nid_items, NULL, 'ul') .'</div>'; |
| 493 | + } |
| 494 | + $output .= "\n</div>\n"; |
466 | 495 | } |
467 | 496 | } |
468 | 497 | } |
469 | 498 | |
| 499 | + if (!empty($hint)) { |
| 500 | + $output .= theme_item(array('#value' => '', '#description' => '('. $hint .')')); |
| 501 | + } |
470 | 502 | $subject = t('node_access entries for nodes shown on this page'); |
471 | 503 | return array('subject' => $subject, 'content' => $output .'<br /><br />'); |
472 | 504 | |
473 | 505 | case 1: |
474 | 506 | // show which users can access this node |
475 | | - if (arg(0) == 'node' && is_numeric(arg(1))) { |
476 | | - $nid = arg(1); |
477 | | - $node = node_load($nid); |
478 | | - $headers = array(t('username'), t('view'), t('update'), t('delete')); |
| 507 | + if (arg(0) == 'node' && is_numeric($nid = arg(1)) && arg(2) == null && $node = node_load($nid)) { |
| 508 | + $headers = array(t('username'), '<span title="'. t("Create nodes of the '@Node_type' type.", array('@Node_type' => node_get_types('name', $node))) .'">'. t('create') .'</span>', t('view'), t('update'), t('delete')); |
479 | 509 | $rows = array(); |
480 | 510 | // Find all users. The following operations are very inefficient, so we |
481 | 511 | // limit the number of users returned. It would be better to make a |
— | — | @@ -482,15 +512,21 @@ |
483 | 513 | // anyone is up for that please submit a patch. |
484 | 514 | $result = db_query_range('SELECT DISTINCT u.* FROM {users} u ORDER BY u.access DESC', 0, 10); |
485 | 515 | while ($data = db_fetch_object($result)) { |
486 | | - $account = user_load(array('uid' => $data->uid)); |
487 | | - $rows[] = array(theme('username', $data), |
488 | | - theme('dna_permission', node_access('view', $node, $account)), |
489 | | - theme('dna_permission', node_access('update', $node, $account)), |
490 | | - theme('dna_permission', node_access('delete', $node, $account)), |
| 516 | + $account = user_load($data->uid); |
| 517 | + $username = theme('username', $data); |
| 518 | + if ($account->uid == $user->uid) { |
| 519 | + $username = '<strong>'. $username .'</strong>'; |
| 520 | + } |
| 521 | + $rows[] = array($username, |
| 522 | + theme('dna_permission', _devel_node_access_explain_access('create', $nid, $account)), |
| 523 | + theme('dna_permission', _devel_node_access_explain_access('view', $nid, $account)), |
| 524 | + theme('dna_permission', _devel_node_access_explain_access('update', $nid, $account)), |
| 525 | + theme('dna_permission', _devel_node_access_explain_access('delete', $nid, $account)), |
491 | 526 | ); |
492 | 527 | } |
493 | 528 | if (count($rows)) { |
494 | 529 | $output = theme('table', $headers, $rows, array('style' => 'text-align: left')); |
| 530 | + $output .= theme_item(array('#value' => '', '#description' => t('(This table lists the most-recently active users. Hover your mouse over each result for more details.)'))); |
495 | 531 | return array('subject' => t('Access permissions by user'), |
496 | 532 | 'content' => $output); |
497 | 533 | } |
— | — | @@ -502,6 +538,203 @@ |
503 | 539 | } |
504 | 540 | |
505 | 541 | /** |
| 542 | + * Helper function that mimicks node.module's node_access() function. |
| 543 | + * |
| 544 | + * Unfortunately, this needs to be updated manually whenever node.module changes! |
| 545 | + * |
| 546 | + * @return |
| 547 | + * An array suitable for theming with theme_dna_permission(). |
| 548 | + */ |
| 549 | +function _devel_node_access_explain_access($op, $node, $account = NULL) { |
| 550 | + global $user; |
| 551 | + static $filter_formats; |
| 552 | + |
| 553 | + if (is_numeric($node) && !($node = node_load($node))) { |
| 554 | + return array( FALSE, '???', |
| 555 | + t('Unable to load the node – this should never happen!'), |
| 556 | + ); |
| 557 | + } |
| 558 | + if ($op == 'create' && is_object($node)) { |
| 559 | + $node = $node->type; |
| 560 | + } |
| 561 | + |
| 562 | + if (!empty($account)) { |
| 563 | + $filter_formats = filter_formats(); // use real current user first! |
| 564 | + // To try to get the most authentic result we impersonate the given user! |
| 565 | + // This may reveal bugs in other modules, leading to contradictory results. |
| 566 | + $saved_user = $user; |
| 567 | + session_save_session(FALSE); |
| 568 | + $user = $account; |
| 569 | + $result = _devel_node_access_explain_access($op, $node, NULL); |
| 570 | + $user = $saved_user; |
| 571 | + session_save_session(TRUE); |
| 572 | + $second_opinion = node_access($op, $node, $account); |
| 573 | + if ($second_opinion != $result[0]) { |
| 574 | + $result[1] .= '<span class="'. ($second_opinion ? 'ok' : 'error') .'" title="DNA and Core seem to disagree on this item. This is a bug in either one of them and should be fixed! Try to look at this node as this user and check whether there is still disagreement.">*</span>'; |
| 575 | + } |
| 576 | + return $result; |
| 577 | + } |
| 578 | + |
| 579 | + $variables = array( |
| 580 | + '!NO' => t('NO'), |
| 581 | + '!YES' => t('YES'), |
| 582 | + ); |
| 583 | + |
| 584 | + if ($op == 'update' && !_devel_node_access_filter_access($node->format)) { |
| 585 | + return array( FALSE, |
| 586 | + t('!NO: input format', $variables), |
| 587 | + t("!NO: This user is not allowed to use the input format '!format' (!fid).", $variables += array( |
| 588 | + '!fid' => $node->format, |
| 589 | + '!format' => (isset($filter_formats[$node->format]) ? $filter_formats[$node->format]->name : '***'), |
| 590 | + )), |
| 591 | + ); |
| 592 | + } |
| 593 | + if (user_access('administer nodes')) { |
| 594 | + return array( TRUE, |
| 595 | + t('!YES: administer nodes', $variables), |
| 596 | + t("!YES: This user has the '!administer_nodes' permission and may do everything with nodes.", $variables += array( |
| 597 | + '!administer_nodes' => t('administer nodes'), |
| 598 | + )), |
| 599 | + ); |
| 600 | + } |
| 601 | + elseif (!user_access('access content')) { |
| 602 | + return array( FALSE, |
| 603 | + t('!NO: access content', $variables), |
| 604 | + t("!NO: This user does not have the '!access_content' permission and is denied doing anything with content.", $variables += array( |
| 605 | + '!access_content' => t('access content'), |
| 606 | + )), |
| 607 | + ); |
| 608 | + } |
| 609 | + $module = node_get_types('module', $node); |
| 610 | + $access = module_invoke(($module == 'node' ? 'node_content' : $module), 'access', $op, $node, $user); |
| 611 | + if (!is_null($access)) { |
| 612 | + $variables += array( |
| 613 | + '@module' => $module, |
| 614 | + '@content_type' => (is_object($node) ? $node->type : $node), |
| 615 | + ); |
| 616 | + if ($access) { |
| 617 | + return array( TRUE, |
| 618 | + t('!YES: by the module', $variables), |
| 619 | + t("!YES: The '@module' module (which defines the '@content_type' content type) allows this, probably based on some permission.", $variables), |
| 620 | + ); |
| 621 | + } |
| 622 | + else { |
| 623 | + return array( FALSE, |
| 624 | + t('!NO: by the module', $variables), |
| 625 | + t("!NO: The '@module' module (which defines the '@content_type' content type) denies this.", $variables), |
| 626 | + ); |
| 627 | + } |
| 628 | + } |
| 629 | + |
| 630 | + if ($op != 'create' && $node->nid && $node->status) { |
| 631 | + if (node_access($op, $node, $user)) { // delegate this part |
| 632 | + return array( TRUE, |
| 633 | + t('!YES: node access', $variables), |
| 634 | + t('!YES: Node access allows this.', $variables), |
| 635 | + ); |
| 636 | + } |
| 637 | + else { |
| 638 | + return array( FALSE, |
| 639 | + t('!NO: node access', $variables), |
| 640 | + t('!NO: Node access denies this.', $variables), |
| 641 | + ); |
| 642 | + } |
| 643 | + } |
| 644 | + |
| 645 | + if ($op == 'view' && $user->uid == $node->uid && $user->uid != 0) { |
| 646 | + return array( TRUE, |
| 647 | + t('!YES: own node', $variables), |
| 648 | + t('!YES: The user may view his/her own node.', $variables), |
| 649 | + ); |
| 650 | + } |
| 651 | + return array( FALSE, |
| 652 | + t('!NO: no reason', $variables), |
| 653 | + t("!NO: None of the checks resulted in allowing this, so it's denied.", $variables) . |
| 654 | + ($op != 'create' && !$node->status ? ' '. t('Node access was not checked because the node is not published.') : '') . |
| 655 | + ($op == 'create' ? ' '. t('This is most likely due to a withheld permission.') : ''), |
| 656 | + ); |
| 657 | +} |
| 658 | + |
| 659 | +/* |
| 660 | + * Helper function that mimicks filter.modules' filter_access(), but with the |
| 661 | + * help of the user-aware _devel_node_access_filter_formats() function. |
| 662 | + */ |
| 663 | +function _devel_node_access_filter_access($format) { |
| 664 | + $format = filter_resolve_format($format); |
| 665 | + if (user_access('administer filters') || ($format == variable_get('filter_default_format', 1))) { |
| 666 | + return TRUE; |
| 667 | + } |
| 668 | + else { |
| 669 | + return (bool) _devel_node_access_filter_formats($format); |
| 670 | + } |
| 671 | +} |
| 672 | + |
| 673 | +/* |
| 674 | + * Helper function that mimicks filter.module's filter_formats(), but for a |
| 675 | + * specific user. If #470840 gets committed, we can remove this here. |
| 676 | + */ |
| 677 | +function _devel_node_access_filter_formats($index, $account = NULL) { |
| 678 | + global $user; |
| 679 | + static $formats = array(); |
| 680 | + |
| 681 | + if (!isset($account)) { |
| 682 | + $account = $user; |
| 683 | + } |
| 684 | + |
| 685 | + // Administrators can always use all text formats. |
| 686 | + $all = user_access('administer filters', $account); |
| 687 | + |
| 688 | + if (!isset($formats[$account->uid])) { |
| 689 | + $formats[$account->uid] = array(); |
| 690 | + |
| 691 | + $query = 'SELECT * FROM {filter_formats}'; |
| 692 | + |
| 693 | + // Build query for selecting the format(s) based on the user's roles. |
| 694 | + $args = array(); |
| 695 | + if (!$all) { |
| 696 | + $where = array(); |
| 697 | + foreach ($account->roles as $rid => $role) { |
| 698 | + $where[] = "roles LIKE '%%,%d,%%'"; |
| 699 | + $args[] = $rid; |
| 700 | + } |
| 701 | + $query .= ' WHERE '. implode(' OR ', $where) .' OR format = %d'; |
| 702 | + $args[] = variable_get('filter_default_format', 1); |
| 703 | + } |
| 704 | + |
| 705 | + $result = db_query($query, $args); |
| 706 | + while ($format = db_fetch_object($result)) { |
| 707 | + $formats[$account->uid][$format->format] = $format; |
| 708 | + } |
| 709 | + } |
| 710 | + if (isset($index)) { |
| 711 | + return isset($formats[$account->uid][$index]) ? $formats[$account->uid][$index] : FALSE; |
| 712 | + } |
| 713 | + return $formats[$account->uid]; |
| 714 | +} |
| 715 | + |
| 716 | +/** |
| 717 | + * Helper function to create a list of the grants returned by hook_node_grants(). |
| 718 | + */ |
| 719 | +function _devel_node_access_get_grant_list($nid, $checked_status, $checked_grants) { |
| 720 | + if (!empty($checked_status[$nid])) { |
| 721 | + $cgs_by_realm = array(); |
| 722 | + foreach ($checked_grants[$nid]['view'] as $realm => $cg) { |
| 723 | + if (isset($cg['#module'])) { |
| 724 | + $module = $cg['#module']; |
| 725 | + unset($cg['#module']); |
| 726 | + if (!empty($module) && (strpos($realm, $module) !== 0)) { |
| 727 | + $realm = $module .':'. $realm; |
| 728 | + } |
| 729 | + } |
| 730 | + $cgs_by_realm[$realm] = $realm .': '. implode(', ', $cg); |
| 731 | + } |
| 732 | + if (!empty($cgs_by_realm)) { |
| 733 | + return theme('item_list', array_values($cgs_by_realm), NULL, 'ul'); |
| 734 | + } |
| 735 | + } |
| 736 | +} |
| 737 | + |
| 738 | +/** |
506 | 739 | * Implementation of hook_node_access_explain(). |
507 | 740 | */ |
508 | 741 | function devel_node_access_node_access_explain($row) { |
— | — | @@ -513,7 +746,7 @@ |
514 | 747 | } |
515 | 748 | } |
516 | 749 | if (empty($ops)) { |
517 | | - return '(No access granted to '. ($row->nid == 0 ? 'any nodes.)' : 'this node.)'); |
| 750 | + return '(No access granted to '. ($row->nid == 0 ? 'any nodes.)' : 'this node.)'); |
518 | 751 | } |
519 | 752 | else { |
520 | 753 | return 'All users may '. implode('/', $ops) . ($row->nid == 0 ? ' all nodes.' : ' this node.'); |
— | — | @@ -522,6 +755,28 @@ |
523 | 756 | } |
524 | 757 | |
525 | 758 | /** |
| 759 | + * Helper function to return a sanitized node title. |
| 760 | + */ |
| 761 | +function _devel_node_access_get_node_title($node, $clip_and_decorate = FALSE) { |
| 762 | + if (isset($node)) { |
| 763 | + if (isset($node->title)) { |
| 764 | + $node_title = check_plain($node->title); |
| 765 | + if ($clip_and_decorate) { |
| 766 | + if (drupal_strlen($node_title) > 20) { |
| 767 | + $node_title = "<span title='node/$node->nid: $node_title'>". drupal_substr($node_title, 0, 15) .'...</span>'; |
| 768 | + } |
| 769 | + $node_title = '<span title="node/'. $node->nid .'">'. $node_title .'</span>'; |
| 770 | + } |
| 771 | + return $node_title; |
| 772 | + } |
| 773 | + elseif (isset($node->nid)) { |
| 774 | + return $node->nid; |
| 775 | + } |
| 776 | + } |
| 777 | + return '—'; |
| 778 | +} |
| 779 | + |
| 780 | +/** |
526 | 781 | * Implementation of hook_theme(). |
527 | 782 | */ |
528 | 783 | function devel_node_access_theme() { |
— | — | @@ -534,14 +789,7 @@ |
535 | 790 | |
536 | 791 | /** |
537 | 792 | * Indicate whether user has a permission or not. |
538 | | - * |
539 | | - * TODO: use good looking images. |
540 | 793 | */ |
541 | 794 | function theme_dna_permission($permission) { |
542 | | - if ($permission) { |
543 | | - return t('yes'); |
544 | | - } |
545 | | - else { |
546 | | - return t('no'); |
547 | | - } |
| 795 | + return '<span class="'. ($permission[0] ? 'ok' : 'error') .'" title="'. $permission[2] .'">'. $permission[1] .'</span>'; |
548 | 796 | } |
Index: civicrm/trunk/sites/all/modules/queue2civicrm/queue2civicrm.module |
— | — | @@ -277,17 +277,37 @@ |
278 | 278 | $contribution = array( |
279 | 279 | 'contact_id' => $contact['id'], |
280 | 280 | 'total_amount' => $msg['gross'], |
281 | | - 'contribution_type_id' => 9, // cash donation |
282 | | - 'payment_instrument_id' => 6, // contribution |
| 281 | + 'contribution_type_id' => 9, // cash donation @fixme this needs to be pulled from a variable that was available with fundcore, but no longer exists |
| 282 | + 'payment_instrument_id' => 6, // contribution @fixme see above |
283 | 283 | 'fee_amount' => $msg['fee'], |
284 | 284 | 'net_amount' => $msg['net'], |
285 | 285 | 'trxn_id' => strtoupper($msg['gateway']) . ' ' . $msg['gateway_txn_id'], |
286 | 286 | 'receive_date' => date('Y-m-d H:i:s', $msg['date']), |
287 | 287 | 'currency' => 'USD', |
288 | 288 | 'source' => $msg['original_currency'] . ' ' . $msg['original_gross'], |
289 | | - 'custom_45' => ( $msg['comment'] ) ? $msg['comment'] : '', |
290 | 289 | ); |
291 | 290 | |
| 291 | + /** |
| 292 | + * Apply custom field defaults. |
| 293 | + * |
| 294 | + * Civicrm API v2 does NOT provide methods for custom groups/fields beyond creation and deleition, |
| 295 | + * so we hack this cusotm. Hopefully this won't be forever... |
| 296 | + * |
| 297 | + * At least we can use the CiviCRM DAO stuff to stuff necessary custom data in to the contribution object. |
| 298 | + * |
| 299 | + * At the moment, all custom fields get default values for online contribution EXCEPT for 'Donor Comment'. |
| 300 | + */ |
| 301 | + $query = "SELECT id, custom_group_id, label, default_value FROM civicrm_custom_field WHERE custom_group_id IN (SELECT id FROM civicrm_custom_group WHERE extends='Contribution' && is_active='1');"; |
| 302 | + $dao = CRM_Core_DAO::executeQuery( $query ); // Execute's query using CiviCRM data object stuff |
| 303 | + while ( $dao->fetch() ) { |
| 304 | + if ( $dao->label == 'Donor Comment' ) { |
| 305 | + $comment = ( $msg[ 'comment' ] ) ? $msg[ 'comment'] : $dao->default_value; |
| 306 | + $contribution[ 'custom_' . $dao->id ] = $comment; |
| 307 | + } elseif ( $dao->default_value ) { // if we dont make sure $dao->default_value has some value, Civi breaks when we try to insert |
| 308 | + $contribution[ 'custom_' . $dao->id ] = $dao->default_value; |
| 309 | + } |
| 310 | + } |
| 311 | + |
292 | 312 | watchdog( 'queue2civicrm', 'Contribution array for civicrm_contribution_add(): ' . print_r($contribution, TRUE)); |
293 | 313 | |
294 | 314 | $contribution_result = civicrm_contribution_add( $contribution ); |
— | — | @@ -302,13 +322,11 @@ |
303 | 323 | // Map the tracking record to the CiviCRM contribution |
304 | 324 | if (array_key_exists('contribution_tracking_id', $msg)) { |
305 | 325 | db_query('UPDATE {contribution_tracking} SET contribution_id = %d WHERE id = %d LIMIT 1', $contribution['id'], $msg['contribution_tracking_id']); |
306 | | - } |
307 | | - |
308 | | - //db_query('UPDATE civicrm.civicrm_contribution SET note = \'%s\' WHERE id = %d LIMIT 1', $msg['comment'], $contribution['id']); |
309 | | - |
| 326 | + } |
| 327 | + |
310 | 328 | // Tag contact for review |
311 | 329 | $tag = array( |
312 | | - 'tag_id' => 7, // review tag |
| 330 | + 'tag_id' => 7, // review tag @fixme should this also be variable? |
313 | 331 | 'contact_id' => $contact['id'] |
314 | 332 | ); |
315 | 333 | $tag_result = &civicrm_entity_tag_add( $tag ); |