Vai al contenuto
  • 0

Statistiche download files


silver

Domanda

Buongiorno a tutti, 

utilizzo ip.downloads versione 4.1 e sto cercando di capire se ci sono delle statistiche dettagliate sull'attività degli utenti registrati, mi basterebbe avere l'elenco dei files scaricati per ogni utente.

Per ora sono riuscito a vedere solo quanti file sono stati scaricati, ma non quali.

Esiste una soluzione?

 

Grazie

Link al commento
Condividi su altri siti

4 risposte a questa domanda

Messaggi raccomandati

  • 0

basta creare una pagina php poi tocca modificare le righe con un template a parte... vedi logRows

<?php

require_once './init.php';

\IPS\Dispatcher\External::i();
$baseUrl = \IPS\Http\Url::external( \IPS\Http\Url::baseUrl().ltrim($_SERVER['PHP_SELF'],'/') );

$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl );
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin'), 'table' );
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin' ), 'rows' );
$table->sortBy = $table->sortBy ?: 'dtime';
$table->sortDirection = $table->sortDirection ?: 'asc';

\IPS\Output::i()->output .= (string) $table;
\IPS\Output::i()->title = 'DOWNLOADS';
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->globalTemplate( \IPS\Output::i()->title, \IPS\Output::i()->output) );

per l'utente collegato dovresti cambiare

$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl );

in

$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl, array( 'dmid=?', \IPS\Member::i()->loggedIn()->member_id ) );

però per questioni di sicurezza aggiungi prima di $baseUrl:

if( ! \IPS\Member::i()->loggedIn()->member_id )
{
	exit;
}

in questo modo i visitatori non potranno visualizzare i downloads di altri visitatori.

  • Like 1
Link al commento
Condividi su altri siti

  • 0
Inviato (modificato)

Ti ringrazio per la risposta BomAle, purtroppo non sono molto pratico di modifiche su IPB quindi ti chiedo ancora qualche suggerimento.

Ho creato una nuova pagina chiamandola statistiche.php inserendo il codice che mi hai postato tu, richiamando questa pagina ora vedo un bel po di dati interessanti e altri meno.

Vedo l'id dell'utente e l'id del file scaricato che ora dovrei trasformare in nome utente nome file scaricato, in più dovrei eliminare alcune informazioni superflue.

Mi pare di capire che ora dovrei creare un template a parte che poi posso modificare a mio piacimento, mi potresti indicare gentilmente come dovrei procedere? Mi basterebbe capire come poter associare il nuovo template al file appena creato in modo che richiamandolo mi carichi il template da me creato.

Spero in tue istruzioni

Saluti

 

Modificato da silver
Link al commento
Condividi su altri siti

  • 0

DEMO:https://invisionita.com/downloads.php

Per semplificare il lavoro ho preferito avere tutto nello stesso file php.

<?php

require_once './init.php';

\IPS\Dispatcher\External::i();
$baseUrl = \IPS\Http\Url::external( \IPS\Http\Url::baseUrl().ltrim($_SERVER['PHP_SELF'],'/') );
$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl, \IPS\Member::loggedIn()->isAdmin() ? NULL : array('dmid=?',\IPS\Member::loggedIn()->member_id) );
if(\IPS\Member::loggedIn()->isAdmin())
{
	\IPS\Member::loggedIn()->language()->words['mine'] = "Miei";
	\IPS\Member::loggedIn()->language()->words['not_mine'] = "NON Miei";
	$table->filters = array(
		'mine' => array('dmid=?',\IPS\Member::loggedIn()->member_id),
		'not_mine' => array('dmid!=?',\IPS\Member::loggedIn()->member_id),
	);
}

$functionNamerows = 'ba_rows'. uniqid();
//@arguments $table, $headers, $rows
$templaterow = <<<HTML
{{foreach \$rows as \$row}}
	<li class='ipsGrid_span6 ipsPhotoPanel ipsPhotoPanel_mini ipsClearfix ipsPad_half'>
		{template="userPhoto" app="core" group="global" params="\IPS\Member::load( \$row['dmid'] ), 'mini'"}
		<div>
			<h3 class='ipsType_normal ipsType_reset ipsTruncate ipsTruncate_line'>{member="name" id="\$row['dmid']"}</h3>
			<span class='ipsType_light'>{datetime="\$row['dtime']" norelative="true"}</span><br />
			<span class='ipsType_light'>{\$row['dfid']|raw}</span>
		</div>
	</li>
{{endforeach}}
HTML;
\IPS\Theme::makeProcessFunction( $templaterow, $functionNamerows, '$table, $headers, $rows' );
$table->rowsTemplate =  'IPS\\Theme\\'.$functionNamerows;

