source: extensions/BatchDownloader/include/events.inc.php @ 16697

Last change on this file since 16697 was 16697, checked in by mistic100, 12 years ago

-button on admin page to purge download list
-confirmation is properly updated on UserCollection page

File size: 6.5 KB
Line 
1<?php
2defined('BATCH_DOWNLOAD_PATH') or die('Hacking attempt!');
3
4# this file contains all functions directly called by the triggers #
5
6/* unserialize conf and load language */
7function batch_download_init()
8{
9  global $conf;
10 
11  $conf['batch_download'] = unserialize($conf['batch_download']);
12  load_language('plugin.lang', BATCH_DOWNLOAD_PATH);
13}
14
15
16/* define page section from url */
17function batch_download_section_init()
18{
19  global $tokens, $page, $conf;
20 
21  if ($tokens[0] == 'download')
22  {
23    if (check_download_access() === false) access_denied();
24   
25    $page['section'] = 'download';
26    $page['title'] = '<a href="'.get_absolute_root_url().'">'.l10n('Home').'</a>'.$conf['level_separator'].l10n('Batch Downloader').$conf['level_separator'];
27   
28    switch (@$tokens[1])
29    {
30      case 'init_zip':
31        $page['sub_section'] = 'init_zip';
32        $page['title'].= l10n('Generate ZIP');
33        break;
34      case 'view':
35        $page['sub_section'] = 'view';
36        $page['title'].= l10n('Edit the set');
37        break;
38      default:
39        redirect('index.php');
40    }
41  }
42}
43
44/* download section */
45function batch_download_page() 
46{
47  global $page;
48
49  if (isset($page['section']) and $page['section'] == 'download')
50  {
51    include(BATCH_DOWNLOAD_PATH . '/include/download.inc.php');
52  }
53}
54
55
56/* add buttons on thumbnails list */
57function batch_download_index_button()
58{
59  global $page, $template, $user, $conf;
60 
61  if ( !count($page['items']) or !isset($page['section']) ) return;
62 
63  if (check_download_access() === false) return;
64 
65  // download the set
66  if ( isset($_GET['action']) and $_GET['action']=='advdown_set' )
67  {
68    $set = get_set_info_from_page();
69   
70    if ($set !== false)
71    {
72      $BatchDownloader = new BatchDownloader('new', $page['items'], $set['type'], $set['id']);
73      $BatchDownloader->getEstimatedArchiveNumber();
74     
75      // if we plan only one zip with less elements than 'max_elements', the download starts immediately
76      if (
77        $BatchDownloader->getParam('nb_images') <= $conf['batch_download']['max_elements']
78        and $BatchDownloader->getParam('nb_zip') == 1
79      )
80      {
81        $BatchDownloader->createNextArchive(true); // make sure we have only one zip, even if 'max_size' is exceeded
82       
83        $u_download = BATCH_DOWNLOAD_PATH . 'download.php?set_id='.$BatchDownloader->getParam('id').'&amp;zip=1';
84       
85        $null = null;
86        $template->block_footer_script(null, 'setTimeout("document.location.href = \''.$u_download.'\';", 1000);', $null, $null);
87       
88        array_push($page['infos'], sprintf(l10n('The archive is downloading, if the download doesn\'t start automatically please <a href="%s">click here</a>'), $u_download));
89      }
90      // oterwise we go to summary page
91      else
92      {
93        redirect(BATCH_DOWNLOAD_PUBLIC . 'init_zip&amp;set_id='.$BatchDownloader->getParam('id'));
94      }
95    }
96  }
97 
98  if ($page['section'] == 'collections')
99  {
100    $url = $_SERVER['REQUEST_URI'];
101  }
102  else
103  {
104    $url = duplicate_index_url(array(), array('action'));
105  }
106 
107  // toolbar button
108  $button = '<script type="text/javascript">var batchdown_count = '.count($page['items']).'; var batchdown_string = "'.l10n('Confirm the download of %d pictures?').'";</script>
109    <li><a href="'. $url .'&amp;action=advdown_set" title="'.l10n('Download all pictures of this selection').'" class="pwg-state-default pwg-button" rel="nofollow"
110    onClick="return confirm(batchdown_string.replace(\'%d\', batchdown_count));">
111                        <span class="pwg-icon batch-downloader-icon" style="background:url(\'' . BATCH_DOWNLOAD_PATH . 'template/zip.png\') center center no-repeat;">&nbsp;</span><span class="pwg-button-text">'.l10n('Batch Downloader').'</span>
112                </a></li>';
113  $template->concat('PLUGIN_INDEX_ACTIONS', $button);
114  $template->concat('COLLECTION_ACTIONS', $button);
115}
116
117
118/* menu block */
119function batch_download_add_menublock($menu_ref_arr)
120{
121  global $user;
122 
123  $menu = &$menu_ref_arr[0];
124  if ($menu->get_id() != 'menubar') return;
125 
126  if (check_download_access() === false) return;
127 
128  $query = '
129SELECT id
130  FROM '.BATCH_DOWNLOAD_TSETS.'
131  WHERE
132    user_id = '.$user['id'].'
133    AND status != "done"
134  LIMIT 1
135;';
136  $result = pwg_query($query);
137  if (!pwg_db_num_rows($result)) return;
138 
139  $menu->register_block(new RegisteredBlock('mbBatchDownloader', l10n('Batch Downloader'), 'BatchDownloader'));
140}
141
142function batch_download_applymenu($menu_ref_arr)
143{
144  global $template, $conf, $user;
145 
146  $menu = &$menu_ref_arr[0];
147  $block = $menu->get_block('mbBatchDownloader');
148 
149  if ($block != null)
150  {
151    $query = '
152SELECT id
153  FROM '.BATCH_DOWNLOAD_TSETS.'
154  WHERE
155    user_id = '.$user['id'].'
156    AND status != "done"
157;';
158    $sets = array_from_query($query, 'id');
159   
160    $data = array();
161    foreach ($sets as $set_id)
162    {
163      $BatchDownloader = new BatchDownloader($set_id);
164      $set = $BatchDownloader->getSetInfo();
165     
166      array_push($data, array(
167        'URL' => BATCH_DOWNLOAD_PUBLIC . 'init_zip&amp;set_id='.$BatchDownloader->getParam('id'),
168        'TITLE' => str_replace('"', "'", strip_tags($set['COMMENT'])),
169        'NAME' => $set['sNAME'],
170        'COUNT' => $set['NB_IMAGES'],
171        ));
172    }
173   
174    $template->set_template_dir(BATCH_DOWNLOAD_PATH . 'template/');
175    $block->set_title(l10n('Downloads'));
176    $block->template = 'menublock_batch_down.tpl';
177    $block->data = $data;
178  }
179}
180
181
182/* archives and databse cleanup */
183function batch_download_clean()
184{
185  global $conf;
186 
187  // we only search for old downloads every hour, nevermind which user is connected
188  if ($conf['batch_download']['last_clean'] > time() - 3600) return;
189 
190  $conf['batch_download']['last_clean'] = time();
191  conf_update_param('batch_download', serialize($conf['batch_download']));
192 
193  // set old sets as done and clean images table
194  $query = '
195DELETE i
196  FROM '.BATCH_DOWNLOAD_TIMAGES.' AS i
197    INNER JOIN '.BATCH_DOWNLOAD_TSETS.' AS s
198    ON i.set_id = s.id
199  WHERE
200    status != "done" AND
201    date_creation < DATE_SUB(NOW(), INTERVAL '.$conf['batch_download']['archive_timeout'].' HOUR)
202;';
203  pwg_query($query);
204 
205  $query = '
206UPDATE '.BATCH_DOWNLOAD_TSETS.'
207  SET status = "done"
208  WHERE
209    status != "done" AND
210    date_creation < DATE_SUB(NOW(), INTERVAL '.$conf['batch_download']['archive_timeout'].' HOUR)
211;';
212  pwg_query($query);
213 
214  // remove old archives
215  $zips = glob(BATCH_DOWNLOAD_LOCAL . 'u-*/*.zip');
216  foreach ($zips as $zip)
217  {
218    if (filemtime($zip) < time()-$conf['batch_download']['archive_timeout']*3600)
219    {
220      unlink($zip);
221    }
222  }
223}
224
225?>
Note: See TracBrowser for help on using the repository browser.