source: trunk/setup/applications.php @ 2

Revision 2, 19.8 KB checked in by niltonneto, 17 years ago (diff)

Removida todas as tags usadas pelo CVS ($Id, $Source).
Primeira versão no CVS externo.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
Line 
1<?php
2  /**************************************************************************\
3  * eGroupWare - Setup                                                       *
4  * http://www.egroupware.org                                                *
5  * --------------------------------------------                             *
6  *  This program is free software; you can redistribute it and/or modify it *
7  *  under the terms of the GNU General Public License as published by the   *
8  *  Free Software Foundation; either version 2 of the License, or (at your  *
9  *  option) any later version.                                              *
10  \**************************************************************************/
11
12
13        $DEBUG = @$_POST['debug'] || @$_GET['debug'];
14        /*
15         TODO: We allow a user to hose their setup here, need to make use
16         of dependencies so they are warned that they are pulling the rug
17         out from under other apps.  e.g. if they select to uninstall the api
18         this will happen without further warning.
19        */
20
21        $phpgw_info = array();
22        $GLOBALS['phpgw_info']['flags'] = array(
23                'noheader' => True,
24                'nonavbar' => True,
25                'currentapp' => 'home',
26                'noapi' => True
27        );
28        include ('./inc/functions.inc.php');
29
30        @set_time_limit(0);
31
32        // Check header and authentication
33        if (!$GLOBALS['phpgw_setup']->auth('Config'))
34        {
35                Header('Location: index.php');
36                exit;
37        }
38        // Does not return unless user is authorized
39
40        $tpl_root = $GLOBALS['phpgw_setup']->html->setup_tpl_dir('setup');
41        $setup_tpl = CreateObject('setup.Template',$tpl_root);
42        $setup_tpl->set_file(array(
43                'T_head' => 'head.tpl',
44                'T_footer' => 'footer.tpl',
45                'T_alert_msg' => 'msg_alert_msg.tpl',
46                'T_login_main' => 'login_main.tpl',
47                'T_login_stage_header' => 'login_stage_header.tpl',
48                'T_setup_main' => 'applications.tpl'
49        ));
50
51        $setup_tpl->set_block('T_login_stage_header','B_multi_domain','V_multi_domain');
52        $setup_tpl->set_block('T_login_stage_header','B_single_domain','V_single_domain');
53        $setup_tpl->set_block('T_setup_main','header','header');
54        $setup_tpl->set_block('T_setup_main','app_header','app_header');
55        $setup_tpl->set_block('T_setup_main','apps','apps');
56        $setup_tpl->set_block('T_setup_main','detail','detail');
57        $setup_tpl->set_block('T_setup_main','table','table');
58        $setup_tpl->set_block('T_setup_main','hook','hook');
59        $setup_tpl->set_block('T_setup_main','dep','dep');
60        $setup_tpl->set_block('T_setup_main','app_footer','app_footer');
61        $setup_tpl->set_block('T_setup_main','submit','submit');
62        $setup_tpl->set_block('T_setup_main','footer','footer');
63
64        $bgcolor = array('#DDDDDD','#EEEEEE');
65
66        function parsedep($depends,$main=True)
67        {
68                $depstring = '(';
69                foreach($depends as $a => $b)
70                {
71                        foreach($b as $c => $d)
72                        {
73                                if (is_array($d))
74                                {
75                                        $depstring .= $c . ': ' .implode(',',$d) . '; ';
76                                        $depver[] = $d;
77                                }
78                                else
79                                {
80                                        $depstring .= $c . ': ' . $d . '; ';
81                                        $depapp[] = $d;
82                                }
83                        }
84                }
85                $depstring .= ')';
86                if ($main)
87                {
88                        return $depstring;
89                }
90                else
91                {
92                        return array($depapp,$depver);
93                }
94        }
95
96        $GLOBALS['phpgw_setup']->loaddb();
97        $GLOBALS['phpgw_info']['setup']['stage']['db'] = $GLOBALS['phpgw_setup']->detection->check_db();
98
99        $setup_info = $GLOBALS['phpgw_setup']->detection->get_versions();
100        //var_dump($setup_info);exit;
101        $setup_info = $GLOBALS['phpgw_setup']->detection->get_db_versions($setup_info);
102        //var_dump($setup_info);exit;
103        $setup_info = $GLOBALS['phpgw_setup']->detection->compare_versions($setup_info);
104        //var_dump($setup_info);exit;
105        $setup_info = $GLOBALS['phpgw_setup']->detection->check_depends($setup_info);
106        //var_dump($setup_info);exit;
107        @ksort($setup_info);
108
109        if(@get_var('cancel',Array('POST')))
110        {
111                Header("Location: index.php");
112                exit;
113        }
114
115        if(@get_var('submit',Array('POST')))
116        {
117                $GLOBALS['phpgw_setup']->html->show_header(lang('Application Management'),False,'config',$GLOBALS['phpgw_setup']->ConfigDomain . '(' . $phpgw_domain[$GLOBALS['phpgw_setup']->ConfigDomain]['db_type'] . ')');
118                $setup_tpl->set_var('description',lang('App install/remove/upgrade') . ':');
119                $setup_tpl->pparse('out','header');
120
121                $appname = get_var('appname',Array('POST'));
122                $remove  = get_var('remove',Array('POST'));
123                $install = get_var('install',Array('POST'));
124                $upgrade = get_var('upgrade',Array('POST'));
125
126                if(!empty($remove) && is_array($remove))
127                {
128                        $historylog = CreateObject('phpgwapi.historylog');
129                        $historylog->db = $GLOBALS['phpgw_setup']->db;
130
131                        foreach($remove as $appname => $key)
132                        {
133                                $terror = array();
134                                $terror[] = $setup_info[$appname];
135
136                                if ($setup_info[$appname]['tables'])
137                                {
138                                        $GLOBALS['phpgw_setup']->process->droptables($terror,$DEBUG);
139                                        echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('tables dropped') . '.';
140                                }
141
142                                $GLOBALS['phpgw_setup']->deregister_app($setup_info[$appname]['name']);
143                                echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('deregistered') . '.';
144
145                                if ($setup_info[$appname]['hooks'])
146                                {
147                                        $GLOBALS['phpgw_setup']->deregister_hooks($setup_info[$appname]['name']);
148                                        echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('hooks deregistered') . '.';
149                                }
150
151                                $terror = $GLOBALS['phpgw_setup']->process->drop_langs($terror,$DEBUG);
152                                echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('Translations removed') . '.';
153
154                                if ($historylog->delete($appname))
155                                {
156                                        echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('Historylog removed') . '.';
157                                }
158
159                                // delete all application categories and ACL
160                                $GLOBALS['phpgw_setup']->db->query("DELETE FROM phpgw_categories WHERE cat_appname='$appname'",__LINE__,__FILE__);
161                                $GLOBALS['phpgw_setup']->db->query("DELETE FROM phpgw_acl WHERE acl_appname='$appname'",__LINE__,__FILE__);
162                        }
163                }
164
165                if(!empty($install) && is_array($install))
166                {
167                        foreach($install as $appname => $key)
168                        {
169                                $terror = array();
170                                $terror[] = $setup_info[$appname];
171
172                                if ($setup_info[$appname]['tables'])
173                                {
174                                        $terror = $GLOBALS['phpgw_setup']->process->current($terror,$DEBUG);
175                                        $terror = $GLOBALS['phpgw_setup']->process->default_records($terror,$DEBUG);
176                                        echo '<br>' . $setup_info[$appname]['title'] . ' '
177                                                . lang('tables installed, unless there are errors printed above') . '.';
178                                }
179                                else
180                                {
181                                        if ($GLOBALS['phpgw_setup']->app_registered($setup_info[$appname]['name']))
182                                        {
183                                                $GLOBALS['phpgw_setup']->update_app($setup_info[$appname]['name']);
184                                        }
185                                        else
186                                        {
187                                                $GLOBALS['phpgw_setup']->register_app($setup_info[$appname]['name']);
188                                        }
189                                        echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('registered') . '.';
190
191                                        if ($setup_info[$appname]['hooks'])
192                                        {
193                                                $GLOBALS['phpgw_setup']->register_hooks($setup_info[$appname]['name']);
194                                                echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('hooks registered') . '.';
195                                        }
196                                }
197                                $force_en = False;
198                                if($appname == 'phpgwapi')
199                                {
200                                        $force_en = True;
201                                }
202                                $terror = $GLOBALS['phpgw_setup']->process->add_langs($terror,$DEBUG,$force_en);
203                                echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('Translations added') . '.';
204                        }
205                }
206
207                if(!empty($upgrade) && is_array($upgrade))
208                {
209                        foreach($upgrade as $appname => $key)
210                        {
211                                $terror = array();
212                                $terror[] = $setup_info[$appname];
213
214                                $GLOBALS['phpgw_setup']->process->upgrade($terror,$DEBUG);
215                                if ($setup_info[$appname]['tables'])
216                                {
217                                        echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('tables upgraded') . '.';
218                                        // The process_upgrade() function also handles registration
219                                }
220                                else
221                                {
222                                        echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('upgraded') . '.';
223                                }
224
225                                $terror = $GLOBALS['phpgw_setup']->process->upgrade_langs($terror,$DEBUG);
226                                echo '<br>' . $setup_info[$appname]['title'] . ' ' . lang('Translations upgraded') . '.';
227                        }
228                }
229
230                //$setup_tpl->set_var('goback',
231                echo '<br><a href="applications.php?debug='.$DEBUG.'">' . lang('Go back') . '</a>';
232                //$setup_tpl->pparse('out','submit');
233                $setup_tpl->pparse('out','footer');
234                exit;
235        }
236        else
237        {
238                $GLOBALS['phpgw_setup']->html->show_header(lang('Application Management'),False,'config',$GLOBALS['phpgw_setup']->ConfigDomain . '(' . $phpgw_domain[$GLOBALS['phpgw_setup']->ConfigDomain]['db_type'] . ')');
239        }
240
241        $detail = get_var('detail',Array('GET'));
242        $resolve = get_var('resolve',Array('GET'));
243        if(@$detail)
244        {
245                @ksort($setup_info[$detail]);
246                $setup_tpl->set_var('description',lang('App details') . ':');
247                $setup_tpl->pparse('out','header');
248
249                $setup_tpl->set_var('name','application');
250                $setup_tpl->set_var('details', lang($setup_info[$detail]['title']));
251                $setup_tpl->pparse('out','detail');
252
253                foreach($setup_info[$detail] as $key => $val)
254                {
255                        if($key != 'title')
256                        {
257                                $i = ($i ? 0 : 1);
258
259
260                                if ($key == 'tables')
261                                {
262                                        $tblcnt = count($setup_info[$detail][$key]);
263                                        if(is_array($val))
264                                        {
265                                                $key = '<a href="sqltoarray.php?appname=' . $detail . '&submit=True&apps=True">' . $key . '(' . $tblcnt . ')</a>' . "\n";
266                                                $val = implode(',' . "\n",$val);
267                                        }
268                                }
269                                if ($key == 'hooks')   { $val = implode(',',$val); }
270                                if ($key == 'depends') { $val = parsedep($val); }
271                                if (is_array($val))    { $val = implode(',',$val); }
272
273                                $setup_tpl->set_var('bg_color',$bgcolor[$i]);
274                                $setup_tpl->set_var('name',$key);
275                                $setup_tpl->set_var('details',$val);
276                                $setup_tpl->pparse('out','detail');
277                        }
278                }
279
280                echo '<br><a href="applications.php?debug='.$DEBUG.'">' . lang('Go back') . '</a>';
281                $setup_tpl->pparse('out','footer');
282                exit;
283        }
284        elseif (@$resolve)
285        {
286                $version  = get_var('version',Array('GET'));
287                $notables = get_var('notables',Array('GET'));
288                $setup_tpl->set_var('description',lang('Problem resolution'). ':');
289                $setup_tpl->pparse('out','header');
290
291                if(get_var('post',Array('GET')))
292                {
293                        echo '"' . $setup_info[$resolve]['title'] . '" ' . lang('may be broken') . ' ';
294                        echo lang('because an application it depends upon was upgraded');
295                        echo '<br>';
296                        echo lang('to a version it does not know about') . '.';
297                        echo '<br>';
298                        echo lang('However, the application may still work') . '.';
299                }
300                elseif(get_var('badinstall',Array('GET')))
301                {
302                        echo '"' . $setup_info[$resolve]['title'] . '" ' . lang('is broken') . ' ';
303                        echo lang('because of a failed upgrade or install') . '.';
304                        echo '<br>';
305                        echo lang('Some or all of its tables are missing') . '.';
306                        echo '<br>';
307                        echo lang('You should either uninstall and then reinstall it, or attempt manual repairs') . '.';
308                }
309                elseif (!$version)
310                {
311                        if($setup_info[$resolve]['enabled'])
312                        {
313                                echo '"' . $setup_info[$resolve]['title'] . '" ' . lang('is broken') . ' ';
314                        }
315                        else
316                        {
317                                echo '"' . $setup_info[$resolve]['title'] . '" ' . lang('is disabled') . ' ';
318                        }
319
320                        if (!$notables)
321                        {
322                                if($setup_info[$resolve]['status'] == 'D')
323                                {
324                                        echo lang('because it depends upon') . ':<br>' . "\n";
325                                        list($depapp,$depver) = parsedep($setup_info[$resolve]['depends'],False);
326                                $depapp_count = count($depapp);
327                                        for ($i=0; $i<$depapp_count; $i++)
328                                        {
329                                                echo '<br>' . $depapp[$i] . ': ';
330                                                $list = '';
331                                                foreach($depver[$i] as $x => $y)
332                                                {
333                                                        $list .= $y . ', ';
334                                                }
335                                                $list = substr($list,0,-2);
336                                                echo "$list\n";
337                                        }
338                                        echo '<br><br>' . lang('The table definition was correct, and the tables were installed') . '.';
339                                }
340                                else
341                                {
342                                        echo lang('because it was manually disabled') . '.';
343                                }
344                        }
345                        elseif($setup_info[$resolve]['enable'] == 2)
346                        {
347                                echo lang('because it is not a user application, or access is controlled via acl') . '.';
348                        }
349                        elseif($setup_info[$resolve]['enable'] == 0)
350                        {
351                                echo lang('because the enable flag for this app is set to 0, or is undefined') . '.';
352                        }
353                        else
354                        {
355                                echo lang('because it requires manual table installation, <br>or the table definition was incorrect') . ".\n"
356                                        . lang("Please check for sql scripts within the application's directory") . '.';
357                        }
358                        echo '<br>' . lang('However, the application is otherwise installed') . '.';
359                }
360                else
361                {
362                        echo $setup_info[$resolve]['title'] . ' ' . lang('has a version mismatch') . ' ';
363                        echo lang('because of a failed upgrade, or the database is newer than the installed version of this app') . '.';
364                        echo '<br>';
365                        echo lang('If the application has no defined tables, selecting upgrade should remedy the problem') . '.';
366                        echo '<br>' . lang('However, the application is otherwise installed') . '.';
367                }
368
369                echo '<br><a href="applications.php?debug='.$DEBUG.'">' . lang('Go back') . '</a>';
370                $setup_tpl->pparse('out','footer');
371                exit;
372        }
373        else
374        {
375                $setup_tpl->set_var('description',lang('Select the desired action(s) from the available choices'));
376                $setup_tpl->pparse('out','header');
377
378                $setup_tpl->set_var('appdata',lang('Application Data'));
379                $setup_tpl->set_var('actions',lang('Actions'));
380                $setup_tpl->set_var('action_url','applications.php');
381                $setup_tpl->set_var('app_info',lang('Application Name and Status Information'));
382                $setup_tpl->set_var('app_title',lang('Application Title'));
383                $setup_tpl->set_var('app_currentver',lang('Current Version'));
384                $setup_tpl->set_var('app_version',lang('Available Version'));
385                $setup_tpl->set_var('app_install',lang('Install'));
386                $setup_tpl->set_var('app_remove',lang('Remove'));
387                $setup_tpl->set_var('app_upgrade',lang('Upgrade'));
388                $setup_tpl->set_var('app_resolve',lang('Resolve'));
389                $setup_tpl->set_var('check','check.png');
390                $setup_tpl->set_var('install_all',lang('Install All'));
391                $setup_tpl->set_var('upgrade_all',lang('Upgrade All'));
392                $setup_tpl->set_var('remove_all',lang('Remove All'));
393                $setup_tpl->set_var('lang_debug',lang('enable for extra debug-messages'));
394                $setup_tpl->set_var('debug','<input type="checkbox" name="debug" value="True"' .($DEBUG ? ' checked' : '') . '>');
395                $setup_tpl->set_var('bg_color',$bgcolor[0]);
396
397                $setup_tpl->pparse('out','app_header');
398
399                $i = 0;
400                foreach($setup_info as $key => $value)
401                {
402                        if(@$value['name'])
403                        {
404                                $i = ($i ? 0 : 1);
405                                $setup_tpl->set_var('apptitle',$value['title']?$value['title']:lang($value['name']));
406                                $setup_tpl->set_var('currentver',@$value['currentver']);
407                                $setup_tpl->set_var('version',$value['version']);
408                                $setup_tpl->set_var('bg_color',$bgcolor[$i]);
409                       
410                                switch($value['status'])
411                                {
412                                        case 'C':
413                                                $setup_tpl->set_var('remove','<input type="checkbox" name="remove[' . $value['name'] . ']">');
414                                                $setup_tpl->set_var('upgrade','&nbsp;');
415                                                if (!$GLOBALS['phpgw_setup']->detection->check_app_tables($value['name']))
416                                                {
417                                                        // App installed and enabled, but some tables are missing
418                                                        $setup_tpl->set_var('instimg','table.png');
419                                                        $setup_tpl->set_var('bg_color','FFCCAA');
420                                                        $setup_tpl->set_var('instalt',lang('Not Completed'));
421                                                        $setup_tpl->set_var('resolution','<a href="applications.php?resolve=' . $value['name'] . '&badinstall=True">' . lang('Potential Problem') . '</a>');
422                                                        $status = lang('Requires reinstall or manual repair') . ' - ' . $value['status'];
423                                                }
424                                                else
425                                                {
426                                                        $setup_tpl->set_var('instimg','completed.png');
427                                                        $setup_tpl->set_var('instalt',lang('Completed'));
428                                                        $setup_tpl->set_var('install','&nbsp;');
429                                                        if($value['enabled'])
430                                                        {
431                                                                $setup_tpl->set_var('resolution','');
432                                                                $status = lang('OK') . ' - ' . $value['status'];
433                                                        }
434                                                        else
435                                                        {
436                                                                if ($value['tables'][0] != '')
437                                                                {
438                                                                        $notables = '&notables=True';
439                                                                }
440                                                                $setup_tpl->set_var('bg_color','CCCCFF');
441                                                                $setup_tpl->set_var('resolution',
442                                                                        '<a href="applications.php?resolve=' . $value['name'] .  $notables . '">' . lang('Possible Reasons') . '</a>'
443                                                                );
444                                                                $status = lang('Disabled') . ' - ' . $value['status'];
445                                                        }
446                                                }
447                                                break;
448                                        case 'U':
449                                                $setup_tpl->set_var('instimg','incomplete.png');
450                                                $setup_tpl->set_var('instalt',lang('Not Completed'));
451                                                if (!@$value['currentver'])
452                                                {
453                                                        if ($value['tables'] && $GLOBALS['phpgw_setup']->detection->check_app_tables($value['name'],True))
454                                                        {
455                                                                // Some tables missing
456                                                                $setup_tpl->set_var('remove','<input type="checkbox" name="remove[' . $value['name'] . ']">');
457                                                                $setup_tpl->set_var('resolution','<a href="applications.php?resolve=' . $value['name'] . '&badinstall=True">' . lang('Potential Problem') . '</a>');
458                                                                $status = lang('Requires reinstall or manual repair') . ' - ' . $value['status'];
459                                                        }
460                                                        else
461                                                        {
462                                                                $setup_tpl->set_var('remove','&nbsp;');
463                                                                $setup_tpl->set_var('resolution','');
464                                                                $status = lang('Requires upgrade') . ' - ' . $value['status'];
465                                                        }
466                                                        $setup_tpl->set_var('bg_color','CCFFCC');
467                                                        $setup_tpl->set_var('install','<input type="checkbox" name="install[' . $value['name'] . ']">');
468                                                        $setup_tpl->set_var('upgrade','&nbsp;');
469                                                        $status = lang('Please install') . ' - ' . $value['status'];
470                                                }
471                                                else
472                                                {
473                                                        $setup_tpl->set_var('bg_color','CCCCFF');
474                                                        $setup_tpl->set_var('install','&nbsp;');
475                                                        // TODO display some info about breakage if you mess with this app
476                                                        $setup_tpl->set_var('upgrade','<input type="checkbox" name="upgrade[' . $value['name'] . ']">');
477                                                        $setup_tpl->set_var('remove','<input type="checkbox" name="remove[' . $value['name'] . ']">');
478                                                        $setup_tpl->set_var('resolution','');
479                                                        $status = lang('Requires upgrade') . ' - ' . $value['status'];
480                                                }
481                                                break;
482                                        case 'V':
483                                                $setup_tpl->set_var('instimg','incomplete.png');
484                                                $setup_tpl->set_var('instalt',lang('Not Completed'));
485                                                $setup_tpl->set_var('install','&nbsp;');
486                                                $setup_tpl->set_var('remove','<input type="checkbox" name="remove[' . $value['name'] . ']">');
487                                                $setup_tpl->set_var('upgrade','<input type="checkbox" name="upgrade[' . $value['name'] . ']">');
488                                                $setup_tpl->set_var('resolution','<a href="applications.php?resolve=' . $value['name'] . '&version=True">' . lang('Possible Solutions') . '</a>');
489                                                $status = lang('Version Mismatch') . ' - ' . $value['status'];
490                                                break;
491                                        case 'D':
492                                                $setup_tpl->set_var('bg_color','FFCCCC');
493                                                $depstring = parsedep($value['depends']);
494                                                $depstring .= ')';
495                                                $setup_tpl->set_var('instimg','dep.png');
496                                                $setup_tpl->set_var('instalt',lang('Dependency Failure'));
497                                                $setup_tpl->set_var('install','&nbsp;');
498                                                $setup_tpl->set_var('remove','&nbsp;');
499                                                $setup_tpl->set_var('upgrade','&nbsp;');
500                                                $setup_tpl->set_var('resolution','<a href="applications.php?resolve=' . $value['name'] . '">' . lang('Possible Solutions') . '</a>');
501                                                $status = lang('Dependency Failure') . ':' . $depstring . $value['status'];
502                                                break;
503                                        case 'P':
504                                                $setup_tpl->set_var('bg_color','FFCCFF');
505                                                $depstring = parsedep($value['depends']);
506                                                $depstring .= ')';
507                                                $setup_tpl->set_var('instimg','dep.png');
508                                                $setup_tpl->set_var('instalt',lang('Post-install Dependency Failure'));
509                                                $setup_tpl->set_var('install','&nbsp;');
510                                                $setup_tpl->set_var('remove','&nbsp;');
511                                                $setup_tpl->set_var('upgrade','&nbsp;');
512                                                $setup_tpl->set_var('resolution','<a href="applications.php?resolve=' . $value['name'] . '&post=True">' . lang('Possible Solutions') . '</a>');
513                                                $status = lang('Post-install Dependency Failure') . ':' . $depstring . $value['status'];
514                                                break;
515                                        default:
516                                                $setup_tpl->set_var('instimg','incomplete.png');
517                                                $setup_tpl->set_var('instalt',lang('Not Completed'));
518                                                $setup_tpl->set_var('install','&nbsp;');
519                                                $setup_tpl->set_var('remove','&nbsp;');
520                                                $setup_tpl->set_var('upgrade','&nbsp;');
521                                                $setup_tpl->set_var('resolution','');
522                                                $status = '';
523                                                break;
524                                }
525                                //$setup_tpl->set_var('appname',$value['name'] . '-' . $status . ',' . $value['filename']);
526                                $setup_tpl->set_var('appinfo',$value['name'] . '-' . $status);
527                                $setup_tpl->set_var('appname',$value['name']);
528
529                                $setup_tpl->pparse('out','apps',True);
530                        }
531                }
532
533                $setup_tpl->set_var('submit',lang('Save'));
534                $setup_tpl->set_var('cancel',lang('Cancel'));
535                $setup_tpl->pparse('out','app_footer');
536                $setup_tpl->pparse('out','footer');
537                $GLOBALS['phpgw_setup']->html->show_footer();
538        }
539?>
Note: See TracBrowser for help on using the repository browser.