345 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			345 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Attachments component
 | |
|  *
 | |
|  * @package Attachments
 | |
|  * @subpackage Attachments_Component
 | |
|  *
 | |
|  * @copyright Copyright (C) 2007-2018 Jonathan M. Cameron, All Rights Reserved
 | |
|  * @license http://www.gnu.org/licenses/gpl-3.0.html GNU/GPL
 | |
|  * @link http://joomlacode.org/gf/project/attachments/frs/
 | |
|  * @author Jonathan M. Cameron
 | |
|  */
 | |
| 
 | |
| // No direct access
 | |
| defined('_JEXEC') or die('Restricted access');
 | |
| 
 | |
| // Load the Attachments helper
 | |
| require_once(JPATH_SITE.'/components/com_attachments/helper.php'); /* ??? Needed? */
 | |
| require_once(JPATH_SITE.'/components/com_attachments/javascript.php');
 | |
| 
 | |
| $user = JFactory::getUser();
 | |
| $logged_in = $user->get('username') <> '';
 | |
| 
 | |
| $app = JFactory::getApplication();
 | |
| $uri = JFactory::getURI();
 | |
| 
 | |
| // Set a few variables for convenience
 | |
| $attachments = $this->list;
 | |
| $parent_id = $this->parent_id;
 | |
| $parent_type = $this->parent_type;
 | |
| $parent_entity = $this->parent_entity;
 | |
| 
 | |
| $base_url = $this->base_url;
 | |
| 
 | |
| $format = JRequest::getWord('format', '');
 | |
| 
 | |
| $html = '';
 | |
| 
 | |
| if ( $format != 'raw' ) {
 | |
| 
 | |
| 	// If any attachments are modifiable, add necessary Javascript for iframe
 | |
| 	if ( $this->some_attachments_modifiable ) {
 | |
| 		AttachmentsJavascript::setupModalJavascript();
 | |
| 		}
 | |
| 
 | |
| 	// Construct the empty div for the attachments
 | |
| 	if ( $parent_id === null ) {
 | |
| 		// If there is no parent_id, the parent is being created, use the username instead
 | |
| 		$pid = $user->get('username');
 | |
| 		}
 | |
| 	else {
 | |
| 		$pid = $parent_id;
 | |
| 		}
 | |
| 	$div_id = 'attachmentsList' . '_' . $parent_type . '_' . $parent_entity	 . '_' . (string)$pid;
 | |
| 	$html .= "\n<div class=\"$this->style\" id=\"$div_id\">\n";
 | |
| 	}
 | |
| 
 | |
| $html .= "<table>\n";
 | |
| $html .= "<caption>{$this->title}</caption>\n";
 | |
| 
 | |
| // Add the column titles, if requested
 | |
| if ( $this->show_column_titles ) {
 | |
| 	$html .= "<thead>\n<tr>";
 | |
| 	$html .= "<th class=\"at_filename\">" . $this->file_url_title . "</th>";
 | |
| 	if ( $this->show_description ) {
 | |
| 		$html .= "<th class=\"at_description\">" . JText::_('ATTACH_DESCRIPTION') . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_user_field_1 ) {
 | |
| 		$html .= "<th class=\"at_user_field\">" . $this->user_field_1_name . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_user_field_2 ) {
 | |
| 		$html .= "<th class=\"at_user_field\">" . $this->user_field_2_name . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_user_field_3 ) {
 | |
| 		$html .= "<th class=\"at_user_field\">" . $this->user_field_3_name . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_creator_name ) {
 | |
| 		$html .= "<th class=\"at_creator_name\">" . JText::_('ATTACH_CREATOR') . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_file_size ) {
 | |
| 		$html .= "<th class=\"at_file_size\">" . JText::_('ATTACH_FILE_SIZE') . "</th>";
 | |
| 		}
 | |
| 	if ( $this->secure && $this->show_downloads ) {
 | |
| 		$html .= "<th class=\"at_downloads\">" . JText::_('ATTACH_DOWNLOADS') . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_created_date ) {
 | |
| 		$html .= "<th class=\"at_created_date\">" . JText::_('ATTACH_CREATED') . "</th>";
 | |
| 		}
 | |
| 	if ( $this->show_modified_date ) {
 | |
| 		$html .= "<th class=\"at_mod_date\">" . JText::_('ATTACH_LAST_MODIFIED') . "</th>";
 | |
| 		}
 | |
| 	if ( $this->some_attachments_modifiable && $this->allow_edit ) {
 | |
| 		$html .= "<th class=\"at_edit\"> </th>";
 | |
| 		}
 | |
| 	$html .= "</tr>\n</thead>\n";
 | |
| 	}
 | |
