_subTemplate !== '' ) { $html = file_get_contents ( $this -> _pathTpl . $this -> _layout . '/tpl_' . $this -> _template . '_' . $this -> _subTemplate . '.php' ); $html = str_replace ( $this -> _renderSearch , $this -> _renderReplace , $html ); $subTpl = new DOMDocument ( ); $subTpl -> preserveWhitespace = false; $subTpl -> formatOutput = true; $subTpl -> loadHTML ( $html ); $subCont = $subTpl -> getElementById ( 'sub_content' ) -> firstChild; $xpath = new DOMXpath ( $subTpl ); /* Textersetzungen */ foreach ( $this -> _langArray [ $this -> _template ] as $key => $value ) { $replaces = $xpath -> query ( "//*[starts-with( . , '%" . $key . "%' )]" ); foreach ( $replaces as $replace ) { if ( $replace -> firstChild -> nodeType === 3 ) { $replace -> replaceChild ( new DOMCdataSection ( $value ) , $replace -> firstChild ); } } } /* Funktionen */ if ( isset ( $popupData[ 'functions' ] ) && ! empty ( $popupData[ 'functions' ] ) ) { foreach ( $popupData[ 'functions' ] as $function ) { if ( $function[ 'position' ] === 'userWebsiteRights' ) { $node = $subTpl -> getElementById ( 'websiteRights' ) -> cloneNode ( true ); $node -> firstChild -> nodeValue = $node -> firstChild -> nodeValue . ': ' . $this -> _website[ $function[ 'key' ] ][ 'names' ]; $node -> removeAttribute ( 'id' ); $node -> setAttributeNode ( new DOMAttr ( 'id' , $function[ 'prefix' ] . 'Rights' ) ); $newNode = $subTpl -> getElementById ( 'websiteRights' ) -> parentNode -> insertBefore ( $node , $subTpl -> getElementById ( 'websiteRights' ) ); /* Elemente ersetzen */ $arr_replaces = array ( 'for' , 'id' , 'name' , 'onclick' ); foreach ( $arr_replaces as $str_replace ) { $replaces = $xpath -> query ( ".//*[contains(@" . $str_replace . " , 'Website')]" , $newNode ); foreach ( $replaces as $replace ) { $attribute = $replace -> getAttribute ( $str_replace ); $replace -> removeAttribute ( $str_replace ); $replace -> setAttributeNode ( new DOMAttr ( $str_replace , str_replace ( 'Website' , $function[ 'prefix' ] , $attribute ) ) ); } } $elem = $xpath -> query ( ".//*[@id='user" . $function[ 'prefix' ] . "Rights_outer']" , $newNode ); $node = $elem -> item( 0 ); } else { $node = $subTpl -> getElementById ( $function[ 'position' ] . '_outer' ); } if ( ! is_null ( $node ) ) { $this -> applyFunction ( $function[ 'name' ] , $function[ 'data' ] , $subTpl , $node , $function[ 'prefix' ] ); } } $node = $subTpl -> getElementById ( 'websiteRights' ); $node -> parentNode -> removeChild ( $node ); } /* Headerdaten */ if ( isset ( $popupData[ 'header' ] ) && ! empty ( $popupData[ 'header' ] ) ) { $header_node = $subTpl -> getElementById ( 'sub_content_header' ); foreach ( $popupData[ 'header' ] as $key => $value ) { $replaces = $xpath -> query ( ".//*[@id='" . $key . "']" , $header_node ); foreach ( $replaces as $replaceNode ) { switch ( $replaceNode -> tagName ) { case 'select' : foreach ( $value as $optionValue => $optionName ) { $option = $subTpl -> createElement ( 'option' ); $option -> setAttributeNode ( new DOMAttr ( 'value' , $optionValue ) ); if ( isset ( $this -> _postData[ $key ] ) && $this -> _postData[ $key ] == $optionValue ) { $option -> setAttributeNode ( new DOMAttr ( 'selected' , 'selected' ) ); } $option -> appendChild ( new DOMText ( $optionName ) ); $replaceNode -> appendChild ( $option ); } break; case 'input' : $replaceNode -> setAttributeNode ( new DOMAttr ( 'value' , $value ) ); $replaceNode -> setAttributeNode ( new DOMAttr ( 'autocomplete' , 'off' ) ); default : break; } } } } $this -> applySortRules ( $subTpl , $subCont , $xpath); /* Ausgabedaten */ if ( isset ( $popupData[ 'main' ] ) && ! empty ( $popupData[ 'main' ] ) ) { $main = $subTpl -> getElementById ( 'sub_content_main' ); $subNode = $main -> firstChild; $testArray = $popupData[ 'main' ][ 0 ]; /* Datenfelder */ $arr_mainKeys = array ( ); foreach ( $testArray as $key => $value ) { $elements = $xpath -> query ( "//*[@data-name='" . $key . "']" , $main ); if ( $elements -> length !== 0 ) { $arr_mainKeys[ ] = $key; } } /* Eingabefelder */ $arr_mainInputs = array ( ); foreach ( $testArray as $key => $value ) { $elements = $xpath -> query ( "//form//*[@name='" . $key . "' or @name='" . $key . "[ ]']" , $main ); if ( $elements -> length !== 0 ) { $arr_mainInputs[ ] = $key; } } /* Hauptdaten */ foreach ( $popupData[ 'main' ] as $dataArray ) { $dataNode = $main -> firstChild -> cloneNode ( true ); /* Schaltflächen ( Links ) für die Bearbeitung in den Übersichtsseiten */ foreach ( $this -> _dataParameter as $key => $new_parameter ) { $data_navigation = $xpath -> query ( ".//*[@data-navigation='" . $key . "']//a" , $dataNode ); if ( $data_navigation -> length !== 0 ) { foreach ( $data_navigation as $navigation_item ) { if ( $navigation_item -> hasAttribute ( 'href' ) ) { $navigation_item -> setAttribute ( 'href' , $navigation_item -> getAttribute ( 'href' ) . '&' . $new_parameter . '=' . $dataArray[ $new_parameter ] ); } } } } /* Spezielle Regeln anwenden */ switch ( $this -> _template ) { /* Aktive - inaktive Elemente Unterscheiden */ case 'usermanagement' : if ( isset ( $dataArray[ 'userActive' ] ) && $dataArray[ 'userActive' ] === 'Y') { $dataNode -> setAttributeNode ( new DOMAttr ( 'class' , 'data_active' ) ); } else { $dataNode -> setAttributeNode ( new DOMAttr ( 'class' , 'data_inactive' ) ); } break; default : break; } /* Werte zuweisen */ foreach ( $arr_mainKeys as $key => $value ) { $elements = $xpath -> query ( ".//*[@data-name='" . $value . "']" , $dataNode ); if ( $elements -> item( 0 ) -> hasChildNodes( ) ) { $elements -> item( 0 ) -> removeChild ( $elements -> item( 0 ) -> firstChild ); } /* TODO : Warum ist ein utf8_encode nötig? Evtl Server - Konfig */ // $elements -> item( 0 ) -> appendChild ( new DOMText ( ( mb_detect_encoding ( $dataArray[ $value ] ) === 'UTF-8' ) ? $dataArray[ $value ] : utf8_encode ( $dataArray[ $value ] ) ) ); $elements -> item( 0 ) -> appendChild ( new DOMText ( $dataArray[ $value ] ) ); } foreach ( $arr_mainInputs as $key => $value ) { $elements = $xpath -> query ( ".//form//*[@name='" . $value . "' or @name='" . $value . "[ ]']" , $dataNode ); foreach ( $elements as $element ) { switch ( $element -> tagName ) { case 'input' : if ( $element -> hasAttribute ( 'type' ) ) { switch ( $element -> getAttribute ( 'type' ) ) { case 'text' : case 'hidden' : $element -> removeAttribute ( 'value' ); $element -> setAttributeNode ( new DOMAttr ( 'value' , $dataArray[ $value ] ) ); break; case 'radio' : if ( $element -> hasAttribute ( 'id' ) && $element -> getAttribute ( 'id' ) === ( $value . '_' . $dataArray[ $value ] ) ) { $element -> setAttributeNode ( new DOMAttr ( 'checked' , 'checked' ) ); } break; case 'checkbox' : if ( is_array ( $dataArray[ $value ] ) ) { if ( $element -> hasAttribute ( 'id' ) && in_array ( $element -> getAttribute ( 'id' ) , $dataArray[ $value ] ) ) { $element -> setAttributeNode ( new DOMAttr ( 'checked' , 'checked' ) ); } } break; default : break; } } else { $element -> removeAttribute ( 'value' ); $element -> setAttributeNode ( new DOMAttr ( 'value' , $dataArray[ $value ] ) ); } break; default : break; } } } $main -> appendChild ( $dataNode ); } $subNode -> parentNode -> removeChild ( $subNode ); } else { /* TODO : Keine Daten */ $oldNode = $subTpl -> getElementById ( 'sub_content_main' ); $oldNode -> parentNode -> removeChild ( $oldNode ); } } /* Fehlermeldungen */ if ( ! is_null ( $this -> _errors ) ) { $main = $subTpl -> getElementById ( 'sub_content_main' ); $subNode = $main -> firstChild; foreach ( $this -> _errors as $error ) { $errorNode = $subTpl -> createElement ( 'p' ); $errorNode -> setAttributeNode ( new DOMAttr ( 'class' , 'error' ) ); $errorNode -> appendChild ( new DOMText ( $this -> _langArray[ 'error' ][ $error ] ) ); $main -> insertBefore ( $errorNode , $subNode); } } $new_node = $this -> _tpl -> importNode ( $subCont , true ); return $new_node; } } ?>