/** * Goes trough the directory path and removes empty directories, starting at * the leaf and deleting down until a non empty directory is reached. * If the path is not a directory, nothing will happen. * * @param string $path */ public static function cleanupEmptyDirectories($path) { $dirpath = eZDir::dirpath($path); eZDebugSetting::writeDebug('kernel-clustering', "eZClusterFileHandler::cleanupEmptyDirectories( '{$dirpath}' )"); if (is_dir($dirpath)) { eZDir::cleanupEmptyDirectories($dirpath); } }
<?php /** * File containing the ezie no save & quit menu item handler * * @copyright Copyright (C) eZ Systems AS. * @license For full copyright and license information view LICENSE file distributed with this source code. * @version //autogentag// * @package ezie */ $prepare_action = new eZIEImagePreAction(); // @todo Use the cluster handler code // delete all the images in working directory // delete working directory $working_folder = eZDir::dirpath($prepare_action->getImagePath()); // deletes the working folder recursively eZDir::recursiveDelete($working_folder); // @todo delete the user directory if empty echo json_encode(new StdClass()); eZExecution::cleanExit();
function installTemplates( $templateList, $package, $subdirectory, &$installParameters ) { if ( !$templateList ) { return true; } $siteAccessDesignPathArray = array(); $templateRootPath = $package->path() . '/' . $subdirectory; foreach( $templateList->getElementsByTagName( 'file' ) as $fileNode ) { $originalSiteAccess = $fileNode->getAttribute( 'site-access' ); if ( isset( $installParameters['site_access_map'][$originalSiteAccess] ) ) { $newSiteAccess = $installParameters['site_access_map'][$originalSiteAccess]; } else { $newSiteAccess = $installParameters['site_access_map']['*']; } if ( !isset( $siteAccessDesignPathArray[$newSiteAccess] ) ) { $ini = eZINI::instance( 'site.ini', 'settings', null, null, true ); $ini->prependOverrideDir( "siteaccess/$newSiteAccess", false, 'siteaccess' ); $ini->loadCache(); if ( isset( $installParameters['design_map'] ) ) { $designMap = $installParameters['design_map']; if ( isset( $designMap[$originalSiteAccess] ) ) $siteAccessDesignPathArray[$newSiteAccess] = eZTemplateDesignResource::designStartPath() . '/' . $designMap[$originalSiteAccess]; else $siteAccessDesignPathArray[$newSiteAccess] = eZTemplateDesignResource::designStartPath() . '/' . $designMap['*']; } else { $siteAccessDesignPathArray[$newSiteAccess] = eZTemplateDesignResource::designStartPath() . '/' . $ini->variable( "DesignSettings", "StandardDesign" ); } } $path = ''; foreach( $fileNode->childNodes as $pathNode ) { if ( $pathNode->nodeName == 'path' ) { $path = $pathNode->nodeValue; break; } } $sourcePath = $templateRootPath . $path; $destinationPath = $siteAccessDesignPathArray[$newSiteAccess] . $path; eZDir::mkdir( eZDir::dirpath( $destinationPath ), false, true ); if ( !eZFileHandler::copy( $sourcePath, $destinationPath ) ) return false; // eZDebug::writeNotice( 'Copied: "' . $sourcePath . '" to: "' . $destinationPath . '"', __METHOD__ ); } return true; }
function appendSimpleFile($key, $filepath) { if (!isset($this->Parameters['simple-file-list'])) { $this->Parameters['simple-file-list'] = array(); } $suffix = eZFile::suffix($filepath); //$sourcePath = $fileInfo['original-path']; $packagePath = eZPackage::simpleFilesDirectory() . '/' . substr(md5(mt_rand()), 0, 8) . '.' . $suffix; $destinationPath = $this->path() . '/' . $packagePath; eZDir::mkdir(eZDir::dirpath($destinationPath), false, true); //SP DBfile $fileHandler = eZClusterFileHandler::instance(); $fileHandler->fileFetch($filepath); eZFileHandler::copy($filepath, $destinationPath); $this->Parameters['simple-file-list'][$key] = array('original-path' => $filepath, 'package-path' => $packagePath); }
function modify( $tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters, $placement ) { $config = eZINI::instance( 'pdf.ini' ); switch ( $namedParameters['operation'] ) { case 'toc': { $operatorValue = '<C:callTOC'; if ( count( $operatorParameters ) > 1 ) { $params = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue .= isset( $params['size'] ) ? ':size:'. implode(',', $params['size'] ) : ''; $operatorValue .= isset( $params['dots'] ) ? ':dots:'. $params['dots'] : ''; $operatorValue .= isset( $params['contentText'] ) ? ':contentText:'. $params['contentText'] : ''; $operatorValue .= isset( $params['indent'] ) ? ':indent:'. implode(',', $params['indent'] ) : ''; } $operatorValue .= '>'; eZDebug::writeNotice( 'PDF: Generating TOC', __METHOD__ ); } break; case 'set_font': { $params = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = '<ezCall:callFont'; foreach ( $params as $key => $value ) { if ( $key == 'colorCMYK' ) { $operatorValue .= ':cmyk:' . implode( ',', $value ); } else if ( $key == 'colorRGB' ) { $operatorValue .= ':cmyk:' . implode( ',', eZMath::rgbToCMYK2( $value[0]/255, $value[1]/255, $value[2]/255 ) ); } else { $operatorValue .= ':' . $key . ':' . $value; } } $operatorValue .= '>'; eZDebug::writeNotice( 'PDF: Changed font.' ); } break; case 'table': { $operatorValue = '<ezGroup:callTable'; if ( count( $operatorParameters > 2 ) ) { $tableSettings = $tpl->elementValue( $operatorParameters[2], $rootNamespace, $currentNamespace ); if ( is_array( $tableSettings ) ) { foreach( array_keys( $tableSettings ) as $key ) { switch( $key ) { case 'headerCMYK': case 'cellCMYK': case 'textCMYK': case 'titleCellCMYK': case 'titleTextCMYK': { $operatorValue .= ':' . $key . ':' . implode( ',', $tableSettings[$key] ); } break; default: { $operatorValue .= ':' . $key . ':' . $tableSettings[$key]; } break; } } } } $operatorValue .= '>'; $rows = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $rows = str_replace( array( ' ', "\t", "\r\n", "\n" ), '', $rows ); $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $rows = $codec->convertString( $rows ); $operatorValue .= urlencode( $rows ); $operatorValue .= '</ezGroup:callTable><C:callNewLine>'; eZDebug::writeNotice( 'PDF: Added table to PDF', __METHOD__ ); } break; case 'header': { $header = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $header['text'] = str_replace( array( ' ', "\t", "\r\n", "\n" ), '', $header['text'] ); $operatorValue = '<ezCall:callHeader:level:'. $header['level'] .':size:'. $header['size']; if ( isset( $header['align'] ) ) { $operatorValue .= ':justification:'. $header['align']; } if ( isset( $header['font'] ) ) { $operatorValue .= ':fontName:'. $header['font']; } $operatorValue .= ':label:'. rawurlencode( $header['text'] ); $operatorValue .= '><C:callNewLine>'. $header['text'] .'</ezCall:callHeader><C:callNewLine>'; eZDebug::writeNotice( 'PDF: Added header: '. $header['text'] .', size: '. $header['size'] . ', align: '. $header['align'] .', level: '. $header['level'], __METHOD__ ); } break; case 'create': { $this->createPDF(); } break; case 'new_line': case 'newline': // Deprecated { $operatorValue = '<C:callNewLine>'; } break; case 'new_page': case 'newpage': // Deprecated { $operatorValue = '<C:callNewPage><C:callNewLine>'; eZDebug::writeNotice( 'PDF: New page', __METHOD__ ); } break; case 'image': { $image = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $width = isset( $image['width'] ) ? $image['width']: 100; $height = isset( $image['height'] ) ? $image['height']: 100; $operatorValue = '<C:callImage:src:'. rawurlencode( $image['src'] ) .':width:'. $width .':height:'. $height; if ( isset( $image['static'] ) ) { $operatorValue .= ':static:' . $image['static']; } if ( isset ( $image['x'] ) ) { $operatorValue .= ':x:' . $image['x']; } if ( isset( $image['y'] ) ) { $operatorValue .= ':y:' . $image['y']; } if ( isset( $image['dpi'] ) ) { $operatorValue .= ':dpi:' . $image['dpi']; } if ( isset( $image['align'] ) ) // left, right, center, full { $operatorValue .= ':align:' . $image['align']; } $operatorValue .= '>'; eZDebug::writeNotice( 'PDF: Added Image '.$image['src'].' to PDF file', __METHOD__ ); } break; case 'anchor': { $name = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = '<C:callAnchor:'. $name['name'] .':FitH:>'; eZDebug::writeNotice( 'PDF: Added anchor: '.$name['name'], __METHOD__ ); } break; case 'link': // external link { $link = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $link['text'] = str_replace( '"', '"', $link['text'] ); $operatorValue = '<c:alink:'. rawurlencode( $link['url'] ) .'>'. $link['text'] .'</c:alink>'; eZDebug::writeNotice( 'PDF: Added link: '. $link['text'] .', url: '.$link['url'], __METHOD__ ); } break; case 'stream': { $this->PDF->ezStream(); } case 'close': { $filename = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); eZDir::mkdir( eZDir::dirpath( $filename ), false, true ); $file = eZClusterFileHandler::instance( $filename ); $file->storeContents( $this->PDF->ezOutput(), 'viewcache', 'pdf' ); eZDebug::writeNotice( 'PDF file closed and saved to '. $filename, __METHOD__ ); } break; case 'strike': { $text = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = '<c:strike>'. $text .'</c:strike>'; eZDebug::writeNotice( 'Striked text added to PDF: "'. $text .'"', __METHOD__ ); } break; /* usage : execute/add text to pdf file, pdf(execute,<text>) */ case 'execute': { $text = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( count ( $operatorParameters ) > 2 ) { $options = $tpl->elementValue( $operatorParameters[2], $rootNamespace, $currentNamespace ); $size = isset( $options['size'] ) ? $options['size'] : $config->variable( 'PDFGeneral', 'Format' ); $orientation = isset( $options['orientation'] ) ? $options['orientation'] : $config->variable( 'PDFGeneral', 'Orientation' ); $this->createPDF( $size, $orientation ); } else { $this->createPDF( $config->variable( 'PDFGeneral', 'Format' ), $config->variable( 'PDFGeneral', 'Orientation' ) ); } $text = str_replace( array( ' ', "\n", "\t" ), '', $text ); $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $text = $codec->convertString( $text ); $this->PDF->ezText( $text ); eZDebug::writeNotice( 'Execute text in PDF, length: "'. strlen( $text ) .'"', __METHOD__ ); } break; case 'page_number': case 'pageNumber': { $numberDesc = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( isset( $numberDesc['identifier'] ) ) { $identifier = $numberDesc['identifier']; } else { $identifier = 'main'; } if ( isset( $numberDesc['start'] ) ) { $operatorValue = '<C:callStartPageCounter:start:'. $numberDesc['start'] .':identifier:'. $identifier .'>'; } else if ( isset( $numberDesc['stop'] ) ) { $operatorValue = '<C:callStartPageCounter:stop:1:identifier:'. $identifier .'>'; } } break; /* usage {pdf( line, hash( x1, <x>, y1, <y>, x2, <x2>, y2, <y2>, pages, <all|current>, thickness, <1..100>, ) )} */ case 'line': { $lineDesc = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( isset( $lineDesc['pages']) and $lineDesc['pages'] == 'all' ) { $operatorValue = '<ezGroup:callLine'; } else { $operatorValue = '<C:callDrawLine'; } $operatorValue .= ':x1:' . $lineDesc['x1']; $operatorValue .= ':x2:' . $lineDesc['x2']; $operatorValue .= ':y1:' . $lineDesc['y1']; $operatorValue .= ':y2:' . $lineDesc['y2']; $operatorValue .= ':thickness:' . ( isset( $lineDesc['thickness'] ) ? $lineDesc['thickness'] : '1' ); $operatorValue .= '>'; if ( $lineDesc['pages'] == 'all' ) { $operatorValue .= '___</ezGroup:callLine>'; } return $operatorValue; } break; case 'footer_block': case 'header_block': { $frameDesc = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = '<ezGroup:callBlockFrame'; $operatorValue .= ':location:'. $namedParameters['operation']; $operatorValue .= '>'; if ( isset( $frameDesc['block_code'] ) ) { $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $frameDesc['block_code'] = $codec->convertString( $frameDesc['block_code'] ); $operatorValue .= urlencode( $frameDesc['block_code'] ); } $operatorValue .= '</ezGroup:callBlockFrame>'; eZDebug::writeNotice( 'PDF: Added Block '.$namedParameters['operation'] .': '.$operatorValue, __METHOD__ ); return $operatorValue; } break; /* deprecated */ case 'footer': case 'frame_header': { $frameDesc = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = '<ezGroup:callFrame'; $operatorValue .= ':location:'. $namedParameters['operation']; if ( $namedParameters['operation'] == 'footer' ) { $frameType = 'Footer'; } else if( $namedParameters['operation'] == 'frame_header' ) { $frameType = 'Header'; } if ( isset( $frameDesc['align'] ) ) { $operatorValue .= ':justification:'. $frameDesc['align']; } if ( isset( $frameDesc['page'] ) ) { $operatorValue .= ':page:'. $frameDesc['page']; } else { $operatorValue .= ':page:all'; } $operatorValue .= ':newline:' . ( isset( $frameDesc['newline'] ) ? $frameDesc['newline'] : 0 ); $operatorValue .= ':pageOffset:'; if ( isset( $frameDesc['pageOffset'] ) ) { $operatorValue .= $frameDesc['pageOffset']; } else { $operatorValue .= $this->Config->variable( $frameType, 'PageOffset' ); } if ( isset( $frameDesc['size'] ) ) { $operatorValue .= ':size:'. $frameDesc['size']; } if ( isset( $frameDesc['font'] ) ) { $operatorValue .= ':font:'. $frameDesc['font']; } $operatorValue .= '>'; if ( isset( $frameDesc['text'] ) ) { $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $frameDesc['text'] = $codec->convertString( $frameDesc['text'] ); $operatorValue .= urlencode( $frameDesc['text'] ); } $operatorValue .= '</ezGroup:callFrame>'; if ( isset( $frameDesc['margin'] ) ) { $operatorValue .= '<C:callFrameMargins'; $operatorValue .= ':identifier:'. $namedParameters['operation']; $operatorValue .= ':topMargin:'; if ( isset( $frameDesc['margin']['top'] ) ) { $operatorValue .= $frameDesc['margin']['top']; } else { $operatorValue .= $this->Config->variable( $frameType, 'TopMargin' ); } $operatorValue .= ':bottomMargin:'; if ( isset( $frameDesc['margin']['bottom'] ) ) { $operatorValue .= $frameDesc['margin']['bottom']; } else { $operatorValue .= $this->Config->variable( $frameType, 'BottomMargin' ); } $operatorValue .= ':leftMargin:'; if ( isset( $frameDesc['margin']['left'] ) ) { $operatorValue .= $frameDesc['margin']['left']; } else { $operatorValue .= $this->Config->variable( $frameType, 'LeftMargin' ); } $operatorValue .= ':rightMargin:'; if ( isset( $frameDesc['margin']['right'] ) ) { $operatorValue .= $frameDesc['margin']['right']; } else { $operatorValue .= $this->Config->variable( $frameType, 'RightMargin' ); } $operatorValue .= ':height:'; if ( isset( $frameDesc['margin']['height'] ) ) { $operatorValue .= $frameDesc['margin']['height']; } else { $operatorValue .= $this->Config->variable( $frameType, 'Height' ); } $operatorValue .= '>'; } if ( isset( $frameDesc['line'] ) ) { $operatorValue .= '<C:callFrameLine'; $operatorValue .= ':location:'. $namedParameters['operation']; $operatorValue .= ':margin:'; if( isset( $frameDesc['line']['margin'] ) ) { $operatorValue .= $frameDesc['line']['margin']; } else { $operatorValue .= $this->Config->variable( $frameType, 'LineMargin' ); } if ( isset( $frameDesc['line']['leftMargin'] ) ) { $operatorValue .= ':leftMargin:'. $frameDesc['line']['leftMargin']; } if ( isset( $frameDesc['line']['rightMargin'] ) ) { $operatorValue .= ':rightMargin:'. $frameDesc['line']['rightMargin']; } $operatorValue .= ':pageOffset:'; if ( isset( $frameDesc['line']['pageOffset'] ) ) { $operatorValue .= $frameDesc['line']['pageOffset']; } else { $operatorValue .= $this->Config->variable( $frameType, 'PageOffset' ); } $operatorValue .= ':page:'; if ( isset( $frameDesc['line']['page'] ) ) { $operatorValue .= $frameDesc['line']['page']; } else { $operatorValue .= $this->Config->variable( $frameType, 'Page' ); } $operatorValue .= ':thickness:'; if ( isset( $frameDesc['line']['thickness'] ) ) { $operatorValue .= $frameDesc['line']['thickness']; } else { $operatorValue .= $this->Config->variable( $frameType, 'LineThickness' ); } $operatorValue .= '>'; } eZDebug::writeNotice( 'PDF: Added frame '.$frameType .': '.$operatorValue, __METHOD__ ); } break; case 'frontpage': { $pageDesc = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $align = isset( $pageDesc['align'] ) ? $pageDesc['align'] : 'center'; $text = isset( $pageDesc['text'] ) ? $pageDesc['text'] : ''; $top_margin = isset( $pageDesc['top_margin'] ) ? $pageDesc['top_margin'] : 100; $operatorValue = '<ezGroup:callFrontpage:justification:'. $align .':top_margin:'. $top_margin; if ( isset( $pageDesc['size'] ) ) { $operatorValue .= ':size:'. $pageDesc['size']; } $text = str_replace( array( ' ', "\t", "\r\n", "\n" ), '', $text ); $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $text = $codec->convertString( $text ); $operatorValue .= '>'. urlencode( $text ) .'</ezGroup:callFrontpage>'; eZDebug::writeNotice( 'Added content to frontpage: '. $operatorValue, __METHOD__ ); } break; /* usage: pdf(set_margin( hash( left, <left_margin>, right, <right_margin>, x, <x offset>, y, <y offset> ))) */ case 'set_margin': { $operatorValue = '<C:callSetMargin'; $options = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); foreach( array_keys( $options ) as $key ) { $operatorValue .= ':' . $key . ':' . $options[$key]; } $operatorValue .= '>'; eZDebug::writeNotice( 'Added new margin/offset setup: ' . $operatorValue ); return $operatorValue; } break; /* add keyword to pdf document */ case 'keyword': { $text = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $text = str_replace( array( ' ', "\n", "\t" ), '', $text ); $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $text = $codec->convertString( $text ); $operatorValue = '<C:callKeyword:'. rawurlencode( $text ) .'>'; } break; /* add Keyword index to pdf document */ case 'createIndex': case 'create_index': { $operatorValue = '<C:callIndex>'; eZDebug::writeNotice( 'Adding Keyword index to PDF', __METHOD__ ); } break; case 'ul': { $text = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( count( $operatorParameters ) > 2 ) { $params = $tpl->elementValue( $operatorParameters[2], $rootNamespace, $currentNamespace ); } else { $params = array(); } if ( isset( $params['rgb'] ) ) { $params['rgb'] = eZMath::normalizeColorArray( $params['rgb'] ); $params['cmyk'] = eZMath::rgbToCMYK2( $params['rgb'][0]/255, $params['rgb'][1]/255, $params['rgb'][2]/255 ); } if ( !isset( $params['cmyk'] ) ) { $params['cmyk'] = eZMath::rgbToCMYK2( 0, 0, 0 ); } if ( !isset( $params['radius'] ) ) { $params['radius'] = 2; } if ( !isset ( $params['pre_indent'] ) ) { $params['pre_indent'] = 0; } if ( !isset ( $params['indent'] ) ) { $params['indent'] = 2; } if ( !isset ( $params['yOffset'] ) ) { $params['yOffset'] = -1; } $operatorValue = '<C:callCircle' . ':pages:current' . ':x:-1' . ':yOffset:' . $params['yOffset'] . ':y:-1' . ':indent:' . $params['indent'] . ':pre_indent:' . $params['pre_indent'] . ':radius:' . $params['radius'] . ':cmyk:' . implode( ',', $params['cmyk'] ) . '>'; $operatorValue .= '<C:callSetMargin' . ':delta_left:' . ( $params['indent'] + $params['radius'] * 2 + $params['pre_indent'] ) . '>'; $operatorValue .= $text; $operatorValue .= '<C:callSetMargin' . ':delta_left:' . -1 * ( $params['indent'] + $params['radius'] * 2 + $params['pre_indent'] ) . '>'; } break; case 'filled_circle': { $operatorValue = ''; $options = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( !isset( $options['pages'] ) ) { $options['pages'] = 'current'; } if ( !isset( $options['x'] ) ) { $options['x'] = -1; } if ( !isset( $options['y'] ) ) { $options['y'] = -1; } if ( isset( $options['rgb'] ) ) { $options['rgb'] = eZMath::normalizeColorArray( $options['rgb'] ); $options['cmyk'] = eZMath::rgbToCMYK2( $options['rgb'][0]/255, $options['rgb'][1]/255, $options['rgb'][2]/255 ); } $operatorValue = '<C:callCircle' . ':pages:' . $options['pages'] . ':x:' . $options['x'] . ':y:' . $options['y'] . ':radius:' . $options['radius']; if ( isset( $options['cmyk'] ) ) { $operatorValue .= ':cmyk:' . implode( ',', $options['cmyk'] ); } $operatorValue .= '>'; eZDebug::writeNotice( 'PDF Added circle: ' . $operatorValue ); return $operatorValue; } break; case 'rectangle': { $operatorValue = ''; $options = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( !isset( $options['pages'] ) ) { $options['pages'] = 'current'; } if ( !isset( $options['line_width'] ) ) { $options['line_width'] = 1; } if ( !isset( $options['round_corner'] ) ) { $options['round_corner'] = false; } $operatorValue = '<C:callRectangle'; foreach ( $options as $key => $value ) { if ( $key == 'rgb' ) { $options['rgb'] = eZMath::normalizeColorArray( $options['rgb'] ); $operatorValue .= ':cmyk:' . implode( ',', eZMath::rgbToCMYK2( $options['rgb'][0]/255, $options['rgb'][1]/255, $options['rgb'][2]/255 ) ); } else if ( $key == 'cmyk' ) { $operatorValue .= ':cmyk:' . implode( ',', $value ); } else { $operatorValue .= ':' . $key . ':' . $value; } } $operatorValue .= '>'; eZDebug::writeNotice( 'PDF Added rectangle: ' . $operatorValue ); return $operatorValue; } break; /* usage: pdf( filled_rectangle, hash( 'x', <x offset>, 'y' => <y offset>, 'width' => <width>, 'height' => <height>, 'pages', <'all'|'current'|odd|even>, (supported, current) 'rgb', array( <r>, <g>, <b> ), 'cmyk', array( <c>, <m>, <y>, <k> ), 'rgbTop', array( <r>, <b>, <g> ), 'rgbBottom', array( <r>, <b>, <g> ), 'cmykTop', array( <c>, <m>, <y>, <k> ), 'cmykBottom', array( <c>, <m>, <y>, <k> ) ) ) */ case 'filled_rectangle': { $operatorValue = ''; $options = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); if ( !isset( $options['pages'] ) ) { $options['pages'] = 'current'; } if ( isset( $options['rgb'] ) ) { $options['rgb'] = eZMath::normalizeColorArray( $options['rgb'] ); $options['cmyk'] = eZMath::rgbToCMYK2( $options['rgb'][0]/255, $options['rgb'][1]/255, $options['rgb'][2]/255 ); } if ( isset( $options['cmyk'] ) ) { $options['cmykTop'] = $options['cmyk']; $options['cmykBottom'] = $options['cmyk']; } if ( !isset( $options['cmykTop'] ) ) { if ( isset( $options['rgbTop'] ) ) { $options['rgbTop'] = eZMath::normalizeColorArray( $options['rgbTop'] ); $options['cmykTop'] = eZMath::rgbToCMYK2( $options['rgbTop'][0]/255, $options['rgbTop'][1]/255, $options['rgbTop'][2]/255 ); } else { $options['cmykTop'] = eZMath::rgbToCMYK2( 0, 0, 0 ); } } if ( !isset( $options['cmykBottom'] ) ) { if ( isset( $options['rgbBottom'] ) ) { $options['rgbBottom'] = eZMath::normalizeColorArray( $options['rgbBottom'] ); $options['cmykBottom'] = eZMath::rgbToCMYK2( $options['rgbBottom'][0]/255, $options['rgbBottom'][1]/255, $options['rgbBottom'][2]/255 ); } else { $options['cmykBottom'] = eZMath::rgbToCMYK2( 0, 0, 0 ); } } if ( !isset( $options['pages'] ) ) { $options['pages'] = 'current'; } $operatorValue = '<C:callFilledRectangle' . ':pages:' . $options['pages'] . ':x:' . $options['x'] . ':y:' . $options['y'] . ':width:' . $options['width'] . ':height:' . $options['height'] . ':cmykTop:' . implode( ',', $options['cmykTop'] ) . ':cmykBottom:' . implode( ',', $options['cmykBottom'] ) . '>'; eZDebug::writeNotice( 'Added rectangle: ' . $operatorValue ); } break; /* usage : pdf(text, <text>, array( 'font' => <fontname>, 'size' => <fontsize> )) */ case 'text': { $text = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = ''; $changeFont = false; if ( count( $operatorParameters ) >= 3) { $textSettings = $tpl->elementValue( $operatorParameters[2], $rootNamespace, $currentNamespace ); if ( isset( $textSettings ) ) { $operatorValue .= '<ezCall:callText'; $changeFont = true; if ( isset( $textSettings['font'] ) ) { $operatorValue .= ':font:'. $textSettings['font']; } if ( isset( $textSettings['size'] ) ) { $operatorValue .= ':size:'. $textSettings['size']; } if ( isset( $textSettings['align'] ) ) { $operatorValue .= ':justification:'. $textSettings['align']; } if ( isset( $textSettings['rgb'] ) ) { $textSettings['cmyk'] = eZMath::rgbToCMYK2( $textSettings['rgb'][0]/255, $textSettings['rgb'][1]/255, $textSettings['rgb'][2]/255 ); } if ( isset( $textSettings['cmyk'] ) ) { $operatorValue .= ':cmyk:' . implode( ',', $textSettings['cmyk'] ); } $operatorValue .= '>'; } } $operatorValue .= $text; if ( $changeFont ) { $operatorValue .= '</ezCall:callText>'; } } break; case 'text_box': { $parameters = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = '<ezGroup:callTextBox'; foreach( array_keys( $parameters ) as $key ) { if ( $key != 'text' ) { $operatorValue .= ':' . $key . ':' . urlencode( $parameters[$key] ); } } $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $parameters['text'] = $codec->convertString( $parameters['text'] ); $operatorValue .= '>'; $operatorValue .= urlencode( $parameters['text'] ); $operatorValue .= '</ezGroup:callTextBox>'; return $operatorValue; } break; case 'text_frame': { $text = $tpl->elementValue( $operatorParameters[1], $rootNamespace, $currentNamespace ); $operatorValue = ''; $changeFont = false; if ( count( $operatorParameters ) >= 3) { $textSettings = $tpl->elementValue( $operatorParameters[2], $rootNamespace, $currentNamespace ); if ( isset( $textSettings ) ) { $operatorValue .= '<ezGroup:callTextFrame'; $changeFont = true; foreach ( array_keys( $textSettings ) as $key ) //settings, padding (left, right, top, bottom), textcmyk, framecmyk { if ( $key == 'frameCMYK' ) { $operatorValue .= ':frameCMYK:' . implode( ',', $textSettings['frameCMYK'] ); } else if ( $key == 'frameRGB' ) { $operatorValue .= ':frameCMYK:' . implode( ',', eZMath::rgbToCMYK2( $textSettings['frameRGB'][0]/255, $textSettings['frameRGB'][1]/255, $textSettings['frameRGB'][2]/255 ) ); } else if ( $key == 'textCMYK' ) { $operatorValue .= ':textCMYK:' . implode( ',', $textSettings['textCMYK'] ); } else if ( $key == 'textRGB' ) { $operatorValue .= ':textCMYK:' . implode( ',', eZMath::rgbToCMYK2( $textSettings['textRGB'][0]/255, $textSettings['textRGB'][1]/255, $textSettings['textRGB'][2]/255 ) ); } else { $operatorValue .= ':' . $key . ':' . $textSettings[$key]; } } $httpCharset = eZTextCodec::internalCharset(); $outputCharset = $config->hasVariable( 'PDFGeneral', 'OutputCharset' ) ? $config->variable( 'PDFGeneral', 'OutputCharset' ) : 'iso-8859-1'; $codec = eZTextCodec::instance( $httpCharset, $outputCharset ); // Convert current text to $outputCharset (by default iso-8859-1) $text = $codec->convertString( $text ); $operatorValue .= '>' . urlencode( $text ) . '</ezGroup::callTextFrame>'; } } eZDebug::writeNotice( 'Added TextFrame: ' . $operatorValue ); } break; default: { eZDebug::writeError( 'PDF operation "'. $namedParameters['operation'] .'" undefined', __METHOD__ ); } } }
/** * Removes all image alias files which the attribute refers to. * * @param eZContentObjectAttribute * @note If you want to remove the alias information use removeAliases(). */ static function removeAllAliases($contentObjectAttribute) { $handler = $contentObjectAttribute->attribute('content'); if (!$handler->isImageOwner()) { return; } $attributeData = $handler->originalAttributeData(); $files = eZImageFile::fetchForContentObjectAttribute($attributeData['attribute_id'], false); $dirs = array(); foreach ($files as $filepath) { $file = eZClusterFileHandler::instance($filepath); if ($file->exists()) { $file->fileDelete($filepath); $dirs[] = eZDir::dirpath($filepath); } } $dirs = array_unique($dirs); foreach ($dirs as $dirpath) { eZDir::cleanupEmptyDirectories($dirpath); } eZImageFile::removeForContentObjectAttribute($attributeData['attribute_id']); }
/** * Attempt to remove content object 'image' attribute image variations by content object attribute * * @param object $contentClassImageAttribute object of objects of class eZContentObjectAttribute * @param array $class Array of object class identifiers to remove aliases for only these classes. Optional. Defaults to false * @param array $attributes Array of object image attribute identifiers to remove aliases from. Optional. Defaults to false * @param array $aliases Array of object image attribute image aliases to remove. Optional. Defaults to false * * @return bool true if successful, false otherwise * @static */ static function removeByAttribute($contentObjectAttribute = false, $classes = false, $attributes = false, $aliases = false) { if (!is_object($contentObjectAttribute)) { return false; } // Test that content object class attribute identifier matches provided classes if ($classes != false && is_array($classes) && !in_array($contentObjectAttribute->attribute('object')->attribute('class_identifier'), $classes)) { return false; } // Test that content object class attribute identifier matches provided classes if ($attributes != false && is_array($attributes) && !in_array($contentObjectAttribute->attribute('contentclass_attribute_identifier'), $attributes)) { return false; } // Default datatypes to create image alias variations $imageDataTypeStrings = eZINI::instance('bcimagealias.ini')->variable('BCImageAliasSettings', 'ImageDataTypeStringList'); // Check that content object attribute data type string matches allowed datatype settings if (!in_array($contentObjectAttribute->attribute('data_type_string'), $imageDataTypeStrings) || !$contentObjectAttribute->attribute('has_content')) { return false; } $filePaths = array(); $results = array(); $executionOptions = self::executionOptions(); $messageCount = 0; $imageHandler = $contentObjectAttribute->attribute('content'); $aliasList = $imageHandler->aliasList(false); // Do not process the orginal image alias unset($aliasList['original']); if (count($aliasList) == 0) { return false; } // Optional debug output if ($executionOptions['troubleshoot'] && $executionOptions['verboseLevel'] >= 2) { if ($executionOptions['verboseLevel'] >= 3) { self::displayMessage('All attribute image aliases stored in content data text field:', false); self::displayMessage($contentObjectAttribute->attribute('data_text'), "\n"); } if ($executionOptions['verboseLevel'] >= 4) { self::displayMessage('All attribute image aliases stored in content alias list:', false); print_r($aliasList); self::displayMessage('', "\n\n"); } elseif ($executionOptions['verboseLevel'] >= 3) { self::displayMessage('All attribute image aliases stored in content alias list:', false); print_r(array_keys($aliasList)); self::displayMessage('', "\n"); } } $contentObjectID = $contentObjectAttribute->attribute('contentobject_id'); $contentObjectAttributeID = $contentObjectAttribute->attribute('id'); $contentObjectAttributeVersion = $contentObjectAttribute->attribute('version'); if ($contentObjectAttributeVersion === null) { $files = eZImageFile::fetchForContentObjectAttribute($contentObjectAttributeID, true); $dirs = array(); $count = 0; // Iterate over files foreach ($files as $filepath) { // Test $filepath from $files is in contains one of the $aliases items if ($aliases != false && is_array($aliases)) { foreach ($aliases as $alias) { if (!stristr('_' . $alias, $filepath)) { continue 1; } } } $file = eZClusterFileHandler::instance($filepath); if ($file->exists()) { $filePaths[] = $filepath; if (!$executionOptions['dry']) { $file->fileDelete($filepath); $dirs[] = eZDir::dirpath($filepath); } $count++; } } if (!$executionOptions['dry']) { $dirs = array_unique($dirs); foreach ($dirs as $dirpath) { eZDir::cleanupEmptyDirectories($dirpath); } eZImageFile::removeForContentObjectAttribute($contentObjectAttributeID); $message = "Removed datatype " . $contentObjectAttribute->attribute('data_type_string') . "type image alias variation " . $filePaths[$messageCount] . "\n"; } else { $message = "Dry run: Remove datatype " . $contentObjectAttribute->attribute('data_type_string') . "type image alias variation " . $filePaths[$messageCount] . "\n"; } while ($messageCount < $count) { self::scriptIterate($message); $messageCount++; $result = true; } } else { // We loop over each image alias, and look up the file in ezcontentobject_attribute // Only images referenced by one version will be removed foreach ($aliasList as $aliasName => $aliasListAliasItem) { // Test $aliasListAliasItem from $aliasList is in $aliases array if ($aliases != false && is_array($aliases) && !in_array($aliasListAliasItem['name'], $aliases)) { continue; } if ($aliasListAliasItem['is_valid'] && $aliasListAliasItem['name'] != 'original') { $filepath = $aliasListAliasItem['url']; // Calculate appropriate message to Alert user with if (!$executionOptions['dry']) { // Remove the alias variation image file from the attribute dom tree $doc = $imageHandler->ContentObjectAttributeData['DataTypeCustom']['dom_tree']; foreach ($doc->getElementsByTagName('alias') as $aliasNode) { if ($aliasListAliasItem['name'] == $aliasNode->getAttribute('name')) { // Optional debug output if ($executionOptions['troubleshoot']) { self::displayMessage('Removing image alias image variation ' . "'" . $aliasNode->getAttribute('name') . "'" . ' from attribute dom document'); } $aliasNode->parentNode->removeChild($aliasNode); } } $imageHandler->ContentObjectAttributeData['DataTypeCustom']['dom_tree'] = $doc; unset($imageHandler->ContentObjectAttributeData['DataTypeCustom']['alias_list']); $imageHandler->storeDOMTree($doc, true, $contentObjectAttribute); } // Calculate appropriate message to Alert user with if ($executionOptions['dry']) { $message = "Dry run: Calculating removal of datatype " . $contentObjectAttribute->attribute('data_type_string') . "type image alias variation file " . $filepath; } else { $message = "Removed standard datatype " . $contentObjectAttribute->attribute('data_type_string') . "type image alias variation file " . $filepath; } if (!$executionOptions['dry']) { $dirpath = $aliasListAliasItem['dirpath']; $file = eZClusterFileHandler::instance($filepath); if ($file->exists()) { $file->purge(); eZImageFile::removeFilepath($contentObjectAttributeID, $filepath); eZDir::cleanupEmptyDirectories($dirpath); self::scriptIterate($message); $results[] = true; } else { eZDebug::writeError("Image file {$filepath} for alias {$aliasName} does not exist, could not remove from disk", __METHOD__); self::displayMessage("Image file {$filepath} for alias {$aliasName} does not exist, could not remove from disk: " . __METHOD__); } eZContentCacheManager::clearContentCacheIfNeeded($contentObjectID); } else { self::scriptIterate($message); $results[] = true; } } } } // Calculate return results based on execution options and results comparison if (in_array(true, $results) && count($aliasList) == count($results) && !$executionOptions['dry']) { return true; } return false; }