- Fixed #16160: Call to undefined function ezi18n()
[tinyz:tinyz.git] / kernel / content / urlalias_global.php
1 <?php
2 //
3 // Created on: <08-Aug-2003 11:27:10 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 /*! \file
30 */
31 require_once( 'kernel/common/template.php' );
32 $Module = $Params['Module'];
33 $http = eZHTTPTool::instance();
34
35 $Offset = $Params['Offset'];
36 $viewParameters = array( 'offset' => $Offset );
37
38 $tpl = templateInit();
39 $limit = 20;
40
41 // TODO: For PHP 5, merge similar code in urlalias.php and urlalias_global.php into a function/class.
42
43 $infoCode = 'no-errors'; // This will be modified if info/warning is given to user.
44 $infoData = array(); // Extra parameters can be added to this array
45 $aliasText = false;
46 $aliasDestinationText = false;
47 $aliasOutputText = false;
48 $aliasOutputDestinationText = false;
49
50 if ( $Module->isCurrentAction( 'RemoveAllAliases' ) )
51 {
52     $filter = new eZURLAliasQuery();
53     $filter->actionTypesEx = array( 'eznode', 'nop' );
54     $filter->offset = 0;
55     $filter->limit = 50;
56
57     while ( true )
58     {
59         $aliasList = $filter->fetchAll();
60         if ( count( $aliasList ) == 0 )
61             break;
62         foreach ( $aliasList as $alias )
63         {
64             $parentID = (int)$alias->attribute( 'parent' );
65             $textMD5  = $alias->attribute( 'text_md5' );
66             $language = $alias->attribute( 'language_object' );
67             eZURLAliasML::removeSingleEntry( $parentID, $textMD5, $language );
68         }
69         $filter->prepare();
70     }
71     $infoCode = "feedback-removed-all";
72 }
73 else if ( $Module->isCurrentAction( 'RemoveAlias' ) )
74 {
75     if ( $http->hasPostVariable( 'ElementList' ) )
76     {
77         $elementList = $http->postVariable( 'ElementList' );
78         if ( !is_array( $elementList ) )
79             $elementList = array();
80         foreach ( $elementList as $element )
81         {
82             if ( preg_match( "#^([0-9]+).([a-fA-F0-9]+).([a-zA-Z0-9-]+)$#", $element, $matches ) )
83             {
84                 $parentID = (int)$matches[1];
85                 $textMD5  = $matches[2];
86                 $language = $matches[3];
87                 eZURLAliasML::removeSingleEntry( $parentID, $textMD5, $language );
88             }
89         }
90         $infoCode = "feedback-removed";
91     }
92 }
93 else if ( $Module->isCurrentAction( 'NewAlias' ) )
94 {
95     $aliasText = trim( $Module->actionParameter( 'AliasSourceText' ) );
96     $aliasDestinationTextUnmodified = $Module->actionParameter( 'AliasDestinationText' );
97     $aliasDestinationText = trim( $aliasDestinationTextUnmodified, " \t\r\n\0\x0B/" );
98     $isAlwaysAvailable = $http->hasPostVariable( 'AllLanguages' ) && strlen( trim( $http->postVariable( 'AllLanguages' ) ) ) > 0;
99     $languageCode = $Module->actionParameter( 'LanguageCode' );
100     $language = eZContentLanguage::fetchByLocale( $languageCode );
101     $aliasRedirects  = $http->hasPostVariable( 'AliasRedirects' ) && $http->postVariable( 'AliasRedirects' );
102
103     if ( !$language )
104     {
105         $infoCode = "error-invalid-language";
106         $infoData['language'] = $languageCode;
107     }
108     else if ( strlen( $aliasText ) == 0 )
109     {
110         $infoCode = "error-no-alias-text";
111     }
112     else if ( strlen( trim( $aliasDestinationTextUnmodified ) ) == 0 )
113     {
114         $infoCode = "error-no-alias-destination-text";
115     }
116     else
117     {
118         $parentID = 0; // Start from the top
119         $linkID   = 0;
120         $mask = $language->attribute( 'id' );
121         if ( $isAlwaysAvailable )
122             $mask |= 1;
123
124         $action = eZURLAliasML::urlToAction( $aliasDestinationText );
125         if ( !$action )
126         {
127             $elements = eZURLAliasML::fetchByPath( $aliasDestinationText );
128             if ( count( $elements ) > 0 )
129             {
130                 $action = $elements[0]->attribute( 'action' );
131                 $linkID = $elements[0]->attribute( 'link' );
132             }
133         }
134         if ( !$action )
135         {
136             $infoCode = "error-action-invalid";
137             $infoData['aliasText'] = $aliasDestinationText;
138         }
139         else
140         {
141             $origAliasText = $aliasText;
142             if ( $linkID == 0 )
143                 $linkID = true;
144             $result = eZURLAliasML::storePath( $aliasText, $action,
145                                                $language, $linkID, $isAlwaysAvailable, $parentID,
146                                                true, false, false, $aliasRedirects );
147             if ( $result['status'] === eZURLAliasML::LINK_ALREADY_TAKEN )
148             {
149                 $lastElements = eZURLAliasML::fetchByPath( $result['path'] );
150                 if ( count ( $lastElements ) > 0 )
151                 {
152                     $lastElement  = $lastElements[0];
153                     $infoCode = "feedback-alias-exists";
154                     $infoData['new_alias'] = $aliasText;
155                     $infoData['url'] = $lastElement->attribute( 'path' );
156                     $infoData['action_url'] = $lastElement->actionURL();
157                     $aliasText = $origAliasText;
158                 }
159             }
160             else if ( $result['status'] === true )
161             {
162                 $aliasText = $result['path'];
163                 if ( strcmp( $aliasText, $origAliasText ) != 0 )
164                 {
165                     $infoCode = "feedback-alias-cleanup";
166                     $infoData['orig_alias']  = $origAliasText;
167                     $infoData['new_alias'] = $aliasText;
168                 }
169                 else
170                 {
171                     $infoData['new_alias'] = $aliasText;
172                 }
173                 if ( $infoCode == 'no-errors' )
174                 {
175                     $infoCode = "feedback-alias-created";
176                 }
177                 $aliasText = false;
178                 $aliasOutputText = false;
179                 $aliasOutputDestinationText = false;
180             }
181             if ( preg_match( "#^eznode:(.+)$#", $action, $matches ) )
182             {
183                 $infoData['node_id'] = $matches[1];
184             }
185         }
186     }
187 }
188
189 // User preferences
190 $limitList = array( array( 'id'    => 1,
191                            'value' => 10 ),
192                     array( 'id'    => 2,
193                            'value' => 25 ),
194                     array( 'id'    => 3,
195                            'value' => 50 ),
196                     array( 'id'    => 4,
197                            'value' => 100 ) );
198 $limitID = eZPreferences::value( 'admin_urlalias_list_limit' );
199 foreach ( $limitList as $limitEntry )
200 {
201     $limitIDs[]                     = $limitEntry['id'];
202     $limitValues[$limitEntry['id']] = $limitEntry['value'];
203 }
204 if ( !in_array( $limitID, $limitIDs ) )
205 {
206     $limitID = 2;
207 }
208
209 // Fetch global custom aliases (excluding eznode)
210 $filter = new eZURLAliasQuery();
211 $filter->actionTypesEx = array( 'eznode', 'nop' );
212 $filter->offset = $Offset;
213 $filter->limit = $limitValues[$limitID];
214
215 // Prime the internal data for the template, for PHP5 this is no longer needed since objects will not be copied anymore in the template code.
216 $count = $filter->count();
217 $aliasList = $filter->fetchAll();
218 $path = array();
219 $path[] = array( 'url'  => false,
220                  'text' => ezpI18n::translate( 'kernel/content/urlalias_global', 'Global URL aliases' ) );
221
222 $languages = eZContentLanguage::prioritizedLanguages();
223
224 $tpl->setVariable( 'filter', $filter );
225 $tpl->setVariable( 'languages', $languages );
226 $tpl->setVariable( 'info_code', $infoCode );
227 $tpl->setVariable( 'info_data', $infoData );
228 $tpl->setVariable( 'aliasSourceText', $aliasOutputText );
229 $tpl->setVariable( 'aliasDestinationText', $aliasOutputDestinationText );
230 $tpl->setVariable( 'limitList', $limitList );
231 $tpl->setVariable( 'limitID', $limitID );
232 $tpl->setVariable( 'view_parameters', $viewParameters );
233
234 $Result = array();
235 $Result['content'] = $tpl->fetch( 'design:content/urlalias_global.tpl' );
236 $Result['path'] = $path;
237
238 ?>