Révision 01dfd3b5
Ajouté par Assos Assos il y a plus de 3 ans
drupal7/CHANGELOG.txt | ||
---|---|---|
1 |
Drupal 7.77, 2020-12-03 |
|
2 |
----------------------- |
|
3 |
- Hotfix for schema.prefixed tables |
|
4 |
|
|
5 |
Drupal 7.76, 2020-12-02 |
|
6 |
----------------------- |
|
7 |
- Support for MySQL 8 |
|
8 |
- Core tests pass in SQLite |
|
9 |
- Better user flood control logging |
|
10 |
|
|
11 |
Drupal 7.75, 2020-11-26 |
|
12 |
----------------------- |
|
13 |
- Fixed security issues: |
|
14 |
- SA-CORE-2020-013 |
|
15 |
|
|
1 | 16 |
Drupal 7.74, 2020-11-17 |
2 | 17 |
----------------------- |
3 | 18 |
- Fixed security issues: |
drupal7/MAINTAINERS.txt | ||
---|---|---|
12 | 12 |
|
13 | 13 |
- Dries Buytaert 'dries' https://www.drupal.org/u/dries |
14 | 14 |
- Fabian Franz 'Fabianx' https://www.drupal.org/u/fabianx |
15 |
- (provisional) Drew Webber 'mcdruid' https://www.drupal.org/u/mcdruid
|
|
15 |
- Drew Webber 'mcdruid' https://www.drupal.org/u/mcdruid |
|
16 | 16 |
|
17 | 17 |
|
18 | 18 |
Component maintainers |
drupal7/includes/bootstrap.inc | ||
---|---|---|
8 | 8 |
/** |
9 | 9 |
* The current system version. |
10 | 10 |
*/ |
11 |
define('VERSION', '7.74');
|
|
11 |
define('VERSION', '7.77');
|
|
12 | 12 |
|
13 | 13 |
/** |
14 | 14 |
* Core API compatibility. |
... | ... | |
1189 | 1189 |
$variables = $cached->data; |
1190 | 1190 |
} |
1191 | 1191 |
else { |
1192 |
// Cache miss. Avoid a stampede. |
|
1192 |
// Cache miss. Avoid a stampede by acquiring a lock. If the lock fails to |
|
1193 |
// acquire, optionally just continue with uncached processing. |
|
1193 | 1194 |
$name = 'variable_init'; |
1194 |
if (!lock_acquire($name, 1)) { |
|
1195 |
// Another request is building the variable cache. |
|
1196 |
// Wait, then re-run this function. |
|
1195 |
$lock_acquired = lock_acquire($name, 1); |
|
1196 |
if (!$lock_acquired && variable_get('variable_initialize_wait_for_lock', FALSE)) { |
|
1197 | 1197 |
lock_wait($name); |
1198 | 1198 |
return variable_initialize($conf); |
1199 | 1199 |
} |
1200 | 1200 |
else { |
1201 |
// Proceed with variable rebuild.
|
|
1201 |
// Load the variables from the table.
|
|
1202 | 1202 |
$variables = array_map('unserialize', db_query('SELECT name, value FROM {variable}')->fetchAllKeyed()); |
1203 |
cache_set('variables', $variables, 'cache_bootstrap'); |
|
1204 |
lock_release($name); |
|
1203 |
if ($lock_acquired) { |
|
1204 |
cache_set('variables', $variables, 'cache_bootstrap'); |
|
1205 |
lock_release($name); |
|
1206 |
} |
|
1205 | 1207 |
} |
1206 | 1208 |
} |
1207 | 1209 |
|
drupal7/includes/common.inc | ||
---|---|---|
6653 | 6653 |
$sort = isset($elements['#sorted']) ? !$elements['#sorted'] : $sort; |
6654 | 6654 |
|
6655 | 6655 |
// Filter out properties from the element, leaving only children. |
6656 |
$children = array(); |
|
6656 |
$count = count($elements); |
|
6657 |
$child_weights = array(); |
|
6658 |
$i = 0; |
|
6657 | 6659 |
$sortable = FALSE; |
6658 | 6660 |
foreach ($elements as $key => $value) { |
6659 | 6661 |
if (is_int($key) || $key === '' || $key[0] !== '#') { |
6660 |
$children[$key] = $value; |
|
6661 | 6662 |
if (is_array($value) && isset($value['#weight'])) { |
6663 |
$weight = $value['#weight']; |
|
6662 | 6664 |
$sortable = TRUE; |
6663 | 6665 |
} |
6666 |
else { |
|
6667 |
$weight = 0; |
|
6668 |
} |
|
6669 |
// Support weights with up to three digit precision and conserve the |
|
6670 |
// insertion order. |
|
6671 |
$child_weights[$key] = floor($weight * 1000) + $i / $count; |
|
6664 | 6672 |
} |
6673 |
$i++; |
|
6665 | 6674 |
} |
6675 |
|
|
6666 | 6676 |
// Sort the children if necessary. |
6667 | 6677 |
if ($sort && $sortable) { |
6668 |
uasort($children, 'element_sort');
|
|
6678 |
asort($child_weights);
|
|
6669 | 6679 |
// Put the sorted children back into $elements in the correct order, to |
6670 | 6680 |
// preserve sorting if the same element is passed through |
6671 | 6681 |
// element_children() twice. |
6672 |
foreach ($children as $key => $child) { |
|
6682 |
foreach ($child_weights as $key => $weight) { |
|
6683 |
$value = $elements[$key]; |
|
6673 | 6684 |
unset($elements[$key]); |
6674 |
$elements[$key] = $child;
|
|
6685 |
$elements[$key] = $value;
|
|
6675 | 6686 |
} |
6676 | 6687 |
$elements['#sorted'] = TRUE; |
6677 | 6688 |
} |
6678 | 6689 |
|
6679 |
return array_keys($children);
|
|
6690 |
return array_keys($child_weights);
|
|
6680 | 6691 |
} |
6681 | 6692 |
|
6682 | 6693 |
/** |
drupal7/includes/database/database.inc | ||
---|---|---|
310 | 310 |
*/ |
311 | 311 |
protected $escapedAliases = array(); |
312 | 312 |
|
313 |
/** |
|
314 |
* List of un-prefixed table names, keyed by prefixed table names. |
|
315 |
* |
|
316 |
* @var array |
|
317 |
*/ |
|
318 |
protected $unprefixedTablesMap = array(); |
|
319 |
|
|
313 | 320 |
function __construct($dsn, $username, $password, $driver_options = array()) { |
314 | 321 |
// Initialize and prepare the connection prefix. |
315 | 322 |
$this->setPrefix(isset($this->connectionOptions['prefix']) ? $this->connectionOptions['prefix'] : ''); |
... | ... | |
338 | 345 |
// Destroy all references to this connection by setting them to NULL. |
339 | 346 |
// The Statement class attribute only accepts a new value that presents a |
340 | 347 |
// proper callable, so we reset it to PDOStatement. |
341 |
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array())); |
|
348 |
if (!empty($this->statementClass)) { |
|
349 |
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement', array())); |
|
350 |
} |
|
342 | 351 |
$this->schema = NULL; |
343 | 352 |
} |
344 | 353 |
|
... | ... | |
442 | 451 |
$this->prefixReplace[] = $this->prefixes['default']; |
443 | 452 |
$this->prefixSearch[] = '}'; |
444 | 453 |
$this->prefixReplace[] = ''; |
454 |
|
|
455 |
// Set up a map of prefixed => un-prefixed tables. |
|
456 |
foreach ($this->prefixes as $table_name => $prefix) { |
|
457 |
if ($table_name !== 'default') { |
|
458 |
$this->unprefixedTablesMap[$prefix . $table_name] = $table_name; |
|
459 |
} |
|
460 |
} |
|
445 | 461 |
} |
446 | 462 |
|
447 | 463 |
/** |
... | ... | |
477 | 493 |
} |
478 | 494 |
} |
479 | 495 |
|
496 |
/** |
|
497 |
* Gets a list of individually prefixed table names. |
|
498 |
* |
|
499 |
* @return array |
|
500 |
* An array of un-prefixed table names, keyed by their fully qualified table |
|
501 |
* names (i.e. prefix + table_name). |
|
502 |
*/ |
|
503 |
public function getUnprefixedTablesMap() { |
|
504 |
return $this->unprefixedTablesMap; |
|
505 |
} |
|
506 |
|
|
480 | 507 |
/** |
481 | 508 |
* Prepares a query string and returns the prepared statement. |
482 | 509 |
* |
... | ... | |
2840 | 2867 |
* |
2841 | 2868 |
* @param $table_expression |
2842 | 2869 |
* An SQL expression, for example "simpletest%" (without the quotes). |
2843 |
* BEWARE: this is not prefixed, the caller should take care of that. |
|
2844 | 2870 |
* |
2845 | 2871 |
* @return |
2846 | 2872 |
* Array, both the keys and the values are the matching tables. |
... | ... | |
2849 | 2875 |
return Database::getConnection()->schema()->findTables($table_expression); |
2850 | 2876 |
} |
2851 | 2877 |
|
2878 |
/** |
|
2879 |
* Finds all tables that are like the specified base table name. This is a |
|
2880 |
* backport of the change made to db_find_tables in Drupal 8 to work with |
|
2881 |
* virtual, un-prefixed table names. The original function is retained for |
|
2882 |
* Backwards Compatibility. |
|
2883 |
* @see https://www.drupal.org/node/2552435 |
|
2884 |
* |
|
2885 |
* @param $table_expression |
|
2886 |
* An SQL expression, for example "simpletest%" (without the quotes). |
|
2887 |
* |
|
2888 |
* @return |
|
2889 |
* Array, both the keys and the values are the matching tables. |
|
2890 |
*/ |
|
2891 |
function db_find_tables_d8($table_expression) { |
|
2892 |
return Database::getConnection()->schema()->findTablesD8($table_expression); |
|
2893 |
} |
|
2894 |
|
|
2852 | 2895 |
function _db_create_keys_sql($spec) { |
2853 | 2896 |
return Database::getConnection()->schema()->createKeysSql($spec); |
2854 | 2897 |
} |
drupal7/includes/database/mysql/database.inc | ||
---|---|---|
5 | 5 |
* Database interface code for MySQL database servers. |
6 | 6 |
*/ |
7 | 7 |
|
8 |
/** |
|
9 |
* The default character for quoting identifiers in MySQL. |
|
10 |
*/ |
|
11 |
define('MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT', '`'); |
|
12 |
|
|
8 | 13 |
/** |
9 | 14 |
* @addtogroup database |
10 | 15 |
* @{ |
... | ... | |
19 | 24 |
*/ |
20 | 25 |
protected $needsCleanup = FALSE; |
21 | 26 |
|
27 |
/** |
|
28 |
* The list of MySQL reserved key words. |
|
29 |
* |
|
30 |
* @link https://dev.mysql.com/doc/refman/8.0/en/keywords.html |
|
31 |
*/ |
|
32 |
private $reservedKeyWords = array( |
|
33 |
'accessible', |
|
34 |
'add', |
|
35 |
'admin', |
|
36 |
'all', |
|
37 |
'alter', |
|
38 |
'analyze', |
|
39 |
'and', |
|
40 |
'as', |
|
41 |
'asc', |
|
42 |
'asensitive', |
|
43 |
'before', |
|
44 |
'between', |
|
45 |
'bigint', |
|
46 |
'binary', |
|
47 |
'blob', |
|
48 |
'both', |
|
49 |
'by', |
|
50 |
'call', |
|
51 |
'cascade', |
|
52 |
'case', |
|
53 |
'change', |
|
54 |
'char', |
|
55 |
'character', |
|
56 |
'check', |
|
57 |
'collate', |
|
58 |
'column', |
|
59 |
'condition', |
|
60 |
'constraint', |
|
61 |
'continue', |
|
62 |
'convert', |
|
63 |
'create', |
|
64 |
'cross', |
|
65 |
'cube', |
|
66 |
'cume_dist', |
|
67 |
'current_date', |
|
68 |
'current_time', |
|
69 |
'current_timestamp', |
|
70 |
'current_user', |
|
71 |
'cursor', |
|
72 |
'database', |
|
73 |
'databases', |
|
74 |
'day_hour', |
|
75 |
'day_microsecond', |
|
76 |
'day_minute', |
|
77 |
'day_second', |
|
78 |
'dec', |
|
79 |
'decimal', |
|
80 |
'declare', |
|
81 |
'default', |
|
82 |
'delayed', |
|
83 |
'delete', |
|
84 |
'dense_rank', |
|
85 |
'desc', |
|
86 |
'describe', |
|
87 |
'deterministic', |
|
88 |
'distinct', |
|
89 |
'distinctrow', |
|
90 |
'div', |
|
91 |
'double', |
|
92 |
'drop', |
|
93 |
'dual', |
|
94 |
'each', |
|
95 |
'else', |
|
96 |
'elseif', |
|
97 |
'empty', |
|
98 |
'enclosed', |
|
99 |
'escaped', |
|
100 |
'except', |
|
101 |
'exists', |
|
102 |
'exit', |
|
103 |
'explain', |
|
104 |
'false', |
|
105 |
'fetch', |
|
106 |
'first_value', |
|
107 |
'float', |
|
108 |
'float4', |
|
109 |
'float8', |
|
110 |
'for', |
|
111 |
'force', |
|
112 |
'foreign', |
|
113 |
'from', |
|
114 |
'fulltext', |
|
115 |
'function', |
|
116 |
'generated', |
|
117 |
'get', |
|
118 |
'grant', |
|
119 |
'group', |
|
120 |
'grouping', |
|
121 |
'groups', |
|
122 |
'having', |
|
123 |
'high_priority', |
|
124 |
'hour_microsecond', |
|
125 |
'hour_minute', |
|
126 |
'hour_second', |
|
127 |
'if', |
|
128 |
'ignore', |
|
129 |
'in', |
|
130 |
'index', |
|
131 |
'infile', |
|
132 |
'inner', |
|
133 |
'inout', |
|
134 |
'insensitive', |
|
135 |
'insert', |
|
136 |
'int', |
|
137 |
'int1', |
|
138 |
'int2', |
|
139 |
'int3', |
|
140 |
'int4', |
|
141 |
'int8', |
|
142 |
'integer', |
|
143 |
'interval', |
|
144 |
'into', |
|
145 |
'io_after_gtids', |
|
146 |
'io_before_gtids', |
|
147 |
'is', |
|
148 |
'iterate', |
|
149 |
'join', |
|
150 |
'json_table', |
|
151 |
'key', |
|
152 |
'keys', |
|
153 |
'kill', |
|
154 |
'lag', |
|
155 |
'last_value', |
|
156 |
'lead', |
|
157 |
'leading', |
|
158 |
'leave', |
|
159 |
'left', |
|
160 |
'like', |
|
161 |
'limit', |
|
162 |
'linear', |
|
163 |
'lines', |
|
164 |
'load', |
|
165 |
'localtime', |
|
166 |
'localtimestamp', |
|
167 |
'lock', |
|
168 |
'long', |
|
169 |
'longblob', |
|
170 |
'longtext', |
|
171 |
'loop', |
|
172 |
'low_priority', |
|
173 |
'master_bind', |
|
174 |
'master_ssl_verify_server_cert', |
|
175 |
'match', |
|
176 |
'maxvalue', |
|
177 |
'mediumblob', |
|
178 |
'mediumint', |
|
179 |
'mediumtext', |
|
180 |
'middleint', |
|
181 |
'minute_microsecond', |
|
182 |
'minute_second', |
|
183 |
'mod', |
|
184 |
'modifies', |
|
185 |
'natural', |
|
186 |
'not', |
|
187 |
'no_write_to_binlog', |
|
188 |
'nth_value', |
|
189 |
'ntile', |
|
190 |
'null', |
|
191 |
'numeric', |
|
192 |
'of', |
|
193 |
'on', |
|
194 |
'optimize', |
|
195 |
'optimizer_costs', |
|
196 |
'option', |
|
197 |
'optionally', |
|
198 |
'or', |
|
199 |
'order', |
|
200 |
'out', |
|
201 |
'outer', |
|
202 |
'outfile', |
|
203 |
'over', |
|
204 |
'partition', |
|
205 |
'percent_rank', |
|
206 |
'persist', |
|
207 |
'persist_only', |
|
208 |
'precision', |
|
209 |
'primary', |
|
210 |
'procedure', |
|
211 |
'purge', |
|
212 |
'range', |
|
213 |
'rank', |
|
214 |
'read', |
|
215 |
'reads', |
|
216 |
'read_write', |
|
217 |
'real', |
|
218 |
'recursive', |
|
219 |
'references', |
|
220 |
'regexp', |
|
221 |
'release', |
|
222 |
'rename', |
|
223 |
'repeat', |
|
224 |
'replace', |
|
225 |
'require', |
|
226 |
'resignal', |
|
227 |
'restrict', |
|
228 |
'return', |
|
229 |
'revoke', |
|
230 |
'right', |
|
231 |
'rlike', |
|
232 |
'row', |
|
233 |
'rows', |
|
234 |
'row_number', |
|
235 |
'schema', |
|
236 |
'schemas', |
|
237 |
'second_microsecond', |
|
238 |
'select', |
|
239 |
'sensitive', |
|
240 |
'separator', |
|
241 |
'set', |
|
242 |
'show', |
|
243 |
'signal', |
|
244 |
'smallint', |
|
245 |
'spatial', |
|
246 |
'specific', |
|
247 |
'sql', |
|
248 |
'sqlexception', |
|
249 |
'sqlstate', |
|
250 |
'sqlwarning', |
|
251 |
'sql_big_result', |
|
252 |
'sql_calc_found_rows', |
|
253 |
'sql_small_result', |
|
254 |
'ssl', |
|
255 |
'starting', |
|
256 |
'stored', |
|
257 |
'straight_join', |
|
258 |
'system', |
|
259 |
'table', |
|
260 |
'terminated', |
|
261 |
'then', |
|
262 |
'tinyblob', |
|
263 |
'tinyint', |
|
264 |
'tinytext', |
|
265 |
'to', |
|
266 |
'trailing', |
|
267 |
'trigger', |
|
268 |
'true', |
|
269 |
'undo', |
|
270 |
'union', |
|
271 |
'unique', |
|
272 |
'unlock', |
|
273 |
'unsigned', |
|
274 |
'update', |
|
275 |
'usage', |
|
276 |
'use', |
|
277 |
'using', |
|
278 |
'utc_date', |
|
279 |
'utc_time', |
|
280 |
'utc_timestamp', |
|
281 |
'values', |
|
282 |
'varbinary', |
|
283 |
'varchar', |
|
284 |
'varcharacter', |
|
285 |
'varying', |
|
286 |
'virtual', |
|
287 |
'when', |
|
288 |
'where', |
|
289 |
'while', |
|
290 |
'window', |
|
291 |
'with', |
|
292 |
'write', |
|
293 |
'xor', |
|
294 |
'year_month', |
|
295 |
'zerofill', |
|
296 |
); |
|
297 |
|
|
22 | 298 |
public function __construct(array $connection_options = array()) { |
23 | 299 |
// This driver defaults to transaction support, except if explicitly passed FALSE. |
24 | 300 |
$this->transactionSupport = !isset($connection_options['transactions']) || ($connection_options['transactions'] !== FALSE); |
... | ... | |
86 | 362 |
$connection_options += array( |
87 | 363 |
'init_commands' => array(), |
88 | 364 |
); |
365 |
|
|
366 |
$sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO'; |
|
367 |
// NO_AUTO_CREATE_USER was removed in MySQL 8.0.11 |
|
368 |
// https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-11.html#mysqld-8-0-11-deprecation-removal |
|
369 |
if (version_compare($this->getAttribute(PDO::ATTR_SERVER_VERSION), '8.0.11', '<')) { |
|
370 |
$sql_mode .= ',NO_AUTO_CREATE_USER'; |
|
371 |
} |
|
89 | 372 |
$connection_options['init_commands'] += array( |
90 |
'sql_mode' => "SET sql_mode = 'REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'",
|
|
373 |
'sql_mode' => "SET sql_mode = '$sql_mode'",
|
|
91 | 374 |
); |
375 |
|
|
92 | 376 |
// Execute initial commands. |
93 | 377 |
foreach ($connection_options['init_commands'] as $sql) { |
94 | 378 |
$this->exec($sql); |
95 | 379 |
} |
96 | 380 |
} |
97 | 381 |
|
382 |
/** |
|
383 |
* {@inheritdoc}} |
|
384 |
*/ |
|
385 |
protected function setPrefix($prefix) { |
|
386 |
parent::setPrefix($prefix); |
|
387 |
// Successive versions of MySQL have become increasingly strict about the |
|
388 |
// use of reserved keywords as table names. Drupal 7 uses at least one such |
|
389 |
// table (system). Therefore we surround all table names with quotes. |
|
390 |
$quote_char = variable_get('mysql_identifier_quote_character', MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT); |
|
391 |
foreach ($this->prefixSearch as $i => $prefixSearch) { |
|
392 |
if (substr($prefixSearch, 0, 1) === '{') { |
|
393 |
// If the prefix already contains one or more quotes remove them. |
|
394 |
// This can happen when - for example - DrupalUnitTestCase sets up a |
|
395 |
// "temporary prefixed database". Also if there's a dot in the prefix, |
|
396 |
// wrap it in quotes to cater for schema names in prefixes. |
|
397 |
$search = array($quote_char, '.'); |
|
398 |
$replace = array('', $quote_char . '.' . $quote_char); |
|
399 |
$this->prefixReplace[$i] = $quote_char . str_replace($search, $replace, $this->prefixReplace[$i]); |
|
400 |
} |
|
401 |
if (substr($prefixSearch, -1) === '}') { |
|
402 |
$this->prefixReplace[$i] .= $quote_char; |
|
403 |
} |
|
404 |
} |
|
405 |
} |
|
406 |
|
|
407 |
/** |
|
408 |
* {@inheritdoc} |
|
409 |
*/ |
|
410 |
public function escapeField($field) { |
|
411 |
$field = parent::escapeField($field); |
|
412 |
return $this->quoteIdentifier($field); |
|
413 |
} |
|
414 |
|
|
415 |
public function escapeFields(array $fields) { |
|
416 |
foreach ($fields as &$field) { |
|
417 |
$field = $this->escapeField($field); |
|
418 |
} |
|
419 |
return $fields; |
|
420 |
} |
|
421 |
|
|
422 |
/** |
|
423 |
* {@inheritdoc} |
|
424 |
*/ |
|
425 |
public function escapeAlias($field) { |
|
426 |
$field = parent::escapeAlias($field); |
|
427 |
return $this->quoteIdentifier($field); |
|
428 |
} |
|
429 |
|
|
430 |
/** |
|
431 |
* Quotes an identifier if it matches a MySQL reserved keyword. |
|
432 |
* |
|
433 |
* @param string $identifier |
|
434 |
* The field to check. |
|
435 |
* |
|
436 |
* @return string |
|
437 |
* The identifier, quoted if it matches a MySQL reserved keyword. |
|
438 |
*/ |
|
439 |
private function quoteIdentifier($identifier) { |
|
440 |
// Quote identifiers so that MySQL reserved words like 'function' can be |
|
441 |
// used as column names. Sometimes the 'table.column_name' format is passed |
|
442 |
// in. For example, menu_load_links() adds a condition on "ml.menu_name". |
|
443 |
if (strpos($identifier, '.') !== FALSE) { |
|
444 |
list($table, $identifier) = explode('.', $identifier, 2); |
|
445 |
} |
|
446 |
if (in_array(strtolower($identifier), $this->reservedKeyWords, TRUE)) { |
|
447 |
// Quote the string for MySQL reserved keywords. |
|
448 |
$quote_char = variable_get('mysql_identifier_quote_character', MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT); |
|
449 |
$identifier = $quote_char . $identifier . $quote_char; |
|
450 |
} |
|
451 |
return isset($table) ? $table . '.' . $identifier : $identifier; |
|
452 |
} |
|
453 |
|
|
98 | 454 |
public function __destruct() { |
99 | 455 |
if ($this->needsCleanup) { |
100 | 456 |
$this->nextIdDelete(); |
drupal7/includes/database/mysql/query.inc | ||
---|---|---|
48 | 48 |
// Default fields are always placed first for consistency. |
49 | 49 |
$insert_fields = array_merge($this->defaultFields, $this->insertFields); |
50 | 50 |
|
51 |
if (method_exists($this->connection, 'escapeFields')) { |
|
52 |
$insert_fields = $this->connection->escapeFields($insert_fields); |
|
53 |
} |
|
54 |
|
|
51 | 55 |
// If we're selecting from a SelectQuery, finish building the query and |
52 | 56 |
// pass it back, as any remaining options are irrelevant. |
53 | 57 |
if (!empty($this->fromQuery)) { |
... | ... | |
89 | 93 |
|
90 | 94 |
class TruncateQuery_mysql extends TruncateQuery { } |
91 | 95 |
|
96 |
class UpdateQuery_mysql extends UpdateQuery { |
|
97 |
public function __toString() { |
|
98 |
if (method_exists($this->connection, 'escapeField')) { |
|
99 |
$escapedFields = array(); |
|
100 |
foreach ($this->fields as $field => $data) { |
|
101 |
$field = $this->connection->escapeField($field); |
|
102 |
$escapedFields[$field] = $data; |
|
103 |
} |
|
104 |
$this->fields = $escapedFields; |
|
105 |
} |
|
106 |
return parent::__toString(); |
|
107 |
} |
|
108 |
} |
|
109 |
|
|
92 | 110 |
/** |
93 | 111 |
* @} End of "addtogroup database". |
94 | 112 |
*/ |
drupal7/includes/database/mysql/schema.inc | ||
---|---|---|
57 | 57 |
protected function buildTableNameCondition($table_name, $operator = '=', $add_prefix = TRUE) { |
58 | 58 |
$info = $this->connection->getConnectionOptions(); |
59 | 59 |
|
60 |
// Ensure the table name is not surrounded with quotes as that is not |
|
61 |
// appropriate for schema queries. |
|
62 |
$quote_char = variable_get('mysql_identifier_quote_character', MYSQL_IDENTIFIER_QUOTE_CHARACTER_DEFAULT); |
|
63 |
$table_name = str_replace($quote_char, '', $table_name); |
|
64 |
|
|
60 | 65 |
$table_info = $this->getPrefixInfo($table_name, $add_prefix); |
61 | 66 |
|
62 | 67 |
$condition = new DatabaseCondition('AND'); |
... | ... | |
494 | 499 |
$condition->condition('column_name', $column); |
495 | 500 |
$condition->compile($this->connection, $this); |
496 | 501 |
// Don't use {} around information_schema.columns table. |
497 |
return $this->connection->query("SELECT column_comment FROM information_schema.columns WHERE " . (string) $condition, $condition->arguments())->fetchField(); |
|
502 |
return $this->connection->query("SELECT column_comment AS column_comment FROM information_schema.columns WHERE " . (string) $condition, $condition->arguments())->fetchField();
|
|
498 | 503 |
} |
499 | 504 |
$condition->compile($this->connection, $this); |
500 | 505 |
// Don't use {} around information_schema.tables table. |
501 |
$comment = $this->connection->query("SELECT table_comment FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchField(); |
|
506 |
$comment = $this->connection->query("SELECT table_comment AS table_comment FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchField();
|
|
502 | 507 |
// Work-around for MySQL 5.0 bug http://bugs.mysql.com/bug.php?id=11379 |
503 | 508 |
return preg_replace('/; InnoDB free:.*$/', '', $comment); |
504 | 509 |
} |
drupal7/includes/database/schema.inc | ||
---|---|---|
169 | 169 |
*/ |
170 | 170 |
abstract class DatabaseSchema implements QueryPlaceholderInterface { |
171 | 171 |
|
172 |
/** |
|
173 |
* The database connection. |
|
174 |
* |
|
175 |
* @var DatabaseConnection |
|
176 |
*/ |
|
172 | 177 |
protected $connection; |
173 | 178 |
|
174 | 179 |
/** |
... | ... | |
343 | 348 |
// couldn't use db_select() here because it would prefix |
344 | 349 |
// information_schema.tables and the query would fail. |
345 | 350 |
// Don't use {} around information_schema.tables table. |
346 |
return $this->connection->query("SELECT table_name FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchAllKeyed(0, 0); |
|
351 |
return $this->connection->query("SELECT table_name AS table_name FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments())->fetchAllKeyed(0, 0); |
|
352 |
} |
|
353 |
|
|
354 |
/** |
|
355 |
* Finds all tables that are like the specified base table name. This is a |
|
356 |
* backport of the change made to findTables in Drupal 8 to work with virtual, |
|
357 |
* un-prefixed table names. The original function is retained for Backwards |
|
358 |
* Compatibility. |
|
359 |
* @see https://www.drupal.org/node/2552435 |
|
360 |
* |
|
361 |
* @param string $table_expression |
|
362 |
* An SQL expression, for example "cache_%" (without the quotes). |
|
363 |
* |
|
364 |
* @return array |
|
365 |
* Both the keys and the values are the matching tables. |
|
366 |
*/ |
|
367 |
public function findTablesD8($table_expression) { |
|
368 |
// Load all the tables up front in order to take into account per-table |
|
369 |
// prefixes. The actual matching is done at the bottom of the method. |
|
370 |
$condition = $this->buildTableNameCondition('%', 'LIKE'); |
|
371 |
$condition->compile($this->connection, $this); |
|
372 |
|
|
373 |
$individually_prefixed_tables = $this->connection->getUnprefixedTablesMap(); |
|
374 |
$default_prefix = $this->connection->tablePrefix(); |
|
375 |
$default_prefix_length = strlen($default_prefix); |
|
376 |
$tables = array(); |
|
377 |
// Normally, we would heartily discourage the use of string |
|
378 |
// concatenation for conditionals like this however, we |
|
379 |
// couldn't use db_select() here because it would prefix |
|
380 |
// information_schema.tables and the query would fail. |
|
381 |
// Don't use {} around information_schema.tables table. |
|
382 |
$results = $this->connection->query("SELECT table_name AS table_name FROM information_schema.tables WHERE " . (string) $condition, $condition->arguments()); |
|
383 |
foreach ($results as $table) { |
|
384 |
// Take into account tables that have an individual prefix. |
|
385 |
if (isset($individually_prefixed_tables[$table->table_name])) { |
|
386 |
$prefix_length = strlen($this->connection->tablePrefix($individually_prefixed_tables[$table->table_name])); |
|
387 |
} |
|
388 |
elseif ($default_prefix && substr($table->table_name, 0, $default_prefix_length) !== $default_prefix) { |
|
389 |
// This table name does not start the default prefix, which means that |
|
390 |
// it is not managed by Drupal so it should be excluded from the result. |
|
391 |
continue; |
|
392 |
} |
|
393 |
else { |
|
394 |
$prefix_length = $default_prefix_length; |
|
395 |
} |
|
396 |
|
|
397 |
// Remove the prefix from the returned tables. |
|
398 |
$unprefixed_table_name = substr($table->table_name, $prefix_length); |
|
399 |
|
|
400 |
// The pattern can match a table which is the same as the prefix. That |
|
401 |
// will become an empty string when we remove the prefix, which will |
|
402 |
// probably surprise the caller, besides not being a prefixed table. So |
|
403 |
// remove it. |
|
404 |
if (!empty($unprefixed_table_name)) { |
|
405 |
$tables[$unprefixed_table_name] = $unprefixed_table_name; |
|
406 |
} |
|
407 |
} |
|
408 |
|
|
409 |
// Convert the table expression from its SQL LIKE syntax to a regular |
|
410 |
// expression and escape the delimiter that will be used for matching. |
|
411 |
$table_expression = str_replace(array('%', '_'), array('.*?', '.'), preg_quote($table_expression, '/')); |
|
412 |
$tables = preg_grep('/^' . $table_expression . '$/i', $tables); |
|
413 |
|
|
414 |
return $tables; |
|
347 | 415 |
} |
348 | 416 |
|
349 | 417 |
/** |
drupal7/includes/database/select.inc | ||
---|---|---|
1520 | 1520 |
$fields = array(); |
1521 | 1521 |
foreach ($this->tables as $alias => $table) { |
1522 | 1522 |
if (!empty($table['all_fields'])) { |
1523 |
$fields[] = $this->connection->escapeTable($alias) . '.*';
|
|
1523 |
$fields[] = $this->connection->escapeAlias($alias) . '.*';
|
|
1524 | 1524 |
} |
1525 | 1525 |
} |
1526 | 1526 |
foreach ($this->fields as $alias => $field) { |
1527 |
// Note that $field['table'] holds the table alias. |
|
1528 |
// @see \SelectQuery::addField |
|
1529 |
$table = isset($field['table']) ? $this->connection->escapeAlias($field['table']) . '.' : ''; |
|
1527 | 1530 |
// Always use the AS keyword for field aliases, as some |
1528 | 1531 |
// databases require it (e.g., PostgreSQL). |
1529 |
$fields[] = (isset($field['table']) ? $this->connection->escapeTable($field['table']) . '.' : '') . $this->connection->escapeField($field['field']) . ' AS ' . $this->connection->escapeAlias($field['alias']);
|
|
1532 |
$fields[] = $table . $this->connection->escapeField($field['field']) . ' AS ' . $this->connection->escapeAlias($field['alias']);
|
|
1530 | 1533 |
} |
1531 | 1534 |
foreach ($this->expressions as $alias => $expression) { |
1532 | 1535 |
$fields[] = $expression['expression'] . ' AS ' . $this->connection->escapeAlias($expression['alias']); |
... | ... | |
1555 | 1558 |
|
1556 | 1559 |
// Don't use the AS keyword for table aliases, as some |
1557 | 1560 |
// databases don't support it (e.g., Oracle). |
1558 |
$query .= $table_string . ' ' . $this->connection->escapeTable($table['alias']);
|
|
1561 |
$query .= $table_string . ' ' . $this->connection->escapeAlias($table['alias']);
|
|
1559 | 1562 |
|
1560 | 1563 |
if (!empty($table['condition'])) { |
1561 | 1564 |
$query .= ' ON ' . $table['condition']; |
drupal7/includes/database/sqlite/database.inc | ||
---|---|---|
107 | 107 |
$this->sqliteCreateFunction('substring_index', array($this, 'sqlFunctionSubstringIndex'), 3); |
108 | 108 |
$this->sqliteCreateFunction('rand', array($this, 'sqlFunctionRand')); |
109 | 109 |
|
110 |
// Enable the Write-Ahead Logging (WAL) option for SQLite if supported. |
|
111 |
// @see https://www.drupal.org/node/2348137 |
|
112 |
// @see https://sqlite.org/wal.html |
|
113 |
if (version_compare($version, '3.7') >= 0) { |
|
114 |
$connection_options += array( |
|
115 |
'init_commands' => array(), |
|
116 |
); |
|
117 |
$connection_options['init_commands'] += array( |
|
118 |
'wal' => "PRAGMA journal_mode=WAL", |
|
119 |
); |
|
120 |
} |
|
121 |
|
|
110 | 122 |
// Execute sqlite init_commands. |
111 | 123 |
if (isset($connection_options['init_commands'])) { |
112 | 124 |
$this->exec(implode('; ', $connection_options['init_commands'])); |
... | ... | |
128 | 140 |
$count = $this->query('SELECT COUNT(*) FROM ' . $prefix . '.sqlite_master WHERE type = :type AND name NOT LIKE :pattern', array(':type' => 'table', ':pattern' => 'sqlite_%'))->fetchField(); |
129 | 141 |
|
130 | 142 |
// We can prune the database file if it doesn't have any tables. |
131 |
if ($count == 0) { |
|
132 |
// Detach the database.
|
|
133 |
$this->query('DETACH DATABASE :schema', array(':schema' => $prefix));
|
|
134 |
// Destroy the database file.
|
|
143 |
if ($count == 0 && $this->connectionOptions['database'] != ':memory:') {
|
|
144 |
// Detaching the database fails at this point, but no other queries
|
|
145 |
// are executed after the connection is destructed so we can simply
|
|
146 |
// remove the database file.
|
|
135 | 147 |
unlink($this->connectionOptions['database'] . '-' . $prefix); |
136 | 148 |
} |
137 | 149 |
} |
... | ... | |
143 | 155 |
} |
144 | 156 |
} |
145 | 157 |
|
158 |
/** |
|
159 |
* Gets all the attached databases. |
|
160 |
* |
|
161 |
* @return array |
|
162 |
* An array of attached database names. |
|
163 |
* |
|
164 |
* @see DatabaseConnection_sqlite::__construct(). |
|
165 |
*/ |
|
166 |
public function getAttachedDatabases() { |
|
167 |
return $this->attachedDatabases; |
|
168 |
} |
|
169 |
|
|
146 | 170 |
/** |
147 | 171 |
* SQLite compatibility implementation for the IF() SQL function. |
148 | 172 |
*/ |
drupal7/includes/database/sqlite/query.inc | ||
---|---|---|
23 | 23 |
if (!$this->preExecute()) { |
24 | 24 |
return NULL; |
25 | 25 |
} |
26 |
if (count($this->insertFields)) { |
|
26 |
if (count($this->insertFields) || !empty($this->fromQuery)) {
|
|
27 | 27 |
return parent::execute(); |
28 | 28 |
} |
29 | 29 |
else { |
... | ... | |
36 | 36 |
$comments = $this->connection->makeComment($this->comments); |
37 | 37 |
|
38 | 38 |
// Produce as many generic placeholders as necessary. |
39 |
$placeholders = array_fill(0, count($this->insertFields), '?'); |
|
39 |
$placeholders = array(); |
|
40 |
if (!empty($this->insertFields)) { |
|
41 |
$placeholders = array_fill(0, count($this->insertFields), '?'); |
|
42 |
} |
|
40 | 43 |
|
41 | 44 |
// If we're selecting from a SelectQuery, finish building the query and |
42 | 45 |
// pass it back, as any remaining options are irrelevant. |
drupal7/includes/database/sqlite/schema.inc | ||
---|---|---|
668 | 668 |
$this->alterTable($table, $old_schema, $new_schema); |
669 | 669 |
} |
670 | 670 |
|
671 |
/** |
|
672 |
* {@inheritdoc} |
|
673 |
*/ |
|
671 | 674 |
public function findTables($table_expression) { |
672 | 675 |
// Don't add the prefix, $table_expression already includes the prefix. |
673 | 676 |
$info = $this->getPrefixInfo($table_expression, FALSE); |
... | ... | |
680 | 683 |
)); |
681 | 684 |
return $result->fetchAllKeyed(0, 0); |
682 | 685 |
} |
686 |
|
|
687 |
/** |
|
688 |
* {@inheritdoc} |
|
689 |
*/ |
|
690 |
public function findTablesD8($table_expression) { |
|
691 |
$tables = array(); |
|
692 |
|
|
693 |
// The SQLite implementation doesn't need to use the same filtering strategy |
|
694 |
// as the parent one because individually prefixed tables live in their own |
|
695 |
// schema (database), which means that neither the main database nor any |
|
696 |
// attached one will contain a prefixed table name, so we just need to loop |
|
697 |
// over all known schemas and filter by the user-supplied table expression. |
|
698 |
$attached_dbs = $this->connection->getAttachedDatabases(); |
|
699 |
foreach ($attached_dbs as $schema) { |
|
700 |
// Can't use query placeholders for the schema because the query would |
|
701 |
// have to be :prefixsqlite_master, which does not work. We also need to |
|
702 |
// ignore the internal SQLite tables. |
|
703 |
$result = db_query("SELECT name FROM " . $schema . ".sqlite_master WHERE type = :type AND name LIKE :table_name AND name NOT LIKE :pattern", array( |
|
704 |
':type' => 'table', |
|
705 |
':table_name' => $table_expression, |
|
706 |
':pattern' => 'sqlite_%', |
|
707 |
)); |
|
708 |
$tables += $result->fetchAllKeyed(0, 0); |
|
709 |
} |
|
710 |
|
|
711 |
return $tables; |
|
712 |
} |
|
713 |
|
|
683 | 714 |
} |
drupal7/includes/form.inc | ||
---|---|---|
1361 | 1361 |
// The following errors are always shown. |
1362 | 1362 |
if (isset($elements['#needs_validation'])) { |
1363 | 1363 |
// Verify that the value is not longer than #maxlength. |
1364 |
if (isset($elements['#maxlength']) && drupal_strlen($elements['#value']) > $elements['#maxlength']) { |
|
1364 |
if (isset($elements['#maxlength']) && (isset($elements['#value']) && !is_scalar($elements['#value']))) { |
|
1365 |
form_error($elements, $t('An illegal value has been detected. Please contact the site administrator.')); |
|
1366 |
} |
|
1367 |
elseif (isset($elements['#maxlength']) && drupal_strlen($elements['#value']) > $elements['#maxlength']) { |
|
1365 | 1368 |
form_error($elements, $t('!name cannot be longer than %max characters but is currently %length characters long.', array('!name' => empty($elements['#title']) ? $elements['#parents'][0] : $elements['#title'], '%max' => $elements['#maxlength'], '%length' => drupal_strlen($elements['#value'])))); |
1366 | 1369 |
} |
1367 | 1370 |
|
... | ... | |
4124 | 4127 |
$max_elements = variable_get('drupal_weight_select_max', DRUPAL_WEIGHT_SELECT_MAX); |
4125 | 4128 |
if ($element['#delta'] <= $max_elements) { |
4126 | 4129 |
$element['#type'] = 'select'; |
4130 |
$weights = array(); |
|
4127 | 4131 |
for ($n = (-1 * $element['#delta']); $n <= $element['#delta']; $n++) { |
4128 | 4132 |
$weights[$n] = $n; |
4129 | 4133 |
} |
4134 |
if (isset($element['#default_value'])) { |
|
4135 |
$default_value = (int) $element['#default_value']; |
|
4136 |
if (!isset($weights[$default_value])) { |
|
4137 |
$weights[$default_value] = $default_value; |
|
4138 |
ksort($weights); |
|
4139 |
} |
|
4140 |
} |
|
4130 | 4141 |
$element['#options'] = $weights; |
4131 | 4142 |
$element += element_info('select'); |
4132 | 4143 |
} |
drupal7/includes/mail.inc | ||
---|---|---|
12 | 12 |
*/ |
13 | 13 |
define('MAIL_LINE_ENDINGS', isset($_SERVER['WINDIR']) || (isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Win32') !== FALSE) ? "\r\n" : "\n"); |
14 | 14 |
|
15 |
|
|
16 |
/** |
|
17 |
* Special characters, defined in RFC_2822. |
|
18 |
*/ |
|
19 |
define('MAIL_RFC_2822_SPECIALS', '()<>[]:;@\,."'); |
|
20 |
|
|
15 | 21 |
/** |
16 | 22 |
* Composes and optionally sends an e-mail message. |
17 | 23 |
* |
... | ... | |
148 | 154 |
// Return-Path headers should have a domain authorized to use the originating |
149 | 155 |
// SMTP server. |
150 | 156 |
$headers['From'] = $headers['Sender'] = $headers['Return-Path'] = $default_from; |
157 |
|
|
158 |
if (variable_get('mail_display_name_site_name', FALSE)) { |
|
159 |
$display_name = variable_get('site_name', 'Drupal'); |
|
160 |
$headers['From'] = drupal_mail_format_display_name($display_name) . ' <' . $default_from . '>'; |
|
161 |
} |
|
151 | 162 |
} |
152 |
if ($from) { |
|
163 |
if ($from && $from != $default_from) {
|
|
153 | 164 |
$headers['From'] = $from; |
154 | 165 |
} |
155 | 166 |
$message['headers'] = $headers; |
... | ... | |
557 | 568 |
return $output . $footnotes; |
558 | 569 |
} |
559 | 570 |
|
571 |
/** |
|
572 |
* Return a RFC-2822 compliant "display-name" component. |
|
573 |
* |
|
574 |
* The "display-name" component is used in mail header "Originator" fields |
|
575 |
* (From, Sender, Reply-to) to give a human-friendly description of the |
|
576 |
* address, i.e. From: My Display Name <xyz@example.org>. RFC-822 and |
|
577 |
* RFC-2822 define its syntax and rules. This method gets as input a string |
|
578 |
* to be used as "display-name" and formats it to be RFC compliant. |
|
579 |
* |
|
580 |
* @param string $string |
|
581 |
* A string to be used as "display-name". |
|
582 |
* |
|
583 |
* @return string |
|
584 |
* A RFC compliant version of the string, ready to be used as |
|
585 |
* "display-name" in mail originator header fields. |
|
586 |
*/ |
|
587 |
function drupal_mail_format_display_name($string) { |
|
588 |
// Make sure we don't process html-encoded characters. They may create |
|
589 |
// unneeded trouble if left encoded, besides they will be correctly |
|
590 |
// processed if decoded. |
|
591 |
$string = decode_entities($string); |
|
592 |
|
|
593 |
// If string contains non-ASCII characters it must be (short) encoded |
|
594 |
// according to RFC-2047. The output of a "B" (Base64) encoded-word is |
|
595 |
// always safe to be used as display-name. |
|
596 |
$safe_display_name = mime_header_encode($string, TRUE); |
|
597 |
|
|
598 |
// Encoded-words are always safe to be used as display-name because don't |
|
599 |
// contain any RFC 2822 "specials" characters. However |
|
600 |
// mimeHeaderEncode() encodes a string only if it contains any |
|
601 |
// non-ASCII characters, and leaves its value untouched (un-encoded) if |
|
602 |
// ASCII only. For this reason in order to produce a valid display-name we |
|
603 |
// still need to make sure there are no "specials" characters left. |
|
604 |
if (preg_match('/[' . preg_quote(MAIL_RFC_2822_SPECIALS) . ']/', $safe_display_name)) { |
|
605 |
|
|
606 |
// If string is already quoted, it may or may not be escaped properly, so |
|
607 |
// don't trust it and reset. |
|
608 |
if (preg_match('/^"(.+)"$/', $safe_display_name, $matches)) { |
|
609 |
$safe_display_name = str_replace(array('\\\\', '\\"'), array('\\', '"'), $matches[1]); |
|
610 |
} |
|
611 |
|
|
612 |
// Transform the string in a RFC-2822 "quoted-string" by wrapping it in |
|
613 |
// double-quotes. Also make sure '"' and '\' occurrences are escaped. |
|
614 |
$safe_display_name = '"' . str_replace(array('\\', '"'), array('\\\\', '\\"'), $safe_display_name) . '"'; |
|
615 |
} |
|
616 |
|
|
617 |
return $safe_display_name; |
|
618 |
} |
|
619 |
|
|
560 | 620 |
/** |
561 | 621 |
* Wraps words on a single line. |
562 | 622 |
* |
563 |
* Callback for array_walk() winthin drupal_wrap_mail().
|
|
623 |
* Callback for array_walk() within drupal_wrap_mail(). |
|
564 | 624 |
*/ |
565 | 625 |
function _drupal_wrap_mail_line(&$line, $key, $values) { |
566 | 626 |
// Use soft-breaks only for purely quoted or unindented text. |
drupal7/includes/menu.inc | ||
---|---|---|
1067 | 1067 |
// the active class accordingly. But local tasks do not appear in menu |
1068 | 1068 |
// trees, so if the current path is a local task, and this link is its |
1069 | 1069 |
// tab root, then we have to set the class manually. |
1070 |
if ($data['link']['href'] == $router_item['tab_root_href'] && $data['link']['href'] != $_GET['q']) { |
|
1070 |
if ($router_item && $data['link']['href'] == $router_item['tab_root_href'] && $data['link']['href'] != $_GET['q']) {
|
|
1071 | 1071 |
$data['link']['localized_options']['attributes']['class'][] = 'active'; |
1072 | 1072 |
} |
1073 | 1073 |
|
drupal7/misc/jquery.js | ||
---|---|---|
1 |
|
|
2 | 1 |
/*! |
3 | 2 |
* jQuery JavaScript Library v1.4.4 |
4 | 3 |
* http://jquery.com/ |
drupal7/modules/aggregator/aggregator.info | ||
---|---|---|
7 | 7 |
configure = admin/config/services/aggregator/settings |
8 | 8 |
stylesheets[all][] = aggregator.css |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
drupal7/modules/aggregator/tests/aggregator_test.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
hidden = TRUE |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/block/block.info | ||
---|---|---|
6 | 6 |
files[] = block.test |
7 | 7 |
configure = admin/structure/block |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/block/tests/block_test.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
hidden = TRUE |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/block/tests/themes/block_test_theme/block_test_theme.info | ||
---|---|---|
13 | 13 |
regions[highlighted] = Highlighted |
14 | 14 |
regions[help] = Help |
15 | 15 |
|
16 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
17 |
version = "7.74"
|
|
16 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
17 |
version = "7.77"
|
|
18 | 18 |
project = "drupal" |
19 |
datestamp = "1605718477" |
|
19 |
datestamp = "1607003447" |
drupal7/modules/blog/blog.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
files[] = blog.test |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/book/book.info | ||
---|---|---|
7 | 7 |
configure = admin/content/book/settings |
8 | 8 |
stylesheets[all][] = book.css |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
drupal7/modules/color/color.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
files[] = color.test |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/comment/comment.info | ||
---|---|---|
9 | 9 |
configure = admin/content/comment |
10 | 10 |
stylesheets[all][] = comment.css |
11 | 11 |
|
12 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
13 |
version = "7.74"
|
|
12 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
13 |
version = "7.77"
|
|
14 | 14 |
project = "drupal" |
15 |
datestamp = "1605718477" |
|
15 |
datestamp = "1607003447" |
drupal7/modules/contact/contact.info | ||
---|---|---|
6 | 6 |
files[] = contact.test |
7 | 7 |
configure = admin/structure/contact |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/contextual/contextual.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
files[] = contextual.test |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/dashboard/dashboard.info | ||
---|---|---|
7 | 7 |
dependencies[] = block |
8 | 8 |
configure = admin/dashboard/customize |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
drupal7/modules/dblog/dblog.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
files[] = dblog.test |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/field/field.info | ||
---|---|---|
11 | 11 |
required = TRUE |
12 | 12 |
stylesheets[all][] = theme/field.css |
13 | 13 |
|
14 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
15 |
version = "7.74"
|
|
14 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
15 |
version = "7.77"
|
|
16 | 16 |
project = "drupal" |
17 |
datestamp = "1605718477" |
|
17 |
datestamp = "1607003447" |
drupal7/modules/field/modules/field_sql_storage/field_sql_storage.info | ||
---|---|---|
7 | 7 |
files[] = field_sql_storage.test |
8 | 8 |
required = TRUE |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
drupal7/modules/field/modules/field_sql_storage/field_sql_storage.test | ||
---|---|---|
313 | 313 |
$field = array('field_name' => 'test_text', 'type' => 'text', 'settings' => array('max_length' => 255)); |
314 | 314 |
$field = field_create_field($field); |
315 | 315 |
|
316 |
// Attempt to update the field in a way that would break the storage. |
|
316 |
// Attempt to update the field in a way that would break the storage. The |
|
317 |
// parenthesis suffix is needed because SQLite has *very* relaxed rules for |
|
318 |
// data types, so we actually need to provide an invalid SQL syntax in order |
|
319 |
// to break it. |
|
320 |
// @see https://www.sqlite.org/datatype3.html |
|
317 | 321 |
$prior_field = $field; |
318 |
$field['settings']['max_length'] = -1;
|
|
322 |
$field['settings']['max_length'] = '-1)';
|
|
319 | 323 |
try { |
320 | 324 |
field_update_field($field); |
321 | 325 |
$this->fail(t('Update succeeded.')); |
drupal7/modules/field/modules/list/list.info | ||
---|---|---|
7 | 7 |
dependencies[] = options |
8 | 8 |
files[] = tests/list.test |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
drupal7/modules/field/modules/list/tests/list_test.info | ||
---|---|---|
5 | 5 |
version = VERSION |
6 | 6 |
hidden = TRUE |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/field/modules/number/number.info | ||
---|---|---|
6 | 6 |
dependencies[] = field |
7 | 7 |
files[] = number.test |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/field/modules/options/options.info | ||
---|---|---|
6 | 6 |
dependencies[] = field |
7 | 7 |
files[] = options.test |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/field/modules/text/text.info | ||
---|---|---|
7 | 7 |
files[] = text.test |
8 | 8 |
required = TRUE |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
drupal7/modules/field/tests/field_test.info | ||
---|---|---|
6 | 6 |
version = VERSION |
7 | 7 |
hidden = TRUE |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/field_ui/field_ui.info | ||
---|---|---|
6 | 6 |
dependencies[] = field |
7 | 7 |
files[] = field_ui.test |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/file/file.info | ||
---|---|---|
6 | 6 |
dependencies[] = field |
7 | 7 |
files[] = tests/file.test |
8 | 8 |
|
9 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
10 |
version = "7.74"
|
|
9 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
10 |
version = "7.77"
|
|
11 | 11 |
project = "drupal" |
12 |
datestamp = "1605718477" |
|
12 |
datestamp = "1607003447" |
drupal7/modules/file/file.module | ||
---|---|---|
281 | 281 |
} |
282 | 282 |
// Otherwise just add the new content class on a placeholder. |
283 | 283 |
else { |
284 |
$form['#suffix'] .= '<span class="ajax-new-content"></span>';
|
|
284 |
$form['#suffix'] = (isset($form['#suffix']) ? $form['#suffix'] : '') . '<span class="ajax-new-content"></span>';
|
|
285 | 285 |
} |
286 | 286 |
|
287 |
$form['#prefix'] .= theme('status_messages'); |
|
287 |
$form['#prefix'] = (isset($form['#prefix']) ? $form['#prefix'] : '') . theme('status_messages'); |
|
288 |
|
|
288 | 289 |
$output = drupal_render($form); |
289 | 290 |
$js = drupal_add_js(); |
290 | 291 |
$settings = drupal_array_merge_deep_array($js['settings']['data']); |
drupal7/modules/file/tests/file_module_test.info | ||
---|---|---|
5 | 5 |
core = 7.x |
6 | 6 |
hidden = TRUE |
7 | 7 |
|
8 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
9 |
version = "7.74"
|
|
8 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
9 |
version = "7.77"
|
|
10 | 10 |
project = "drupal" |
11 |
datestamp = "1605718477" |
|
11 |
datestamp = "1607003447" |
drupal7/modules/filter/filter.info | ||
---|---|---|
7 | 7 |
required = TRUE |
8 | 8 |
configure = admin/config/content/formats |
9 | 9 |
|
10 |
; Information added by Drupal.org packaging script on 2020-11-18
|
|
11 |
version = "7.74"
|
|
10 |
; Information added by Drupal.org packaging script on 2020-12-03
|
|
11 |
version = "7.77"
|
|
12 | 12 |
project = "drupal" |
13 |
datestamp = "1605718477" |
|
13 |
datestamp = "1607003447" |
Formats disponibles : Unified diff
Udpate to 7.77