/** * Generic method wrapping datatype's toString() method if implemented * Checks if toString() is implemented in the field's datatype * If not, data_text will be used by default * @param eZContentObjectAttribute $attribute * @return string */ public static function convertAttributeToString(eZContentObjectAttribute $attribute) { $datatype = $attribute->attribute('data_type_string'); $toStringImplemented = null; $ret = null; // First check if datatype is already known as implementing fromString() or not // (Better performance as the check is made through Reflection API) if (in_array($datatype, self::$datatypesToStringImpl)) { $toStringImplemented = true; } else { if (in_array($datatype, self::$datatypesToStringNotImpl)) { $toStringImplemented = false; } else { $reflector = new ReflectionObject($attribute->dataType()); $callerClass = $reflector->getMethod('toString')->class; if ($callerClass == 'eZDataType') { self::$datatypesToStringNotImpl[] = $datatype; $toStringImplemented = false; } else { self::$datatypesToStringImpl[] = $datatype; $toStringImplemented = true; } } } // Now insert data through the appropriate way if ($toStringImplemented) { $ret = $attribute->toString(); } else { $ret = $attribute->attribute('data_text'); } return $ret; }