Eirik Alfstad Johansen
|
Tuesday 27 January 2004 1:21:26 am
Hi, I was wondering if anyone had any experience importing images into content object attributes. I'm importing a list of data into content objects, and one of the fields that needs to be stored is an image. I've tried using the saveImage() function in the 2.2 -> 3.x import contribution (http://www.ez.no/community/contributions/import_export/import_script_for_data_import_from_2_2_to_3_x) but I can't get it to work. All it does is store the image in the [storage_dir]/original/image folder, and display an emtpy img tag for the object when viewed. So, if anyone have any classes/function for image import lying around, I would be very grateful! Thanks in advance ! Sincerely, Eirik Johansen
Sincerely,
Eirik Alfstad Johansen
http://www.netmaking.no/
|
Georg Franz
|
Tuesday 27 January 2004 2:47:05 am
Hi Eirik, i had the same problem. Do you want to import the images in 3.2x or 3.3? (3.3 is using the new image system). Try - at your own risk ;-) - (backup - backup - backup ...) this code in importimage.php:
function addImage( &$image )
{
global $databasePrefix;
$db =& eZDB::instance();
$db->setIsSQLOutputEnabled( false );
//fetch folder class
$class =& eZContentClass::fetch( 5 );
unset( $contentObject );
$imageID = $image['ID'];
$imageName = $image['Name'];
if (trim ($imageName) == "")
$imageName = "No Name";
$imageDescription = $image['Description'];
$imageCreatedTime = $image['Created'];
$imageFileName = $image['FileName'];
$imageOriginalFileName = $image['OriginalFileName'];
$imageCaption = $image['Caption'];
$imageUserID = $image['UserID'];
echo "ID: ".$image['ID']." $imageName / $imageFileName\n";
if ( $databasePrefix != "" )
{
$remoteUserID = $databasePrefix . "_" . "user_" . $imageUserID;
$remoteID = $databasePrefix . "_" . "image_" . $imageID;
$remoteParentIDPrefix = $databasePrefix . "_";
$unassignedImageFolderID = $databasePrefix . "_" . "image_unassigned_folder";
}
else
{
$remoteUserID = "user_" . $imageUserID;
$remoteID = "image_" . $imageID;
$remoteParentIDPrefix = "";
$unassignedImageFolderID = "image_unassigned_folder";
}
$result = $db->arrayQuery( "SELECT * from ezcontentobject WHERE remote_id = '$remoteID'" ) ;
if ( $result == NULL )
{
$remoteParentNodeArray = $db->arrayQuery( "SELECT * from eZImageCatalogue_ImageCategoryLink WHERE ImageID = '$imageID'" );
$assignedNodes = array();
if ( $remoteParentNodeArray != null )
{
// Find all parent node
foreach ( $remoteParentNodeArray as $remoteParentNode )
{
$remoteParentID = $remoteParentIDPrefix . "image_category_" . $remoteParentNode['CategoryID'];
// Find parent node id
$parentNodeIDArray = $db->arrayQuery( "SELECT ezcontentobject_tree.node_id FROM ezcontentobject, ezcontentobject_tree
WHERE ezcontentobject.remote_id = '$remoteParentID' AND ezcontentobject.id = ezcontentobject_tree.contentobject_id" );
$parentNodeID = $parentNodeIDArray[0]['node_id'];
$assignedNodes[] = $parentNodeID;
}
}
else
{
// For those unassigned images, import to main image folder.
$parentNodeIDArray = $db->arrayQuery( "SELECT ezcontentobject_tree.node_id FROM ezcontentobject, ezcontentobject_tree
WHERE ezcontentobject.remote_id = '$unassignedImageFolderID' AND ezcontentobject.id = ezcontentobject_tree.contentobject_id" );
$parentNodeID = $parentNodeIDArray[0]['node_id'];
$assignedNodes[] = $parentNodeID;
}
// Find current user id
$userIDArray = $db->arrayQuery( "SELECT id FROM ezcontentobject WHERE remote_id = '$remoteUserID'" );
if ($userIDArray == NULL)
$userID = NULL;
else
$userID = $userIDArray[0]['id'];
// If no exist user, set it to administrator.
if ( $userID == null )
$userID = 14;
if ( $userID != null )
{
// Create object by user id in section 1
$contentObject =& $class->instantiate( $userID, 1 );
$contentObject->setAttribute('remote_id', $remoteID );
$contentObject->setAttribute( 'name', $imageName );
$first = 1;
foreach ( $assignedNodes as $assignedNode )
{
$nodeAssignment =& eZNodeAssignment::create( array(
'contentobject_id' => $contentObject->attribute( 'id' ),
'contentobject_version' => $contentObject->attribute( 'current_version' ),
'parent_node' => $assignedNode,
'sort_field' => 2,
'sort_order' => 1,
'is_main' => $first
)
);
$nodeAssignment->store();
$first = 0;
}
$version =& $contentObject->version( 1 );
$version->setAttribute( 'modified', $imageCreatedTime );
$version->setAttribute( 'created', $imageCreatedTime );
$version->setAttribute( 'status', EZ_VERSION_STATUS_DRAFT );
$version->store();
$contentObjectID = $contentObject->attribute( 'id' );
$contentObjectAttributes =& $version->contentObjectAttributes();
$contentObjectAttributes[0]->setAttribute( 'data_text', $imageName );
$contentObjectAttributes[0]->store();
$inputData = "<?xml version=\"1.0\"?>";
$inputData .= "<section>";
$inputData .= "<paragraph>";
$inputData .= $imageCaption;
$inputData .= "</paragraph>";
$inputData .= "</section>";
include_once( "kernel/classes/datatypes/ezxmltext/handlers/input/ezsimplifiedxmlinput.php" );
$dumpdata = "";
$simplifiedXMLInput = new eZSimplifiedXMLInput( $dumpdata, null, null );
$inputData = $simplifiedXMLInput->convertInput( $inputData );
$description = $inputData[0]->toString();
$contentObjectAttributes[1]->setAttribute( 'data_text', $description );
$contentObjectAttributes[1]->store();
$contentObjectAttribute =& $contentObjectAttributes[2];
saveImage( $imageFileName, $imageOriginalFileName, $imageCaption, $contentObjectAttribute );
$contentObjectAttributes[2]->store();
include_once( 'lib/ezutils/classes/ezoperationhandler.php' );
$operationResult = eZOperationHandler::execute( 'content', 'publish', array( 'object_id' => $contentObjectID,
'version' => 1 ) );
$contentObject->setAttribute('modified', $imageCreatedTime );
$contentObject->setAttribute('published', $imageCreatedTime );
$contentObject->store();
}
}
else
{
echo "Already imported\n";
//var_dump($result);
echo "\n\n";
}
}
function saveImage( $imageFileName, $originalImageFileName, $caption, &$contentObjectAttribute )
{
include_once( "lib/ezutils/classes/ezdir.php" );
$contentObjectAttributeID = $contentObjectAttribute->attribute( "id" );
$version = $contentObjectAttribute->attribute( "version" );
include_once( "kernel/common/image.php" );
include_once( "kernel/classes/datatypes/ezimage/ezimage.php" );
$image =& eZImage::create( $contentObjectAttributeID , $version );
$image->setAttribute( "contentobject_attribute_id", $contentObjectAttributeID );
$image->setAttribute( "version", $version );
$image->setAttribute( "filename", $imageFileName );
$image->setAttribute( "original_filename", $originalImageFileName );
$mimeObj = new eZMimeType();
$mime = $mimeObj->mimeTypeFor( false, $originalImageFileName );
$image->setAttribute( "mime_type", $mime );
$image->setAttribute( "alternative_text", $caption );
$image->store();
$sys =& eZSys::instance();
$storage_dir = $sys->storageDirectory();
$ori_dir = $storage_dir . '/' . "original/image";
$ref_dir = $storage_dir . '/' . "reference/image";
if ( !file_exists( $ori_dir ) )
{
eZDir::mkdir( $ori_dir, 0777, true);
}
if ( !file_exists( $ref_dir ) )
{
eZDir::mkdir( $ref_dir, 0777, true);
}
$source_file = $storage_dir . "/catalogue/" . $imageFileName;
$target_file = $storage_dir . "/original/image/" . $imageFileName;
$reference_file = $storage_dir . "/reference/image/" . $imageFileName;
copy($source_file, $target_file );
}
PS.: I don't know if my code is still working, as I can remember - I used it for ez 3.3.1 beta (or something). And some things were changed in the past.
Kind regards, Emil.
Best wishes,
Georg.
--
http://www.schicksal.com Horoskop website which uses eZ Publish since 2004
|