function explainInstallItem( $package, $installItem, $requestedInfo = array( 'name', 'identifier', 'description', 'language_info' ) )
    {
        if ( $installItem['filename'] )
        {
            $explainClassName = in_array( 'name', $requestedInfo );
            $explainClassIdentitier = in_array( 'identifier', $requestedInfo );
            $explainDescription = in_array( 'description', $requestedInfo );
            $explainLanguageInfo = in_array( 'language_info', $requestedInfo );

            $filename = $installItem['filename'];
            $subdirectory = $installItem['sub-directory'];
            if ( $subdirectory )
                $filepath = $subdirectory . '/' . $filename . '.xml';
            else
                $filepath = $filename . '.xml';

            $filepath = $package->path() . '/' . $filepath;

            $dom = $package->fetchDOMFromFile( $filepath );
            if ( $dom )
            {
                $languageInfo = array();

                $content = $dom->documentElement;
                $classIdentifier = $explainClassIdentitier ? $content->getElementsByTagName( 'identifier' )->item( 0 )->textContent : '';

                $className = '';
                if ( $explainClassName )
                {
                    // BC ( <= 3.8 )
                    $classNameNode = $content->getElementsByTagName( 'name' )->item( 0 );

                    if( $classNameNode )
                    {
                        $className = $classNameNode->textContent;
                    }
                    else
                    {
                        // get info about translations.
                        $serializedNameListNode = $content->getElementsByTagName( 'serialized-name-list' )->item( 0 );
                        if( $serializedNameListNode )
                        {
                            $serializedNameList = $serializedNameListNode->textContent;
                            $nameList = new eZContentClassNameList( $serializedNameList );
                            $languageInfo = $explainLanguageInfo ? $nameList->languageLocaleList() : array();
                            $className = $nameList->name();
                        }
                    }
                }

                $description = $explainDescription ? ezpI18n::tr( 'kernel/package', "Content class '%classname' (%classidentifier)", false,
                                                             array( '%classname' => $className,
                                                                    '%classidentifier' => $classIdentifier ) ) : '';
                $explainInfo = array( 'description' => $description,
                                      'language_info' => $languageInfo );
                return $explainInfo;
            }
        }
    }
Exemplo n.º 2
0
 public static function parseClassesDefinition(DOMDocument $dom, array $options = null)
 {
     $classes = array();
     $classNodes = $dom->getElementsByTagName('content-class');
     foreach ($classNodes as $classNode) {
         $serializedNameListNode = $classNode->getElementsByTagName('serialized-name-list')->item(0);
         $serializedNameList = $serializedNameListNode ? $serializedNameListNode->textContent : false;
         $classNameList = new eZContentClassNameList($serializedNameList);
         $classNameList->validate();
         $class = array('name' => $classNameList->name(), 'identifier' => $classNode->getElementsByTagName('identifier')->item(0)->textContent, 'object_name_patter' => is_object($classNode->getElementsByTagName('object-name-pattern')->item(0)) ? $classNode->getElementsByTagName('object-name-pattern')->item(0)->textContent : null, 'is_container' => $classNode->getAttribute('is-container') == 'true', 'attributes' => array());
         $classAttributesNode = $classNode->getElementsByTagName('attributes')->item(0);
         $classAttributeList = $classAttributesNode->getElementsByTagName('attribute');
         foreach ($classAttributeList as $classAttributeNode) {
             $attributeSerializedNameListNode = $classAttributeNode->getElementsByTagName('serialized-name-list')->item(0);
             $attributeSerializedNameListContent = $attributeSerializedNameListNode ? $attributeSerializedNameListNode->textContent : false;
             $attributeSerializedNameList = new eZSerializedObjectNameList($attributeSerializedNameListContent);
             $attributeSerializedNameList->validate();
             $datatypeParameters = array();
             $datatypeParameterNodes = $classAttributeNode->getElementsByTagName('datatype-parameters')->item(0)->childNodes;
             if ($datatypeParameterNodes->length > 0) {
                 // set default value for default-placement parameter for object relation list datatype
                 if ($classAttributeNode->getAttribute('datatype') == 'ezobjectrelationlist') {
                     $datatypeParameters['default-placement'] = '';
                 }
                 foreach ($datatypeParameterNodes as $datatypeParameterNode) {
                     if ($datatypeParameterNode instanceof DOMText) {
                         $value = trim($datatypeParameterNode->textContent);
                         if (strlen($value) > 0) {
                             $datatypeParameters[] = $datatypeParameterNode->textContent;
                         }
                     } else {
                         if ($datatypeParameterNode->tagName == 'class-constraints') {
                             $tmp = array();
                             $classIdentifiers = $classAttributeNode->getElementsByTagName('class-constraint');
                             foreach ($classIdentifiers as $classIdentifier) {
                                 if ($classIdentifier->hasAttribute('class-identifier')) {
                                     $tmp[] = $classIdentifier->getAttribute('class-identifier');
                                 }
                             }
                             asort($tmp);
                             $value = implode(',', $tmp);
                         } elseif ($datatypeParameterNode->tagName == 'options') {
                             $tmp = array();
                             $optionValues = $classAttributeNode->getElementsByTagName('option');
                             foreach ($optionValues as $option) {
                                 if ($option->hasAttribute('id')) {
                                     $tmp[] = $option->getAttribute('id') . ':' . $option->getAttribute('name');
                                 }
                             }
                             asort($tmp);
                             $value = implode(',', $tmp);
                         } else {
                             $value = trim($datatypeParameterNode->textContent);
                         }
                         $datatypeParameters[$datatypeParameterNode->tagName] = $value;
                     }
                 }
             }
             $attribute = array('name' => $attributeSerializedNameList->name(), 'identifier' => $classAttributeNode->getElementsByTagName('identifier')->item(0)->textContent, 'placement' => $classAttributeNode->getElementsByTagName('placement')->item(0)->textContent, 'datatype' => $classAttributeNode->getAttribute('datatype'), 'required' => strtolower($classAttributeNode->getAttribute('required')) == 'true', 'searchable' => strtolower($classAttributeNode->getAttribute('searchable')) == 'true', 'information_collector' => strtolower($classAttributeNode->getAttribute('information-collector')) == 'true', 'translatable' => strtolower($classAttributeNode->getAttribute('translatable')) == 'true', 'datatype_parameters' => $datatypeParameters);
             if (is_array($options) && count($options) > 0) {
                 foreach ($attribute as $key => $value) {
                     if ($key == 'identifier') {
                         continue;
                     }
                     if (isset($options[$key]) === false) {
                         unset($attribute[$key]);
                     }
                 }
             }
             $class['attributes'][$attribute['identifier']] = $attribute;
         }
         ksort($class['attributes']);
         $classes[$class['identifier']] = $class;
     }
     return $classes;
 }