| 
 | |
| $html .= "<tbody>\n";
 | |
| 
 | |
| // Construct the lines for the attachments
 | |
| $row_num = 0;
 | |
| for ($i=0, $n=count($attachments); $i < $n; $i++) {
 | |
| 	$attachment = $attachments[$i];
 | |
| 
 | |
| 	$row_num++;
 | |
| 	if ( $row_num & 1 == 1) {
 | |
| 		$row_class = 'odd';
 | |
| 		}
 | |
| 	else {
 | |
| 		$row_class = 'even';
 | |
| 		}
 | |
| 
 | |
| 	if ($attachment->state != 1) {
 | |
| 		$row_class = 'unpublished';
 | |
| 		}
 | |
| 
 | |
| 	$html .= '<tr class="'.$row_class.'">';
 | |
| 		
 | |
| 	// Construct some display items
 | |
| 	if ( JString::strlen($attachment->icon_filename) > 0 )
 | |
| 		$icon = $attachment->icon_filename;
 | |
| 	else
 | |
| 		$icon = 'generic.gif';
 | |
| 
 | |
| 	if ( $this->show_file_size) {
 | |
| 		$file_size = (int)( $attachment->file_size / 1024.0 );
 | |
| 		if ( $file_size == 0 ) {
 | |
| 			// For files less than 1kB, show the fractional amount (in 1/10 kB)
 | |
| 			$file_size = ( (int)( 10.0 * $attachment->file_size / 1024.0 ) / 10.0 );
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 	if ( $this->show_created_date OR $this->show_modified_date ) {
 | |
| 		jimport( 'joomla.utilities.date' );
 | |
| 		$tz = new DateTimeZone( $user->getParam('timezone', $app->getCfg('offset')) );
 | |
| 		}
 | |
| 
 | |
| 	if ( $this->show_created_date ) {
 | |
| 		$date = JFactory::getDate($attachment->created);
 | |
| 		$date->setTimezone($tz);
 | |
| 		$created = $date->format($this->date_format, true);
 | |
| 		}
 | |
| 
 | |
| 	if ( $this->show_modified_date ) {
 | |
| 		$date = JFactory::getDate($attachment->modified);
 | |
| 		$date->setTimezone($tz);
 | |
| 		$last_modified = $date->format($this->date_format, true);
 | |
| 		}
 | |
| 
 | |
| 	// Add the filename
 | |
| 	$target = '';
 | |
| 	if ( $this->file_link_open_mode == 'new_window')
 | |
| 		$target = ' target="_blank"';
 | |
| 	$html .= '<td class="at_filename">';
 | |
| 	if ( JString::strlen($attachment->display_name) == 0 )
 | |
| 		$filename = $attachment->filename;
 | |
| 	else
 | |
| 		$filename = htmlspecialchars(stripslashes($attachment->display_name));
 | |
| 	$actual_filename = $attachment->filename;
 | |
| 	// Uncomment the following two lines to replace '.pdf' with its HTML-encoded equivalent
 | |
| 	// $actual_filename = JString::str_ireplace('.pdf', '.pdf', $actual_filename);
 | |
| 	// $filename = JString::str_ireplace('.pdf', '.pdf', $filename);
 | |
| 
 | |
| 	if ( $this->show_file_links ) {
 | |
| 		if ( $attachment->uri_type == 'file' ) {
 | |
| 			// Handle file attachments
 | |
| 			if ( $this->secure ) {
 | |
| 				$url = JRoute::_($base_url . "index.php?option=com_attachments&task=download&id=" . (int)$attachment->id);
 | |
| 				}
 | |
| 			else {
 | |
| 				$url = $base_url . $attachment->url;
 | |
| 				if (strtoupper(substr(PHP_OS,0,3) == 'WIN')) {
 | |
| 					$url = utf8_encode($url);
 | |
| 					}
 | |
| 				}
 | |
| 			$tooltip = JText::sprintf('ATTACH_DOWNLOAD_THIS_FILE_S', $actual_filename);
 | |
| 			}
 | |
| 		else {
 | |
| 			// Handle URL "attachments"
 | |
| 			if ( $this->secure ) {
 | |
| 				$url = JRoute::_($base_url . "index.php?option=com_attachments&task=download&id=" . (int)$attachment->id);
 | |
| 				$tooltip = JText::sprintf('ATTACH_ACCESS_THIS_URL_S', $filename);
 | |
| 				}
 | |
| 			else {
 | |
| 				// Handle the link url if not logged in but link displayed for guests
 | |
| 				$url = '';
 | |
| 				if ( !$logged_in AND ($attachment->access != '1')) {
 | |
| 					$guest_levels = $this->params->get('show_guest_access_levels', Array('1'));
 | |
| 					if ( in_array($attachment->access, $guest_levels) ) {
 | |
| 						$app = JFactory::getApplication();
 | |
| 						$return = $app->getUserState('com_attachments.current_url', '');
 | |
| 						$url = JRoute::_($base_url . 'index.php?option=com_attachments&task=requestLogin' . $return);
 | |
| 						$target = '';
 | |
| 						}
 | |
| 					}
 | |
| 				if ( $url == '' ) {
 | |
| 					$url = $attachment->url;
 | |
| 					}
 | |
| 				$tooltip = JText::sprintf('ATTACH_ACCESS_THIS_URL_S', $attachment->url);
 | |
| 				}
 | |
| 			}
 | |
| 		$html .= "<a class=\"at_icon\" href=\"$url\"$target title=\"$tooltip\">";
 | |
| 		$html .= JHtml::image('com_attachments/file_icons/'.$icon, $tooltip, null, true);
 | |
| 		if ( ($attachment->uri_type == 'url') && $this->superimpose_link_icons ) {
 | |
| 			if ( $attachment->url_valid ) {
 | |
| 				$html .= JHtml::image('com_attachments/file_icons/link_arrow.png', '', 'class="link_overlay"', true);
 | |
| 				}
 | |
| 			else {
 | |
| 				$html .= JHtml::image('com_attachments/file_icons/link_broken.png', '', 'class="link_overlay"', true);
 | |
| 				}
 | |
| 			}
 | |
| 		$html .= "</a>";
 | |
| 		$html .= "<a class=\"at_url\" href=\"$url\"$target title=\"$tooltip\">$filename</a>";
 | |
| 		}
 | |
| 	else {
 | |
| 		$tooltip = JText::sprintf('ATTACH_DOWNLOAD_THIS_FILE_S', $actual_filename);
 | |
| 		$html .= JHtml::image('com_attachments/file_icons/'.$icon, $tooltip, null, true);
 | |
| 		$html .= ' ' . $filename;
 | |
| 		}
 | |
| 	$html .= "</td>";
 | |
| 
 | |
| 	// Add description (maybe)
 | |
| 	if ( $this->show_description ) {
 | |
| 		$description = htmlspecialchars(stripslashes($attachment->description));
 | |
| 		if ( JString::strlen($description) == 0)
 | |
| 			$description = ' ';
 | |
| 		if ( $this->show_column_titles )
 | |
| 			$html .= "<td class=\"at_description\">$description</td>";
 | |
| 		else
 | |
| 			$html .= "<td class=\"at_description\">[$description]</td>";
 | |
| 		}
 | |
| 
 | |
| 	// Show the USER DEFINED FIELDs (maybe)
 | |
| 	if ( $this->show_user_field_1 ) {
 | |
| 		$user_field = stripslashes($attachment->user_field_1);
 | |
| 		if ( JString::strlen($user_field) == 0 )
 | |
| 			$user_field = ' ';
 | |
| 		if ( $this->show_column_titles )
 | |
| 			$html .= "<td class=\"at_user_field\">" . $user_field . "</td>";
 | |
| 		else
 | |
| 			$html .= "<td class=\"at_user_field\">[" . $user_field . "]</td>";
 | |
| 		}
 | |
| 	if ( $this->show_user_field_2 ) {
 | |
| 		$user_field = stripslashes($attachment->user_field_2);
 | |
| 		if ( JString::strlen($user_field) == 0 )
 | |
| 			$user_field = ' ';
 | |
| 		if ( $this->show_column_titles )
 | |
| 			$html .= "<td class=\"at_user_field\">" . $user_field . "</td>";
 | |
| 		else
 | |
| 			$html .= "<td class=\"at_user_field\">[" . $user_field . "]</td>";
 | |
| 		}
 | |
| 	if ( $this->show_user_field_3 ) {
 | |
| 		$user_field = stripslashes($attachment->user_field_3);
 | |
| 		if ( JString::strlen($user_field) == 0 )
 | |
| 			$user_field = ' ';
 | |
| 		if ( $this->show_column_titles )
 | |
| 			$html .= "<td class=\"at_user_field\">" . $user_field . "</td>";
 | |
| 		else
 | |
| 			$html .= "<td class=\"at_user_field\">[" . $user_field . "]</td>";
 | |
| 		}
 | |
| 
 | |
| 	// Add the creator's username (if requested)
 | |
| 	if ( $this->show_creator_name ) {
 | |
| 		$html .= "<td class=\"at_creator_name\">{$attachment->creator_name}</td>";
 | |
| 		}
 | |
| 
 | |
| 	// Add file size (maybe)
 | |
| 	if ( $this->show_file_size ) {
 | |
| 		$file_size_str = JText::sprintf('ATTACH_S_KB', $file_size);
 | |
| 		if ( $file_size_str == 'ATTACH_S_KB' ) {
 | |
| 			// Work around until all translations are updated ???
 | |
| 			$file_size_str = $file_size . ' kB';
 | |
| 			}
 | |
| 		$html .= '<td class="at_file_size">' . $file_size_str . '</td>';
 | |
| 		}
 | |
| 
 | |
| 	// Show number of downloads (maybe)
 | |
| 	if ( $this->secure && $this->show_downloads ) {
 | |
| 		$num_downloads = (int)$attachment->download_count;
 | |
| 		$label = '';
 | |
| 		if ( ! $this->show_column_titles ) {
 | |
| 			if ( $num_downloads == 1 )
 | |
| 				$label = ' ' . JText::_('ATTACH_DOWNLOAD_NOUN');
 | |
| 			else
 | |
| 				$label = ' ' . JText::_('ATTACH_DOWNLOADS');
 | |
| 			}
 | |
| 		$html .= '<td class="at_downloads">'. $num_downloads.$label.'</td>';
 | |
| 		}
 | |
| 
 | |
| 	// Add the created and modification date (maybe)
 | |
| 	if ( $this->show_created_date ) {
 | |
| 		$html .= "<td class=\"at_created_date\">$created</td>";
 | |
| 		}
 | |
| 	if ( $this->show_modified_date ) {
 | |
| 		$html .= "<td class=\"at_mod_date\">$last_modified</td>";
 | |
| 		}
 | |
| 
 | |
| 	$update_link = '';
 | |
| 	$delete_link = '';
 | |
| 
 | |
| 	$a_class = 'modal-button';
 | |
| 	if ( $app->isAdmin() ) {
 | |
| 		$a_class = 'modal';
 | |
| 		}
 | |
| 
 | |
| 	// Add the link to edit the attachment, if requested
 | |
| 	if ( $this->some_attachments_modifiable && $attachment->user_may_edit && $this->allow_edit ) {
 | |
| 
 | |
| 		// Create the edit link
 | |
| 		$update_url = str_replace('%d', (string)$attachment->id, $this->update_url);
 | |
| 		$tooltip = JText::_('ATTACH_UPDATE_THIS_FILE') . ' (' . $actual_filename . ')';
 | |
| 		$update_link = "<a class=\"$a_class\" type=\"button\" href=\"$update_url\"";
 | |
| 		$update_link .= " rel=\"{handler: 'iframe', size: {x: 920, y: 600}}\" title=\"$tooltip\">";
 | |
| 		$update_link .= JHtml::image('com_attachments/pencil.gif', $tooltip, null, true);
 | |
| 		$update_link .= "</a>";
 | |
| 		}
 | |
| 
 | |
| 	// Add the link to delete the attachment, if requested
 | |
| 	if ( $this->some_attachments_modifiable && $attachment->user_may_delete && $this->allow_edit ) {
 | |
| 
 | |
| 		// Create the delete link
 | |
| 		$delete_url = str_replace('%d', (string)$attachment->id, $this->delete_url);
 | |
| 		$tooltip = JText::_('ATTACH_DELETE_THIS_FILE') . ' (' . $actual_filename . ')';
 | |
| 		$delete_link = "<a class=\"$a_class\" type=\"button\" href=\"$delete_url\"";
 | |
| 		$delete_link .= " rel=\"{handler: 'iframe', size: {x: 600, y: 400}, iframeOptions: {scrolling: 'no'}}\" title=\"$tooltip\">";
 | |
| 		$delete_link .= JHtml::image('com_attachments/delete.gif', $tooltip, null, true);
 | |
| 		$delete_link .= "</a>";
 | |
| 		}
 | |
| 
 | |
| 	if ( $this->some_attachments_modifiable && $this->allow_edit ) {
 | |
| 		$html .= "<td class=\"at_edit\">$update_link $delete_link</td>";
 | |
| 		}
 | |
| 
 | |
| 	$html .= "</tr>\n";
 | |
| 	}
 | |
| 
 | |
| // Close the HTML
 | |
| $html .= "</tbody></table>\n";
 | |
| 
 | |
| if ( $format != 'raw' ) {
 | |
| 	$html .= "</div>\n";
 | |
| 	}
 | |
| 
 | |
| echo $html;
 |