- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / classes / datatypes / ezauthor / ezauthortype.php
1 <?php
2 //
3 // Definition of eZAuthorType class
4 //
5 // Created on: <19-Aug-2002 10:51:10 bf>
6 //
7 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
8 // SOFTWARE NAME: eZ Publish
9 // SOFTWARE RELEASE: 4.1.x
10 // COPYRIGHT NOTICE: Copyright (C) 1999-2010 eZ Systems AS
11 // SOFTWARE LICENSE: GNU General Public License v2.0
12 // NOTICE: >
13 //   This program is free software; you can redistribute it and/or
14 //   modify it under the terms of version 2.0  of the GNU General
15 //   Public License as published by the Free Software Foundation.
16 //
17 //   This program is distributed in the hope that it will be useful,
18 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
19 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 //   GNU General Public License for more details.
21 //
22 //   You should have received a copy of version 2.0 of the GNU General
23 //   Public License along with this program; if not, write to the Free
24 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 //   MA 02110-1301, USA.
26 //
27 //
28 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
29 //
30
31 /*!
32   \class eZAuthorType ezauthortype.php
33   \ingroup eZDatatype
34   \brief eZAuthorType handles multiple authors
35
36 */
37
38 class eZAuthorType extends eZDataType
39 {
40     const DATA_TYPE_STRING = "ezauthor";
41
42     function eZAuthorType()
43     {
44         $this->eZDataType( self::DATA_TYPE_STRING, ezpI18n::translate( 'kernel/classes/datatypes', "Authors", 'Datatype name' ),
45                            array( 'serialize_supported' => true ) );
46     }
47
48     /*!
49      Validates the input and returns true if the input was
50      valid for this datatype.
51     */
52     function validateObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
53     {
54         $actionRemoveSelected = false;
55         if ( $http->hasPostVariable( 'CustomActionButton' ) )
56         {
57             $customActionArray = $http->postVariable( 'CustomActionButton' );
58
59             if ( isset( $customActionArray[$contentObjectAttribute->attribute( "id" ) . '_remove_selected'] ) )
60                 if ( $customActionArray[$contentObjectAttribute->attribute( "id" ) . '_remove_selected'] == 'Remove selected' )
61                     $actionRemoveSelected = true;
62         }
63
64         if ( $http->hasPostVariable( $base . "_data_author_id_" . $contentObjectAttribute->attribute( "id" ) ) )
65         {
66             $classAttribute = $contentObjectAttribute->contentClassAttribute();
67             $idList = $http->postVariable( $base . "_data_author_id_" . $contentObjectAttribute->attribute( "id" ) );
68             $nameList = $http->postVariable( $base . "_data_author_name_" . $contentObjectAttribute->attribute( "id" ) );
69             $emailList = $http->postVariable( $base . "_data_author_email_" . $contentObjectAttribute->attribute( "id" ) );
70
71             if ( $http->hasPostVariable( $base . "_data_author_remove_" . $contentObjectAttribute->attribute( "id" ) ) )
72                 $removeList = $http->postVariable( $base . "_data_author_remove_" . $contentObjectAttribute->attribute( "id" ) );
73             else
74                 $removeList = array();
75
76             if ( $contentObjectAttribute->validateIsRequired() )
77             {
78                 if ( trim( $nameList[0] ) == "" )
79                 {
80                     $contentObjectAttribute->setValidationError( ezpI18n::translate( 'kernel/classes/datatypes',
81                                                                          'At least one author is required.' ) );
82                     return eZInputValidator::STATE_INVALID;
83                 }
84             }
85             if ( trim( $nameList[0] ) != "" )
86             {
87                 for ( $i=0;$i<count( $idList );$i++ )
88                 {
89                     if ( $actionRemoveSelected )
90                         if ( in_array( $idList[$i], $removeList ) )
91                             continue;
92
93                     $name =  $nameList[$i];
94                     $email =  $emailList[$i];
95                     if ( trim( $name )== "" )
96                     {
97                         $contentObjectAttribute->setValidationError( ezpI18n::translate( 'kernel/classes/datatypes',
98                                                                              'The author name must be provided.' ) );
99                         return eZInputValidator::STATE_INVALID;
100
101                     }
102                     $isValidate =  eZMail::validate( $email );
103                     if ( ! $isValidate )
104                     {
105                         $contentObjectAttribute->setValidationError( ezpI18n::translate( 'kernel/classes/datatypes',
106                                                                              'The email address is not valid.' ) );
107                         return eZInputValidator::STATE_INVALID;
108                     }
109                 }
110             }
111         }
112         else
113         {
114             if ( $contentObjectAttribute->validateIsRequired() )
115             {
116                 $contentObjectAttribute->setValidationError( ezpI18n::translate( 'kernel/classes/datatypes',
117                                                                      'At least one author is required.' ) );
118                 return eZInputValidator::STATE_INVALID;
119             }
120         }
121         return eZInputValidator::STATE_ACCEPTED;
122     }
123
124     /*!
125      Store content
126     */
127     function storeObjectAttribute( $contentObjectAttribute )
128     {
129         $author = $contentObjectAttribute->content();
130         $contentObjectAttribute->setAttribute( "data_text", $author->xmlString() );
131     }
132
133     /*!
134      Sets the default value.
135     */
136     function initializeObjectAttribute( $contentObjectAttribute, $currentVersion, $originalContentObjectAttribute )
137     {
138         if ( $currentVersion != false )
139         {
140             $dataText = $originalContentObjectAttribute->attribute( "data_text" );
141             $contentObjectAttribute->setAttribute( "data_text", $dataText );
142         }
143     }
144
145     /*!
146      Returns the content.
147     */
148     function objectAttributeContent( $contentObjectAttribute )
149     {
150         $author = new eZAuthor( );
151
152         if ( trim( $contentObjectAttribute->attribute( "data_text" ) ) != "" )
153         {
154             $author->decodeXML( $contentObjectAttribute->attribute( "data_text" ) );
155             $temp = $contentObjectAttribute->attribute( "data_text");
156         }
157         else
158         {
159             $user = eZUser::currentUser();
160             $userobject = $user->attribute( 'contentobject' );
161             if ( $userobject )
162             {
163                 $author->addAuthor( $userobject->attribute( 'id' ), $userobject->attribute( 'name' ), $user->attribute( 'email' ) );
164             }
165          }
166
167         if ( count( $author->attribute( 'author_list' ) ) == 0 )
168         {
169 //             $author->addAuthor( "Default", "" );
170         }
171
172         return $author;
173     }
174
175
176     /*!
177      Returns the meta data used for storing search indeces.
178     */
179     function metaData( $contentObjectAttribute )
180     {
181         $author = $contentObjectAttribute->content();
182         if ( !$author )
183             return false;
184
185         return $author->metaData();
186     }
187
188     function toString( $contentObjectAttribute )
189     {
190         $authorList = array();
191         $content = $contentObjectAttribute->attribute( 'content' );
192         foreach ( $content->attribute( 'author_list') as $author )
193         {
194             $authorList[] = eZStringUtils::implodeStr( array( $author['name'], $author['email'],$author['id'] ), '|' );
195         }
196         return eZStringUtils::implodeStr( $authorList, "&" );
197     }
198
199     function fromString( $contentObjectAttribute, $string )
200     {
201         $authorList = eZStringUtils::explodeStr( $string, '&' );
202
203         $author = new eZAuthor( );
204
205
206         foreach ( $authorList as $authorStr )
207         {
208             $authorData = eZStringUtils::explodeStr( $authorStr, '|' );
209             $author->addAuthor( $authorData[2], $authorData[0], $authorData[1] );
210
211         }
212         $contentObjectAttribute->setContent( $author );
213         return $author;
214     }
215
216     /*!
217      Fetches the http post var integer input and stores it in the data instance.
218     */
219     function fetchObjectAttributeHTTPInput( $http, $base, $contentObjectAttribute )
220     {
221         if ( $http->hasPostVariable( $base . "_data_author_id_" . $contentObjectAttribute->attribute( "id" ) ) )
222         {
223             $authorIDArray = $http->postVariable( $base . "_data_author_id_" . $contentObjectAttribute->attribute( "id" ) );
224             $authorNameArray = $http->postVariable( $base . "_data_author_name_" . $contentObjectAttribute->attribute( "id" ) );
225             $authorEmailArray = $http->postVariable( $base . "_data_author_email_" . $contentObjectAttribute->attribute( "id" ) );
226
227             $author = new eZAuthor( );
228
229             $i = 0;
230             foreach ( $authorIDArray as $id )
231             {
232                 $author->addAuthor( $authorIDArray[$i], $authorNameArray[$i], $authorEmailArray[$i] );
233                 $i++;
234             }
235             $contentObjectAttribute->setContent( $author );
236         }
237         return true;
238     }
239
240     function customObjectAttributeHTTPAction( $http, $action, $contentObjectAttribute, $parameters )
241     {
242         switch ( $action )
243         {
244             case "new_author" :
245             {
246                 $author = $contentObjectAttribute->content( );
247
248                 $author->addAuthor( -1, "", "" );
249                 $contentObjectAttribute->setContent( $author );
250             }break;
251             case "remove_selected" :
252             {
253                 $author = $contentObjectAttribute->content( );
254                 $postvarname = $parameters['base_name'] . "_data_author_remove_" . $contentObjectAttribute->attribute( "id" );
255                 if ( !$http->hasPostVariable( $postvarname ) )
256                     break;
257                 $array_remove = $http->postVariable( $postvarname );
258
259                 $author->removeAuthors( $array_remove );
260                 $contentObjectAttribute->setContent( $author );
261             }break;
262             default :
263             {
264                 eZDebug::writeError( "Unknown custom HTTP action: " . $action, "eZAuthorType" );
265             }break;
266         }
267     }
268
269     function hasObjectAttributeContent( $contentObjectAttribute )
270     {
271         $author = $contentObjectAttribute->content( );
272         $authorList = $author->attribute( 'author_list' );
273         return count( $authorList ) > 0;
274     }
275
276     /*!
277      Returns the string value.
278     */
279     function title( $contentObjectAttribute, $name = null )
280     {
281         $author = $contentObjectAttribute->content( );
282         $name = $author->attribute( 'name' );
283         if ( trim( $name ) == '' )
284         {
285             $authorList = $author->attribute( 'author_list' );
286             if ( is_array( $authorList ) and isset( $authorList[0]['name'] ) )
287             {
288                 $name = $authorList[0]['name']; // Get the first name of Auhtors
289                 $author->setName( $name );
290             }
291         }
292         return $name;
293     }
294
295     function isIndexable()
296     {
297         return true;
298     }
299
300     function serializeContentObjectAttribute( $package, $objectAttribute )
301     {
302         $node = $this->createContentObjectAttributeDOMNode( $objectAttribute );
303
304         $dom = new DOMDocument( '1.0', 'utf-8' );
305         $success = $dom->loadXML( $objectAttribute->attribute( 'data_text' ) );
306
307         $nodeDOM = $node->ownerDocument;
308         $importedElement = $nodeDOM->importNode( $dom->documentElement, true );
309         $node->appendChild( $importedElement );
310
311         return $node;
312     }
313
314     function unserializeContentObjectAttribute( $package, $objectAttribute, $attributeNode )
315     {
316         $rootNode = $attributeNode->getElementsByTagName( 'ezauthor' )->item( 0 );
317         $xmlString = $rootNode->ownerDocument->saveXML( $rootNode );
318         $objectAttribute->setAttribute( 'data_text', $xmlString );
319     }
320
321     function supportsBatchInitializeObjectAttribute()
322     {
323         return true;
324     }
325 }
326
327 eZDataType::register( eZAuthorType::DATA_TYPE_STRING, "eZAuthorType" );
328
329 ?>