public static function conditionToXml(ezcWorkflowCondition $condition, DOMDocument $document)
{
$xmlCondition = $document->createElement('condition');
$conditionClass = get_class($condition);
$conditionType = str_replace('ezcWorkflowCondition', '', $conditionClass);
$xmlCondition->setAttribute('type', $conditionType);
switch ($conditionClass) {
case 'ezcWorkflowConditionVariable':
$xmlCondition->setAttribute('name', $condition->getVariableName());
$xmlCondition->appendChild(self::conditionToXml($condition->getCondition(), $document));
break;
case 'ezcWorkflowConditionVariables':
list($variableNameA, $variableNameB) = $condition->getVariableNames();
$xmlCondition->setAttribute('a', $variableNameA);
$xmlCondition->setAttribute('b', $variableNameB);
$xmlCondition->appendChild(self::conditionToXml($condition->getCondition(), $document));
break;
case 'ezcWorkflowConditionAnd':
case 'ezcWorkflowConditionOr':
case 'ezcWorkflowConditionXor':
foreach ($condition->getConditions() as $childCondition) {
$xmlCondition->appendChild(self::conditionToXml($childCondition, $document));
}
break;
case 'ezcWorkflowConditionNot':
$xmlCondition->appendChild(self::conditionToXml($condition->getCondition(), $document));
break;
case 'ezcWorkflowConditionIsEqual':
case 'ezcWorkflowConditionIsEqualOrGreaterThan':
case 'ezcWorkflowConditionIsEqualOrLessThan':
case 'ezcWorkflowConditionIsGreaterThan':
case 'ezcWorkflowConditionIsLessThan':
case 'ezcWorkflowConditionIsNotEqual':
$xmlCondition->setAttribute('value', $condition->getValue());
break;
case 'ezcWorkflowConditionInArray':
$xmlCondition->appendChild(self::variableToXml($condition->getValue(), $document));
break;
}
return $xmlCondition;
}