- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / visual / templateedit.php
1 <?php
2 //
3 // Created on: <09-May-2003 10:44:02 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 $http = eZHTTPTool::instance();
31 $module = $Params['Module'];
32 $parameters = $Params["Parameters"];
33
34 if ( $http->hasPostVariable( 'Cancel' ) )
35 {
36     return $Module->redirectTo( $http->postVariable( 'RedirectToURI' ) );
37 }
38
39 $ini = eZINI::instance();
40 $tpl = templateInit();
41
42 $Result = array();
43 $Result['path'] = array( array( 'url' => false,
44                                 'text' => ezpI18n::translate( 'kernel/design', 'Template edit' ) ) );
45
46 $template = "";
47 $i = 0;
48 foreach ( $parameters as $param )
49 {
50     if ( $i > 0 )
51         $template .= "/";
52     $template .= "$param";
53     $i++;
54 }
55
56 $siteAccess = $Params['SiteAccess'];
57 if( $siteAccess )
58     $http->setSessionVariable( 'eZTemplateAdminCurrentSiteAccess', $siteAccess );
59 else
60     $siteAccess = $http->sessionVariable( 'eZTemplateAdminCurrentSiteAccess' );
61
62 $overrideArray = eZTemplateDesignResource::overrideArray( $siteAccess );
63
64 // Check if template already exists
65 $isExistingTemplate = false;
66 foreach ( $overrideArray as $overrideSetting )
67 {
68     if ( $overrideSetting['base_dir'] . $overrideSetting['template'] == $template )
69     {
70         $isExistingTemplate = true;
71         break;
72     }
73     elseif ( isset( $overrideSetting['custom_match'] ) )
74     {
75         foreach ( $overrideSetting['custom_match'] as $customMatch )
76         {
77             if ( $customMatch['match_file'] == $template )
78             {
79                 $isExistingTemplate = true;
80                 break 2;
81             }
82         }
83     }
84 }
85
86 if ( $isExistingTemplate == false )
87 {
88     $tpl->setVariable( 'template', $template );
89     $tpl->setVariable( 'template_exists', false );
90     $tpl->setVariable( 'original_template', false );
91     $tpl->setVariable( 'site_access', $siteAccess );
92
93     $Result['content'] = $tpl->fetch( "design:visual/templateedit_error.tpl" );
94     return;
95 }
96
97 // Find the main template for this override
98 $originalTemplate = false;
99 foreach ( $overrideArray as $overrideSetting )
100 {
101     if ( isset( $overrideSetting['custom_match'] ) )
102     {
103         foreach ( $overrideSetting['custom_match'] as $customMatch )
104         {
105             if ( $customMatch['match_file'] == $template )
106             {
107                 $originalTemplate = $overrideSetting['template'];
108                 break 2;
109             }
110         }
111     }
112 }
113
114 /* Check if we need to do characterset conversions for editting and saving
115  * templates. */
116 $templateConfig = eZINI::instance( 'template.ini' );
117 $i18nConfig = eZINI::instance( 'i18n.ini' );
118
119 /* First we check the HTML Output Charset */
120 $outputCharset = eZTextCodec::internalCharset();
121
122 if ( $module->isCurrentAction( 'Save' ) )
123 {
124     if ( $http->hasPostVariable( 'TemplateContent' ) )
125     {
126         $templateContent = $http->postVariable( 'TemplateContent' );
127
128         if ( $templateConfig->variable( 'CharsetSettings', 'AutoConvertOnSave') == 'enabled' )
129         {
130             $outputCharset = eZCharsetInfo::realCharsetCode( $outputCharset );
131             if ( preg_match( '|{\*\?template.*charset=([a-zA-Z0-9-]*).*\?\*}|', $templateContent, $matches ) )
132             {
133                 $templateContent = preg_replace( '|({\*\?template.*charset=)[a-zA-Z0-9-]*(.*\?\*})|',
134                                                  '\\1'. $outputCharset. '\\2',
135                                                  $templateContent );
136             }
137             else
138             {
139                 $templateCharset = eZCharsetInfo::realCharsetCode( $templateConfig->variable( 'CharsetSettings', 'DefaultTemplateCharset') );
140                 if ( $templateCharset != $outputCharset )
141                     $templateContent = "{*?template charset=$outputCharset?*}\n" . $templateContent;
142             }
143         }
144         else
145         {
146             /* Here we figure out the characterset of the template. If there is a charset
147              * associated with the template in the header we use that one, if not we fall
148              * back to the INI setting "DefaultTemplateCharset". */
149             if ( preg_match( '|{\*\?template.*charset=([a-zA-Z0-9-]*).*\?\*}|', $templateContent, $matches ) )
150             {
151                 $templateCharset = $matches[1];
152             }
153             else
154             {
155                 $templateCharset = $templateConfig->variable( 'CharsetSettings', 'DefaultTemplateCharset');
156             }
157
158             /* If we're saving a template after editting we need to convert it to the template's
159              * Charset. */
160             $codec = eZTextCodec::instance( $outputCharset, $templateCharset, false );
161             if ( $codec )
162             {
163                 $templateContent = $codec->convertString( $templateContent );
164             }
165         }
166
167         $fp = fopen( $template, 'w' );
168         if ( $fp )
169         {
170             fwrite( $fp, $templateContent );
171         }
172         fclose( $fp );
173
174         $siteConfig = eZINI::instance( 'site.ini' );
175         $filePermissions = $siteConfig->variable( 'FileSettings', 'StorageFilePermissions');
176         chmod( $template, octdec( $filePermissions ) );
177
178         // Expire content view cache
179         eZContentCacheManager::clearAllContentCache();
180
181         $module->redirectTo( '/visual/templateview'. $originalTemplate );
182         return eZModule::HOOK_STATUS_CANCEL_RUN;
183     }
184 }
185
186
187 if ( $module->isCurrentAction( 'Discard' ) )
188 {
189     $module->redirectTo( '/visual/templateview'. $originalTemplate );
190     return eZModule::HOOK_STATUS_CANCEL_RUN;
191 }
192
193 // get the content of the template
194 $fileName = $template;
195
196 if ( !is_readable( $fileName ) )
197 {
198     $tpl->setVariable( 'template', $template );
199     $tpl->setVariable( 'template_exists', true );
200     $tpl->setVariable( 'original_template', $originalTemplate );
201     $tpl->setVariable( 'is_readable', false );
202     $tpl->setVariable( 'site_access', $siteAccess );
203
204     $Result['content'] = $tpl->fetch( "design:visual/templateedit_error.tpl" );
205     return;
206 }
207
208 if ( !is_writable( $fileName ) )
209 {
210     if ( $http->hasPostVariable( 'OpenReadOnly' ) )
211     {
212         $tpl->setVariable( 'is_writable', false );
213     }
214     else
215     {
216         $tpl->setVariable( 'template', $template );
217         $tpl->setVariable( 'template_exists', true );
218         $tpl->setVariable( 'original_template', $originalTemplate );
219         $tpl->setVariable( 'is_readable', true );
220         $tpl->setVariable( 'site_access', $siteAccess );
221
222         $Result['content'] = $tpl->fetch( "design:visual/templateedit_error.tpl" );
223         return;
224     }
225 }
226 else
227 {
228     $tpl->setVariable( 'is_writable', true );
229 }
230
231 $templateContent = file_get_contents( $fileName );
232
233 /* Here we figure out the characterset of the template. If there is a charset
234  * associated with the template in the header we use that one, if not we fall
235  * back to the INI setting "DefaultTemplateCharset". */
236 if ( preg_match('|{\*\?template.*charset=([a-zA-Z0-9-]*).*\?\*}|', $templateContent, $matches ) )
237 {
238     $templateCharset = $matches[1];
239 }
240 else
241 {
242     $templateCharset = $templateConfig->variable( 'CharsetSettings', 'DefaultTemplateCharset');
243 }
244
245 /* If we're loading a template for editting we need to convert it to the HTTP
246  * Charset. */
247 $codec = eZTextCodec::instance( $templateCharset, $outputCharset, false );
248 if ( $codec )
249 {
250     $templateContent = $codec->convertString( $templateContent );
251 }
252
253 $tpl->setVariable( 'template', $template );
254 $tpl->setVariable( 'template_content', $templateContent );
255
256 $Result['content'] = $tpl->fetch( "design:visual/templateedit.tpl" );
257
258 ?>