- $matches = array();
- preg_match_all('#<\s*(img)[^>]+src="([^"]*)"[^>]*>#Si', $content, $matches, PREG_SET_ORDER);
- foreach($matches as $i => $link) {
- $link[1] = trim($link[1]);
- if (!preg_match('#^(([a-z]+://)|(\#))#', $link[1])) {
- $absolute_path = get_absolute_link($link[2],$url);
- $filename = basename(parse_url($absolute_path, PHP_URL_PATH));
- $directory = create_assets_directory($id);
- $fullpath = $directory . '/' . $filename;
- download_pictures($absolute_path, $fullpath);
- $content = str_replace($matches[$i][2], $fullpath, $content);
+ /**
+ * Changing pictures URL in article content
+ */
+ public static function filterPicture($content, $url, $id)
+ {
+ $matches = array();
+ $processing_pictures = array(); // list of processing image to avoid processing the same pictures twice
+ preg_match_all('#<\s*(img)[^>]+src="([^"]*)"[^>]*>#Si', $content, $matches, PREG_SET_ORDER);
+ foreach($matches as $i => $link) {
+ $link[1] = trim($link[1]);
+ if (!preg_match('#^(([a-z]+://)|(\#))#', $link[1])) {
+ $absolute_path = self::_getAbsoluteLink($link[2], $url);
+ $filename = basename(parse_url($absolute_path, PHP_URL_PATH));
+ $directory = self::_createAssetsDirectory($id);
+ $fullpath = $directory . '/' . $filename;
+
+ if (in_array($absolute_path, $processing_pictures) === true) {
+ // replace picture's URL only if processing is OK : already processing -> go to next picture
+ continue;
+ }
+
+ if (self::_downloadPictures($absolute_path, $fullpath) === true) {
+ $content = str_replace($matches[$i][2], Tools::getPocheUrl() . $fullpath, $content);
+ }
+
+ $processing_pictures[] = $absolute_path;
+ }