$functionNametable = 'ba_table'.uniqid();
$templatetable = <<<HTML
<div data-baseurl='{\$table->baseUrl}' data-resort='{\$table->resortKey}' data-controller='core.global.core.table' {{if \$table->getPaginationKey() != 'page'}}data-pageParam='{\$table->getPaginationKey()}'{{endif}}>

	{{if \$table->pages > 1}}
		<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
			{{if !empty( \$table->filters )}}
			<ul class="ipsButtonRow ipsPos_right ipsClearfix">
				<li>
					<a href="#elFilterByMenu_menu" data-role="tableFilterMenu" id="elFilterByMenu_{\$table->uniqueId}" data-ipsMenu data-ipsMenu-activeClass="ipsButtonRow_active" data-ipsMenu-selectable="radio">{lang="filter_by"} <i class="fa fa-caret-down"></i></a>
					<ul class='ipsMenu ipsMenu_auto ipsMenu_withStem ipsMenu_selectable ipsHide' id='elFilterByMenu_{\$table->uniqueId}_menu'>
						<li data-action="tableFilter" data-ipsMenuValue='' class='ipsMenu_item {{if !\$table->filter}}ipsMenu_itemChecked{{endif}}'>
							<a href='{\$table->baseUrl->setQueryString( array( 'filter' => '', 'sortby' => \$table->sortBy, 'sortdirection' => \$table->sortDirection, 'page' => '1' ) )}'>{lang="{\$table->langPrefix}all"}</a>
						</li>
						{{foreach \$table->filters as \$k => \$q}}
						<li data-action="tableFilter" data-ipsMenuValue='{\$k}' class='ipsMenu_item {{if \$k === \$table->filter}}ipsMenu_itemChecked{{endif}}'>
							<a href='{\$table->baseUrl->setQueryString( array( 'filter' => \$k, 'sortby' => \$table->sortBy, 'sortdirection' => \$table->sortDirection, 'page' => '1' ) )}'>{lang="{\$table->langPrefix}{\$k}"}</a>
						</li>
						{{endforeach}}
					</ul>
				</li>
			</ul>
			{{endif}}
			<div data-role="tablePagination">
				{template="pagination" group="global" app="core" location="global" params="\$table->baseUrl, \$table->pages, \$table->page, \$table->limit, TRUE, \$table->getPaginationKey()"}
			</div>
		</div>
	{{endif}}


	{{if count( \$rows )}}
		<ol class='ipsGrid ipsGrid_collapsePhone ipsPad ipsClear {{foreach \$table->classes as \$class}}{\$class} {{endforeach}}' id='elTable_{\$table->uniqueId}' data-role="tableRows" itemscope itemtype="http://schema.org/ItemList">
			{{\$rhtml = call_user_func(\$table->rowsTemplate, \$table, \$headers, \$rows );}}{\$rhtml|raw}
		</ol>
	{{else}}
		<div class='ipsType_center ipsPad'>
			<p class='ipsType_large ipsType_light'>{lang="no_rows_in_table"}</p>
			{{if method_exists( \$table, 'container' ) AND \$table->container() !== NULL}}
				{{if \$table->container()->can('add')}}
					<a href='{\$table->container()->url()->setQueryString( 'do', 'add' )}' class='ipsButton ipsButton_primary ipsButton_medium'>
						{lang="submit_first_row"}
					</a>
				{{endif}}
			{{endif}}
		</div>
	{{endif}}
				
	{{if \$table->pages > 1}}
		<div class="ipsButtonBar ipsPad_half ipsClearfix ipsClear">
			<div data-role="tablePagination">
				{template="pagination" group="global" app="core" location="global" params="\$table->baseUrl, \$table->pages, \$table->page, \$table->limit, TRUE, \$table->getPaginationKey()"}
			</div>
		</div>
	{{endif}}
</div>
HTML;
\IPS\Theme::makeProcessFunction( $templatetable, $functionNametable, '$table, $headers, $rows, $quickSearch' );
$table->tableTemplate =  'IPS\\Theme\\'.$functionNametable;

$table->sortBy = $table->sortBy ?: 'dtime';

