getID(); } else { $us=100; } $ip = getStringFromServer('REMOTE_ADDR'); if ($mode != 'latestzip') { $res = db_query_params("INSERT INTO frs_dlstats_file (ip_address,file_id,month,day,user_id) VALUES ($1, $2, $3, $4, $5)", array($ip,$file_id,date('Ym'),date('d'),$us)); } else { // here $file_id is a package_id $Package = frspackage_get_object($file_id); $release = $Package->getNewestRelease(); $files = $release->getFiles(); foreach ($files as $fileObject) { $res = db_query_params("INSERT INTO frs_dlstats_file (ip_address,file_id,month,day,user_id) VALUES ($1, $2, $3, $4, $5)", array($ip, $fileObject->getID(), date('Ym'), date('d'), $us)); } } } $normalized_urlprefix = normalized_urlprefix(); $pathinfo = substr_replace(getStringFromServer('REQUEST_URI'), '', 0, strlen($normalized_urlprefix)-1); $expl_pathinfo = explode('/', $pathinfo); $mode = $expl_pathinfo[3]; switch ($mode) { case 'file': // .../download.php/file/123/foo.tar.gz // 123 -> file_id // foo.tar.gz ignored $file_id = $expl_pathinfo[4]; // Allow alternate content-type rendering by hook $default_content_type = 'application/binary'; $script = 'frs_download_file'; $content_type = util_negociate_alternate_content_types($script, $default_content_type); if($content_type != $default_content_type) { $hook_params = array(); $hook_params['accept'] = $content_type; $hook_params['group_id'] = $group_id; $hook_params['file_id'] = $file_id; $hook_params['return'] = ''; $hook_params['content_type'] = ''; plugin_hook_by_reference('content_negociated_frs_download_file', $hook_params); if($hook_params['content_type'] != ''){ header('Content-type: '. $hook_params['content_type']); echo $hook_params['content']; } else { header('HTTP/1.1 406 Not Acceptable',true,406); } exit(0); } $File = frsfile_get_object($file_id); if (!$File) { session_redirect404(); } $Release = $File->FRSRelease; $Package = $Release->FRSPackage; $Group = $Package->Group; if ($Package->isPublic()) { session_require_perm('frs', $Package->Group->getID(), 'read_public'); } else { session_require_perm('frs', $Package->Group->getID(), 'read_private'); } $filename = $File->getName(); $filepath = forge_get_config('upload_dir').'/'.$Group->getUnixName().'/'.$Package->getFileName().'/'.$Release->getFileName().'/'.$filename; send_file ($filename, $filepath, $file_id); break; case 'latestzip': // .../download.php/latestzip/123/package-latest.zip // 123 -> package_id // package-latest.zip ignored $package_id = $expl_pathinfo[4]; $Package = frspackage_get_object($package_id); if (!$Package || !$Package->getNewestRelease()) { session_redirect404(); } if ($Package->isPublic()) { session_require_perm('frs', $Package->Group->getID(), 'read_public'); } else { session_require_perm('frs', $Package->Group->getID(), 'read_private'); } $filename = $Package->getNewestReleaseZipName(); $filepath = $Package->getNewestReleaseZipPath(); send_file ($filename, $filepath, $package_id, $mode); break; case 'latestfile': // .../download.php/latestfile/123/foo.tar.gz // 123 -> package_id // foo.tar.gz -> file name $package_id = $expl_pathinfo[4]; $file_name = $expl_pathinfo[5]; $res = db_query_params ('SELECT f.file_id FROM frs_file f, frs_release r, frs_package p WHERE f.release_id = r.release_id AND r.package_id = p.package_id AND p.package_id = $1 AND f.filename = $2 ORDER BY f.release_id DESC', array($package_id, $file_name)); if (!$res || db_numrows($res) < 1) { session_redirect404(); } $row = db_fetch_array($res); $file_id = $row['file_id']; $File = frsfile_get_object($file_id); $Release = $File->FRSRelease; $Package = $Release->FRSPackage; $Group = $Package->Group; if ($Package->isPublic()) { session_require_perm('frs', $Package->Group->getID(), 'read_public'); } else { session_require_perm('frs', $Package->Group->getID(), 'read_private'); } $filename = $File->getName(); $filepath = forge_get_config('upload_dir').'/'.$Group->getUnixName().'/'.$Package->getFileName().'/'.$Release->getFileName().'/'.$filename; send_file ($filename, $filepath, $file_id); break; } // Local Variables: // mode: php // c-file-style: "bsd" // End: