replace more preg_replace callback
git-svn-id: http://piwigo.org/svn/trunk@26972 68402e56-0260-453c-a942-63ccdbb3a9ee
This commit is contained in:
parent
948adde840
commit
fae05b2743
3 changed files with 32 additions and 14 deletions
|
@ -339,6 +339,8 @@ SELECT
|
||||||
id,
|
id,
|
||||||
name, url_name
|
name, url_name
|
||||||
FROM '.TAGS_TABLE;
|
FROM '.TAGS_TABLE;
|
||||||
|
|
||||||
|
global $name_of_tag; // used for preg_replace
|
||||||
$name_of_tag = array();
|
$name_of_tag = array();
|
||||||
$result = pwg_query($query);
|
$result = pwg_query($query);
|
||||||
while ($row=pwg_db_fetch_assoc($result))
|
while ($row=pwg_db_fetch_assoc($result))
|
||||||
|
@ -399,9 +401,9 @@ SELECT
|
||||||
$tags_string = '';
|
$tags_string = '';
|
||||||
if (isset($line['tag_ids']))
|
if (isset($line['tag_ids']))
|
||||||
{
|
{
|
||||||
$tags_string = preg_replace(
|
$tags_string = preg_replace_callback(
|
||||||
'/(\d+)/e',
|
'/(\d+)/',
|
||||||
'isset($name_of_tag["$1"]) ? $name_of_tag["$1"] : "$1"',
|
create_function('$m', 'return isset($name_of_tag[$m[1]]) ? $name_of_tag[$m[1]] : $m[1];'),
|
||||||
str_replace(
|
str_replace(
|
||||||
',',
|
',',
|
||||||
', ',
|
', ',
|
||||||
|
@ -541,6 +543,8 @@ SELECT
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
unset($name_of_tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
// +-----------------------------------------------------------------------+
|
// +-----------------------------------------------------------------------+
|
||||||
|
|
|
@ -582,6 +582,7 @@ SELECT id, id_uppercat, uppercats, rank, global_rank
|
||||||
FROM '.CATEGORIES_TABLE.'
|
FROM '.CATEGORIES_TABLE.'
|
||||||
ORDER BY id_uppercat,rank,name';
|
ORDER BY id_uppercat,rank,name';
|
||||||
|
|
||||||
|
global $cat_map; // used in preg_replace callback
|
||||||
$cat_map = array();
|
$cat_map = array();
|
||||||
|
|
||||||
$current_rank = 0;
|
$current_rank = 0;
|
||||||
|
@ -608,13 +609,16 @@ SELECT id, id_uppercat, uppercats, rank, global_rank
|
||||||
|
|
||||||
$datas = array();
|
$datas = array();
|
||||||
|
|
||||||
|
$cat_map_callback = create_function('$m', 'global $cat_map; return $cat_map[$m[1]]["rank"];');
|
||||||
|
|
||||||
foreach( $cat_map as $id=>$cat )
|
foreach( $cat_map as $id=>$cat )
|
||||||
{
|
{
|
||||||
$new_global_rank = preg_replace(
|
$new_global_rank = preg_replace_callback(
|
||||||
'/(\d+)/e',
|
'/(\d+)/',
|
||||||
"\$cat_map['$1']['rank']",
|
$cat_map_callback,
|
||||||
str_replace(',', '.', $cat['uppercats'] )
|
str_replace(',', '.', $cat['uppercats'] )
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( $cat['rank_changed']
|
if ( $cat['rank_changed']
|
||||||
or $new_global_rank!=$cat['global_rank']
|
or $new_global_rank!=$cat['global_rank']
|
||||||
)
|
)
|
||||||
|
@ -627,6 +631,8 @@ SELECT id, id_uppercat, uppercats, rank, global_rank
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unset($cat_map);
|
||||||
|
|
||||||
mass_updates(
|
mass_updates(
|
||||||
CATEGORIES_TABLE,
|
CATEGORIES_TABLE,
|
||||||
array(
|
array(
|
||||||
|
|
|
@ -35,6 +35,7 @@ UPDATES
|
||||||
Fixed some recent code introductions to make it cleaner to read.
|
Fixed some recent code introductions to make it cleaner to read.
|
||||||
2012-05-01 Made removal of invisible nodes operate in a case-insensitive manner... Thanks Juha P.!
|
2012-05-01 Made removal of invisible nodes operate in a case-insensitive manner... Thanks Juha P.!
|
||||||
2013-10-10 Add preserveStyleTag option
|
2013-10-10 Add preserveStyleTag option
|
||||||
|
2014-01-26 PHP 5.5 compatibility (/e modifier is deprecated in preg_replace)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('CACHE_CSS', 0);
|
define('CACHE_CSS', 0);
|
||||||
|
@ -124,7 +125,7 @@ class Emogrifier {
|
||||||
$vistedNodes = $vistedNodeRef = array();
|
$vistedNodes = $vistedNodeRef = array();
|
||||||
$nodes = @$xpath->query('//*[@style]');
|
$nodes = @$xpath->query('//*[@style]');
|
||||||
foreach ($nodes as $node) {
|
foreach ($nodes as $node) {
|
||||||
$normalizedOrigStyle = preg_replace('/[A-z\-]+(?=\:)/Se',"strtolower('\\0')", $node->getAttribute('style'));
|
$normalizedOrigStyle = preg_replace_callback('/[A-z\-]+(?=\:)/S',create_function('$m', 'return strtolower($m[0]);'),$node->getAttribute('style'));
|
||||||
|
|
||||||
// in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles
|
// in order to not overwrite existing style attributes in the HTML, we have to save the original HTML styles
|
||||||
$nodeKey = md5($node->getNodePath());
|
$nodeKey = md5($node->getNodePath());
|
||||||
|
@ -299,9 +300,6 @@ class Emogrifier {
|
||||||
'/([^\/]+):last-child/i', // last-child pseudo-selector
|
'/([^\/]+):last-child/i', // last-child pseudo-selector
|
||||||
'/(\w)\[(\w+)\]/', // Matches element with attribute
|
'/(\w)\[(\w+)\]/', // Matches element with attribute
|
||||||
'/(\w)\[(\w+)\=[\'"]?(\w+)[\'"]?\]/', // Matches element with EXACT attribute
|
'/(\w)\[(\w+)\=[\'"]?(\w+)[\'"]?\]/', // Matches element with EXACT attribute
|
||||||
'/(\w+)?\#([\w\-]+)/e', // Matches id attributes
|
|
||||||
'/(\w+|[\*\]])?((\.[\w\-]+)+)/e', // Matches class attributes
|
|
||||||
|
|
||||||
);
|
);
|
||||||
$replace = array(
|
$replace = array(
|
||||||
'/',
|
'/',
|
||||||
|
@ -311,12 +309,14 @@ class Emogrifier {
|
||||||
'*[last()]/self::\\1',
|
'*[last()]/self::\\1',
|
||||||
'\\1[@\\2]',
|
'\\1[@\\2]',
|
||||||
'\\1[@\\2="\\3"]',
|
'\\1[@\\2="\\3"]',
|
||||||
"(strlen('\\1') ? '\\1' : '*').'[@id=\"\\2\"]'",
|
|
||||||
"(strlen('\\1') ? '\\1' : '*').'[contains(concat(\" \",@class,\" \"),concat(\" \",\"'.implode('\",\" \"))][contains(concat(\" \",@class,\" \"),concat(\" \",\"',explode('.',substr('\\2',1))).'\",\" \"))]'",
|
|
||||||
);
|
);
|
||||||
|
|
||||||
$css_selector = '//'.preg_replace($search, $replace, $css_selector);
|
$css_selector = '//'.preg_replace($search, $replace, $css_selector);
|
||||||
|
|
||||||
|
// matches ids and classes
|
||||||
|
$css_selector = preg_replace_callback('/(\w+)?\#([\w\-]+)/', array($this, 'matchIdAttributes'), $css_selector);
|
||||||
|
$css_selector = preg_replace_callback('/(\w+|[\*\]])?((\.[\w\-]+)+)/', array($this, 'matchClassAttributes'), $css_selector);
|
||||||
|
|
||||||
// advanced selectors are going to require a bit more advanced emogrification
|
// advanced selectors are going to require a bit more advanced emogrification
|
||||||
// if we required PHP 5.3 we could do this with closures
|
// if we required PHP 5.3 we could do this with closures
|
||||||
$css_selector = preg_replace_callback('/([^\/]+):nth-child\(\s*(odd|even|[+\-]?\d|[+\-]?\d?n(\s*[+\-]\s*\d)?)\s*\)/i', array($this, 'translateNthChild'), $css_selector);
|
$css_selector = preg_replace_callback('/([^\/]+):nth-child\(\s*(odd|even|[+\-]?\d|[+\-]?\d?n(\s*[+\-]\s*\d)?)\s*\)/i', array($this, 'translateNthChild'), $css_selector);
|
||||||
|
@ -327,6 +327,14 @@ class Emogrifier {
|
||||||
return $this->caches[CACHE_SELECTOR][$xpathkey];
|
return $this->caches[CACHE_SELECTOR][$xpathkey];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function matchIdAttributes($m) {
|
||||||
|
return (strlen($m[1]) ? $m[1] : '*').'[@id="'.$m[2].'"]';
|
||||||
|
}
|
||||||
|
|
||||||
|
private function matchClassAttributes($m) {
|
||||||
|
return (strlen($m[1]) ? $m[1] : '*').'[contains(concat(" ",@class," "),concat(" ","'.implode('"," "))][contains(concat(" ",@class," "),concat(" ","',explode('.',substr($m[2],1))).'"," "))]';
|
||||||
|
}
|
||||||
|
|
||||||
private function translateNthChild($match) {
|
private function translateNthChild($match) {
|
||||||
|
|
||||||
$result = $this->parseNth($match);
|
$result = $this->parseNth($match);
|
||||||
|
|
Loading…
Add table
Reference in a new issue