// $table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin'), 'table' );
// $table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin' ), 'rows' );
// $table->include = array( 'dfid', 'dtime', 'dsize', 'dua', 'dmid', 'dip' );

/* Parsers */
$table->parsers = array(
	'dfid'	=> function( $val )
	{
		try
		{
			$file = \IPS\downloads\File::load( $val );
			return "<a href='" . $file->url() . "' target='_blank'>" . htmlspecialchars( $file->name, \IPS\HTMLENTITIES, 'UTF-8', FALSE ) . '</a>';
		}
		catch ( \OutOfRangeException $e )
		{
			return \IPS\Member::loggedIn()->language()->addToStack('content_deleted');
		}
	},
	// 'dtime'	=> function( $val )
	// {
		// return (string) \IPS\DateTime::ts( $val );
	// },
	// 'dsize'	=> function( $val )
	// {
		// return \IPS\Output\Plugin\Filesize::humanReadableFilesize( $val );
	// },
	// 'dua'	=> function( $val )
	// {
		// return (string) \IPS\Http\Useragent::parse( $val );
	// },
	// 'dmid'	=> function( $val )
	// {
		// try
		// {
			// $member = \IPS\Member::load( $val );
			// return \IPS\Theme::i()->getTemplate( 'global', 'core' )->userPhoto( $member, 'tiny' ) . ' ' . $member->link();
		// }
		// catch ( \OutOfRangeException $e )
		// {
			// return \IPS\Member::loggedIn()->language()->addToStack('deleted_member');
		// }
	// },
);

\IPS\Output::i()->output .= \IPS\Member::loggedIn()->member_id ? (string) $table : "Registrati per accedere a quest'area";
\IPS\Output::i()->title = 'DOWNLOADS';
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->globalTemplate( \IPS\Output::i()->title, \IPS\Output::i()->output) );

È molto intuitivo, se non è chiaro ti spiego passo passo...

si potrebbe aggiungere

  • una barra di ricerca per filtrare i downloads per titolo/file
  • ordinare i risultati
  • ricerche avanzate

il problema è che occorre tempo per implementare ogni cosa nel file php.

  • Like 2
Link al commento
Condividi su altri siti

  • 0
Il 24/4/2017 at 20:57, BomAle ha scritto:

basta creare una pagina php poi tocca modificare le righe con un template a parte... vedi logRows


<?php

require_once './init.php';

\IPS\Dispatcher\External::i();
$baseUrl = \IPS\Http\Url::external( \IPS\Http\Url::baseUrl().ltrim($_SERVER['PHP_SELF'],'/') );

$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl );
$table->tableTemplate = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin'), 'table' );
$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate( 'tables', 'core', 'admin' ), 'rows' );
$table->sortBy = $table->sortBy ?: 'dtime';
$table->sortDirection = $table->sortDirection ?: 'asc';

\IPS\Output::i()->output .= (string) $table;
\IPS\Output::i()->title = 'DOWNLOADS';
\IPS\Output::i()->sendOutput( \IPS\Theme::i()->getTemplate( 'global', 'core' )->globalTemplate( \IPS\Output::i()->title, \IPS\Output::i()->output) );

per l'utente collegato dovresti cambiare


$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl );

in


$table = new \IPS\Helpers\Table\Db( 'downloads_downloads', $baseUrl, array( 'dmid=?', \IPS\Member::i()->loggedIn()->member_id ) );

però per questioni di sicurezza aggiungi prima di $baseUrl:


if( ! \IPS\Member::i()->loggedIn()->member_id )
{
	exit;
}

in questo modo i visitatori non potranno visualizzare i downloads di altri visitatori.

Sei stato gentile e disponibile oltremodo, ti ringrazio davvero tanto per l'aiuto che mi hai dato, con qualche piccola modica al codice che mi hai gentilmente fornito sono riuscito ad ottenere esattamente quello che volevo.

Grazie di tutto.

  • Like 1
Link al commento
Condividi su altri siti

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora
  • Chi sta navigando   0 utenti

    • Nessun utente registrato visualizza questa pagina.
×
×
  • Crea Nuovo...

Informazioni importanti

Abbiamo inserito dei cookies nel tuo dispositivo per aiutarti a migliorare la tua esperienza su questo sito. Puoi modificare le impostazioni dei cookie, altrimenti puoi accettarli cliccando su continua. to insert a cookie message.