source: extensions/AMetaData/amd_aip.class.inc.php @ 6919

Last change on this file since 6919 was 6919, checked in by grum, 14 years ago

Implement basic/advanced modes, release 0.5.1
bug:1857

  • Property svn:executable set to *
File size: 22.2 KB
Line 
1<?php
2/*
3 * -----------------------------------------------------------------------------
4 * Plugin Name: Advanced MetaData
5 * -----------------------------------------------------------------------------
6 * Author     : Grum
7 *   email    : grum@piwigo.org
8 *   website  : http://photos.grum.fr
9 *   PWG user : http://forum.piwigo.org/profile.php?id=3706
10 *
11 *   << May the Little SpaceFrog be with you ! >>
12 *
13 * -----------------------------------------------------------------------------
14 *
15 * See main.inc.php for release information
16 *
17 * AIP classe => manage integration in administration interface
18 *
19 * -----------------------------------------------------------------------------
20 */
21
22if (!defined('PHPWG_ROOT_PATH')) { die('Hacking attempt!'); }
23
24include_once('amd_root.class.inc.php');
25include_once(PHPWG_PLUGINS_PATH.'GrumPluginClasses/classes/GPCTabSheet.class.inc.php');
26include_once(PHPWG_PLUGINS_PATH.'GrumPluginClasses/classes/GPCAjax.class.inc.php');
27include_once(PHPWG_PLUGINS_PATH.'GrumPluginClasses/classes/genericjs.class.inc.php');
28
29
30class AMD_AIP extends AMD_root
31{
32  protected $tabsheet;
33
34  /**
35   *
36   * constructor needs the prefix of piwigo's tables and the location of plugin
37   *
38   * @param String $prefixeTable
39   * @param String $filelocation
40   */
41  public function __construct($prefixeTable, $filelocation)
42  {
43    parent::__construct($prefixeTable, $filelocation);
44
45    $this->loadConfig();
46    $this->configForTemplate();
47    $this->initEvents();
48
49    $this->tabsheet = new tabsheet();
50
51    if($this->config['amd_interfaceMode']=='basic')
52    {
53      $this->tabsheet->add('metadata',
54                            l10n('g003_metadata'),
55                            $this->getAdminLink().'&amp;fAMD_tabsheet=metadata');
56      $this->tabsheet->add('help',
57                            l10n('g003_help'),
58                            $this->getAdminLink().'&amp;fAMD_tabsheet=help');
59    }
60    else
61    {
62      $this->tabsheet->add('database',
63                            l10n('g003_database'),
64                            $this->getAdminLink().'&amp;fAMD_tabsheet=database');
65      $this->tabsheet->add('metadata',
66                            l10n('g003_metadata'),
67                            $this->getAdminLink().'&amp;fAMD_tabsheet=metadata');
68      $this->tabsheet->add('search',
69                            l10n('g003_search'),
70                            $this->getAdminLink().'&amp;fAMD_tabsheet=search');
71      $this->tabsheet->add('help',
72                            l10n('g003_help'),
73                            $this->getAdminLink().'&amp;fAMD_tabsheet=help');
74    }
75  }
76
77  public function __destruct()
78  {
79    unset($this->tabsheet);
80    unset($this->ajax);
81    parent::__destruct();
82  }
83
84
85  /*
86   * ---------------------------------------------------------------------------
87   * Public classe functions
88   * ---------------------------------------------------------------------------
89   */
90
91
92  /**
93   * manage the plugin integration into piwigo's admin interface
94   */
95  public function manage()
96  {
97    global $template, $page;
98
99    $this->initRequest();
100
101    $template->set_filename('plugin_admin_content', dirname(__FILE__)."/admin/amd_admin.tpl");
102
103    $this->tabsheet->select($_REQUEST['fAMD_tabsheet']);
104    $this->tabsheet->assign();
105    $selected_tab=$this->tabsheet->get_selected();
106    $template->assign($this->tabsheet->get_titlename(), "[".$selected_tab['caption']."]");
107
108    $pluginInfo=array(
109      'AMD_VERSION' => "<i>".$this->getPluginName()."</i> ".l10n('g003_version').AMD_VERSION,
110      'AMD_PAGE' => $_REQUEST['fAMD_tabsheet'],
111      'PATH' => AMD_PATH
112    );
113
114    $template->assign('plugin', $pluginInfo);
115
116    switch($_REQUEST['fAMD_tabsheet'])
117    {
118      case 'help':
119        $this->displayHelp();
120        break;
121      case 'database':
122        $this->displayDatabase($_REQUEST['fAMD_page']);
123        break;
124      case 'metadata':
125        $this->displayMetaData($_REQUEST['fAMD_page']);
126        break;
127      case 'search':
128        $this->displaySearch($_REQUEST['fAMD_page']);
129        break;
130    }
131
132    $template->assign_var_from_handle('ADMIN_CONTENT', 'plugin_admin_content');
133  }
134
135  /**
136   * initialize events call for the plugin
137   *
138   * don't inherits from its parent => it's normal
139   */
140  public function initEvents()
141  {
142    if(isset($_REQUEST['fAMD_tabsheet']) and $_REQUEST['fAMD_tabsheet']=='search')
143    {
144      // load request builder JS only on the search page
145      GPCRequestBuilder::loadJSandCSS();
146    }
147
148    add_event_handler('loc_end_page_header', array(&$this->css, 'applyCSS'));
149    GPCCss::applyGpcCss();
150  }
151
152  /**
153   * ---------------------------------------------------------------------------
154   * Private & protected functions
155   * ---------------------------------------------------------------------------
156   */
157
158  /**
159   * if empty, initialize the $_REQUEST var
160   *
161   * if not empty, check validity for the request values
162   *
163   */
164  private function initRequest()
165  {
166    //initialise $REQUEST values if not defined
167
168    if(!isset($_REQUEST['fAMD_tabsheet']))
169    {
170      if($this->getNumOfPictures()==0 and $this->config['amd_interfaceMode']=='advanced')
171      {
172        $_REQUEST['fAMD_tabsheet']="database";
173        $_REQUEST['fAMD_page']="state";
174      }
175      else
176      {
177        $_REQUEST['fAMD_tabsheet']="metadata";
178        $_REQUEST['fAMD_page']="select";
179      }
180    }
181
182    if(!($_REQUEST['fAMD_tabsheet']=="metadata" or
183         $_REQUEST['fAMD_tabsheet']=="help" or
184         $_REQUEST['fAMD_tabsheet']=="database" or
185         $_REQUEST['fAMD_tabsheet']=="search")
186         or
187         $this->config['amd_interfaceMode']=='basic' and
188         (
189           $_REQUEST['fAMD_tabsheet']=="database" or
190           $_REQUEST['fAMD_tabsheet']=="search"
191         )
192      )
193    {
194      $_REQUEST['fAMD_tabsheet']="metadata";
195    }
196
197    /*
198     * metadata tabsheet
199     */
200    if($_REQUEST['fAMD_tabsheet']=="metadata")
201    {
202      if(!isset($_REQUEST['fAMD_page']))
203      {
204        if($this->config['amd_interfaceMode']=='basic')
205        {
206          $_REQUEST['fAMD_page']="display";
207        }
208        else
209        {
210          $_REQUEST['fAMD_page']="select";
211        }
212      }
213
214      if(!($_REQUEST['fAMD_page']=="personnal" or
215           $_REQUEST['fAMD_page']=="select" or
216           $_REQUEST['fAMD_page']=="display")
217           or
218           $this->config['amd_interfaceMode']=='basic' and
219           (
220             $_REQUEST['fAMD_page']=="select"
221           )
222        )
223      {
224        if($this->config['amd_interfaceMode']=='basic')
225        {
226          $_REQUEST['fAMD_page']="display";
227        }
228        else
229        {
230          $_REQUEST['fAMD_page']="select";
231        }
232      }
233    }
234
235    /*
236     * help tabsheet
237     */
238    if($_REQUEST['fAMD_tabsheet']=="help")
239    {
240      if(!isset($_REQUEST['fAMD_page'])) $_REQUEST['fAMD_page']="exif";
241
242      if(!($_REQUEST['fAMD_page']=="exif" or
243           $_REQUEST['fAMD_page']=="iptc" or
244           $_REQUEST['fAMD_page']=="xmp" or
245           $_REQUEST['fAMD_page']=="magic")) $_REQUEST['fAMD_page']="exif";
246    }
247
248    /*
249     * search tabsheet
250     */
251    if($_REQUEST['fAMD_tabsheet']=="search")
252    {
253      if(!isset($_REQUEST['fAMD_page'])) $_REQUEST['fAMD_page']="search";
254
255      if(!($_REQUEST['fAMD_page']=="config" or
256           $_REQUEST['fAMD_page']=="search")) $_REQUEST['fAMD_page']="search";
257    }
258
259    /*
260     * database tabsheet
261     */
262    if($_REQUEST['fAMD_tabsheet']=="database")
263    {
264      if(!isset($_REQUEST['fAMD_page'])) $_REQUEST['fAMD_page']="state";
265
266      if(!($_REQUEST['fAMD_page']=="state" or
267           $_REQUEST['fAMD_page']=="update")) $_REQUEST['fAMD_page']="state";
268    }
269
270  } //init_request
271
272
273  /**
274   * manage adviser profile
275   *
276   * @return Boolean : true if user is adviser, otherwise false (and push a
277   *                   message in the error list)
278   */
279  protected function adviser_abort()
280  {
281    if(is_adviser())
282    {
283      $this->display_result(l10n("g003_adviser_not_allowed"), false);
284      return(true);
285    }
286    return(false);
287  }
288
289
290
291
292  /**
293   * display and manage the search page
294   */
295  protected function displaySearch()
296  {
297    global $template, $lang;
298
299    $template->set_filename('body_page',
300                dirname($this->getFileLocation()).'/admin/amd_metadata_search.tpl');
301
302    $template->assign('amd_search_page', GPCRequestBuilder::displaySearchPage($this->getPluginName()));
303
304    $template->assign_var_from_handle('AMD_BODY_PAGE', 'body_page');
305  }
306
307
308
309
310  /**
311   * display and manage the metadata page
312   * the page have three tabsheet :
313   *  - personnal tag management, to build personnal tags
314   *  - select tag management, to manage tags to be selected on the galerie
315   *  - display tag management, to choose how the tags are displayed
316   *
317   * @param String $tab : the selected tab on the stat page
318   */
319  protected function displayMetaData($tab)
320  {
321    global $template, $user;
322    $template->set_filename('body_page', dirname(__FILE__).'/admin/amd_metadata.tpl');
323
324    $statTabsheet = new GPCTabSheet('statTabsheet', $this->tabsheet->get_titlename(), 'tabsheet2 gcBorder', 'itab2');
325    $statTabsheet->select($tab);
326    $statTabsheet->add('personnal',
327                          l10n('g003_personnal'),
328                          $this->getAdminLink().'&amp;fAMD_tabsheet=metadata&amp;fAMD_page=personnal');
329    if($this->config['amd_interfaceMode']=='advanced')
330    {
331      $statTabsheet->add('select',
332                            l10n('g003_select'),
333                            $this->getAdminLink().'&amp;fAMD_tabsheet=metadata&amp;fAMD_page=select');
334    }
335    $statTabsheet->add('display',
336                          l10n('g003_display'),
337                          $this->getAdminLink().'&amp;fAMD_tabsheet=metadata&amp;fAMD_page=display');
338    $statTabsheet->assign();
339
340    switch($tab)
341    {
342      case 'select':
343        $template->assign('sheetContent', $this->displayMetaDataSelect());
344        break;
345      case 'display':
346        $template->assign('sheetContent', $this->displayMetaDataDisplay());
347        break;
348      case 'personnal':
349        $template->assign('sheetContent', $this->displayMetaDataPersonnal());
350        break;
351    }
352
353    $template->assign_var_from_handle('AMD_BODY_PAGE', 'body_page');
354  }
355
356
357  /**
358   * display and manage the metadata page allowing to build user defined tags
359   *
360   * @return String : the content of the page
361   */
362  protected function displayMetaDataPersonnal()
363  {
364    global $template, $theme, $themes, $themeconf;
365
366    $template->set_filename('sheet_page',
367                  dirname($this->getFileLocation()).'/admin/amd_metadata_personnal.tpl');
368
369    $datas=array(
370      'urlRequest' => $this->getAdminLink('ajax'),
371      'tagList' => array(),
372    );
373
374    /*
375     * build tagList
376     */
377    $sql="SELECT ut.name, ut.numId, ut.tagId
378          FROM ".$this->tables['used_tags']." ut
379            JOIN ".$this->tables['selected_tags']." st ON st.tagId = ut.tagId
380          ORDER BY tagId";
381    $result=pwg_query($sql);
382    if($result)
383    {
384      while($row=pwg_db_fetch_assoc($result))
385      {
386        $datas['tagList'][]=Array(
387          'tagId' => $row['tagId'],
388          'name'  => L10n::get($row['name']),
389          'numId' => $row['numId']
390        );
391      }
392    }
393
394    $template->assign('datas', $datas);
395    return($template->parse('sheet_page', true));
396  }
397
398
399  /**
400   * display and manage the metadata page allowing to make tags selection
401   *
402   * @return String : the content of the page
403   */
404  protected function displayMetaDataSelect()
405  {
406    global $template, $theme, $themes, $themeconf;
407
408    $template->set_filename('sheet_page',
409                  dirname($this->getFileLocation()).'/admin/amd_metadata_select.tpl');
410
411    $datas=array(
412      'urlRequest' => $this->getAdminLink('ajax'),
413      'config_GetListTags_OrderType' => $this->config['amd_GetListTags_OrderType'],
414      'config_GetListTags_FilterType' => $this->config['amd_GetListTags_FilterType'],
415      'config_GetListTags_ExcludeUnusedTag' => $this->config['amd_GetListTags_ExcludeUnusedTag'],
416      'config_GetListTags_SelectedTagOnly' => $this->config['amd_GetListTags_SelectedTagOnly'],
417      'config_GetListImages_OrderType' => $this->config['amd_GetListImages_OrderType']
418    );
419
420    $template->assign('datas', $datas);
421    return($template->parse('sheet_page', true));
422  }
423
424
425  /**
426   * display and manage the metadata page allowing to choose tags order
427   *
428   * @return String : the content of the page
429   */
430  protected function displayMetaDataDisplay()
431  {
432    global $user, $template;
433
434    //$local_tpl = new Template(AMD_PATH."admin/", "");
435    $template->set_filename('sheet_page',
436                  dirname($this->getFileLocation()).'/admin/amd_metadata_display.tpl');
437
438    $datas=array(
439      'urlRequest' => $this->getAdminLink('ajax'),
440      'selectedTags' => Array(),
441      'groups' => Array(),
442      'tagByGroup' => Array(),
443    );
444
445    $sql="SELECT st.tagId, st.order, st.groupId, ut.numId
446          FROM ".$this->tables['selected_tags']." st
447            LEFT JOIN ".$this->tables['used_tags']." ut
448              ON ut.tagId = st.tagId
449          ORDER BY st.groupId ASC, st.order ASC, st.tagId ASC";
450    $result=pwg_query($sql);
451    if($result)
452    {
453      while($row=pwg_db_fetch_assoc($result))
454      {
455        if($row['groupId']==-1)
456        {
457          $datas['selectedTags'][]=Array(
458            'numId' => $row['numId'],
459            'tagId' => $row['tagId']
460          );
461        }
462        else
463        {
464          $datas['tagByGroup'][]=Array(
465            'numId' => $row['numId'],
466            'tagId' => $row['tagId'],
467            'group' => $row['groupId'],
468            'order' => $row['order']
469          );
470        }
471      }
472    }
473
474    $sql="SELECT g.groupId, gn.name
475          FROM ".$this->tables['groups']." g
476            LEFT JOIN ".$this->tables['groups_names']." gn
477              ON g.groupId = gn.groupId
478          WHERE gn.lang = '".$user['language']."'
479          ORDER BY g.order;";
480    $result=pwg_query($sql);
481    if($result)
482    {
483      while($row=pwg_db_fetch_assoc($result))
484      {
485        $datas['groups'][]=Array(
486          'id' => $row['groupId'],
487          'name' => $row['name']
488        );
489      }
490    }
491
492    $template->assign('datas', $datas);
493    return($template->parse('sheet_page', true));
494  }
495
496
497  /**
498   * display and manage the database page
499   * the page have two tabsheet :
500   *  - state, to have general information about the database
501   *  - update, to manage database fill-in
502   *
503   * @param String $tab : the selected tab on the stat page
504   */
505  protected function displayDatabase($tab)
506  {
507    global $template, $user;
508    $template->set_filename('body_page', dirname(__FILE__).'/admin/amd_metadata.tpl');
509
510    $statTabsheet = new GPCTabSheet('statTabsheet', $this->tabsheet->get_titlename(), 'tabsheet2 gcBorder', 'itab2');
511    $statTabsheet->select($tab);
512    $statTabsheet->add('state',
513                          l10n('g003_state'),
514                          $this->getAdminLink().'&amp;fAMD_tabsheet=database&amp;fAMD_page=state');
515    $statTabsheet->add('update',
516                          l10n('g003_update'),
517                          $this->getAdminLink().'&amp;fAMD_tabsheet=database&amp;fAMD_page=update');
518    $statTabsheet->assign();
519
520    switch($tab)
521    {
522      case 'state':
523        $template->assign('sheetContent', $this->displayDatabaseStatus());
524        break;
525      case 'update':
526        $template->assign('sheetContent', $this->displayDatabaseDatabase());
527        break;
528    }
529
530    $template->assign_var_from_handle('AMD_BODY_PAGE', 'body_page');
531  }
532
533
534
535  /**
536   * display the database status
537   *
538   * @return String : the content of the page
539   */
540  private function displayDatabaseStatus()
541  {
542    global $template, $page;
543
544    $template->set_filename('sheet_page', dirname(__FILE__).'/admin/amd_metadata_database_status.tpl');
545
546    $datas=array(
547      'urlRequest' => $this->getAdminLink('ajax'),
548      'warning1' => GPCCore::BBtoHTML(l10n('g003_databaseWarning1')),
549      'nfoMetadata' => Array(
550          'exif' => 0,
551          'iptc' => 0,
552          'magic' => 0,
553          'xmp' => 0,
554          'userDefined' => 0,
555          'numOfPictures' => 0,
556          'numOfNotAnalyzedPictures' => 0,
557          'numOfPicturesWithoutTag' => 0,
558          'nfoSize' => 0,
559          'nfoRows' => 0,
560          'nfoSizeAndRows' => '',
561        )
562    );
563
564    $sql="SELECT SUM(numOfImg) AS nb, 'exif' AS `type`
565          FROM ".$this->tables['used_tags']."
566          WHERE tagId LIKE 'exif.%'
567          UNION
568          SELECT SUM(numOfImg), 'iptc'
569          FROM ".$this->tables['used_tags']."
570          WHERE tagId LIKE 'iptc.%'
571          UNION
572          SELECT SUM(numOfImg), 'magic'
573          FROM ".$this->tables['used_tags']."
574          WHERE tagId LIKE 'magic.%'
575          UNION
576          SELECT SUM(numOfImg), 'xmp'
577          FROM ".$this->tables['used_tags']."
578          WHERE tagId LIKE 'xmp.%'
579          UNION
580          SELECT SUM(numOfImg), 'userDefined'
581          FROM ".$this->tables['used_tags']."
582          WHERE tagId LIKE 'userDefined.%'
583          UNION
584          SELECT COUNT(imageId), 'numOfPictures'
585          FROM ".$this->tables['images']."
586          WHERE analyzed='y'
587          UNION
588          SELECT COUNT(imageId), 'numOfNotAnalyzedPictures'
589          FROM ".$this->tables['images']."
590          WHERE analyzed='n'
591          UNION
592          SELECT COUNT(imageId), 'numOfPicturesWithoutTag'
593          FROM ".$this->tables['images']."
594          WHERE nbTags=0";
595    $result=pwg_query($sql);
596    if($result)
597    {
598      while($row=pwg_db_fetch_assoc($result))
599      {
600        if(!is_null($row['nb']))
601        {
602          $datas['nfoMetadata'][$row['type']]=$row['nb'];
603          if($row['type']=='exif' or
604             $row['type']=='iptc' or
605             $row['type']=='magic' or
606             $row['type']=='xmp' or
607             $row['type']=='userDefined') $datas['nfoMetadata']['nfoRows']+=$row['nb'];
608        }
609      }
610    }
611
612    $sql="SHOW TABLE STATUS WHERE name LIKE '".$this->tables['images_tags']."'";
613    $result=pwg_query($sql);
614    if($result)
615    {
616      while($row=pwg_db_fetch_assoc($result))
617      {
618        $datas['nfoMetadata']['nfoSize']=$row['Data_length']+$row['Index_length'];
619      }
620    }
621
622    if($datas['nfoMetadata']['nfoSize']<1048576)
623    {
624      $datas['nfoMetadata']['nfoSize']=sprintf('%.2fKio', $datas['nfoMetadata']['nfoSize']/1024);
625    }
626    else
627    {
628      $datas['nfoMetadata']['nfoSize']=sprintf('%.2fMio', $datas['nfoMetadata']['nfoSize']/1048576);
629    }
630    $datas['nfoMetadata']['nfoSizeAndRows']=sprintf(l10n('g003_sizeAndRows'), $datas['nfoMetadata']['nfoSize'], $datas['nfoMetadata']['nfoRows']);
631    $datas['nfoMetadata']['numOfPictures']=sprintf(l10n('g003_numberOfAnalyzedPictures'), $datas['nfoMetadata']['numOfPictures']);
632    $datas['nfoMetadata']['numOfNotAnalyzedPictures']=sprintf(l10n('g003_numberOfNotAnalyzedPictures'), $datas['nfoMetadata']['numOfNotAnalyzedPictures']);
633    $datas['nfoMetadata']['numOfPicturesWithoutTag']=sprintf(l10n('g003_numberOfPicturesWithoutTags'), $datas['nfoMetadata']['numOfPicturesWithoutTag']);
634
635    $template->assign("datas", $datas);
636
637    return($template->parse('sheet_page', true));
638  } // displayDatabaseStatus
639
640
641
642
643  /**
644   * display and manage the database page
645   *
646   * the function automatically update the AMD tables :
647   *  - add new pictures in the AMD image table (assuming image is not analyzed
648   *    yet)
649   *  - remove deleted pictures in the AMD image & image_tags table
650   *
651   * @return String : the content of the page
652   */
653  private function displayDatabaseDatabase()
654  {
655    global $template, $page;
656
657    /*
658     * insert new image (from piwigo images table) in the AMD images table, with
659     * statut 'not analyzed'
660     */
661    $sql="INSERT INTO ".$this->tables['images']."
662            SELECT id, 'n', 0
663              FROM ".IMAGES_TABLE."
664              WHERE id NOT IN (SELECT imageId FROM ".$this->tables['images'].")";
665    pwg_query($sql);
666
667
668    /*
669     * delete image who are in the AMD images table and not in the piwigo image
670     * table
671     */
672    $sql="DELETE FROM ".$this->tables['images']."
673            WHERE imageId NOT IN (SELECT id FROM ".IMAGES_TABLE.")";
674    pwg_query($sql);
675
676
677    /*
678     * delete metadata for images that are not in the AMD image table
679     */
680    $sql="DELETE ait
681          FROM ".$this->tables['images_tags']." ait
682            JOIN (SELECT DISTINCT imageId FROM ".$this->tables['images_tags']." ) aitd
683              ON ait.imageId=aitd.imageId
684          WHERE aitd.imageId NOT IN (SELECT id FROM ".IMAGES_TABLE.") ";
685    pwg_query($sql);
686
687
688
689
690    $template->set_filename('sheet_page', dirname(__FILE__).'/admin/amd_metadata_database_database.tpl');
691
692    $datas=array(
693      'urlRequest' => $this->getAdminLink('ajax'),
694      'NumberOfItemsPerRequest' => $this->config['amd_NumberOfItemsPerRequest'],
695    );
696
697    $template->assign("datas", $datas);
698
699    return($template->parse('sheet_page', true));
700  } // displayDatabase
701
702
703
704
705
706  /**
707   * display and manage the help page
708   *
709   * @param String $tab : the selected tab on the help page
710   */
711  protected function displayHelp()
712  {
713    global $template, $user, $lang;
714    $template->set_filename('body_page', dirname(__FILE__).'/admin/amd_help.tpl');
715
716    $statTabsheet = new GPCTabSheet('statTabsheet', $this->tabsheet->get_titlename(), 'tabsheet2 gcBorder', 'itab2');
717    $statTabsheet->add('exif',
718                          l10n('g003_help_tab_exif'),
719                          '', true, "displayHelp('exif');");
720    $statTabsheet->add('iptc',
721                          l10n('g003_help_tab_iptc'),
722                          '', false, "displayHelp('iptc');");
723    $statTabsheet->add('xmp',
724                          l10n('g003_help_tab_xmp'),
725                          '', false, "displayHelp('xmp');");
726    $statTabsheet->add('magic',
727                          l10n('g003_help_tab_magic'),
728                          '', false, "displayHelp('magic');");
729    $statTabsheet->assign();
730
731    $data=Array(
732      'sheetContent_exif' => GPCCore::BBtoHTML($lang['g003_help_exif']),
733      'sheetContent_xmp' => GPCCore::BBtoHTML($lang['g003_help_xmp']),
734      'sheetContent_iptc' => GPCCore::BBtoHTML($lang['g003_help_iptc']),
735      'sheetContent_magic' => GPCCore::BBtoHTML($lang['g003_help_magic']),
736      'title_exif' => l10n('g003_help_tab_exif'),
737      'title_xmp' => l10n('g003_help_tab_xmp'),
738      'title_iptc' => l10n('g003_help_tab_iptc'),
739      'title_magic' => l10n('g003_help_tab_magic')
740    );
741
742    $template->assign('data', $data);
743
744    $template->assign_var_from_handle('AMD_BODY_PAGE', 'body_page');
745  }
746
747} // AMD_AIP class
748
749
750?>
Note: See TracBrowser for help on using the repository browser.