- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / rss / edit_functions.php
1 <?php
2 //
3 // Created on: <19-Sep-2002 15:40:08 kk>
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 class eZRSSEditFunction
30 {
31     /*!
32      Store RSSExport
33
34      \static
35      \param Module
36      \param HTTP
37      \param publish ( true/false )
38     */
39     static function storeRSSExport( $Module, $http, $publish = false, $skipValuesID = null )
40     {
41         $valid = true;
42         $validationErrors = array();
43
44         /* Kill the RSS cache in all siteaccesses */
45         $config = eZINI::instance( 'site.ini' );
46         $cacheDir = eZSys::cacheDirectory();
47
48         $availableSiteAccessList = $config->variable( 'SiteAccessSettings', 'AvailableSiteAccessList' );
49         foreach ( $availableSiteAccessList as $siteAccess )
50         {
51             $cacheFilePath = $cacheDir . '/rss/' . md5( $siteAccess . $http->postVariable( 'Access_URL' ) ) . '.xml';
52             $cacheFile = eZClusterFileHandler::instance( $cacheFilePath );
53             if ( $cacheFile->exists() )
54             {
55                 $cacheFile->delete();
56             }
57         }
58
59         $db = eZDB::instance();
60         $db->begin();
61         /* Create the new RSS feed */
62         for ( $itemCount = 0; $itemCount < $http->postVariable( 'Item_Count' ); $itemCount++ )
63         {
64             if ( $skipValuesID == $http->postVariable( 'Item_ID_' . $itemCount ) )
65             {
66                 continue;
67             }
68
69             $rssExportItem = eZRSSExportItem::fetch( $http->postVariable( 'Item_ID_'.$itemCount ), true, eZRSSExport::STATUS_DRAFT );
70             if( $rssExportItem == null )
71             {
72                 continue;
73             }
74
75             // RSS is supposed to feed certain objects from the subnodes
76             if ( $http->hasPostVariable( 'Item_Subnodes_'.$itemCount ) )
77             {
78                 $rssExportItem->setAttribute( 'subnodes', 1 );
79             }
80             else // Do not include subnodes
81             {
82                 $rssExportItem->setAttribute( 'subnodes', 0 );
83             }
84
85             $rssExportItem->setAttribute( 'class_id', $http->postVariable( 'Item_Class_'.$itemCount ) );
86             $class = eZContentClass::fetch(  $http->postVariable( 'Item_Class_'.$itemCount ) );
87
88             $titleClassAttributeIdentifier = $http->postVariable( 'Item_Class_Attribute_Title_'.$itemCount );
89             $descriptionClassAttributeIdentifier = $http->postVariable( 'Item_Class_Attribute_Description_'.$itemCount );
90             $categoryClassAttributeIdentifier = $http->postVariable( 'Item_Class_Attribute_Category_'.$itemCount );
91
92             if ( !$class )
93             {
94                 $validated = false;
95                 $validationErrors[] = ezpI18n::translate( 'kernel/rss/edit_export',
96                                               'Selected class does not exist' );
97             }
98             else
99             {
100                 $dataMap = $class->attribute( 'data_map' );
101                 if ( !isset( $dataMap[$titleClassAttributeIdentifier] ) )
102                 {
103                     $valid = false;
104                     $validationErrors[] = ezpI18n::translate( 'kernel/rss/edit_export',
105                                                   'Invalid selection for title class %1 does not have attribute "%2"', null,
106                                                   array( $class->attribute( 'name'), $titleClassAttributeIdentifier ) );
107                 }
108                 if ( $descriptionClassAttributeIdentifier != '' && !isset( $dataMap[$descriptionClassAttributeIdentifier] ) )
109                 {
110                     $valid = false;
111                     $validationErrors[] = ezpI18n::translate( 'kernel/rss/edit_export',
112                                                   'Invalid selection for description class %1 does not have attribute "%2"', null,
113                                                   array( $class->attribute( 'name'), $descriptionClassAttributeIdentifier ) );
114                 }
115                 if ( $categoryClassAttributeIdentifier != '' && !isset( $dataMap[$categoryClassAttributeIdentifier] ) )
116                 {
117                     $valid = false;
118                     $validationErrors[] = ezpI18n::translate( 'kernel/rss/edit_export',
119                                                   'Invalid selection for category class %1 does not have attribute "%2"', null,
120                                                   array( $class->attribute( 'name'), $categoryClassAttributeIdentifier ) );
121                 }
122             }
123
124             $rssExportItem->setAttribute( 'title', $http->postVariable( 'Item_Class_Attribute_Title_' . $itemCount ) );
125             $rssExportItem->setAttribute( 'description', $http->postVariable( 'Item_Class_Attribute_Description_' . $itemCount ) );
126             $rssExportItem->setAttribute( 'category', $http->postVariable( 'Item_Class_Attribute_Category_' . $itemCount ) );
127
128             if ( $http->hasPostVariable( 'Item_Class_Attribute_Enclosure_' . $itemCount ) )
129                 $rssExportItem->setAttribute( 'enclosure', $http->postVariable( 'Item_Class_Attribute_Enclosure_' . $itemCount ) );
130
131             if( $publish && $valid )
132             {
133                 $rssExportItem->setAttribute( 'status', 1 );
134                 $rssExportItem->store();
135                 // delete drafts
136                 $rssExportItem->setAttribute( 'status', 0 );
137                 $rssExportItem->remove();
138             }
139             else
140             {
141                 $rssExportItem->store();
142             }
143         }
144         $rssExport = eZRSSExport::fetch( $http->postVariable( 'RSSExport_ID' ), true, eZRSSExport::STATUS_DRAFT );
145         $rssExport->setAttribute( 'title', $http->postVariable( 'title' ) );
146         $rssExport->setAttribute( 'url', $http->postVariable( 'url' ) );
147         // $rssExport->setAttribute( 'site_access', $http->postVariable( 'SiteAccess' ) );
148         $rssExport->setAttribute( 'description', $http->postVariable( 'Description' ) );
149         $rssExport->setAttribute( 'rss_version', $http->postVariable( 'RSSVersion' ) );
150         $rssExport->setAttribute( 'number_of_objects', $http->postVariable( 'NumberOfObjects' ) );
151         $rssExport->setAttribute( 'image_id', $http->postVariable( 'RSSImageID' ) );
152         if ( $http->hasPostVariable( 'active' ) )
153         {
154             $rssExport->setAttribute( 'active', 1 );
155         }
156         else
157         {
158             $rssExport->setAttribute( 'active', 0 );
159         }
160         $rssExport->setAttribute( 'access_url', str_replace( array( '/', '?', '&', '>', '<' ), '',  $http->postVariable( 'Access_URL' ) ) );
161         if ( $http->hasPostVariable( 'MainNodeOnly' ) )
162         {
163             $rssExport->setAttribute( 'main_node_only', 1 );
164         }
165         else
166         {
167             $rssExport->setAttribute( 'main_node_only', 0 );
168         }
169
170         $published = false;
171         if ( $publish && $valid )
172         {
173             $rssExport->store( true );
174             // remove draft
175             $rssExport->remove();
176             $published = true;
177         }
178         else
179         {
180             $rssExport->store();
181         }
182         $db->commit();
183         return array( 'valid' => $valid,
184                       'published' => $published,
185                       'validation_errors' => $validationErrors );
186     }
187
188     /**
189      * Set RSSExportItem defaults based on site.ini [RSSSettings] settings
190      * 
191      * @param eZRSSExportItem $rssExportItem
192      * @return bool True if changes where made
193      */
194     static function setItemDefaults( eZRSSExportItem $rssExportItem )
195     {
196         $nodeId = $rssExportItem->attribute( 'source_node_id' );
197         $node = $nodeId ? eZContentObjectTreeNode::fetch( $nodeId ) : null;
198
199         if ( !$node instanceof eZContentObjectTreeNode )
200             return false;
201
202         $config = eZINI::instance( 'site.ini' );
203         $nodeClassIdentifier =  $node->attribute( 'class_identifier' );
204         $defaultFeedItemClasses = $config->variable( 'RSSSettings', 'DefaultFeedItemClasses' );
205         if ( !isset( $defaultFeedItemClasses[$nodeClassIdentifier] ) )
206             return false;
207
208         $feedItemClasses = explode( ';', $defaultFeedItemClasses[$nodeClassIdentifier] );
209         $iniSection = 'RSSSettings_' . $feedItemClasses[0];
210         if ( !$config->hasVariable( $iniSection, 'FeedObjectAttributeMap' ) )
211             return false;
212
213         $feedObjectAttributeMap = $config->variable( $iniSection, 'FeedObjectAttributeMap' );
214         $subNodesMap = $config->hasVariable( $iniSection, 'Subnodes' ) ? $config->variable( $iniSection, 'Subnodes' ) : array();
215
216         $rssExportItem->setAttribute( 'class_id', eZContentObjectTreeNode::classIDByIdentifier( $feedItemClasses[0] ) );
217         $rssExportItem->setAttribute( 'title', $feedObjectAttributeMap['title'] );
218         if ( isset( $feedObjectAttributeMap['description'] ) )
219             $rssExportItem->setAttribute( 'description', $feedObjectAttributeMap['description'] );
220
221         if ( isset( $feedObjectAttributeMap['category'] ) )
222             $rssExportItem->setAttribute( 'category', $feedObjectAttributeMap['category'] );
223
224         if ( isset( $feedObjectAttributeMap['enclosure'] ) )
225             $rssExportItem->setAttribute( 'enclosure', $feedObjectAttributeMap['enclosure'] );
226
227         $rssExportItem->setAttribute( 'subnodes', isset( $subNodesMap[$nodeClassIdentifier] ) && $subNodesMap[$nodeClassIdentifier] === 'true' );
228         $rssExportItem->store();
229     }
230 }
231 ?>