Forums / Developer / Updating image in article via SOAP

"Please Note:
  • At the specific request of Ibexa we are changing this projects name to "Exponential" or "Exponential (CMS)" effective as of August, 11th 2025.
  • This project is not associated with the original eZ Publish software or its original developer, eZ Systems or Ibexa".

Updating image in article via SOAP

Author Message

Michael de Vries

Wednesday 25 February 2009 8:12:08 am

I'm writing a plugin, which I will use to publish content to Exponential via SOAP.

The publishing goes fine, and I can articles with an image just like I want to. The next step is the ability to update the information, so what I do is create a new versions with the new variables. For all attributes (author, title, short_title, etc) this is working fine, but not for the image.

So setting the image for new content is working fine and without any problems, but updating an article with a new image is not working.

//create new version
$newContentObjectVersion =& $contentObject->createNewVersion();

//publish new version
$operationResult = eZOperationHandler::execute('content',
						'publish', array('object_id' => $contentObject->attribute('id'),
						'version' => $newContentObjectVersion->attribute('version')));

//attributes of new version
$attributes =& $contentObjectVersion->contentObjectAttributes();

foreach($attributes as $attribute){
    $data_type_string = $attribute->attribute("data_type_string");
    $attribute_identifier = $attribute->attribute("contentclass_attribute_identifier");
    if($data_type_string == "ezimage"){
        if($attribute_identifier == "image"){
            setImage($attribute, $filename);
        }
    }
    //.... other attributes, like ezstring and ezxmlblock 
}

The setImage function (partly, only the important part), mimetype, filename and all other varables are set correctly.

function setImage(&$attribute, $filename){
	//everything is done, create an image, set attributes and save it
	$image =& eZImage::create($attribute->attribute("id"), $attribute->attribute("version"));
	$image->setAttribute("contentobject_attribute_id", $attribute->attribute("id"));
	$image->setAttribute("filename", $targetname);
	$image->setAttribute("original_filename", $filename);
	$image->setAttribute("mime_type", $mime);
	$image->store();
}

What does happen is that the image is added to the eZImageFile table, with all the correct settings, including the right contentobject_attribute_id.

What I think goes wrong is the attribute is copies from the old version and isn't been updated to the new image. I don't know how to do that either, so I really appreciate any help!

Michael de Vries

Thursday 26 February 2009 2:50:30 am

Ok, I "solved" this myself. What I do now is in the setImage method call the following:

$attribute->setAttribute("data_text", "");
$attribute->store();

After this, the image is automagically set right by the following line of code.

$image =& eZImage::create($attribute->attribute("id"), $attribute->attribute("version"));

Not sure I this is the right way, but it works for me.