/[drupal]/contributions/modules/prodigem/prodigem.module
ViewVC logotype

Contents of /contributions/modules/prodigem/prodigem.module

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.4 - (show annotations) (download) (as text)
Sat Oct 29 07:52:22 2005 UTC (4 years ago) by breyten
Branch: MAIN
CVS Tags: HEAD
Branch point for: DRUPAL-4-7
Changes since 1.3: +9 -2 lines
File MIME type: text/x-php
Applying Robert's patch for http://drupal.org/node/35603
1 <?php
2 // $Id: prodigem.module,v 1.3 2005/10/28 19:38:26 robertDouglass Exp $
3
4 define('PRODIGEM_PATH', drupal_get_path('module', 'prodigem'));
5 include_once PRODIGEM_PATH.'/prodigem.inc';
6
7 // drupal hooks etc.
8 function prodigem_help($section) {
9 switch ($section) {
10 case 'admin/modules#description':
11 return t('Allows a tight integration between your website and Prodigem, a site where you can easily create and host torrents.');
12 case 'admin/help#foaf':
13 return t('This module will automatically make torrents of files attached to nodes, by using <a href="%url">Prodigem</a>.', array('%url' => 'http://www.prodigem.com/'));
14 }
15 }
16
17 function prodigem_settings() {
18 $form = array();
19
20 $form['prodigem_login'] = array(
21 '#type' => 'fieldset', '#title' => t('<a href="%url">Prodigem.com</a> login', array('%url' => 'http://www.prodigem.com/')),
22 '#weight' => 0, '#collapsible' => TRUE, '#collapsed' => FALSE
23 );
24 $form['prodigem_login']['prodigem_user'] = array(
25 '#type' => 'textfield', 'title' => t('Username'), '#default_value' => variable_get('prodigem_user', ''),
26 '#size' => 30, '#maxlength' => 255
27 );
28 $form['prodigem_login']['prodigem_password'] = array(
29 '#type' => 'password', 'title' => t('Password'), '#default_value' => variable_get('prodigem_password', ''),
30 '#size' => 30, '#maxlength' => 255
31 );
32
33 $form['prodigem_restrictions'] = array(
34 '#type' => 'fieldset', '#title' => t('Restrictions'), '#weight' => 1, '#collapsible' => TRUE, '#collapsed' => FALSE
35 );
36 $form['prodigem_restrictions']['prodigem_node_types'] = array(
37 '#type' => 'select', '#title' => t('Node types'), '#default_value' => variable_get('prodigem_node_types', array()),
38 '#options' => node_get_types(), '#multiple' => TRUE
39 );
40 $form['prodigem_restrictions']['prodigem_min_size'] = array(
41 '#type' => 'textfield', '#title' => t('Minimum size'), '#default_value' => variable_get('prodigem_min_size', 3),
42 '#size' => 5, '#maxlength' => 5, '#description' => t('Minimum combined size of attachments (in megabytes) before a torrent will be created.')
43 );
44 $form['prodigem_restrictions']['prodigem_age_period'] = array(
45 '#type' => 'textfield', '#title' => t('Skip nodes that are older than'), '#default_value' => variable_get('prodigem_age_period', 31),
46 '#size' => 5, '#maxlength' => 5, '#description' => t('To prevent indexing of all nodes, you can specify the maximum age (in days) of nodes to be considered for the automatic creation of torrents. Defaults to 31 days.'),
47 '#suffix' => t('days.')
48 );
49
50 cache_clear_all('prodigem_categories');
51 $categories = prodigem_api_get_categories();
52 natsort($categories);
53 cache_clear_all('prodigem_licenses');
54 $licenses = prodigem_get_licenses();
55 $arr_licenses = prodigem_api_licenses2assoc($licenses);
56 $form['prodigem_defaults'] = array(
57 '#type' => 'fieldset', '#title' => t('License'), '#weight' => 2, '#collapsible' => TRUE, '#collapsed' => FALSE
58 );
59 $form['prodigem_defaults']['prodigem_default_category'] = array(
60 '#type' => 'select', '#title' => t('Category'), '#default_value' => variable_get('prodigem_default_category', 5),
61 '#options' => $categories, '#description' => t('The content category for your torrents.')
62 );
63 $form['prodigem_defaults']['prodigem_default_tags'] = array(
64 '#type' => 'textfield', '#title' => t('Tags'), '#default_value' => variable_get('prodigem_default_tags', ''),
65 '#size' => 30, '#maxlength' => 255, '#description' => t('A comma-seperated set of tags to use for your torrents.')
66 );
67 $form['prodigem_defaults']['prodigem_default_host'] = array(
68 '#type' => 'checkbox', '#title' => t('Host torrents ?'), '#default_value' => variable_get('prodigem_default_host', 0),
69 '#return_value' => 1, '#description' => t('Prodigem can host the contents of the torrents.')
70 );
71 $form['prodigem_defaults']['prodigem_default_price'] = array(
72 '#type' => 'textfield', '#title' => t('Price'), '#default_value' => variable_get('prodigem_default_price', '0.00'),
73 '#size' => 7, '#maxlength' => 7, '#description' => t('The price you want to set for your torrents. Must be 0.00 or >= 0.95 (USD).')
74 );
75 $form['prodigem_defaults']['prodigem_default_license'] = array(
76 '#type' => 'select', '#title' => t('License'), '#default_value' => variable_get('prodigem_default_license', 0),
77 '#options' => $arr_licenses, '#description' => t('The license of the contents of your torrents.')
78 );
79 $form['prodigem_defaults']['prodigem_default_other_license'] = array(
80 '#type' => 'textfield', '#title' => t('Other License'), '#default_value' => variable_get('prodigem_default_other_license', ''),
81 '#size' => 30, '#maxlength' => 255, '#description' => t('If you want to use an other license than the ones available above, please fill in the name of the license here.')
82 );
83 $form['prodigem_defaults']['prodigem_default_other_license_url'] = array(
84 '#type' => 'textfield', '#title' => t('License URL'), '#default_value' => variable_get('prodigem_default_other_license_url', ''),
85 '#size' => 30, '#maxlength' => 255, '#description' => t('If you want to use an other license than the ones available above, please fill in a URL to the text of the license here.')
86 );
87
88 return $form;
89 }
90
91 function _prodigem_count_node_size($nid) {
92 $result = db_query("SELECT SUM(f.filesize) FROM {files} f INNER JOIN {node} n ON f.nid = n.nid WHERE n.nid = %d", $nid);
93 return db_result($result);
94 }
95
96 function _prodigem_select_nodes() {
97 $node_types = variable_get('prodigem_node_types', array());
98 if (empty($node_types)) {
99 return NULL;
100 }
101 $types = array();
102 $age = time() - variable_get('prodigem_age_period', 31) * 86400;
103 $age = $age - ($age % 86400); //round to full day
104 $last_nid = db_result(db_query("SELECT MAX(nid) FROM {prodigem_torrents} WHERE page = '' AND url = ''"));
105 foreach ($node_types as $node_type) {
106 $types[] = "'". $node_type ."'";
107 }
108
109 return db_query("SELECT nid FROM {node} WHERE nid > %d AND status = 1 AND type IN (". implode(",", $types) .") AND created >= %d ORDER BY nid", $last_nid, $age);
110 }
111
112 function _prodigem_get_license($licenses) {
113 $licenseid = variable_get('prodigem_default_license', '');
114 $other_license = variable_get('prodigem_default_other_license', '');
115 $other_license_url = variable_get('prodigem_default_other_license_url', '');
116 if ($other_license != '') {
117 return array(
118 'licensetype' => 'licenses_other',
119 'licensename' => $other_license,
120 'licenseurl' => $other_license_url
121 );
122 }
123 else {
124 return $licenses[$licenseid];
125 }
126 }
127
128 function prodigem_node2torrent($nid, $user_id, $session, $licenses) {
129 $node = node_load($nid);
130 $license = _prodigem_get_license($licenses);
131 $license_options = prodigem_api_license_get_options($license);
132
133 $folder_info = prodigem_api_create_folder($user_id, $session, str_replace('/', '_', $node->path));
134 foreach ($node->files as $file) {
135 if ($file->filemime != 'application/x-bittorrent') {
136 $file_info = prodigem_api_grab_url($user_id, $session, file_create_url($file->filepath));
137 prodigem_api_move_file($user_id, $session, $file_info['fileid'], $folder_info['folderid']);
138 }
139 }
140 $torrent_info = prodigem_api_create_torrent($user_id, $session, $folder_info['folderid'],
141 variable_get('prodigem_default_category', 5), variable_get('prodigem_default_host', 0),
142 variable_get('prodigem_default_tags', ''), check_plain($node->title), check_plain($node->body),
143 variable_get('prodigem_default_price', '0.00'), $license['licensetype'], $license_options
144 );
145 $node->prodigem_page = $torrent_info['page'];
146 $node->prodigem_url = $torrent_info['url'];
147 node_save($node);
148 }
149
150 function prodigem_cron() {
151 $min_size = variable_get('prodigem_min_size', 3) * 1048576;
152 $result = _prodigem_select_nodes();
153 if (is_null($result)) {
154 return;
155 }
156 $puser = variable_get('prodigem_user', '');
157 $ppasswd = variable_get('prodigem_password', '');
158 $userid = 0;
159 $session = '';
160 $licenses = prodigem_get_licenses();
161
162 if (($puser != '') && ($ppasswd != '') && (db_num_rows($result) > 0)) {
163 list($userid, $session) = array_values(prodigem_api_start_session($puser, $ppasswd));
164 while ($row = db_fetch_array($result)) {
165 if (_prodigem_count_node_size($row['nid']) >= $min_size) {
166 prodigem_node2torrent($row['nid'], $userid, $session, $licenses);
167 }
168 }
169 prodigem_api_end_session($userid, $session);
170 }
171 }
172
173 function prodigem_insert($node) {
174 db_query("INSERT INTO {prodigem_torrents} (nid, page, url) VALUES (%d, '%s', '%s')", $node->nid, $node->prodigem_page, $node->prodigem_url);
175 }
176
177 function prodigem_load($node) {
178 $object = db_fetch_object(db_query("SELECT nid, page, url FROM {prodigem_torrents} WHERE nid = %d", $node->nid));
179 return array("prodigem_page" => $object->page, "prodigem_url" => $object->url);
180 }
181
182 function prodigem_update($node) {
183 db_query("DELETE FROM {prodigem_torrents} WHERE nid = %d", $node->nid);
184 db_query("INSERT INTO {prodigem_torrents} (nid, page, url) VALUES (%d, '%s', '%s')", $node->nid, $node->prodigem_page, $node->prodigem_url);
185 }
186
187 function prodigem_delete($node) {
188 db_query("DELETE FROM {prodigem_torrents} WHERE nid = %d", $node->nid);
189 }
190
191 function prodigem_nodeapi(&$node, $op, $teaser, $page) {
192 global $user;
193 $node_types = variable_get('prodigem_node_types', array());
194
195 if (in_array($node->type, $node_types)) {
196 switch ($op) {
197 case 'form pre':
198 $form = array();
199 $form['prodigem_page'] = array('#type' => 'hidden', '#value' => $node->prodigem_page);
200 $form['prodigem_url'] = array('#type' => 'hidden', '#value' => $node->prodigem_url);
201 return $form;
202 break;
203 case 'insert':
204 prodigem_insert($node);
205 break;
206 case 'update':
207 prodigem_update($node);
208 break;
209 case 'delete':
210 prodigem_delete($node);
211 break;
212 case 'load':
213 return prodigem_load($node);
214 break;
215 case 'view':
216 if (($node->prodigem_page != '') && ($node->prodigem_url != '')) {
217 $node->body .= theme_prodigem_torrent_info(check_url($node->prodigem_page), check_url($node->prodigem_url));
218 }
219 break;
220 }
221 }
222 }
223
224 function theme_prodigem_torrent_info($page, $url) {
225 $output = '<div class="prodigem-node-torrent-info"><ul>';
226 $output .= '<li>'. t('<a href="%page">More info</a>', array('%page' => $page)) ."</li>\n";
227 $output .= '<li>'. t('<a href="%url">Download torrent</a>', array('%url' => $url)) ."</li>\n";
228 $output .= '</ul></div>';
229 return $output;
230 }

  ViewVC Help
Powered by ViewVC 1.1.2