Esempio n. 1
0
function wikiplugin_img($data, $params)
{
    global $tikidomain, $prefs, $smarty, $userlib, $user;
    $imgdata = array();
    $imgdata['src'] = '';
    $imgdata['id'] = '';
    $imgdata['fileId'] = '';
    $imgdata['randomGalleryId'] = '';
    $imgdata['galleryId'] = '';
    $imgdata['fgalId'] = '';
    $imgdata['sort_mode'] = '';
    $imgdata['attId'] = '';
    $imgdata['thumb'] = '';
    $imgdata['button'] = '';
    $imgdata['link'] = '';
    $imgdata['rel'] = '';
    $imgdata['usemap'] = '';
    $imgdata['height'] = '';
    $imgdata['width'] = '';
    $imgdata['max'] = '';
    $imgdata['imalign'] = '';
    $imgdata['styleimage'] = '';
    $imgdata['align'] = '';
    $imgdata['stylebox'] = '';
    $imgdata['styledesc'] = '';
    $imgdata['block'] = '';
    $imgdata['class'] = '';
    $imgdata['desc'] = '';
    $imgdata['title'] = '';
    $imgdata['metadata'] = '';
    $imgdata['alt'] = '';
    $imgdata['default'] = '';
    $imgdata['mandatory'] = '';
    $imgdata['fromFieldId'] = 0;
    // "private" params set by Tracker_Field_Files
    $imgdata['fromItemId'] = 0;
    // ditto
    $imgdata['checkItemPerms'] = 'y';
    // ditto
    $imgdata['noDrawIcon'] = 'n';
    $imgdata = array_merge($imgdata, $params);
    //function calls
    if (!empty($imgdata['default']) || !empty($imgdata['mandatory'])) {
        require_once 'lib/images/img_plugin_default_and_mandatory.php';
        if (!empty($imgdata['default'])) {
            $imgdata = apply_default_and_mandatory($imgdata, 'default');
            //first process defaults
            $imgdata = array_merge($imgdata, $params);
            //then apply user settings, overriding defaults
        }
        //apply mandatory settings, overriding user settings
        if (!empty($imgdata['mandatory'])) {
            $imgdata = apply_default_and_mandatory($imgdata, 'mandatory');
        }
    }
    //////////////////////////////////////////////////// Error messages and clean javascript //////////////////////////////
    // Must set at least one image identifier
    $set = !empty($imgdata['fileId']) + !empty($imgdata['id']) + !empty($imgdata['src']) + !empty($imgdata['attId']) + !empty($imgdata['randomGalleryId']) + !empty($imgdata['fgalId']);
    if ($set == 0) {
        return tra("''No image specified. One of the following parameters must be set: fileId, randomGalleryId, fgalId, attId, id.''");
    } elseif ($set > 1) {
        return tra("''Use one and only one of the following parameters: fileId, randomGalleryId, fgalId, attId, id, or src.''");
    }
    // Clean up src URLs to exclude javascript
    if (stristr(str_replace(' ', '', $imgdata['src']), 'javascript:')) {
        $imgdata['src'] = '';
    }
    if (strstr($imgdata['src'], 'javascript:')) {
        $imgdata['src'] = '';
    }
    if (!isset($data) or !$data) {
        $data = ' ';
    }
    include_once 'tiki-sefurl.php';
    //////////////////////Process multiple images //////////////////////////////////////
    //Process "|" or "," separated images
    $notice = '<!--' . tra('PluginImg: User lacks permission to view image') . '-->';
    $srcmash = $imgdata['fileId'] . $imgdata['id'] . $imgdata['attId'] . $imgdata['src'];
    if (strpos($srcmash, '|') !== false || strpos($srcmash, ',') !== false || !empty($imgdata['fgalId'])) {
        $separator = '';
        if (!empty($imgdata['id'])) {
            $id = 'id';
        } elseif (!empty($imgdata['fileId'])) {
            $id = 'fileId';
        } elseif (!empty($imgdata['attId'])) {
            $id = 'attId';
        } else {
            $id = 'src';
        }
        if (strpos($imgdata[$id], '|') !== false) {
            $separator = '|';
        } elseif (strpos($imgdata[$id], ',') !== false) {
            $separator = ',';
        }
        $repl = '';
        $id_list = array();
        if (!empty($separator)) {
            $id_list = explode($separator, $imgdata[$id]);
        } else {
            //fgalId parameter - show all images in a file gallery
            $filegallib = TikiLib::lib('filegal');
            $galdata = $filegallib->get_files(0, -1, 'created_desc', '', $imgdata['fgalId'], false, false, false, true, false, false, false, false, '', true, false, false);
            foreach ($galdata['data'] as $filedata) {
                $id_list[] = $filedata['id'];
            }
            $id = 'fileId';
        }
        $params[$id] = '';
        foreach ($id_list as $i => $value) {
            $params[$id] = trim($value);
            $params['fgalId'] = '';
            $repl .= wikiplugin_img($data, $params);
        }
        if (strpos($repl, $notice) !== false) {
            return $repl;
        } else {
            $repl = "\n\r" . '<br style="clear:both" />' . "\r" . $repl . "\n\r" . '<br style="clear:both" />' . "\r";
            return $repl;
            // return the multiple images
        }
    }
    $repl = '';
    //////////////////////Set src for html///////////////////////////////
    //Set variables for the base path for images in file galleries, image galleries and attachments
    global $base_url;
    $absolute_links = !empty(TikiLib::lib('parser')->option['absolute_links']) ? TikiLib::lib('parser')->option['absolute_links'] : false;
    $imagegalpath = ($absolute_links ? $base_url : '') . 'show_image.php?id=';
    $filegalpath = ($absolute_links ? $base_url : '') . 'tiki-download_file.php?fileId=';
    $attachpath = ($absolute_links ? $base_url : '') . 'tiki-download_wiki_attachment.php?attId=';
    //get random image and treat as file gallery image afterwards
    if (!empty($imgdata['randomGalleryId'])) {
        $filegallib = TikiLib::lib('filegal');
        $dbinfo = $filegallib->get_file(0, $imgdata['randomGalleryId']);
        $imgdata['fileId'] = $dbinfo['fileId'];
        $basepath = $prefs['fgal_use_dir'];
    }
    if (empty($imgdata['src'])) {
        if (!empty($imgdata['id'])) {
            $src = $imagegalpath . $imgdata['id'];
        } elseif (!empty($imgdata['fileId'])) {
            $smarty->loadPlugin('smarty_modifier_sefurl');
            $src = smarty_modifier_sefurl($imgdata['fileId'], 'file');
            if ($absolute_links) {
                $src = TikiLib::tikiUrl($src);
            }
        } else {
            //only attachments left
            $src = $attachpath . $imgdata['attId'];
        }
    } elseif (!empty($imgdata['src']) && $absolute_links && !preg_match('|^[a-zA-Z]+:\\/\\/|', $imgdata['src'])) {
        global $base_host, $url_path;
        $src = $base_host . ($imgdata['src'][0] == '/' ? '' : $url_path) . $imgdata['src'];
    } elseif (!empty($imgdata['src']) && $tikidomain && !preg_match('|^https?:|', $imgdata['src'])) {
        $src = preg_replace("~img/wiki_up/~", "img/wiki_up/{$tikidomain}/", $imgdata['src']);
    } elseif (!empty($imgdata['src'])) {
        $src = $imgdata['src'];
    }
    $browse_full_image = $src;
    $srcIsEditable = false;
    ///////////////////////////Get DB info for image size and metadata/////////////////////////////
    if (!empty($imgdata['height']) || !empty($imgdata['width']) || !empty($imgdata['max']) || !empty($imgdata['desc']) || strpos($imgdata['rel'], 'box') !== false || !empty($imgdata['stylebox']) || !empty($imgdata['styledesc']) || !empty($imgdata['button']) || !empty($imgdata['thumb']) || !empty($imgdata['align']) || !empty($imgdata['metadata']) || !empty($imgdata['fileId'])) {
        //Get ID numbers for images in galleries and attachments included in src as url parameter
        //So we can get db info for these too
        $parsed = parse_url($imgdata['src']);
        if (empty($parsed['host']) || !empty($parsed['host']) && strstr($base_url, $parsed['host'])) {
            if (strlen(strstr($imgdata['src'], $imagegalpath)) > 0) {
                $imgdata['id'] = substr(strstr($imgdata['src'], $imagegalpath), strlen($imagegalpath));
            } elseif (strlen(strstr($imgdata['src'], $filegalpath)) > 0) {
                $imgdata['fileId'] = substr(strstr($imgdata['src'], $filegalpath), strlen($filegalpath));
            } elseif (strlen(strstr($imgdata['src'], $attachpath)) > 0) {
                $imgdata['attId'] = substr(strstr($imgdata['src'], $attachpath), strlen($attachpath));
            }
        }
        $imageObj = '';
        require_once 'lib/images/images.php';
        //Deal with images with info in tiki databases (file and image galleries and attachments)
        if (empty($imgdata['randomGalleryId']) && (!empty($imgdata['id']) || !empty($imgdata['fileId']) || !empty($imgdata['attId']))) {
            //Try to get image from database
            if (!empty($imgdata['id'])) {
                global $imagegallib;
                include_once 'lib/imagegals/imagegallib.php';
                $dbinfo = $imagegallib->get_image_info($imgdata['id'], 'o');
                $dbinfo2 = $imagegallib->get_image($imgdata['id'], 'o');
                $dbinfo = isset($dbinfo) && isset($dbinfo2) ? array_merge($dbinfo, $dbinfo2) : array();
                $dbinfot = $imagegallib->get_image_info($imgdata['id'], 't');
                $dbinfot2 = $imagegallib->get_image($imgdata['id'], 't');
                $dbinfot = isset($dbinfot) && isset($dbinfot2) ? array_merge($dbinfot, $dbinfot2) : array();
                $basepath = $prefs['gal_use_dir'];
            } elseif (!isset($dbinfo) && !empty($imgdata['fileId'])) {
                $filegallib = TikiLib::lib('filegal');
                $dbinfo = $filegallib->get_file($imgdata['fileId']);
                $basepath = $prefs['fgal_use_dir'];
            } else {
                //only attachments left
                global $atts;
                global $wikilib;
                include_once 'lib/wiki/wikilib.php';
                $dbinfo = $wikilib->get_item_attachment($imgdata['attId']);
                $basepath = $prefs['w_use_dir'];
            }
            //Give error messages if file doesn't exist, isn't an image. Display nothing if user lacks permission
            if (!empty($imgdata['fileId']) || !empty($imgdata['id']) || !empty($imgdata['attId'])) {
                if (!$dbinfo) {
                    return '^' . tra('File not found.') . '^';
                } elseif (substr($dbinfo['filetype'], 0, 5) != 'image' and !preg_match('/thumbnail/i', $imgdata['fileId'])) {
                    return '^' . tra('File is not an image.') . '^';
                } elseif (!class_exists('Image')) {
                    return '^' . tra('Server does not support image manipulation.') . '^';
                } elseif (!empty($imgdata['fileId'])) {
                    if (!$userlib->user_has_perm_on_object($user, $dbinfo['galleryId'], 'file gallery', 'tiki_p_download_files')) {
                        return $notice;
                    }
                } elseif (!empty($imgdata['id'])) {
                    if (!$userlib->user_has_perm_on_object($user, $dbinfo['galleryId'], 'image gallery', 'tiki_p_view_image_gallery')) {
                        return $notice;
                    }
                } elseif (!empty($imgdata['attId'])) {
                    if (!$userlib->user_has_perm_on_object($user, $dbinfo['page'], 'wiki page', 'tiki_p_wiki_view_attachments')) {
                        return $notice;
                    }
                }
            }
        }
        //finished getting info from db for images in image or file galleries or attachments
        //get image to get height and width and iptc data
        if (!empty($dbinfo['data'])) {
            $imageObj = new Image($dbinfo['data'], false);
            $filename = $dbinfo['filename'];
        } elseif (!empty($dbinfo['path'])) {
            $imageObj = new Image($basepath . $dbinfo['path'], true);
            $filename = $dbinfo['filename'];
        } else {
            $imageObj = new Image($src, true);
            $filename = $src;
        }
        //if we need metadata
        $xmpview = !empty($imgdata['metadata']) ? true : false;
        if ($imgdata['desc'] == 'idesc' || $imgdata['desc'] == 'ititle' || $xmpview) {
            $dbinfoparam = isset($dbinfo) ? $dbinfo : false;
            $metadata = getMetadataArray($imageObj, $dbinfoparam);
            if ($imgdata['desc'] == 'idesc') {
                $idesc = getMetaField($metadata, array('User Data' => 'Description'));
            }
            if ($imgdata['desc'] == 'ititle') {
                $ititle = getMetaField($metadata, array('User Data' => 'Title'));
            }
        }
        $fwidth = '';
        $fheight = '';
        if (isset(TikiLib::lib('parser')->option['indexing']) && TikiLib::lib('parser')->option['indexing']) {
            $fwidth = 1;
            $fheight = 1;
        } else {
            $fwidth = $imageObj->get_width();
            $fheight = $imageObj->get_height();
        }
        //get image gal thumbnail image for height and width
        if (!empty($dbinfot['data']) || !empty($dbinfot['path'])) {
            if (!empty($dbinfot['data'])) {
                $imageObjt = new Image($dbinfot['data'], false);
            } elseif (!empty($dbinfot['path'])) {
                $imageObjt = new Image($basepath . $dbinfot['path'] . '.thumb', true);
            }
            $fwidtht = $imageObjt->get_width();
            $fheightt = $imageObjt->get_height();
        }
        /////////////////////////////////////Add image dimensions to src string////////////////////////////////////////////
        //Use url resizing parameters for file gallery images to set $height and $width
        //since they can affect other elements; overrides plugin parameters
        if (!empty($imgdata['fileId']) && strpos($src, '&') !== false) {
            $urlthumb = strpos($src, '&thumbnail');
            $urlprev = strpos($src, '&preview');
            $urldisp = strpos($src, '&display');
            preg_match('/(?<=\\&max=)[0-9]+(?=.*)/', $src, $urlmax);
            preg_match('/(?<=\\&x=)[0-9]+(?=.*)/', $src, $urlx);
            preg_match('/(?<=\\&y=)[0-9]+(?=.*)/', $src, $urly);
            preg_match('/(?<=\\&scale=)[0]*\\.[0-9]+(?=.*)/', $src, $urlscale);
            if (!empty($urlmax[0]) && $urlmax[0] > 0) {
                $imgdata['max'] = $urlmax[0];
            }
            if (!empty($urlx[0]) && $urlx[0] > 0) {
                $imgdata['width'] = $urlx[0];
            }
            if (!empty($urly[0]) && $urly[0] > 0) {
                $imgdata['height'] = $urly[0];
            }
            if (!empty($urlscale[0]) && $urlscale[0] > 0) {
                $height = floor($urlscale[0] * $fheight);
                $width = floor($urlscale[0] * $fwidth);
                $imgdata['width'] = '';
                $imgdata['height'] = '';
            }
            if ($urlthumb != false && empty($imgdata['height']) && empty($imgdata['width']) && empty($imgdata['max'])) {
                $imgdata['max'] = 120;
            }
            if ($urlprev != false && empty($urlscale[0]) && empty($imgdata['height']) && empty($imgdata['width']) && empty($imgdata['max'])) {
                $imgdata['max'] = 800;
            }
        }
        //Note if image gal url thumb parameter is used
        $imgalthumb = false;
        if (!empty($imgdata['id'])) {
            preg_match('/(?<=\\&thumb=1)[0-9]+(?=.*)/', $src, $urlimthumb);
            if (!empty($urlimthumb[0]) && $urlimthumb[0] > 0) {
                $imgalthumb = true;
            }
        }
        include_once 'lib/mime/mimetypes.php';
        global $mimetypes;
        //Now set dimensions based on plugin parameter settings
        if (!empty($imgdata['max']) || !empty($imgdata['height']) || !empty($imgdata['width']) || !empty($imgdata['thumb'])) {
            // find svg image size
            if (!empty($dbinfo['filetype']) && !empty($mimetypes['svg']) && $dbinfo['filetype'] == $mimetypes['svg']) {
                if (preg_match('/width="(\\d+)" height="(\\d+)"/', $dbinfo['data'], $svgdim)) {
                    $fwidth = $svgdim[1];
                    $fheight = $svgdim[2];
                }
            }
            //Convert % and px in height and width
            $scale = '';
            if (strpos($imgdata['height'], '%') !== false || strpos($imgdata['width'], '%') !== false) {
                if (strpos($imgdata['height'], '%') !== false && strpos($imgdata['width'], '%') !== false && (empty($imgdata['fileId']) || empty($urlx[0]) && empty($urly[0]))) {
                    $imgdata['height'] = floor(rtrim($imgdata['height'], '%') / 100 * $fheight);
                    $imgdata['width'] = floor(rtrim($imgdata['width'], '%') / 100 * $fwidth);
                } elseif (strpos($imgdata['height'], '%') !== false) {
                    if ($imgdata['fileId']) {
                        $scale = rtrim($imgdata['height'], '%') / 100;
                        $height = floor($scale * $fheight);
                    } else {
                        $imgdata['height'] = floor(rtrim($imgdata['height'], '%') / 100 * $fheight);
                    }
                } else {
                    if ($imgdata['fileId']) {
                        $scale = rtrim($imgdata['width'], '%') / 100;
                        $width = floor($scale * $fwidth);
                    } else {
                        $imgdata['width'] = floor(rtrim($imgdata['width'], '%') / 100 * $fwidth);
                    }
                }
            } elseif (strpos($imgdata['height'], 'px') !== false || strpos($imgdata['width'], 'px') !== false) {
                if (strpos($imgdata['height'], 'px') !== false) {
                    $imgdata['height'] = rtrim($imgdata['height'], 'px');
                } else {
                    $imgdata['width'] = rtrim($imgdata['width'], 'px');
                }
            }
            // Adjust for max setting, keeping aspect ratio
            if (!empty($imgdata['max'])) {
                if ($fwidth > $imgdata['max'] || $fheight > $imgdata['max']) {
                    //use image gal thumbs when possible
                    if (!empty($imgdata['id']) && $imgalthumb == false && ($imgdata['max'] < $fwidtht || $imgdata['max'] < $fheightt)) {
                        $src .= '&thumb=1';
                        $imgalthumb == true;
                    }
                    if ($fwidth > $fheight) {
                        $width = $imgdata['max'];
                        $height = floor($width * $fheight / $fwidth);
                    } else {
                        $height = $imgdata['max'];
                        $width = floor($height * $fwidth / $fheight);
                    }
                    //cases where max is set but image is smaller than max
                } else {
                    $height = $fheight;
                    $width = $fwidth;
                }
                // Adjust for user settings for height and width if max isn't set.
            } elseif (!empty($imgdata['height'])) {
                //use image gal thumbs when possible
                if (!empty($imgdata['id']) && $imgalthumb == false && $imgdata['height'] < $fheightt) {
                    $src .= '&thumb=1';
                    $imgalthumb == true;
                }
                $height = $imgdata['height'];
                if (empty($imgdata['width']) && $fheight > 0) {
                    $width = floor($height * $fwidth / $fheight);
                } else {
                    $width = $imgdata['width'];
                }
            } elseif (!empty($imgdata['width'])) {
                //use image gal thumbs when possible
                if (!empty($imgdata['id']) && $imgalthumb == false && $imgdata['width'] < $fwidtht) {
                    $src .= '&thumb=1';
                    $imgalthumb == true;
                }
                $width = $imgdata['width'];
                if (empty($imgdata['height']) && $fwidth > 0) {
                    $height = floor($width * $fheight / $fwidth);
                } else {
                    $height = $imgdata['height'];
                }
                // If not otherwise set, use default setting for thumbnail height if thumb is set
            } elseif ((!empty($imgdata['thumb']) || !empty($urlthumb)) && empty($scale)) {
                if (!empty($imgdata['fileId'])) {
                    $thumbdef = $prefs['fgal_thumb_max_size'];
                } else {
                    $thumbdef = 84;
                }
                //handle image gal thumbs
                if (!empty($imgdata['id']) && !empty($fwidtht) && !empty($fheightt)) {
                    $width = $fwidtht;
                    $height = $fheightt;
                    if ($imgalthumb == false) {
                        $src .= '&thumb=1';
                        $imgalthumb == true;
                    }
                } else {
                    if ($fwidth > $thumbdef || $fheight > $thumbdef) {
                        if ($fwidth > $fheight) {
                            $width = $thumbdef;
                            $height = floor($width * $fheight / $fwidth);
                        } else {
                            $height = $thumbdef;
                            $width = floor($height * $fwidth / $fheight);
                        }
                    }
                }
            }
        }
        //Set final height and width dimension string
        //handle file gallery images separately to use server-side resizing capabilities
        $imgdata_dim = '';
        if (!empty($imgdata['fileId'])) {
            if (empty($urldisp) && empty($urlthumb)) {
                $srcIsEditable = true;
                $src .= '&display';
            }
            if (!empty($scale) && empty($urlscale[0])) {
                $src .= '&scale=' . $scale;
            } elseif (!empty($imgdata['max']) && $imgdata['thumb'] != 'download' && (empty($urlthumb) && empty($urlmax[0]) && empty($urlprev))) {
                $src .= '&max=' . $imgdata['max'];
                $imgdata_dim .= ' width="' . $width . '"';
                $imgdata_dim .= ' height="' . $height . '"';
            } elseif (!empty($width) || !empty($height)) {
                if (!empty($width) && !empty($height) && (empty($urlx[0]) && empty($urly[0]) && empty($urlscale[0]))) {
                    $src .= '&x=' . $width . '&y=' . $height;
                    $imgdata_dim .= ' width="' . $width . '"';
                    $imgdata_dim .= ' height="' . $height . '"';
                } elseif (!empty($width) && (empty($urlx[0]) && empty($urlthumb) && empty($urlscale[0]))) {
                    $src .= '&x=' . $width;
                    $height = $fheight;
                    $imgdata_dim .= ' width="' . $width . '"';
                    $imgdata_dim .= ' height="' . $height . '"';
                } elseif (!empty($height) && (empty($urly[0]) && empty($urlthumb) && empty($urlscale[0]))) {
                    $src .= '&y=' . $height;
                    $imgdata_dim = '';
                    $width = $fwidth;
                }
            } else {
                $imgdata_dim = '';
                $height = $fheight;
                $width = $fwidth;
                if (!empty($width) && !empty($height)) {
                    $imgdata_dim .= ' width="' . $width . '"';
                    $imgdata_dim .= ' height="' . $height . '"';
                }
            }
        } else {
            if (!empty($height)) {
                $imgdata_dim = ' height="' . $height . '"';
            } else {
                $imgdata_dim = '';
                $height = $fheight;
            }
            if (!empty($width)) {
                $imgdata_dim .= ' width="' . $width . '"';
            } else {
                $imgdata_dim = '';
                $width = $fwidth;
            }
        }
    }
    ////////////////////////////////////////// Create the HTML img tag //////////////////////////////////////////////
    //Start tag with src and dimensions
    $src = filter_out_sefurl($src);
    $tagName = '';
    if (!empty($dbinfo['filetype']) && !empty($mimetypes['svg']) && $dbinfo['filetype'] == $mimetypes['svg']) {
        $tagName = 'div';
        $repldata = $dbinfo['data'];
        if (!empty($fwidth) && !empty($fheight) && !empty($imgdata_dim)) {
            // change svg attributes to show at the correct size
            $svgAttributes = $imgdata_dim . ' viewBox="0 0 ' . $fwidth . ' ' . $fheight . '" preserveAspectRatio="xMinYMin meet"';
            $repldata = preg_replace('/width="' . $fwidth . '" height="' . $fheight . '"/', $svgAttributes, $repldata);
        }
        $replimg = '<div type="image/svg+xml" ';
        $imgdata['class'] .= ' svgImage pluginImg' . $imgdata['fileId'];
        $imgdata['class'] = trim($imgdata['class']);
    } else {
        $tagName = 'img';
        $replimg = '<img src="' . $src . '" ';
        $imgdata['class'] .= ' regImage pluginImg' . $imgdata['fileId'];
        $imgdata['class'] = trim($imgdata['class']);
    }
    if (!empty($imgdata_dim)) {
        $replimg .= $imgdata_dim;
    }
    //Create style attribute allowing for shortcut inputs
    //First set alignment string
    $center = 'display:block; margin-left:auto; margin-right:auto;';
    //used to center image and box
    if (!empty($imgdata['imalign'])) {
        $imalign = '';
        if ($imgdata['imalign'] == 'center') {
            $imalign = $center;
        } else {
            $imalign = 'float:' . $imgdata['imalign'] . ';';
        }
    } elseif ($imgdata['stylebox'] == 'border') {
        $imalign = $center;
    }
    //set entire style string
    if (!empty($imgdata['styleimage']) || !empty($imalign)) {
        $border = '';
        $style = '';
        $borderdef = 'border:1px solid darkgray;';
        //default border when styleimage set to border
        if (!empty($imgdata['styleimage'])) {
            if (!empty($imalign)) {
                if (strpos(trim($imgdata['styleimage'], ' '), 'float:') !== false || strpos(trim($imgdata['styleimage'], ' '), 'display:') !== false) {
                    $imalign = '';
                    //override imalign setting if style image contains alignment syntax
                }
            }
            if ($imgdata['styleimage'] == 'border') {
                $border = $borderdef;
            } else {
                if (strpos($imgdata['styleimage'], 'hidden') === false && strpos($imgdata['styleimage'], 'position') === false) {
                    // quick filter for dangerous styles
                    $style = $imgdata['styleimage'];
                }
            }
        }
        $replimg .= ' style="' . $imalign . $border . $style . '"';
    }
    //alt
    if (!empty($imgdata['alt'])) {
        $replimg .= ' alt="' . $imgdata['alt'] . '"';
    } elseif (!empty($imgdata['desc'])) {
        $replimg .= ' alt="' . $imgdata['desc'] . '"';
    } elseif (!empty($dbinfo['description'])) {
        $replimg .= ' alt="' . $dbinfo['description'] . '"';
    } else {
        $replimg .= ' alt="Image"';
    }
    //usemap
    if (!empty($imgdata['usemap'])) {
        $replimg .= ' usemap="#' . $imgdata['usemap'] . '"';
    }
    //class
    if (!empty($imgdata['class'])) {
        $replimg .= ' class="' . $imgdata['class'] . '"';
    }
    //title (also used for description and link title below)
    //first set description, which is used for title if no title is set
    if (!empty($imgdata['desc']) || !empty($imgdata['title'])) {
        $desc = '';
        $imgname = '';
        $desconly = '';
        if (!empty($imgdata['desc'])) {
            //attachment database uses comment instead of description or name
            if (!empty($dbinfo['comment'])) {
                $desc = $dbinfo['comment'];
                $imgname = $dbinfo['comment'];
            } elseif (isset($dbinfo)) {
                $desc = !empty($dbinfo['description']) ? $dbinfo['description'] : '';
                $imgname = !empty($dbinfo['name']) ? $dbinfo['name'] : '';
            }
            switch ($imgdata['desc']) {
                case 'desc':
                    $desconly = $desc;
                    break;
                case 'idesc':
                    $desconly = $idesc;
                    break;
                case 'name':
                    $desconly = $imgname;
                    break;
                case 'ititle':
                    $desconly = $ititle;
                    break;
                case 'namedesc':
                    $desconly = $imgname . (!empty($imgname) && !empty($desc) ? ' - ' : '') . $desc;
                    break;
                default:
                    $desconly = $imgdata['desc'];
            }
        }
        //now set title
        $imgtitle = '';
        $titleonly = '';
        if (!empty($imgdata['title']) || !empty($desconly)) {
            $imgtitle = ' title="';
            if (!empty($imgdata['title'])) {
                switch ($imgdata['title']) {
                    case 'desc':
                        $titleonly = $desc;
                        break;
                    case 'name':
                        $titleonly = $imgname;
                        break;
                    case 'namedesc':
                        $titleonly = $imgname . (!empty($imgname) && !empty($desc) ? ' - ' : '') . $desc;
                        break;
                    default:
                        $titleonly = $imgdata['title'];
                }
                //use desc setting for title if title is empty
            } else {
                $titleonly = $desconly;
            }
            $imgtitle .= $titleonly . '"';
            $replimg .= $imgtitle;
        }
    }
    if (empty($repldata)) {
        $replimg .= ' />' . "\r";
    } else {
        $replimg .= '>' . $repldata . '</' . $tagName . '>';
    }
    ////////////////////////////////////////// Create the HTML link ///////////////////////////////////////////
    //Variable for identifying if javascript mouseover is set
    if ($imgdata['thumb'] == 'mouseover' || $imgdata['thumb'] == 'mousesticky') {
        $javaset = 'true';
    } else {
        $javaset = '';
    }
    // Set link to user setting or to image itself if thumb is set
    if (!empty($imgdata['link']) || !empty($imgdata['thumb']) && !(isset($params['link']) && empty($params['link']))) {
        $mouseover = '';
        if (!empty($imgdata['link'])) {
            $link = $imgdata['link'];
        } elseif (($imgdata['thumb'] == 'browse' || $imgdata['thumb'] == 'browsepopup') && !empty($imgdata['id'])) {
            $link = 'tiki-browse_image.php?imageId=' . $imgdata['id'];
        } elseif ($javaset == 'true') {
            $link = 'javascript:void(0)';
            $popup_params = array('text' => $data, 'width' => $fwidth, 'height' => $fheight, 'background' => $browse_full_image);
            if ($imgdata['thumb'] == 'mousesticky') {
                $popup_params['sticky'] = true;
            }
            $smarty->loadPlugin('smarty_function_popup');
            $mouseover = ' ' . smarty_function_popup($popup_params, $smarty);
        } else {
            if (!empty($imgdata['fileId']) && $imgdata['thumb'] != 'download' && empty($urldisp)) {
                $link = $browse_full_image . '&display';
            } else {
                $link = $browse_full_image;
            }
        }
        if ($imgdata['thumb'] == 'box' && empty($imgdata['rel'])) {
            $imgdata['rel'] = 'box';
        }
        // Set other link-related attributes
        // target
        $imgtarget = '';
        if ($prefs['popupLinks'] == 'y' && (preg_match('#^([a-z0-9]+?)://#i', $link) || preg_match('#^www\\.([a-z0-9\\-]+)\\.#i', $link)) || $imgdata['thumb'] == 'popup' || $imgdata['thumb'] == 'browsepopup') {
            if (!empty($javaset) || $imgdata['rel'] == 'box') {
                $imgtarget = '';
            } else {
                $imgtarget = ' target="_blank"';
            }
        }
        // rel
        !empty($imgdata['rel']) ? $linkrel = ' rel="' . $imgdata['rel'] . '"' : ($linkrel = '');
        // title
        !empty($imgtitle) ? $linktitle = $imgtitle : ($linktitle = '');
        $link = filter_out_sefurl($link);
        //Final link string
        $replimg = "\r\t" . '<a href="' . $link . '" class="internal"' . $linkrel . $imgtarget . $linktitle . $mouseover . '>' . "\r\t\t" . $replimg . "\r\t" . '</a>';
    }
    //Add link string to rest of string
    $repl .= $replimg;
    //////////////////////////Generate metadata dialog box and jquery (dialog icon added in next section)////////////////////////////////////
    if ($imgdata['metadata'] == 'view') {
        //create unique id's in case of multiple pictures
        static $lastval = 0;
        $id_meta = 'imgdialog-' . ++$lastval;
        $id_link = $id_meta . '-link';
        //use metadata stored in file gallery db if available
        include_once 'lib/metadata/metadatalib.php';
        $meta = new FileMetadata();
        $dialog = $meta->dialogTabs($metadata, $id_meta, $id_link, $filename);
        $repl .= $dialog;
    }
    //////////////////////  Create enlarge button, metadata icon, description and their divs////////////////////
    //Start div that goes around button and description if these are set
    if (!empty($imgdata['button']) || !empty($imgdata['desc']) || !empty($imgdata['styledesc']) || !empty($imgdata['metadata'])) {
        //To set room for enlarge button under image if there is no description
        $descheightdef = 'height:17px;clear:left;';
        $repl .= "\r\t" . '<div class="mini" style="width:' . $width . 'px;';
        if (!empty($imgdata['styledesc'])) {
            if ($imgdata['styledesc'] == 'left' || $imgdata['styledesc'] == 'right') {
                $repl .= 'text-align:' . $imgdata['styledesc'] . '">';
            } else {
                $repl .= $imgdata['styledesc'] . '">';
            }
        } elseif (!empty($imgdata['button']) && empty($desconly)) {
            $repl .= $descheightdef . '">';
        } else {
            $repl .= '">';
        }
        //Start description div that also includes enlarge button div
        $repl .= "\r\t\t" . '<div class="thumbcaption">';
        //Enlarge button div and link string (innermost div)
        if (!empty($imgdata['button'])) {
            if (empty($link) || !empty($link) && !empty($javaset)) {
                if (($imgdata['button'] == 'browse' || $imgdata['button'] == 'browsepopup') && !empty($imgdata['id'])) {
                    $link_button = 'tiki-browse_image.php?imageId=' . $imgdata['id'];
                } else {
                    if (!empty($imgdata['fileId']) && $imgdata['button'] != 'download') {
                        $link_button = $browse_full_image . '&display';
                    } elseif (!empty($imgdata['attId']) && $imgdata['thumb'] == 'download') {
                        $link = $browse_full_image . '&download=y';
                    } else {
                        $link_button = $browse_full_image;
                    }
                }
            } else {
                $link_button = $link;
            }
            //Set button rel
            !empty($imgdata['rel']) ? $linkrel_button = ' rel="' . $imgdata['rel'] . '"' : ($linkrel_button = '');
            //Set button target
            if (empty($imgtarget) && (empty($imgdata['thumb']) || !empty($javaset))) {
                if ($imgdata['button'] == 'popup' || $imgdata['button'] == 'browsepopup') {
                    $imgtarget_button = ' target="_blank"';
                } else {
                    $imgtarget_button = '';
                }
            } else {
                $imgtarget_button = $imgtarget;
            }
            $repl .= "\r\t\t\t" . '<div class="magnify" style="float:right">';
            $repl .= "\r\t\t\t\t" . '<a href="' . $link_button . '"' . $linkrel_button . $imgtarget_button;
            $repl .= ' class="internal"';
            if (!empty($titleonly)) {
                $repl .= ' title="' . $titleonly . '"';
            }
            $repl .= ">\r\t\t\t\t" . '<img class="magnify" src="./img/icons/magnifier.png" alt="' . tra('Enlarge') . '" /></a>' . "\r\t\t\t</div>";
        }
        //Add metadata icon
        if ($imgdata['metadata'] == 'view') {
            $repl .= '<div style="float:right; margin-right:2px"><a href="#" id="' . $id_link . '"><img src="./img/icons/tag_orange.png" alt="' . tra('Metadata') . '" title="' . tra('Metadata') . '"/></a></div>';
        }
        //Add description based on user setting (use $desconly from above) and close divs
        isset($desconly) ? $repl .= $desconly : '';
        $repl .= "\r\t\t</div>";
        $repl .= "\r\t</div>";
    }
    ///////////////////////////////Wrap in overall div that includes image if needed////////////////
    //Need a box if any of these are set
    if (!empty($imgdata['button']) || !empty($imgdata['desc']) || !empty($imgdata['metadata']) || !empty($imgdata['stylebox']) || !empty($imgdata['align'])) {
        //Make the div surrounding the image 2 pixels bigger than the image
        if (empty($height)) {
            $height = '';
        }
        if (empty($width)) {
            $width = '';
        }
        $boxwidth = $width + 2;
        $boxheight = $height + 2;
        $alignbox = '';
        $class = '';
        if (!empty($imgdata['align'])) {
            if ($imgdata['align'] == 'center') {
                $alignbox = $center;
            } else {
                $alignbox = 'float:' . $imgdata['align'] . '; margin-' . ($imgdata['align'] == 'left' ? 'right' : 'left') . ':5px;';
            }
        }
        //first set stylebox string if style box is set
        if (!empty($imgdata['stylebox']) || !empty($imgdata['align'])) {
            //create strings from shortcuts first
            if (!empty($imgdata['stylebox'])) {
                if ($imgdata['stylebox'] == 'border') {
                    $class = 'class="imgbox" ';
                    if (!empty($alignbox)) {
                        if (strpos(trim($imgdata['stylebox'], ' '), 'float:') !== false || strpos(trim($imgdata['stylebox'], ' '), 'display:') !== false) {
                            $alignbox = '';
                            //override align setting if stylebox contains alignment syntax
                        }
                    }
                } else {
                    $styleboxinit = $imgdata['stylebox'] . ';';
                }
            }
            if (empty($imgdata['button']) && empty($imgdata['desc']) && empty($styleboxinit)) {
                $styleboxplus = $alignbox . ' width:' . $boxwidth . 'px; height:' . $boxheight . 'px';
            } elseif (!empty($styleboxinit)) {
                if (strpos(trim($imgdata['stylebox'], ' '), 'height:') === false && strpos(trim($imgdata['stylebox'], ' '), 'width:') === false) {
                    $styleboxplus = $styleboxinit . ' width:' . $boxwidth . 'px;';
                } else {
                    $styleboxplus = $styleboxinit;
                }
            } else {
                $styleboxplus = $alignbox . ' width:' . $boxwidth . 'px;';
            }
        } elseif (!empty($imgdata['button']) || !empty($imgdata['desc']) || !empty($imgdata['metadata'])) {
            $styleboxplus = ' width:' . $boxwidth . 'px;';
        }
    }
    if (!empty($styleboxplus)) {
        $repl = "\r" . '<div ' . $class . 'style="' . $styleboxplus . '">' . $repl . "\r" . '</div>';
    }
    //////////////////////////////////////Place 'clear' block///////////////////////////////////////////////////////////
    if (!empty($imgdata['block'])) {
        switch ($imgdata['block']) {
            case 'top':
                $repl = "\n\r<br style=\"clear:both\" />\r" . $repl;
                break;
            case 'bottom':
                $repl = $repl . "\n\r<br style=\"clear:both\" />\r";
                break;
            case 'both':
                $repl = "\n\r<br style=\"clear:both\" />\r" . $repl . "\n\r<br style=\"clear:both\" />\r";
                break;
            case 'top':
                break;
        }
    }
    // Mobile
    if (isset($_REQUEST['mode']) && $_REQUEST['mode'] == 'mobile') {
        $repl = '{img src=' . $src . "\"}\n<p>" . $imgdata['desc'] . '</p>';
    }
    if (!TikiLib::lib('parser')->option['suppress_icons'] && $prefs['feature_draw'] == 'y' && !empty($dbinfo['galleryId']) && $imgdata['noDrawIcon'] !== 'y') {
        global $tiki_p_edit;
        $globalperms = Perms::get(array('type' => 'file gallery', 'object' => $dbinfo['galleryId']));
        if ($imgdata['fromItemId']) {
            if ($imgdata['checkItemPerms'] !== 'n') {
                $perms_Accessor = Perms::get(array('type' => 'tracker item', 'object' => $imgdata['fromItemId']));
                $trackerItemPerms = $perms_Accessor->modify_tracker_items;
            } else {
                $trackerItemPerms = true;
            }
        } else {
            $trackerItemPerms = false;
        }
        if ($globalperms->upload_files == 'y' && (empty($src) == true || $srcIsEditable == true) && ($tiki_p_edit == 'y' || $trackerItemPerms)) {
            if ($prefs['wiki_edit_icons_toggle'] == 'y' && !isset($_COOKIE['wiki_plugin_edit_view']) && !$imgdata['fromItemId']) {
                $iconDisplayStyle = " style=\"display:none;\"";
            } else {
                $iconDisplayStyle = '';
            }
            $jsonParams = json_encode(array_filter($imgdata));
            $repl .= "<a href=\"tiki-edit_draw.php?fileId={$imgdata['fileId']}\" onclick=\"return \$(this).ajaxEditDraw();\" title=\"" . tr("Draw on the Image") . "\"" . " class=\"editplugin pluginImgEdit{$imgdata['fileId']}\" data-fileid=\"{$imgdata['fileId']}\" " . "data-galleryid=\"{$dbinfo['galleryId']}\"{$iconDisplayStyle} data-imgparams='{$jsonParams}'>" . "<img width='16' height='16' class='icon' alt='Edit' src='img/icons/page_edit.png' /></a>";
        }
    }
    return '~np~' . $repl . "\r" . '~/np~';
}
Esempio n. 2
0
function storeFilesLocal($item, $reviewlocation)
{
    if (isset($reviewlocation)) {
        foreach ($item->getComponents()->getList() as $component) {
            if ($component->getContent()->getStorage() === StorageType::INTERNAL_MANAGED) {
                $file["item"] = preg_replace("|^(\\w+:\\d+):\\d+|", '${1}', $item->getObjid());
                //cut version information
                $md = new FileMetadata($component->getMetadataRecords()->get("escidoc")->getContent());
                $file["size"] = $md->getFilesize();
                $file["name"] = $md->getFilename();
                //copy file to harddisc
                $fh = fopen($reviewlocation . '/' . $file["name"], "w");
                set_time_limit(4 * 30);
                fputs($fh, $_SESSION["itemhandler"]->retrieveContent($file["item"], $component->getObjid()));
                fclose($fh);
            }
        }
    }
}
Esempio n. 3
0
 /**
  * Get basic and extended metadata included in the file itself and return as JSON string
  *
  * @param    string         $file              path to file or content of file
  * @param    bool           $ispath            indicates whether $file is a path (true) or the file contents (false)
  * @param    bool           $extended          indicates whether to retrieve extended metadata information
  *
  * @return   string         $filemeta          JSON string of metadata
  */
 function extractMetadataJson($file, $ispath = true, $extended = true)
 {
     include_once 'lib/metadata/metadatalib.php';
     $metadata = new FileMetadata();
     $filemeta = json_encode($metadata->getMetadata($file, $ispath, $extended)->typemeta['best']);
     return $filemeta;
 }
Esempio n. 4
0
 /**
  * @param null $filename
  * @param bool $ispath
  * @param bool $extended
  * @param bool $bestarray
  * @return FileMetadata|null
  */
 function getMetadata($filename = null, $ispath = true, $extended = true, $bestarray = true)
 {
     include_once 'lib/metadata/metadatalib.php';
     if ($filename === null) {
         if (!empty($this->filename)) {
             $filename = $this->filename;
             $ispath = true;
         } elseif (!empty($this->data)) {
             $filename = $this->data;
             $ispath = false;
         }
     }
     if (!is_object($this->metadata) || get_class($this->metadata) != 'FileMetadata') {
         $metadata = new FileMetadata();
         $this->metadata = $metadata->getMetadata($filename, $ispath, $extended);
     }
     return $this->metadata;
 }