- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / content / diff.php
1 <?php
2 //
3 //
4 // <creation-tag>
5 //
6 // ## BEGIN COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
7 // SOFTWARE NAME: eZ Publish
8 // SOFTWARE RELEASE: 4.1.x
9 // COPYRIGHT NOTICE: Copyright (C) 1999-2010 eZ Systems AS
10 // SOFTWARE LICENSE: GNU General Public License v2.0
11 // NOTICE: >
12 //   This program is free software; you can redistribute it and/or
13 //   modify it under the terms of version 2.0  of the GNU General
14 //   Public License as published by the Free Software Foundation.
15 //
16 //   This program is distributed in the hope that it will be useful,
17 //   but WITHOUT ANY WARRANTY; without even the implied warranty of
18 //   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 //   GNU General Public License for more details.
20 //
21 //   You should have received a copy of version 2.0 of the GNU General
22 //   Public License along with this program; if not, write to the Free
23 //   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
24 //   MA 02110-1301, USA.
25 //
26 //
27 // ## END COPYRIGHT, LICENSE AND WARRANTY NOTICE ##
28 //
29
30 require_once( 'kernel/common/template.php' );
31
32 $Module = $Params['Module'];
33 $objectID = $Params['ObjectID'];
34
35 $Offset = $Params['Offset'];
36
37 $viewParameters = array( 'offset' => $Offset );
38
39 $contentObject = eZContentObject::fetch( $objectID );
40
41 if ( !$contentObject )
42     return $Module->handleError( eZError::KERNEL_NOT_AVAILABLE, 'kernel' );
43
44 $classID = $contentObject->attribute( 'contentclass_id' );
45 $class = eZContentClass::fetch( $classID );
46
47 if ( !$contentObject->attribute( 'can_read' ) )
48     return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
49
50 if ( !$contentObject->attribute( 'can_diff' ) )
51     return $Module->handleError( eZError::KERNEL_ACCESS_DENIED, 'kernel' );
52
53 $http = eZHTTPTool::instance();
54 $tpl = templateInit();
55
56 $res = eZTemplateDesignResource::instance();
57 $res->setKeys( array( array( 'object', $contentObject->attribute( 'id' ) ),
58                     array( 'remote_id', $contentObject->attribute( 'remote_id' ) ),
59                     array( 'class', $class->attribute( 'id' ) ),
60                     array( 'class_identifier', $class->attribute( 'identifier' ) ) ) );
61
62 $tpl->setVariable( 'object', $contentObject );
63 $tpl->setVariable( 'view_parameters', $viewParameters );
64 $tpl->setVariable( 'module', $Module );
65
66 //Set default values
67 $previousVersion = 1;
68 $newestVersion = 1;
69
70 //By default, set preselect the previous and most recent version for diffing
71 if ( count( $contentObject->versions() ) > 1 )
72 {
73     $versionArray = $contentObject->versions( false );
74     $selectableVersions = array();
75     foreach( $versionArray as $versionItem )
76     {
77         //Only return version numbers of archived or published items
78         if ( in_array( $versionItem['status'], array( 0, 1, 3 ) ) )
79         {
80             $selectableVersions[] = $versionItem['version'];
81         }
82     }
83     $newestVersion = array_pop( $selectableVersions );
84     $previousVersion = array_pop( $selectableVersions );
85 }
86
87 $tpl->setVariable( 'selectOldVersion', $previousVersion );
88 $tpl->setVariable( 'selectNewVersion', $newestVersion );
89
90 $diff = array();
91
92 if ( $http->hasPostVariable( 'FromVersion' ) && $http->hasPostVariable( 'ToVersion' ) )
93 {
94     $lang = false;
95     if ( $http->hasPostVariable( 'Language' ) )
96     {
97         $lang = $http->postVariable( 'Language' );
98     }
99     $oldVersion = $http->postVariable( 'FromVersion' );
100     $newVersion = $http->postVariable( 'ToVersion' );
101
102     if ( is_numeric( $oldVersion ) && is_numeric( $newVersion ) )
103     {
104         $oldObject = $contentObject->version( $oldVersion );
105         $newObject = $contentObject->version( $newVersion );
106
107         if ( $lang )
108         {
109             $initLang = $contentObject->initialLanguageCode();
110             $oldAttributes = $contentObject->fetchDataMap( $oldVersion, $lang );
111             if ( !$oldAttributes )
112             {
113                 $oldAttributes = $contentObject->fetchDataMap( $oldVersion, $initLang );
114             }
115             $newAttributes = $contentObject->fetchDataMap( $newVersion, $lang );
116             if ( !$newAttributes )
117             {
118                 $newAttributes = $contentObject->fetchDataMap( $newVersion, $initLang );
119             }
120
121         }
122         else
123         {
124             $oldAttributes = $oldObject->dataMap();
125             $newAttributes = $newObject->dataMap();
126         }
127
128         $extraOptions = false;
129         if ( $http->hasPostVariable( 'ExtraOptions' ) )
130         {
131             $extraOptions = $http->postVariable( 'ExtraOptions' );
132         }
133
134         foreach ( $oldAttributes as $attribute )
135         {
136             $newAttr = $newAttributes[$attribute->attribute( 'contentclass_attribute_identifier' )];
137             $contentClassAttr = $newAttr->attribute( 'contentclass_attribute' );
138             $diff[$contentClassAttr->attribute( 'id' )] = $contentClassAttr->diff( $attribute, $newAttr, $extraOptions );
139         }
140
141         $tpl->setVariable( 'object', $contentObject );
142         $tpl->setVariable( 'oldVersion', $oldVersion );
143         $tpl->setVariable( 'oldVersionObject', $contentObject->version( $oldVersion ) );
144
145         $tpl->setVariable( 'newVersion', $newVersion );
146         $tpl->setVariable( 'newVersionObject', $contentObject->version( $newVersion ) );
147         $tpl->setVariable( 'diff', $diff );
148     }
149 }
150
151 eZDebug::writeNotice( 'The diff view has been deprecated, please use the /content/history/ view instead' );
152
153 $Result = array();
154
155 $section = eZSection::fetch( $contentObject->attribute( 'section_id' ) );
156 if ( $section )
157 {
158     $Result['section_id'] = $section->attribute( 'id' );
159     $navigationPartIdentifier = $section->attribute( 'navigation_part_identifier' );
160     if ( $navigationPartIdentifier )
161     {
162         $Result['navigation_part'] = $navigationPartIdentifier;
163     }
164 }
165
166 $Result['content'] = $tpl->fetch( "design:content/diff.tpl" );
167 $Result['path'] = array( array( 'url' => false,
168                                 'text' => ezpI18n::translate( 'kernel/content', 'Differences' ) ) );
169
170 ?>