- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / content / versions.php
1 <?php
2 //
3 // Created on: <22-Apr-2002 15:41:30 bf>
4 //
5 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
6 // SOFTWARE NAME: eZ Publish
7 // SOFTWARE RELEASE: 4.1.x
8 // COPYRIGHT NOTICE: Copyright (C) 1999-2010 eZ Systems AS
9 // SOFTWARE LICENSE: GNU General Public License v2.0
10 // NOTICE: >
11 //   This program is free software; you can redistribute it and/or
12 //   modify it under the terms of version 2.0  of the GNU General
13 //   Public License as published by the Free Software Foundation.
14 //
15 //   This program is distributed in the hope that it will be useful,
16 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
17 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 //   GNU General Public License for more details.
19 //
20 //   You should have received a copy of version 2.0 of the GNU General
21 //   Public License along with this program; if not, write to the Free
22 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
23 //   MA 02110-1301, USA.
24 //
25 //
26 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
27 //
28
29 require_once( 'kernel/common/template.php' );
30
31 $tpl = templateInit();
32 $http = eZHTTPTool::instance();
33
34 $ObjectID = $Params['ObjectID'];
35 $EditVersion = $Params['EditVersion'];
36
37 $Offset = $Params['Offset'];
38 $viewParameters = array( 'offset' => $Offset );
39
40 if ( $http->hasPostVariable( 'BackButton' )  )
41 {
42     $userRedirectURI = '';
43     if ( $http->hasPostVariable( 'RedirectURI' ) )
44     {
45         $redurectURI = $http->postVariable( 'RedirectURI' );
46         $http->removeSessionVariable( 'LastAccessesVersionURI' );
47         return $Module->redirectTo( $redurectURI );
48     }
49     if ( $http->hasSessionVariable( "LastAccessesURI" ) )
50         $userRedirectURI = $http->sessionVariable( "LastAccessesURI" );
51     return $Module->redirectTo( $userRedirectURI );
52 }
53
54 $object = eZContentObject::fetch( $ObjectID );
55 $editWarning = false;
56
57 $canEdit = false;
58 $canRemove = false;
59
60 if ( $object === null )
61     return $Module->handleError( eZError::KERNEL_NOT_AVAILABLE, 'kernel' );
62
63 if ( !$object->attribute( 'can_read' ) )
64     return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
65
66 if ( $object->attribute( 'can_edit' ) )
67     $canEdit = true;
68
69 $canRemove = true;
70
71 $http = eZHTTPTool::instance();
72
73 if ( $http->hasSessionVariable( 'ExcessVersionHistoryLimit' ) )
74 {
75     $excessLimit = $http->sessionVariable( 'ExcessVersionHistoryLimit' );
76     if ( $excessLimit )
77         $editWarning = 3;
78     $http->removeSessionVariable( 'ExcessVersionHistoryLimit' );
79 }
80
81 if ( $http->hasPostVariable( 'RemoveButton' )  )
82 {
83     if ( !$canEdit )
84         return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
85     if ( $http->hasPostVariable( 'DeleteIDArray' ) )
86     {
87         $db = eZDB::instance();
88         $db->begin();
89
90         $deleteIDArray = $http->postVariable( 'DeleteIDArray' );
91         $versionArray = array();
92         foreach ( $deleteIDArray as $deleteID )
93         {
94             $version = eZContentObjectVersion::fetch( $deleteID );
95             if ( is_object( $version ) )
96             {
97                 $versionArray[] = $version->attribute( 'version' );
98                 if ( $version->attribute( 'can_remove' ) )
99                 {
100                     $version->removeThis();
101                 }
102             }
103         }
104         $db->commit();
105     }
106 }
107
108 $user = eZUser::currentUser();
109
110 if ( $Module->isCurrentAction( 'Edit' )  )
111 {
112     if ( !$canEdit )
113         return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
114
115     $versionID = false;
116
117     if ( is_array( $Module->actionParameter( 'VersionKeyArray' ) ) )
118     {
119         $versionID = array_keys( $Module->actionParameter( 'VersionKeyArray' ) );
120         $versionID = $versionID[0];
121     }
122     else if ( $Module->hasActionParameter( 'VersionID' ) )
123         $versionID = $Module->actionParameter( 'VersionID' );
124     $version = $object->version( $versionID );
125     if ( !$version )
126         $versionID = false;
127
128     if ( $versionID !== false and
129          !in_array( $version->attribute( 'status' ), array( eZContentObjectVersion::STATUS_DRAFT, eZContentObjectVersion::STATUS_INTERNAL_DRAFT ) ) )
130     {
131         $editWarning = 1;
132         $EditVersion = $versionID;
133     }
134     else if ( $versionID !== false and
135               $version->attribute( 'creator_id' ) != $user->attribute( 'contentobject_id' ) )
136     {
137         $editWarning = 2;
138         $EditVersion = $versionID;
139     }
140     else
141     {
142         return $Module->redirectToView( 'edit', array( $ObjectID, $versionID, $version->initialLanguageCode() ) );
143     }
144 }
145
146 if ( $Module->isCurrentAction( 'CopyVersion' )  )
147 {
148     if ( !$canEdit )
149     {
150         return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
151     }
152
153     if ( is_array( $Module->actionParameter( 'VersionKeyArray' ) ) )
154     {
155         $versionID = array_keys( $Module->actionParameter( 'VersionKeyArray' ) );
156         $versionID = $versionID[0];
157     }
158     else
159     {
160         $versionID = $Module->actionParameter( 'VersionID' );
161     }
162
163     $version = $object->version( $versionID );
164     if ( !$version )
165         $versionID = false;
166
167     // if we cannot fetch version with given versionID or if fetched version is
168     // an internal-draft then just skip copying and redirect back to the history view
169     if ( !$versionID or $version->attribute( 'status' ) == eZContentObjectVersion::STATUS_INTERNAL_DRAFT )
170     {
171         $currentVersion = $object->attribute( 'current_version' );
172         $Module->redirectToView( 'versions', array( $ObjectID, $currentVersion ) );
173         return eZModule::HOOK_STATUS_CANCEL_RUN;
174     }
175
176     $languages = $Module->actionParameter( 'LanguageArray' );
177     if ( $languages && array_key_exists( $versionID, $languages ) )
178     {
179         $language = $languages[$versionID];
180     }
181     else
182     {
183         $language = $version->initialLanguageCode();
184     }
185
186     if ( !$object->checkAccess( 'edit', false, false, false, $language ) )
187     {
188         return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
189     }
190
191     $versionlimit = eZContentClass::versionHistoryLimit( $object->attribute( 'contentclass_id' ) );
192     $versionCount = $object->getVersionCount();
193     if ( $versionCount < $versionlimit )
194     {
195         $db = eZDB::instance();
196         $db->begin();
197         $newVersionID = $object->copyRevertTo( $versionID, $language );
198         $db->commit();
199
200         if ( !$http->hasPostVariable( 'DoNotEditAfterCopy' ) )
201         {
202             return $Module->redirectToView( 'edit', array( $ObjectID, $newVersionID, $language ) );
203         }
204     }
205     else
206     {
207         $params = array( 'conditions'=> array( 'status' => 3 ) );
208         $versions = $object->versions( true, $params );
209         if ( count( $versions ) > 0 )
210         {
211             $modified = $versions[0]->attribute( 'modified' );
212             $removeVersion = $versions[0];
213             foreach ( $versions as $version )
214             {
215                 $currentModified = $version->attribute( 'modified' );
216                 if ( $currentModified < $modified )
217                 {
218                     $modified = $currentModified;
219                     $removeVersion = $version;
220                 }
221             }
222
223             $db = eZDB::instance();
224             $db->begin();
225             $removeVersion->removeThis();
226             $newVersionID = $object->copyRevertTo( $versionID, $language );
227             $db->commit();
228
229             if ( !$http->hasPostVariable( 'DoNotEditAfterCopy' ) )
230             {
231                 return $Module->redirectToView( 'edit', array( $ObjectID, $newVersionID, $language ) );
232             }
233         }
234         else
235         {
236             $http->setSessionVariable( 'ExcessVersionHistoryLimit', true );
237             $currentVersion = $object->attribute( 'current_version' );
238             $Module->redirectToView( 'versions', array( $ObjectID, $currentVersion ) );
239             return eZModule::HOOK_STATUS_CANCEL_RUN;
240         }
241     }
242 }
243
244 $res = eZTemplateDesignResource::instance();
245 $res->setKeys( array( array( 'object', $object->attribute( 'id' ) ), // Object ID
246                       array( 'remote_id', $object->attribute( 'remote_id' ) ),
247                       array( 'class', $object->attribute( 'contentclass_id' ) ), // Class ID
248                       array( 'class_identifier', $object->attribute( 'class_identifier' ) ), // Class identifier
249                       array( 'section_id', $object->attribute( 'section_id' ) ) // Section ID
250                       ) ); // Section ID, 0 so far
251
252 eZSection::setGlobalID( $object->attribute( 'section_id' ) );
253 $versionArray =( isset( $versionArray ) and is_array( $versionArray ) ) ? array_unique( $versionArray ) : array();
254 $LastAccessesVersionURI = $http->hasSessionVariable( 'LastAccessesVersionURI' ) ? $http->sessionVariable( 'LastAccessesVersionURI' ) : null;
255 $explodedURI = $LastAccessesVersionURI ? explode ( '/', $LastAccessesVersionURI ) : null;
256 if ( $LastAccessesVersionURI and is_array( $versionArray ) and !in_array( $explodedURI[3], $versionArray ) )
257     $tpl->setVariable( 'redirect_uri', $http->sessionVariable( 'LastAccessesVersionURI' ) );
258
259 $versions = $object->versions();
260
261 $tpl->setVariable( 'view_parameters', $viewParameters );
262 $tpl->setVariable( 'object', $object );
263 $tpl->setVariable( 'edit_version', $EditVersion );
264 $tpl->setVariable( 'versions', $versions );
265 $tpl->setVariable( 'edit_warning', $editWarning );
266 $tpl->setVariable( 'can_edit', $canEdit );
267 //$tpl->setVariable( 'can_remove', $canRemove );
268 $tpl->setVariable( 'user_id', $user->attribute( 'contentobject_id' ) );
269
270 eZDebug::writeNotice( 'The versions view has been deprecated, please use the /content/history/ view instead' );
271
272 $Result = array();
273 $Result['content'] = $tpl->fetch( 'design:content/versions.tpl' );
274 $Result['path'] = array( array( 'text' => ezpI18n::translate( 'kernel/content', 'Versions' ),
275                                 'url' => false ) );
276
277 ?>