Newsgroup: it.comp.www.php
Titolo: modulo drupal x..... il calcetto  (sigh!)

mi sapete dire se esiste un modulo (o un altro modo) per gestire con
la piattaforma drupal la lista di giocatori per una partita di
calcetto? vogliamo fare una sorta di prenotazioni on-line per evitare
(o almeno diminure) una serie infinita di telefonate. 
Il sistema deve ammettere un numero di 10 persone e mettere in coda i
restanti che si prenotano tardi...in modo che prima della partita si
sa chi gioca e chi no, o se possiamo prenotare il calc8 o il calcetto.
Grazie e ciao

 calcetto? 
Non so se esiste ma puoi crearti facilmente un modulo che fa al caso 
tuo. Ti posto un modulo fatto da me per l'inserimento, ricerca, 
modifica, cancellazione (con tutti i controlli del caso), di un database 
di clienti.... guarda com'è fatto e cambialo per la tua casistica.
P.S.
per lanciare il modulo dopo averlo abilitato e dato i permessi:
www.example/gest_subject e www.example/gest_subject/search per le ricerche:
Vedi il codice sotto (alcune cose vanno migliorate ma ti da un idea di 
come fare), ciao Gianni
<?php
/*
----------------- FUNZIONI DI BASE PER IL MODULO -----------------------
*/
function gest_subject_help($section='') {
$output = '';
switch ($section) {
case "admin/modules#description":
$output = t("Amministrazione (inserimento/ricerca/modifica) dei 
soggetti: clienti/fornitori");
break;
}
return $output;
} // function onthisdate_help
// Determiniamo gli accessi al modulo (dando poi i giusti permessi 
nell'amministrazione)
function gest_subject_perm() {
return array('access content', 'access gest_subject', 'administer 
gest_subject');
} // function onthisdate_perm
// Collega la funzione sopra all' url 
http://localhost/drupal/?q=onthisdate
function gest_subject_menu() {
	$uid = $user->uid;
	$items = array();
 
	// Principale (operazioni principali)
	$items[] = array('path' => 'gest_subject',
			'title' => t('Soggetti'),
			'callback' => 'exe_gest_subject',
			'access' => user_access('access content'),
			'type' => MENU_CALLBACK );
 
	// Operazioni di ricerca
	$items[] = array('path' => 'gest_subject/search',
			'title' => t('Ricerca/Stampa Soggetti'),
			'callback' => 'exe_gest_subject_search',
			'access' => user_access('access content'),
			'type' => MENU_CALLBACK );	
 
	// Conferma eliminazione
	$items[] = array('path' => 'gest_subject/delete',
			'title' => t('Eliminazione Soggetto'),
			'callback' => 'exe_gest_subject_delete',
			'access' => user_access('access content'),
			'type' => MENU_CALLBACK );			
 
	return $items;
}
/*
----------------- FUNZIONI RELATIVE ALL'ELIMINAZIONE DEL SOGGETTO 
-----------------------
*/
/*
* Funzione lanciata dall' url 
http://localhost/drupal/?q=onthisdate/delete
*/
function exe_gest_subject_delete()
{
	// Recupera il nome del form
   	$edit = $_POST['edit'];
 
   	// Recupera il tipo di Operazione
   	$op = $_POST['op'];
   	if ($_GET['op']) $op = $_GET['op'];
 
   	// Switch secondo il tipo di operazione da svolgere
   	switch ($op ? $op : $action) {
	// Visualizza (il dettaglio da una ricerca nella griglia)
     case t('Delete'):
     	// Costruisci la query
		db_query('DELETE
				FROM
				{gest_subject}
				WHERE
				id = %d',
				$edit['id']
				);
 
		// Mostra un messaggio
		drupal_set_message(t('Soggetto').' '.$edit['name'].' 
'.t('Cancellato'),'error');
 
	break;
   	}
     // $output .= form_gest_subject();
	// Visualizza la pagina
	print theme('page', $output);  	
}
/*
----------------- FUNZIONI RELATIVE AD INSERIMENTO/MODIFICA 
-----------------------
*/
/*
* Funzione lanciata dall' url 
http://localhost/drupal/?q=onthisdate&pluto=gianni
*/
function exe_gest_subject()
{
	// Recupera il nome del form
   	$edit = $_POST['edit'];
 
   	// Recupera il tipo di Operazione
   	$op = $_POST['op'];
   	if ($_GET['op']) $op = $_GET['op'];
 
   	// Switch secondo il tipo di operazione da svolgere
   	switch ($op ? $op : $action) {
	// Visualizza (il dettaglio da una ricerca nella griglia)
     case t('view'):
     	// Costruisci la query
			$result = db_query('SELECT
								id,
								name,
								address,
								city,
								prov,
								postcode,			
								fiscalcode,
								personalcode,
								email,
								phone1,
								phone2,
								fax,
								note
								FROM
								{gest_subject}
								WHERE
								id = %d',
								$_GET[id]);
			$field = db_fetch_object($result);
 
			$value['id'] = $field->id;
			$value['name'] = $field->name;
			$value['address'] = $field->address;
			$value['city'] = $field->city;
			$value['prov'] = $field->prov;
			$value['postcode'] = $field->postcode;
			$value['fiscalcode'] = $field->fiscalcode;
			$value['personalcode'] = $field->personalcode;
			$value['email'] = $field->email;
			$value['phone1'] = $field->phone1;
			$value['phone2'] = $field->phone2;
			$value['fax'] = $field->fax;
			$value['note'] = $field->note;
 
			$output .= form_gest_subject(&$value);			
     break; 	
	// Inserimento/Modifica
     case t('confirm'):
		if (insert_form_validate($edit)) {
			// Ok, la pagina è valida, provvedi all'inserimento o la modifica dei 
dati
			// Se è impostato l'id modifica, altrimenti inserisci
			if (!$edit['id']) {
 
				// Ricerca se esiste già un codice iva o codice fiscale esistente
				$result = db_query('SELECT
									id
									FROM
									{gest_subject}
									WHERE
									fiscalcode = \'%s\'
									OR
									personalcode = \'%s\'
									',
									$edit['fiscalcode'],
									$edit['personalcode']
									);
 
				// se ci sono più righe significa che esiste già un cliente con quel 
codicefisc./part.Iva
				if (db_num_rows($result) > 0) {
					drupal_set_message(t('ATTENZIONE!! Un cliente con quel codice 
fiscale o
											quella partita iva è già presente in archivio.
											I Dati NON son stati inseriti'), 'error');						
					}
 
					// Se non ci sono righe significa che il cliente può essere inserito	
					else {
 
						// Recupera l'ultio id inserito
						$id = db_next_id('gest_subject_id');		
 
						// inserisci
						db_query("INSERT INTO {gest_subject}
								(
								id,
								name,
								address,
								city,
								prov,
								postcode,
								fiscalcode,
								personalcode,
								email,
								phone1,
								phone2,
								fax,
								note
								) VALUES (
								%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', 
'%s', '%s'
								)",
								$id,
								$edit['name'],
								$edit['address'],
								$edit['city'],
								$edit['prov'],
								$edit['postcode'],
								$edit['fiscalcode'],
								$edit['personalcode'],
								$edit['email'],
								$edit['phone1'],
								$edit['phone2'],
								$edit['fax'],
								$edit['note']
								);
						drupal_set_message(t('Cliente').' '.$edit['name'].' '.t('Inserito'));
						}
				}
				else
				{
				//aggiorna
				db_query("UPDATE {gest_subject} SET 	
						name = '%s',
						address = '%s',
						city = '%s',
						prov = '%s',
						postcode = '%s',
						fiscalcode = '%s',
						personalcode = '%s',
						email = '%s',
						phone1 = '%s',
						phone2 = '%s',
						fax = '%s',
						note = '%s'
						WHERE
						id = %d
						",
						$edit['name'],
						$edit['address'],
						$edit['city'],
						$edit['prov'],
						$edit['postcode'],
						$edit['fiscalcode'],
						$edit['personalcode'],
						$edit['email'],
						$edit['phone1'],
						$edit['phone2'],
						$edit['fax'],
						$edit['note'],
						$edit['id']
						);
				drupal_set_message(t('Cliente').' '.$edit['name'].' '.t('Variato'));	
				}
 
			}
 
   			// Mostra il form
   			$output .= form_gest_subject(&$value);
       	break;
	// Cancellazione (chiedi conferma)
     case 'delete':
     // confirm_form($form_id, $form, $question, $path, $description = 
NULL, $yes = NULL, $no = NULL, $name = 'confirm')
		// Campo ID (Nascosto) - contiene l'id del record da cancellare	
		$form['id'] = array(
		  '#type' => 'hidden',
		  '#size' => 10,
		  '#maxlength' => 10,
		  '#required' => FALSE,
		  '#value' => $edit['id'],
		);
		// Campo dati del soggetto da cancellare 	
		$form['description'] = array(
		  '#type' => 'hidden',
		  '#size' => 100,
		  '#maxlength' => 100,
		  '#required' => FALSE,
		  '#value' => $edit['name'].' - '.$edit['address'].' - '.$edit['city'],
		);
		// Proprietà del form
     	$form['#method'] = 'post';
     	$form['#action'] = 'gest_subject/delete';
 
     	drupal_set_message(t('************** ATTENZIONE!!! 
***************'),'error');
     	// confirm_form($form_id, $form, $question, $path, $description = 
NULL, $yes = NULL, $no = NULL, $name = 'confirm')
		$output .= confirm_form(
							'delete_form',
							$form,
		                   	t('Confermi la cancellazione? '),
		                   	'gest_subject/delete',
						   	t('La risposta affermativa cancellerà in modo definitivo
						   	e irreversibile il soggetto: ').'<p></p><p>'.$edit['name'].' - '
						   								  .$edit['address'].' - '
														  .$edit['city'],
		                   	t('Delete'),
						   	t('Cancel')							
							);
     //  address_delete($aid);
     //  drupal_goto("user/$uid/address");
     	break;
	// Se non sai dove andare visualizza il form
     default:
       $output .= form_gest_subject();
   }
// Visualizza la pagina
print theme('page', $output);
}
/*
* Function insert/modifi subject
*
*/
function form_gest_subject(&$value = NULL)
{
     // Proprietà del form
     $form['#method'] = 'post';
     $form['#action'] = 'gest_subject';
   	// );
	// Campo ID (Nascosto)	
	$form['id'] = array(
	  '#type' => 'hidden',
	  '#title' => t('sono quì'),
	  '#size' => 10,
	  '#maxlength' => 10,
	  '#required' => FALSE,
	  '#value' => $value['id'],
	);
	// Campo Nome/Ragione Sociale	
	$form['name'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Nome'),
	  '#size' => 50,
	  '#maxlength' => 50,
	  '#required' => TRUE,
	  '#value' => $value['name'],
	  '#prefix' => '<table><tr><td><table><tr><td>',
   	  '#suffix' => '</td>',
	);	
	// Campo Partita Iva
	$form['fiscalcode'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Partita Iva'),
	  '#size' => 16,
	  '#maxlength' => 16,
	  '#required' => TRUE,
	  '#value' => $value['fiscalcode'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td>',
	);
 
	// Campo Codice Fiscale
	$form['personalcode'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Codice Fiscale'),
	  '#size' => 16,
	  '#maxlength' => 16,
	  '#required' => TRUE,
	  '#value' => $value['personalcode'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td></tr></table></td></tr>',
	);
	// Campo indirizzo	
	$form['address'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Indirizzo'),
	  '#size' => 100,
	  '#maxlength' => 100,
	  '#required' => TRUE,
	  '#value' => $value['address'],	
	  '#prefix' => '<tr><td>',
   	  '#suffix' => '</td></tr>',
	);	
	// Campo CAP
	$form['postcode'] = array(
	  '#type' => 'textfield',
	  '#title' => t('CAP'),
	  '#size' => 5,
	  '#maxlength' => 5,
	  '#required' => TRUE,
	  '#value' => $value['postcode'],	
	  '#prefix' => '<tr><td><table><tr><td>',
   	  '#suffix' => '</td>',	
	);
 
	// Campo Città	
	$form['city'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Città'),
	  '#size' => 25,
	  '#maxlength' => 25,
	  '#required' => TRUE,
	  '#value' => $value['city'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td>',
	);
	// Campo Provincia
	$form['prov'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Provincia'),
	  '#size' => 2,
	  '#maxlength' => 2,
	  '#required' => TRUE,
	  '#value' => $value['prov'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td></tr></table></td></tr>',
	);	
	// Campo Telefono Principale
	$form['phone1'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Numero Telefono'),
	  '#size' => 25,
	  '#maxlength' => 25,
	  '#required' => FALSE,
	  '#value' => $value['phone1'],	
	  '#prefix' => '<tr><td><table><tr><td>',
   	  '#suffix' => '</td>',
	);
	// Campo Cellulare
	$form['phone2'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Numero Cellulare'),
	  '#size' => 25,
	  '#maxlength' => 25,
	  '#required' => FALSE,
	  '#value' => $value['phone2'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td>',
	);
	// Campo Cellulare
	$form['fax'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Fax'),
	  '#size' => 25,
	  '#maxlength' => 25,
	  '#required' => FALSE,
	  '#value' => $value['fax'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td></tr></table></td></tr>',
	);	
	// Campo Email
	$form['email'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Indirizzo Email'),
	  '#size' => 60,
	  '#maxlength' => 60,
	  '#required' => FALSE,
	  '#value' => $value['email'],	
	  '#prefix' => '<tr><td>',
   	  '#suffix' => '</td></tr>',
	);
	// Campo Note
   	$form['note'] = array(
       '#type' => 'textarea',
       '#title' => t('Note'),
       '#default_value' =>  variable_get('description', ''),
       '#cols' => 60,
       '#rows' => 5,
	  '#value' => $value['note'],
       '#prefix' => '<tr><td colspan=3>',
   	  '#suffix' => '</td></tr></table>',
     );
   // pulsante conferma
   $form['submit'] = array('#type' => 'submit', '#value' => t('confirm'));
   // Se è impostato il campo id, visualizza anche il pulsante elimina
   if ($form['id']['#value'] != '') {
   	$form['delete'] = array('#type' => 'submit', '#value' => t('delete'));
   }
   // Provvede a controllare il form completando eventuali valori 
omessi, costruisce e stampa il form
   $output = drupal_get_form('insert_form', $form);
   return $output;
}
// Verifica del form Notare che il nome della funzione è dato dal nome 
del form (test_page + validate)
function insert_form_validate(&$edit) {
 
    $errors = array();
 
    if ($edit['name'] == '') {
    	 $errors['name'] = t('Inserire il Nome o La ragione Sociale');
    }
    if ($edit['address'] == '') {
    	 $errors['address'] = t('Inserire l\'indirizzo');
    }
    if ($edit['city'] == '') {
    	 $errors['city'] = t('Inserire la Citta\'');
    }
    if ($edit['prov'] == '') {
    	 $errors['prov'] = t('Inserire la provincia');
    }
   foreach ($errors as $name => $message) {
     form_set_error($name, $message);
   }
   return count($errors) == 0;
}
/*
---------------- FUNZIONI DI RICERCA ---------------------------------------
*/
/*
* Function search subject
*
*/
function form_gest_subject_search(&$value = NULL)
{
     // Proprietà del form
     $form['#method'] = 'post';
     $form['#action'] = 'gest_subject/search';
   	// );
	// Campo Nome/Ragione Sociale	
	$form['name'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Nome'),
	  '#size' => 50,
	  '#maxlength' => 50,
	  '#value' => $value['name'],
	  '#prefix' => '<table><tr><td colspan=2>',
   	  '#suffix' => '</td>',
	);	
	// Campo Partita Iva
	$form['fiscalcode'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Partita Iva'),
	  '#size' => 16,
	  '#maxlength' => 16,
	  '#value' => $value['fiscalcode'],	
	  '#prefix' => '<tr><td>',
   	  '#suffix' => '</td>',
	);
 
	// Campo Codice Fiscale
	$form['personalcode'] = array(
	  '#type' => 'textfield',
	  '#title' => t('Codice Fiscale'),
	  '#size' => 16,
	  '#maxlength' => 16,
	  '#value' => $value['personalcode'],	
	  '#prefix' => '<td>',
   	  '#suffix' => '</td></tr></table>',
	);
// form_button($value, $name = 'op', $type = 'submit', $attributes = NULL)
   $form['search'] = array('#type' => 'submit', '#value' => t('search'));
   // $form['reset'] = array('#type' => 'reset', '#value' => t('Pulisci'));
   // Provvede a controllare il form completando eventuali valori 
omessi, costruisce e stampa il form
   $output = drupal_get_form('search_form', $form);
   return $output;
}
/*
* Funzione lanciata dall' url 
http://localhost/drupal/?q=onthisdate&pluto=gianni
*/
function exe_gest_subject_search()
{
	// Recupera l'eventuale array dei dati
	$edit = $_POST['edit'];
	// Recupera il nome del form
	/* se edit[form_id] = nome del form significa che l'utente ha premuto 
un pulsante del form corrente
   	   in questo caso salva i dati del form in sessione per 
visualizzarli nel form. Altrimenti recupera i dati
		  precedentemente salvati in sessione
	*/
	if ($edit[form_id] == 'search_form') {
 
		// Salva l'array dei dati in sessione
		$_SESSION['form_gest_subject_search'] = $edit;
 
		// Recupera l'azione da fare
		$op = $_POST['op'];	
		}
		else {
			// Recupera l'array dei dati del form e ripristina i valori
			$edit = $_SESSION['form_gest_subject_search'];
 
			// Recupera l'azione da fare
			$op = $_GET['op'];
 
		}
 
   	// Switch secondo il tipo di operazione da svolgere
   	switch ($op ? $op : $action) {
	// Ricerca
	case t('search'):
 
     	// Costruisci la condizione
     	$condition = '';
     	if ($edit['name']) {
			if ($condition == '') $condition = ' name like \'%'.$edit['name'].'%\'';
							else  $condition .= ' AND name like \'%'.$edit['name'].'%\'';
			}
     	if ($edit['fiscalcode']) {
			if ($condition == '') $condition = ' fiscalcode like 
\'%'.$edit['fiscalcode'].'%\'';
							else  $condition .= ' AND fiscalcode like 
\'%'.$edit['fiscalcode'].'%\'';
			}
     	if ($edit['personalcode']) {
			if ($condition == '') $condition = ' personalcode like 
\'%'.$edit['personalcode'].'%\'';
							else  $condition .= ' AND personalcode like 
\'%'.$edit['personalcode'].'%\'';
			}
 
		// Aggiunge l'eventuale where
		if ($condition != '') $condition = ' WHERE '.$condition;
		// Costruisci i titoli da mostrare
		$header = array(
	    array('data' => t('Nome/Ragione Sociale'), 'field' => 'name', 
'sort' => 'desc'),
	    array('data' => t('Citta\''), 'field' => 'city'),
	    array('data' => t('Codice IVA'), 'field' => 'fiscalcode'),
	    array('data' => t('Codice Fiscale'), 'field' => 'personalcode'),
	    t('Operazioni')
	  	);
		// Costruisci la query
		$sql = 'SELECT
				id,
				name,
				city,
				fiscalcode,
				personalcode
				FROM {gest_subject}
				'.$condition.tablesort_sql($header);
 
		// Applica la query (paginata)
		$result = pager_query($sql, 50);	
 
		while ($account = db_fetch_object($result)) {
		  $rows[] = array(
		                  $account->name,
		                  $account->city,
		                  $account->fiscalcode,
		                  $account->personalcode,
		                  l(t('Dettaglio'), "/gest_subject", NULL , 
'&op=view&id='.$account->id));
		}
       $output .= 
form_gest_subject_search($_SESSION['form_gest_subject_search']);
 
		// $output .= form_gest_subject_search(&$edit);
		$output .= theme('table', $header, $rows);
		// $output .= theme_pager($header, 2, 0);
 
		// $output .= theme('pager', NULL, 10, 0, array('edit' => $_GET['edit']));
		$output .= theme('pager', NULL, 10, 0, tablesort_pager());
 
     break;
	// Se non sai dove andare visualizza il form
     default:
       $output .= form_gest_subject_search();
   }
// Visualizza la pagina
print theme('page', $output);
}
?>

Non so se esiste ma puoi crearti facilmente un modulo che fa al caso 
[.....] snip

 grazie moltissimo, lo proverò al più presto.
dimenticavo.... quel codice funziona su drupal 4.7, quindi sul cvs
Ciao
Gianni