$linkTarget ) { if( isset( $dt[$linkName] ) ) { if( $notArray = Controller::isConcept( $concept, $linkName ) ) $dt[$linkName] = array( $dt[$linkName] ); foreach( $dt[$linkName] as $i => $d ) { $currentURI = formatURI($links[$linkName], $d); if( isset( $mounted[ $currentURI ] ) ) { unset( $dt[$linkName][$i] ); } elseif( isset( $synced[ $d ] ) ) { $dt[$linkName][$i] = $synced[ $d ]; } elseif( isset($data[ $currentURI ]) ) { $value = $data[$currentURI]; unset( $data[ $currentURI ] ); $mounted[ $currentURI ] = true; $dt[$linkName][$i] = prepare( $links[$linkName], $d, $value, $data, $oldIds, $mounted, $synced ); } } if( empty( $dt[$linkName] ) ) unset( $dt[$linkName] ); elseif( $notArray ) $dt[$linkName] = $dt[$linkName][0]; } } return( $dt ); } } $return = array(); if( !isset( $args[0] ) ) $args = array( $args ); foreach( $args as $i => $data ) { foreach( $data as $uri => $dt ) { if( !isset($data[$uri]) ) continue; list( , $concept, $id ) = parseURI( $uri ); unset( $data[$uri] ); $mounted[$uri] = true; $oldIds = array(); $dt = prepare( $concept, $id, $dt, $data, $oldIds, $mounted, $synced ); $result = Controller::put( array( 'concept' => $concept, 'id' => $id ), $dt ); if( !$result ) { $return[ $uri ] = 'ROLLBACK'; unset( $data[$uri] ); continue; } foreach( $result as $ii => $tx ) { if( !isset($tx['order']) ) continue; $oldId = $oldIds[ $tx['order'] ]; if( isset( $oldId ) && $oldId ) { $synced[ $oldId ] = $tx['id']; unset( $oldIds[ $tx['order'] ] ); } $oldURI = formatURI( $tx['concept'], $oldId ); unset( $data[$oldURI] ); $return[ $oldURI ] = !$tx['rollback'] ? $dt ? array( 'id' => $tx['id'] ) : false : 'ROLLBACK';; } } foreach( $data as $oldURI => $oldVal ) $return[ $oldURI ] = 'ROLLBACK'; } echo json_encode( $return ); Controller::closeAll(); // ob_start(); // print "\n"; // print "result: "; // print_r( $result ); // $output = ob_get_clean(); // file_put_contents( "/tmp/prototype.log", $output , FILE_APPEND );