Ok. // - False -> Error. function crearInscripcio($cTitol, $cSubTitol, $cDataInici, $cDataFi, $cTel_contacte, $cEmail_contacte, $lGrups, &$cError) { // Inicia la transacció. iniciarTransaccioSQL(); // Prepara la inserció del registre. $query="INSERT INTO inscripcions (titol , subtitol , data_inici, data_fi, tel_contacte, email_contacte , grups) VALUES ( '".htmlspecialchars($cTitol, ENT_QUOTES)."', '".htmlspecialchars($cSubTitol, ENT_QUOTES)."', '$cDataInici', '$cDataFi', '".htmlspecialchars($cTel_contacte, ENT_QUOTES)."', '".htmlspecialchars($cEmail_contacte, ENT_QUOTES)."', ".($lGrups ? "true" : "false")." )"; if (!mysql_query($query)) // Executa la inserció. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); // Desfa la transaccio. desferTransaccioSQL(); return false; } // Obté l'ID de la nova inscripció inserida. $query="SELECT MAX(id) FROM inscripcions WHERE titol='".htmlspecialchars($cTitol, ENT_QUOTES)."'"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Guarda l'ID de la inscripció. $res=mysql_fetch_array($result); $nID=$res[0]; // Crea les taules corresponents dins la BD. if (!crearTaulesInscripcio($nID, $cError)) { desferTransaccioSQL(); return false; } // S'ha insertat correctament. Finalitza la transacció i retorna l'ID de la nova inscripció creada. finalitzarTransaccioSQL(); return $nID; } // Funció que actualitza les dades de la inscripció amb ID '$nIDInscripcio' amb els valors dels paràmetres dins la taula d'inscripcions. // Paràmetres: // - $nIDInscripcio: ID de la inscripció a actualitzar. // - $cTitol: Títol de la cursa. // - $cSubTitol: SubTítol de la cursa. // - $cDataInici: Data d'inici de les inscripcions. // - $cDataFi: Data de finalització de les inscripcions. // - $cEmail_contacte: E-mail de contacte. // - $lGrups: Si les inscripcions funcionen sobre grups amb places restringides. // - $cError: (S) Text del darrer error produït (si se n'ha produït algun). // Retorna: // - True -> Ok. // - False -> Error. function actualitzarDadesInscripcio($nIDInscripcio, $cTitol, $cSubtitol, $cDataInici, $cDataFi, $cTel_contacte, $cEmail_contacte, $lGrups, &$cError) { // Prepara l'actualització del registre. $query="UPDATE inscripcions SET titol = '".htmlspecialchars($cTitol, ENT_QUOTES)."', subtitol = '".htmlspecialchars($cSubtitol, ENT_QUOTES)."', data_inici = '$cDataInici', data_fi = '$cDataFi', tel_contacte = '".htmlspecialchars($cTel_contacte, ENT_QUOTES)."', email_contacte = '".htmlspecialchars($cEmail_contacte, ENT_QUOTES)."', grups = ".($lGrups ? "true" : "false")." WHERE id = $nIDInscripcio "; if (!mysql_query($query)) // Executa la inserció. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } return true; } // Funció que genera les taules de gestió associades a una inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció per la que s'han de crear les taules. // - $cError: (S) Text del darrer error produït (si se n'ha produït algun). // Retorna: // - True -> Ok. // - False -> Error. function crearTaulesInscripcio($nIDInscripcio, &$cError) { // Taula '_camps' $query = "CREATE TABLE IF NOT EXISTS ".$nIDInscripcio."_camps ( id int(11) NOT NULL auto_increment, nom varchar(100), tipus int(11), mida int(11), decimals int(11), oblig int(1), ocult int(1), ordre int(11), imborrable int(1), idGrupFiltre int(11), tipusFiltre varchar(2), PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1"; if (!mysql_query($query)) // Executa la creació. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Taula '_valors_camps' $query = "CREATE TABLE IF NOT EXISTS ".$nIDInscripcio."_valors_camps ( idCamp int(11), id int(11) NOT NULL auto_increment, valor varchar(100), ordre int(11), PRIMARY KEY (idCamp, id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1"; if (!mysql_query($query)) // Executa la creació. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Taula '_valors_camps_data' $query = "CREATE TABLE IF NOT EXISTS ".$nIDInscripcio."_valors_camps_data ( idCamp int(11), any_min int, any_max int, PRIMARY KEY (idCamp) ) ENGINE=MyISAM DEFAULT CHARSET=latin1"; if (!mysql_query($query)) // Executa la creació. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Taula '_inscrits' $query = "CREATE TABLE IF NOT EXISTS ".$nIDInscripcio."_inscrits ( id int(11) NOT NULL auto_increment, idGrup int(11) default 0, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1"; if (!mysql_query($query)) // Executa la creació. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Taula '_grups' $query="CREATE TABLE IF NOT EXISTS ".$nIDInscripcio."_grups ( id int(11) NOT NULL auto_increment, nom varchar(255) NOT NULL, places int(11) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1"; if (!mysql_query($query)) // Executa la creació. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'han creat totes les taules correctament. Retorna True. return true; } // Funció que determina si la inscripció amb ID '$nIDInscripcio' existeix dins el sistema. // Paràmetres: // - $nIDInscripcio: ID de la inscripció a comprovar. // Retorna: // - True -> Existeix. // - False -> No existeix. function existeixInscripcio($nIDInscripcio) { // Consulta la taula d'inscripcions. $query="SELECT COUNT(*) FROM inscripcions WHERE id=$nIDInscripcio"; $result=mysql_query($query); if (!$result) { setLastError(mysql_error()); return false; } // Passa el resultat dins un vector. $res=mysql_fetch_array($result); // Retorna el n. de registres trobats. return $res[0]; } // Funció que inserta un nou grup dins la inscripció amb ID 'nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomGrup: Nom del nou grup a insertar. // - $nPlaces: N. de places del grup. // - &cError: (S) Text del darrer error produït. // Retorna: // >0 -> ID del nou grup creat. // <0 -> Error. function insertarGrupInscripcio($nIDInscripcio, $cNomGrup, $nPlacesGrup, &$cError) { // Si la inscripció no existeix, surt. if (!existeixInscripcio($nIDInscripcio)) return -1; // Inicia la transacció. iniciarTransaccioSQL(); // Prepara la inserció del registre. $query="INSERT INTO ".$nIDInscripcio."_grups (nom, places) VALUES ( '".htmlspecialchars($cNomGrup, ENT_QUOTES)."', $nPlacesGrup )"; if (!mysql_query($query)) // Executa la inserció. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); // Desfa la transaccio. desferTransaccioSQL(); return false; } // Obté l'ID del nou grup inserit. $query="SELECT MAX(id) FROM ".$nIDInscripcio."_grups WHERE nom='".htmlspecialchars($cNomGrup, ENT_QUOTES)."'"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Guarda l'ID del grup. $res=mysql_fetch_array($result); $nId=$res[0]; // S'ha insertat correctament. Finalitza la transacció i retorna l'ID del nou grup creat. finalitzarTransaccioSQL(); return $nId; } // Funció que inserta un nou grup dins la inscripció amb ID 'nIDInscripcio'. // '$nIDGrup' pot indicar l'ID amb el que s'ha d'insertar, o 0 si se li vol assignar un nou ID. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup a insertar. // - $cNomGrup: Nom del nou grup a insertar. // - $nPlaces: N. de places del grup. // - &cError: (S) Text del darrer error produït. // Retorna: // >0 -> ID del nou grup creat. // <0 -> Error. function insertarGrupIDInscripcio($nIDInscripcio, $nIDGrup, $cNomGrup, $nPlacesGrup, &$cError) { // Si la inscripció no existeix, surt. if (!existeixInscripcio($nIDInscripcio)) return -1; // Si no s'ha indicat un ID pel grup, o ja existeix un grup amb l'ID indicat, l'inserta amb un nou ID. if (!$nIDGrup || existeixGrupInscripcio($nIDInscripcio, $nIDGrup)) { // Inserta el grup amb un nou ID i retorna el nou ID assignat. return insertarGrupInscripcio($nIDInscripcio, $cNomGrup, $nPlacesGrup, $cError); } // Prepara la inserció del registre. $query="INSERT INTO ".$nIDInscripcio."_grups (id, nom, places) VALUES ( $nIDGrup, '".htmlspecialchars($cNomGrup, ENT_QUOTES)."', $nPlacesGrup )"; if (!mysql_query($query)) // Executa la inserció. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // retorna l'ID del grup. return $nIDGrup; } // Comprova si existeix una inscripció amb l'ID '$nIDGrup' dins la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup. // Retorna: // - true -> Existeix. // - false -> No existeix. function existeixGrupInscripcio($nIDInscripcio, $nIDGrup) { $query = "SELECT COUNT(*) FROM ".$nIDInscripcio."_grups WHERE id=".$nIDGrup; $result=mysql_query($query); if (!$result) return false; $res=mysql_fetch_array($result); return $res[0]!=0; } // Elimina tots els grups existents dins la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // Retorna: // - true -> Ok. // - false -> Error. function eliminarGrupsInscripcio($nIDInscripcio) { $query = "DELETE FROM ".$nIDInscripcio."_grups "; if (!mysql_query($query)) return false; return true; } // Posa dins els paràmetres les dades de la inscripció amb ID '$nIDInscripcio'. function getDadesInscripcio($nIDInscripcio, &$cTitol, &$cSubtitol, &$cDataInici, &$cDataFi, &$cTel, &$cEmail, &$lGrups) { // Si la inscripció no existeix, surt. if (!existeixInscripcio($nIDInscripcio)) return -1; // Obté les dades de la inscripció. $query="SELECT titol, subtitol, data_inici, data_fi, tel_contacte, email_contacte, grups FROM inscripcions WHERE id=$nIDInscripcio"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Passa les dades dins un Array. $res=mysql_fetch_array($result); $cTitol = $res[0]; $cSubtitol = $res[1]; $cDataInici = $res[2]; $cDataFi = $res[3]; $cTel = $res[4]; $cEmail = $res[5]; $lGrups = $res[6]; return 1; } // Funció que determina si una inscripció treballa o no amb grups. // Paràmetres: // - $nIDInscripcio: ID de la inscripció a consultar. // Retorna: // - true -> Si // - false -> No. function inscripcioTreballaAmbGrups($nIDInscripcio) { // Consulta la inscripció. $query="SELECT COUNT(*) FROM inscripcions WHERE id=$nIDInscripcio AND grups"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } $res=mysql_fetch_array($result); // Retorna si treballa o no amb grups. return ($res[0]!=0); } // Funció que fa el tractament dels camps pertinent en funció del valor del camp 'cAccio'. // Paràmetres: // - nIDInscripcio: ID de la inscripció. // - cAccio: Acció a realitzar. // - cValAccio: Valor de l'acció a realitzar (només utilitzat en alguns casos). // - nIdCamp: ID del camp afectat. // - cTitolNouCamp: Titol del nou camp (en cas de crear-lo). // - cTipusNouCamp: Tipus del nou camp (en cas de crear-lo). // - nMidaNouCamp: Mida del nou camp (en cas de crear-lo). // - nDecimalsNouCamp: Decimals del nou camp (en cas de crear-lo). // - cError: (S) Text del darrer error produït. function accioCampsEdicio($nIDInscripcio, $cAccio, $cValAccio, $nIdCamp, $cTitolNouCamp, $cTipusNouCamp, $nMidaNouCamp, $nDecimalsNouCamp, &$cError) { switch ($cAccio) { // 'crear' -> Crear camp. case "crear": { // Determina el nombre corresponent al tipus del camp indicat. $nTipusCamp=getNumTipusCamp($cTipusNouCamp); if ($nTipusCamp<0) { $cError = "Tipus de camp desconegut: "+$cTipusNouCamp; return -1; } // Inserta el nou camp dins la inscripció. return insertarCampInscripcio($nIDInscripcio, $cTitolNouCamp, $nTipusCamp, $nMidaNouCamp, $nDecimalsNouCamp, 0, 0, 0, $cError); } // 'eliminar' -> Eliminar el camp amb ID '$nIdCamp'. case "eliminar": { // Elimina el camp pertinent. return eliminarCampInscripcio($nIDInscripcio, $nIdCamp, $cError); } // 'canviarOcult' -> Canvia l'estat d'ocultació del camp amb ID '$nIdCamp'. case "canviarOcult": { // Li estableix l'estat pertinent. return setOcultCampInscripcio($nIDInscripcio, $nIdCamp, $cValAccio, $cError); } // 'canviarOblig' -> Canvia l'estat d'obligatorietat del camp amb ID '$nIdCamp'. case "canviarOblig": { // Li estableix l'estat pertinent. return setObligCampInscripcio($nIDInscripcio, $nIdCamp, $cValAccio, $cError); } // 'canviarOrdre' -> Canvia l'ordre del camp amb ID '$nIdCamp'. case "canviarOrdre": { // Li puja/baixa l'ordre. return setOrdreCampInscripcio($nIDInscripcio, $nIdCamp, $cValAccio, $cError); } // 'filtreGrup' -> estableix el filtre per grup del camp amb ID '$nIdCamp'. case "filtreGrup": { // Li assigna el filtre per grup. return setFiltreGrupCampInscripcio($nIDInscripcio, $nIdCamp, $cValAccio, $cError); } // 'tipusFiltreGrup' -> estableix el tipus de filtre per grup del camp amb ID '$nIdCamp'. case "tipusFiltreGrup": { // Li assigna el tipus filtre per grup. return setTipusFiltreGrupCampInscripcio($nIDInscripcio, $nIdCamp, $cValAccio, $cError); } /* // 'canviarLlistat' -> Canvia l'estat de llistat del camp amb ID '$nIdCamp'. case "canviarLlistat": { // Li estableix l'estat pertinent. return setLlistatCampCursa($cCursa, $nIdCamp, $cValAccio, $cError); } */ } } // Retorna el n. de tipus segons el tipus de camp '$cTipusCamp'. // Paràmetres: // - $cTipusCamp: Tipus de camp. // Retorna: // >0 -> N. de tipus del camp. function getNumTipusCamp($cTipusCamp) { switch ($cTipusCamp) { case "Caracters": { return 1; break; } case "Numèric": { return 2; break; } case "Decimal": { return 3; break; } case "Check": { return 4; break; } case "Opcions": { return 5; break; } case "Llista desplegable": { return 6; break; } case "Text": { return 7; break; } case "Data": { return 8; break; } case "Etiqueta": { return 9; break; } default: { return -1; break; } } } // Funció que inserta un nou camp dins la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció dins la qual s'inserta el camp. // - $cNomCamp: Nom del camp. // - $nTipusCamp: Tipus del camp {1 -> String, 2 -> Numèric, ...} // - $nMidaCamp: Mida del camp. // - $nDecimalsCamp: Decimals del camp. // - $lOblig: Indica si el camp és obligatori. // - $lOcult: Indica si es tracta d'un camp ocult. // - $lLlistat: Indica si el camp es presenta en el llistat. // - $cError: (S) Text del darrer error produït. function insertarCampInscripcio($nIDInscripcio, $cNomCamp, $nTipusCamp, $nMidaCamp, $nDecimalsCamp, $lOblig, $lOcult, $lLlistat, &$cError) { $nNumOrdre=0; // Comprova els paràmetres. if (!existeixInscripcio($nIDInscripcio)) { $cError="La inscripció indicada no existeix."; return false; } if (strlen($cNomCamp)==0) { $cError="Cal indicar un nom pel camp."; return false; } // Inicia la transacció. iniciarTransaccioSQL(); // Consulta el n. d'ordre de camp més alt existent dins la taula. $query="SELECT MAX(ordre) FROM ".$nIDInscripcio."_camps"; // Executa la consulta. $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Posa el resultat dins un vector. $res=mysql_fetch_array($result); // Posa com a n. d'ordre el més gran trobat +1 (si no n'hi ha, és 0+1). $nNumOrdre=$res[0]+1; // Prepara la consulta. $query="INSERT INTO ".$nIDInscripcio."_camps (nom, tipus, mida, decimals, oblig, ordre, ocult) VALUES ( '".htmlspecialchars($cNomCamp, ENT_QUOTES)."', $nTipusCamp, $nMidaCamp, $nDecimalsCamp, $lOblig, $nNumOrdre, $lOcult )"; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Obté l'ID del nou camp inserit. $query="SELECT MAX(id) FROM ".$nIDInscripcio."_camps"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Guarda l'ID del camp. $res=mysql_fetch_array($result); $nId=$res[0]; // Modifica la taula de dades, per afegir-li la columna del nou camp. $query="ALTER TABLE ".$nIDInscripcio."_inscrits ADD COLUMN c_$nId ".getTipusSQL($nTipusCamp, $nMidaCamp, $nDecimalsCamp); if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // S'ha insertat correctament. Finalitza la transacció i retorna l'ID del nou camp creat. finalitzarTransaccioSQL(); return $nId; } // Funció que, donat un identificador de tipus, retorna el tipus corresponent de MySQL. // Paràmetres: // - $nTipus: Identificador del tipus (1 -> String, 2 -> Numèric, ...) // - $nMida: Mida del camp. // - $nDecimals: Decimals del camp. // Retorna: // - String amb el tipus corresponent de MySQL. function getTipusSQL($nTipus, $nMida, $nDecimals) { switch ($nTipus) { // 1 -> String case 1: return "VARCHAR($nMida)"; // 2 -> Numèric case 2: return "INT(11)"; // 3 -> Decimal case 3: return "DECIMAL($nMida, $nDecimals)"; // 4 -> Logic case 4: return "INT(1)"; // 5 -> Opcions case 5: return "VARCHAR($nMida)"; // 6 -> Llista case 6: return "VARCHAR($nMida)"; // 7 -> Text case 7: return "TEXT"; // 8 -> Data case 8: return "DATE"; // 9 -> Etiqueta case 9: return "VARCHAR(1)"; default: return ""; } } // Funció que elimina el camp amb ID '$nIdCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció de la qual s'elimina el camp. // - $nIdCamp: ID del camp a eliminar. // - $cError: (S) Text del darrer error produït. function eliminarCampInscripcio($nIDInscripcio, $nIdCamp, &$cError) { // Comprova els paràmetres. if (!existeixInscripcio($nIDInscripcio)) { $cError="La inscripció indicada no existeix."; return false; } // Comprova que el camp no sigui imborrable. $query="SELECT imborrable FROM ".$nIDInscripcio."_camps WHERE id=$nIdCamp"; // Executa la consulta. $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Posa el resultat dins un array. $res=mysql_fetch_array($result); // Si està marcat com a imborrable, missatge i fora. if ($res[0]) { $cError="El camp està marcat com a imborrable. No està permesa la seva eliminació."; return false; } // Inicia la transacció. iniciarTransaccioSQL(); // Consulta el n. d'ordre de camp més alt existent dins la taula. $query="DELETE FROM ".$nIDInscripcio."_camps WHERE id=$nIdCamp"; // Executa la consulta. $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Modifica la taula de dades, per treure-li la columna del camp eliminat. $query="ALTER TABLE ".$nIDInscripcio."_inscrits DROP COLUMN c_$nIdCamp "; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // S'ha insertat correctament. Finalitza la transacció i retorna true. finalitzarTransaccioSQL(); return true; } // Funció que estableix l'estat d'ocultació del camp amb ID '$nIdCamp' segons el paràmetre '$nOcult'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdCamp: ID del camp. // - $nOcult: Estat d'ocultació a establir. // - $cError: (D) Text del darrer error produït. function setOcultCampInscripcio($nIDInscripcio, $nIdCamp, $nOcult, &$cError) { // Prepara l'actualització del registre. // (Si es marca com a ocult, necessàriament es desmarca com a obligatori. No es pot obligar a algú a omplir un camp ocult) $query="UPDATE ".$nIDInscripcio."_camps SET ocult=$nOcult".($nOcult ? ", oblig=false " : "")." WHERE id=$nIdCamp"; if (!mysql_query($query)) // Executa l'actualització. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'ha actualitzat el camp correctament. Retorna True. return true; } // Funció que estableix l'estat d'obligatorietat del camp amb ID '$nIdCamp' segons el paràmetre '$nOcult'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdCamp: ID del camp. // - $nOblig: Estat d'obligatorietat a establir. // - $cError: (D) Text del darrer error produït. function setObligCampInscripcio($nIDInscripcio, $nIdCamp, $nOblig, &$cError) { // Prepara la inserció del registre. $query="UPDATE ".$nIDInscripcio."_camps SET oblig=$nOblig WHERE id=$nIdCamp"; if (!mysql_query($query)) // Executa l'actualització. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'ha actualitzat el camp correctament. Retorna True. return true; } // Funció que estableix el filtre per grup del camp amb ID '$nIdCamp' segons el paràmetre '$nIDGrupFiltre'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdCamp: ID del camp. // - $nIDGrupFiltre: ID del grup pel qual es filtra. // - $cError: (D) Text del darrer error produït. function setFiltreGrupCampInscripcio($nIDInscripcio, $nIdCamp, $nIDGrupFiltre, &$cError) { // Prepara la inserció del registre. $query="UPDATE ".$nIDInscripcio."_camps SET idGrupFiltre=$nIDGrupFiltre WHERE id=$nIdCamp"; if (!mysql_query($query)) // Executa l'actualització. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'ha actualitzat el camp correctament. Retorna True. return true; } // Funció que estableix el tipus de filtre per grup del camp amb ID '$nIdCamp' segons el paràmetre '$cTipusFiltre'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdCamp: ID del camp. // - $cTipusFiltre: Tipus de filtre ('=', '<', '>'). // - $cError: (D) Text del darrer error produït. function setTipusFiltreGrupCampInscripcio($nIDInscripcio, $nIdCamp, $cTipusFiltre, &$cError) { // Prepara la inserció del registre. $query="UPDATE ".$nIDInscripcio."_camps SET tipusFiltre='$cTipusFiltre' WHERE id=$nIdCamp"; if (!mysql_query($query)) // Executa l'actualització. { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'ha actualitzat el camp correctament. Retorna True. return true; } // Funció que canvia l'ordre del camp amb ID '$nIdCamp' segons el paràmetre '$nOcult'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdCamp: ID del camp. // - $nModifOrdre: Modificació de l'ordre (Si >0, incrementa l'ordre; Si <0, decrementa l'ordre). // - $cError: (D) Text del darrer error produït. function setOrdreCampInscripcio($nIDInscripcio, $nIdCamp, $nModifOrdre, &$cError) { // Consulta l'ordre del camp actual. $query="SELECT ordre FROM ".$nIDInscripcio."_camps WHERE id=$nIdCamp"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Posa el resultat en un array. $res=mysql_fetch_array($result); // Guarda el n. d'ordre actual del camp. $nOrdreCamp=$res[0]; // Consulta l'ordre del següent/anterior camp (en funció de si s'ha d'incrementar/decrementar l'ordre del camp). $query="SELECT id,ordre FROM ".$nIDInscripcio."_camps WHERE ordre".($nModifOrdre>0 ? ">" : "<").$nOrdreCamp." ORDER BY ordre ".($nModifOrdre>0 ? "ASC" : "DESC")." LIMIT 1"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Si no hi ha cap altre camp (ja és el primer / últim) surt (no cal fer res). if (mysql_num_rows($result)==0) return true; // Posa el resultat en un array. $res=mysql_fetch_array($result); // Guarda la informació del camp amb el que ha d'intercanviar l'ordre. $nIdAltreCamp=$res[0]; $nOrdreAltreCamp=$res[1]; // Posa l'ordre de l'altre camp a l'actual. $query="UPDATE ".$nIDInscripcio."_camps SET ordre=$nOrdreAltreCamp WHERE id=$nIdCamp"; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Posa l'ordre del camp actual a l'altre. $query="UPDATE ".$nIDInscripcio."_camps SET ordre=$nOrdreCamp WHERE id=$nIdAltreCamp"; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'ha actualitzat l'ordre correctament. Retorna True. return true; } // Funció que retorna un string HTML amb els camps de la inscripció amb ID '$nIDInscripcio' per la seva edició. // Pensat per estar contingut dins un formulari. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomFormulari: Nom del formulari que conté els controls. // Retorna: // - Text dels camps . function presentarCampsEdicio($nIDInscripcio, $cNomFormulari) { $sortida=""; // Comprova que la inscripció existeixi if (!existeixInscripcio($nIDInscripcio)) { return "La inscripció indicada no existeix."; } // Obté els camps de la inscripció. $query="SELECT id, nom, tipus, mida, decimals, oblig, ocult, ordre, imborrable, idGrupFiltre, tipusFiltre FROM ".$nIDInscripcio."_camps ORDER BY ordre"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. return "S'ha produït un error obtenint els camps de la inscripció:
".mysql_error(); } // Posarà els camps dins una taula. $sortida.="\n"; // Recorre els registres obtinguts. $nI=0; while ($res=mysql_fetch_row($result)) { $nI++; // Crea una nova fila. $sortida.=""; $sortida.=presentarCampEdicio($nIDInscripcio, $cNomFormulari, $nI, $res[0], $res[1], $res[2], $res[3], $res[4], $res[5], $res[6], $res[7], $res[8], $res[9], $res[10]); // Tanca la fila. $sortida.="\n"; } // Tanca la taula. $sortida.="
"; // Afegeix a la sortida el bloc per afegir un nou camp. $sortida.=presentarNouCampEdicio($cNomFormulari); // Retorna el llistat dels camps obtinguts. return $sortida; } // Funció que retorna un string HTML corresponent al camp indicat pels paràmetres. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomFormulari: Nom del formulari HTML que conté els camps. // - $nNumCamp: N. del camp dins el formulari. // - $nID: ID del camp. // - $cNom: Nom del camp. // - $nTipus: Tipus del camp (1 -> String, 2 -> Numèric, ...) // - $nMida: Mida del camp. // - $nDecimals: Decimals del camp. // - $lOblig: Indica si el camp és obligatori. // - $lOcult: Indica si el camp és ocult. // - $nOrdre: Indica l'Ordre del camp. // - $lImborrable: Indica si el camp és imborrable. // - $nIDGrupFiltre: ID del grup pel qual es filtra. // - $cTipusFiltre: Tipus de filtre ('=', '<', '>') function presentarCampEdicio($nIDInscripcio, $cNomFormulari, $nNumCamp, $nId, $cNom, $nTipus, $nMida, $nDecimals, $lOblig, $lOcult, $nOrdre, $lImborrable, $nIDGrupFiltre, $cTipusFiltre) { // - Casella 0 // Fletxes per pujar / baixar. $sortida.="
"; // Si no és una etiqueta, presentarà 2 columnes, una pel títol i una altra pel valor. if ($nTipus!=9) { // - Casella 1. $sortida.=""; // Camp ocult amb l'ID $sortida.="\n"; // Títol del camp. // Si és una etiqueta, la presenta diferent. $sortida.=$cNom.":"; $sortida.="\n"; // - Casella 2. $sortida.=""; } else { // Si és una etiqueta, la presentarà en una única columna. // - Casella 1. $sortida.=""; // Camp ocult amb l'ID $sortida.="\n"; // Títol del camp. // Si és una etiqueta, la presenta diferent. $sortida.=getStringEtiqueta($cNom); } // Valor (en funció del tipus del camp). $sortida.=presentarValorCampEdicio($nIDInscripcio, $nNumCamp, $nId, $nTipus, $nMida, $nDecimals); $sortida.=""; // - Casella 3. $sortida.=""; // Obligatori. $sortida.=""; $sortida.=""; // - Casella 4. $sortida.=""; // Obligatori. $sortida.=""; $sortida.=""; // - Casella 5. $sortida.=""; // Ocult. $sortida.=""; $sortida.=""; // - Casella 6. $sortida.=""; // Obligatori. $sortida.=""; $sortida.=""; /* // - Casella 7. $sortida.=""; // Llistat. $sortida.=""; $sortida.=""; // - Casella 8. $sortida.=""; // Llistat. $sortida.="Llistat"; $sortida.=""; */ // - Casella 9. // Separador. $sortida.=""; // - Casella 10. // Eliminar camp. $sortida.=(!$lImborrable ? "" : ""); // - Casella 11 // Filtrar per grup. // Si la inscripció treballa amb grups... if (inscripcioTreballaAmbGrups($nIDInscripcio)) { // Obté els grups de la inscripció. $nNumGrups=getGrupsInscripcio($nIDInscripcio, $aIDsGrups, $aNomsGrups, $aPlacesGrups); $sortida.=""; // Combo amb el tipus de filtre a aplicar ('=', '<', '>'). $sortida.=""; // Combo amb els diferents grups. $sortida.=""; } // Retorna el text obtingut. return $sortida; } // Funció que presenta el control per la introducció de dades, en funció del tipus indicat per paràmetre. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nNumCamp: N. del camp dins el formulari. // - $nID: ID del camp. // - $nTipus: Tipus del camp (1 -> String, 2 -> Numèric, ...) // Retorna: // - String en HTML amb el control corresponent. function presentarValorCampEdicio($nIDInscripcio, $nNumCamp, $nId, $nTipus, $nMida, $nDecimals) { switch ($nTipus) { // 1 -> String case 1: { return ""; } // 2 -> Numèric case 2: { return ""; } // 3 -> Decimal case 3: { return ""; } // 4 -> Lògic case 4: { return ""; } // 5 -> Opcions case 5: { // Consulta els diferents valors del camp. $query="SELECT valor FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nId ORDER BY ordre"; $result=mysql_query($query); if (!$result) return "S'ha produït un error obtenint les opcions del camp
".mysql_error(); // Ho posarà tot dins una taula. $sortida=""; // Recorre el vector, presentant les diferents opcions. for ($nI=0; $nI"; } // Botó per modificar els valors. $sortida.=""; // Tanca la taula. $sortida.="
"; // Retorna les opcions obtingudes. return $sortida; } // 6 -> Llista case 6: { // Consulta els diferents valors del camp. $query="SELECT valor FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nId ORDER BY ordre"; $result=mysql_query($query); if (!$result) return "S'ha produït un error obtenint les opcions del camp
".mysql_error(); // Ho posarà tot dins una taula. $sortida=""; // Recorre el vector, presentant les diferents opcions. $sortida.=""; // Tanca la taula. $sortida.="
"; // Retorna les opcions obtingudes. return $sortida; } // 7 -> Text case 7: { return ""; } // 8 -> Data case 8: { // Consulta els paràmetres del camp. $query="SELECT any_min, any_max FROM ".$nIDInscripcio."_valors_camps_data WHERE idCamp=$nId"; $result=mysql_query($query); if (!$result) return "S'ha produït un error obtenint les opcions del camp
".mysql_error(); if (mysql_numrows($result)==0) { // Si no s'ha especificat, va des de l'any actual fins 100 anys endarrera. $nAnyMax=date('Y'); $nAnyMin=$nAnyMax-100; } else { // Si s'ha especificat, agafa els anys mínim i màxim indicats. $res=mysql_fetch_array($result); $nAnyMax=$res[1]; $nAnyMin=$res[0]; } // Crea un primer camp ocult, que és el que realment contindrà el valor del camp. $sortida=""; // DIA: $sortida.=""; // MES: $sortida.=""; // ANY: $sortida.=""; // Botó per modificar els valors. $sortida.=" "; // Retorna les opcions obtingudes. return $sortida; } // 9 -> Etiqueta case 9: { return ""; } // Altres... default: { return "Tipus de control desconegut."; } } } // Funció que retorna un string HTML corresponent al bloc necessari per crear un nou camp. // Paràmetres: // - $cNomFormulari: Nom del formulari que conté els controls. // Retorna: // - String HTML corresponent. function presentarNouCampEdicio($cNomFormulari) { return "

Crear nou camp:


"; } // Posa dins el paràmetre '$cNomCamp' el nom del camp amb ID '$nIDCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDCamp: ID del camp. // - $cNomCamp: (S) Nom del camp. // Retorna: // - true -> Ok. // - false -> Error o camp no trobat. function getNomCamp($nIDInscripcio, $nIDCamp, &$cNomCamp) { // Consulta el nom del camp. $query="SELECT nom FROM ".$nIDInscripcio."_camps WHERE id=$nIDCamp"; $result=mysql_query($query); // Si hi ha hagut un error o no ha trobat el registre pertinent, surt. if (!$result || mysql_num_rows($result)==0) return false; // Passa el resultat a un array. $res=mysql_fetch_array($result); // Guarda el nom del camp dins el paràmetre. $cNomCamp=$res[0]; return true; } // Funció que fa el tractament dels valors pertinent en funció del valor del camp 'cAccio'. // Paràmetres: // - nIDInscripcio: ID de la inscripció. // - nIdCamp: ID del camp de la inscripció que conté els valors. // - cAccio: Acció a realitzar. // - cValAccio: Valor de l'acció a realitzar (només utilitzat en alguns casos). // - nIdValor: ID del valor afectat. // - cTitolNouValor: Titol del nou valor (en cas de crear-lo). // - cError: (S) Text del darrer error produït. function accioValorsCamp($nIDInscripcio, $nIdCamp, $cAccio, $cValAccio, $nIdValor, $cTitolNouValor, &$cError) { switch ($cAccio) { // 'crear' -> Crear valor. case "crear": { // Inserta el nou valor dins el camp. return insertarValorCamp($nIDInscripcio, $nIdCamp, $cTitolNouValor, $cError); } // 'eliminar' -> Eliminar el valor amb ID '$nIdValor'. case "eliminar": { // Elimina el valor pertinent. return eliminarValorCamp($nIDInscripcio, $nIdCamp, $nIdValor, $cError); } // 'canviarOrdre' -> Canvia l'ordre del valor amb ID '$nIdValor' dins el camp. case "canviarOrdre": { // Li puja/baixa l'ordre. return setOrdreValorCamp($nIDInscripcio, $nIdCamp, $nIdValor, $cValAccio, $cError); } } } // Funció que inserta un nou valor dins el camp amb ID '$nIdCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció que conté el camp. // - $nIdCamp: ID del camp dins el qual s'inserta el valor.' // - $cNomValor: Nom del nou valor. // - $cError: (S) Text del darrer error produït. function insertarValorCamp($nIDInscripcio, $nIdCamp, $cNomValor, &$cError) { $nNumOrdre=0; // Comprova que la inscripció existeixi if (!existeixInscripcio($nIDInscripcio)) { $cError = "La inscripció indicada no existeix."; return false; } // Comprova els paràmetres. if (strlen($cNomValor)==0) { $cError="Cal indicar un nom pel valor."; return false; } // Inicia la transacció. iniciarTransaccioSQL(); // Consulta el n. d'ordre de valor més alt existent dins la taula pel camp actual. $query="SELECT MAX(ordre) FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nIdCamp"; // Executa la consulta. $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Posa el resultat dins un vector. $res=mysql_fetch_array($result); // Posa com a n. d'ordre el més gran trobat +1 (si no n'hi ha, és 0+1). $nNumOrdre=$res[0]+1; // Prepara la consulta. $query="INSERT INTO ".$nIDInscripcio."_valors_camps (idCamp, valor, ordre) VALUES ( $nIdCamp, '".htmlspecialchars($cNomValor, ENT_QUOTES)."', $nNumOrdre)"; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Obté l'ID del nou camp inserit. $query="SELECT MAX(id) FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nIdCamp"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Guarda l'ID del camp. $res=mysql_fetch_array($result); $nId=$res[0]; // S'ha insertat correctament. Finalitza la transacció i retorna l'ID del nou valor creat. finalitzarTransaccioSQL(); return $nId; } // Funció que elimina el valor amb ID '$nIdValor' del camp amb ID '$nIdCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció de la qual s'elimina el camp. // - $nIdCamp: ID del camp que conté el valor. // - $nIdValor: ID del valor a eliminar. // - $cError: (S) Text del darrer error produït. function eliminarValorCamp($nIDInscripcio, $nIdCamp, $nIdValor, &$cError) { // Comprova que la inscripció existeixi if (!existeixInscripcio($nIDInscripcio)) { $cError = "La inscripció indicada no existeix."; return false; } // Inicia la transacció. iniciarTransaccioSQL(); // Consulta el n. d'ordre de camp més alt existent dins la taula. $query="DELETE FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nIdCamp AND id=$nIdValor"; // Executa la consulta. $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // S'ha eliminat correctament. Finalitza la transacció i retorna true. finalitzarTransaccioSQL(); return true; } // Funció que canvia l'ordre del valor amb ID '$nIdValor' del camp amb ID '$nIdCamp' segons el paràmetre '$nOcult'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdCamp: ID del camp que conté el valor. // - $nIdValor: ID del valor. // - $nModifOrdre: Modificació de l'ordre (Si >0, incrementa l'ordre; Si <0, decrementa l'ordre). // - $cError: (D) Text del darrer error produït. function setOrdreValorCamp($nIDInscripcio, $nIdCamp, $nIdValor, $nModifOrdre, &$cError) { // Consulta l'ordre del camp actual. $query="SELECT ordre FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nIdCamp AND id=$nIdValor"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Posa el resultat en un array. $res=mysql_fetch_array($result); // Guarda el n. d'ordre actual del valor. $nOrdreValor=$res[0]; // Consulta l'ordre del següent/anterior valor (en funció de si s'ha d'incrementar/decrementar l'ordre del valor). $query="SELECT id,ordre FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nIdCamp AND ordre".($nModifOrdre>0 ? ">" : "<").$nOrdreValor." ORDER BY ordre ".($nModifOrdre>0 ? "ASC" : "DESC")." LIMIT 1"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Si no hi ha cap altre valor (ja és el primer / últim) surt (no cal fer res). if (mysql_num_rows($result)==0) return true; // Posa el resultat en un array. $res=mysql_fetch_array($result); // Guarda la informació del valor amb el que ha d'intercanviar l'ordre. $nIdAltreValor=$res[0]; $nOrdreAltreValor=$res[1]; // Posa l'ordre de l'altre valor a l'actual. $query="UPDATE ".$nIDInscripcio."_valors_camps SET ordre=$nOrdreAltreValor WHERE idCamp=$nIdCamp AND id=$nIdValor"; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // Posa l'ordre del valor actual a l'altre. $query="UPDATE ".$nIDInscripcio."_valors_camps SET ordre=$nOrdreValor WHERE idCamp=$nIdCamp AND id=$nIdAltreValor"; if (!mysql_query($query)) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); return false; } // S'ha actualitzat l'ordre correctament. Retorna True. return true; } // Funció que retorna un string HTML amb els valors del camp amb ID '$nIDCamp' de la inscripció amb ID '$nIDInscripcio'. // Pensat per estar contingut dins un formulari. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDCamp: ID del camp. // - $cNomFormulari: Nom del formulari que conté els controls. // Retorna: // - Text dels camps . function presentarValorsCamp($nIDInscripcio, $nIDCamp, $cNomFormulari) { $sortida=""; // Obté els valors del camp de la cursa. $query="SELECT id, valor, ordre FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nIDCamp ORDER BY ordre"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. return "S'ha produït un error obtenint els valors del camp:
".mysql_error(); } // Posarà els camps dins una taula. $sortida.="\n"; // Recorre els registres obtinguts. $nI=0; while ($res=mysql_fetch_row($result)) { $nI++; // Crea una nova fila. $sortida.=""; $sortida.=presentarValorCamp($nIDInscripcio, $nIDCamp, $cNomFormulari, $nI, $res[0], $res[1], $res[2]); // Tanca la fila. $sortida.="\n"; } // Tanca la taula. $sortida.="
"; // Afegeix a la sortida el bloc per afegir un nou valor. $sortida.=presentarNouValorCamp($cNomFormulari); // Retorna el llistat dels valors obtinguts. return $sortida; } // Funció que retorna un string HTML corresponent al valor indicat pels paràmetres. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDCamp: ID del camp de la cursa. // - $cNomFormulari: Nom del formulari HTML que conté els camps. // - $nNumValor: N. del valor dins el camp. // - $nID: ID del valor. // - $cNom: Nom del valor. // - $nOrdre: Indica l'Ordre del camp. function presentarValorCamp($nIDInscripcio, $nIDCamp, $cNomFormulari, $nNumValor, $nID, $cNom, $nOrdre) { // - Casella 0 // Fletxes per pujar / baixar. $sortida.="
"; // - Casella 1. $sortida.=""; // Camp ocult amb l'ID $sortida.="\n"; // Títol del valor. $sortida.=""; $sortida.="\n"; // - Casella 2. // Eliminar valor. $sortida.=""; // Retorna el text obtingut. return $sortida; } // Funció que retorna un string HTML corresponent al bloc necessari per crear un nou valor. // Paràmetres: // - $cNomFormulari: Nom del formulari que conté els controls. // Retorna: // - String HTML corresponent. function presentarNouValorCamp($cNomFormulari) { return "

Crear nou valor:


"; } // Funció que elimina una inscripció (i totes les seves dades i taules associades). // Paràmetres: // - $nIDInscripcio: ID de la inscripció a eliminar. // - $cError: (S) Text de l'error produït. // Retorna: // - True -> Ok. // - False -> Error. function eliminarInscripcio($nIDInscripcio, $cError) { // Si no existeix la inscripció, missatge i fora. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb l'ID '$nIdInscripcio'."; return false; } // Elimina les taules. // **** _inscrits $query="DROP TABLE IF EXISTS ".$nIDInscripcio."_inscrits"; if (!mysql_query($query)) { $cError="Error eliminant la taula ".$nIDInscripcio."_inscrits
".mysql_error(); return false; } // **** _grups $query="DROP TABLE IF EXISTS ".$nIDInscripcio."_grups"; if (!mysql_query($query)) { $cError="Error eliminant la taula ".$nIDInscripcio."_grups
".mysql_error(); return false; } // **** _camps $query="DROP TABLE IF EXISTS ".$nIDInscripcio."_camps"; if (!mysql_query($query)) { $cError="Error eliminant la taula ".$nIDInscripcio."_camps
".mysql_error(); return false; } // **** _valors_camps $query="DROP TABLE IF EXISTS ".$nIDInscripcio."_valors_camps"; if (!mysql_query($query)) { $cError="Error eliminant la taula ".$nIDInscripcio."_valors_camps
".mysql_error(); return false; } // **** _valors_camps_data $query="DROP TABLE IF EXISTS ".$nIDInscripcio."_valors_camps_data"; if (!mysql_query($query)) { $cError="Error eliminant la taula ".$nIDInscripcio."_valors_camps_data
".mysql_error(); return false; } // Elimina el registre de la inscripció. $query="DELETE FROM inscripcions WHERE id=$nIDInscripcio"; if (!mysql_query($query)) { $cError="Error eliminant la inscripció de la taula 'inscripcions'
".mysql_error(); return false; } // Tot Ok; retorna true. return true; } // Posa dins els paràmetres la informació dels grups associats a una inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $aIDsGrups[]: (S) Vector amb els IDs dels grups. // - $aNomsGrups[]: (S) Vector amb els noms dels grups. // - $aPlacesGrups[]: (S) Vector amb el n. de places de cada grup. // Retorna: // - N. de grups obtinguts. function getGrupsInscripcio($nIDInscripcio, &$aIDsGrups, &$aNomsGrups, &$aPlacesGrups) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return -1; } // Obté els grups. $query = "SELECT id, nom, places FROM ".$nIDInscripcio."_grups ORDER BY id"; $res = mysql_query($query); if (!$res) { return -2; } // Recorre els registres obtinguts. $nNumGrups=0; while ($reg=mysql_fetch_row($res)) { $aIDsGrups[] = $reg[0]; $aNomsGrups[] = $reg[1]; $aPlacesGrups[] = $reg[2]; $nNumGrups++; } // Retorna el n. de grups obtinguts. return $nNumGrups; } // Funció que retorna un string HTML amb els camps de la inscripció amb ID $nIDInscripcio per la introducció de dades. // Pensat per estar contingut dins un formulari. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomFormulari: Nom del formulari que conté els controls. // - $lMostrarOcults: Indica si s'han de mostrar o no els camps ocults. // - $nNumGrupSel: ID del grup seleccionat (si es treballa amb grups). // Retorna: // - Text dels camps . function presentarCampsFormulari($nIDInscripcio, $cNomFormulari, $lMostrarOcults, $nNumGrupSel) { $sortida=""; // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) return "No s'ha trobat cap inscripció amb ID=$nIDInscripcio."; // Obté els camps no ocults de la inscripció. $query="SELECT id, nom, tipus, mida, decimals, oblig, ocult, idGrupFiltre, tipusFiltre FROM ".$nIDInscripcio."_camps ORDER BY ordre"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. return "S'ha produït un error obtenint els camps de la inscripció:
".mysql_error(); } // Posarà els camps dins una taula. $sortida.="\n"; $nI=0; $nNumCampsOblig=0; $aCampsOblig=null; // Recorre els registres obtinguts. while ($res=mysql_fetch_row($result)) { $nI++; // Crea (si és necessari) una variable dins la sessió pel camp (_c). if(!array_key_exists("i".$nIDInscripcio."_c".$res[0], $_SESSION)) $_SESSION["i".$nIDInscripcio."_c".$res[0]] = ""; // Determina si s'ha de mostrar el camp en funció del filtre per grup seleccionat. $lMostrarCamp = mostrarCampFiltreGrup($nIDInscripcio, $res[8], $res[7], $nNumGrupSel); // Si es compleix el filtre per grups... if ($lMostrarCamp) { // Si no és ocult (o s'han de mostrar els camps ocults) i es compleix el filtre per grups, el presenta... if (!$res[6] || $lMostrarOcults) { // Crea una nova fila. $sortida.=""; $sortida.=presentarCampFormulari($nIDInscripcio, $cNomFormulari, $nI, $res[0], $res[1], $res[2], $res[3], $res[4], $res[5], $res[6]); // Tanca la fila. $sortida.="\n"; // Si el camp és obligatori, n'afegeix l'ID al llistat de camps obligatoris, pel seu posterior tractament. if ($res[5]) { // Guarda l'ID del camp. $aCampsOblig[$nNumCampsOblig][0]=$res[0]; // Guarda el tipus del camp. $aCampsOblig[$nNumCampsOblig][1]=$res[2]; $nNumCampsOblig++; } } else { // Si és ocult, el posa com a camp ocult. $sortida.=""; } } else { // Si és un camp que no s'ha de presentar, el deixa buit. $sortida.=""; } } // Tanca la taula. $sortida.="
\n"; // Afegeix a la sortida la funció Javascript per la comprovació dels camps obligatoris del formulari. $sortida.=getFuncioJavascriptCampsObligatoris($nNumCampsOblig, $aCampsOblig, $cNomFormulari, $nIDInscripcio); // Retorna el llistat dels camps obtinguts. return $sortida; } // Funció que retorna un string HTML corresponent al camp indicat pels paràmetres. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomFormulari: Nom del formulari HTML que conté els camps. // - $nNumCamp: N. del camp dins el formulari. // - $nID: ID del camp. // - $cNom: Nom del camp. // - $nTipus: Tipus del camp (1 -> String, 2 -> Numèric, ...) // - $nMida: Mida del camp. // - $nDecimals: Decimals del camp. // - $lOblig: Indica si el camp és obligatori. // - $lOcult: Indica si el camp és ocult. function presentarCampFormulari($nIDInscripcio, $cNomFormulari, $nNumCamp, $nId, $cNom, $nTipus, $nMida, $nDecimals, $lOblig, $lOcult) { // Si no és una etiqueta, la presentarà en 2 columnes. if ($nTipus!=9) { // - Casella 1. $sortida.=""; // Títol del camp. $sortida.=$cNom.":"; // Si és obligatori, li posa un '*'. $sortida.=($lOblig ? "*" : ""); $sortida.="\n"; // - Casella 2. $sortida.=""; } else { // - Casella 1. $sortida.=""; // Títol del camp. $sortida.=getStringEtiqueta($cNom); // Si és obligatori, li posa un '*'. $sortida.=($lOblig ? "*" : ""); } // Valor. $sortida.=presentarValorCampFormulari($nIDInscripcio, $nNumCamp, $nId, $nTipus, $nMida, $nDecimals, $lOcult, $cNom); $sortida.=""; // Retorna el text obtingut. return $sortida; } // Funció que presenta el control per la introducció de dades, en funció del tipus indicat per paràmetre. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nNumCamp: N. del camp dins el formulari. // - $nID: ID del camp. // - $nTipus: Tipus del camp (1 -> String, 2 -> Numèric, ...) // - $lOcult: Indica si és un camp ocult. // - $cNomCamp: Nom del camp. // Retorna: // - String en HTML amb el control corresponent. function presentarValorCampFormulari($nIDInscripcio, $nNumCamp, $nId, $nTipus, $nMida, $nDecimals, $lOcult, $cNomCamp) { switch ($nTipus) { // 1 -> String case 1: { return ""; } // 2 -> Numèric case 2: { return ""; } // 3 -> Decimal case 3: { return ""; } // 4 -> Lògic case 4: { return ""; } // 5 -> Opcions case 5: { // Consulta els diferents valors del camp. $query="SELECT valor FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nId ORDER BY ordre"; $result=mysql_query($query); if (!$result) return "S'ha produït un error obtenint les opcions del camp
".mysql_error(); // Ho posarà tot dins una taula. $sortida=""; // Recorre el vector, presentant les diferents opcions. for ($nI=0; $nI"; } // Tanca la taula. $sortida.="
"; // Retorna les opcions obtingudes. return $sortida; } // 6 -> Llista case 6: { // Consulta els diferents valors del camp. $query="SELECT valor FROM ".$nIDInscripcio."_valors_camps WHERE idCamp=$nId ORDER BY ordre"; $result=mysql_query($query); if (!$result) return "S'ha produït un error obtenint les opcions del camp
".mysql_error(); // Recorre el vector, presentant les diferents opcions. $sortida.=""; // Retorna les opcions obtingudes. return $sortida; } // 7 -> Text case 7: { return ""; } // 8 -> Data case 8: { // Consulta els paràmetres del camp. $query="SELECT any_min, any_max FROM ".$nIDInscripcio."_valors_camps_data WHERE idCamp=$nId"; $result=mysql_query($query); if (!$result) return "S'ha produït un error obtenint les opcions del camp
".mysql_error(); if (mysql_numrows($result)==0) { // Si no s'ha especificat, va des de l'any actual fins 100 anys endarrera. $nAnyMax=date('Y'); $nAnyMin=$nAnyMax-100; } else { // Si s'ha especificat, agafa els anys mínim i màxim indicats. $res=mysql_fetch_array($result); $nAnyMax=$res[1]; $nAnyMin=$res[0]; } // Crea un primer camp ocult, que és el que realment contindrà el valor del camp. $sortida=""; // DIA: $sortida.=""; $sortida.=" / "; // MES: $sortida.=""; $sortida.=" / "; // ANY: $sortida.=""; // Tanca la taula. $sortida.=""; // Retorna les opcions obtingudes. return $sortida; } // 9 -> Etiqueta case 9: { return ""; } // Altres... default: { return "Tipus de control desconegut."; } } } // Funció que determina si un camp s'ha de mostrar o no en funció del grup pel qual té el filtre establert i el grup que l'usuari hagi seleccionat. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cTipusFiltre: Tipus de filtre ('=', '<', '>'). // - $nIDGrupFiltre: ID del grup pel qual s'ha de filtrar el camp. // - $nIDGrupSel: ID del grup que l'usuari ha seleccionat. // Retorna: // - true -> El camp s'ha de mostrar. // - false -> El camp NO s'ha de mostrar. function mostrarCampFiltreGrup($nIDInscripcio, $cTipusFiltre, $nIDGrupFiltre, $nIDGrupSel) { // Si no té cap filtre activat, el mostrarà. if ($nIDGrupFiltre==0) return true; // En funció del tipus de filtre... // Menor... if ($cTipusFiltre=='<') { if ($nIDGrupSel<$nIDGrupFiltre) return true; else return false; } // Major... if ($cTipusFiltre=='>') { if ($nIDGrupSel>$nIDGrupFiltre) return true; else return false; } // Igual... // Si té el filtre activat i és el mateix grup seleccionat, el mostrarà. if ($nIDGrupFiltre==$nIDGrupSel) return true; // Obté el nom del grup del filtre. $cNomGrupFiltre=getNomGrup($nIDInscripcio, $nIDGrupFiltre); // Si no és un títol ('-') ni un subtítol ('--'), no el mostrarà. if (substr($cNomGrupFiltre, 0, 1)!="-") return false; // Si és un subtítol... if (substr($cNomGrupFiltre, 0, 2)=="--") { // Si és el subtítol del que penja el grup seleccionat, el mostrarà. if ($nIDGrupFiltre==getIDGrupSubtitol($nIDInscripcio, $nIDGrupSel)) return true; else return false; } // És un títol... // Si és el títol del que penja el grup seleccionat, el mostrarà. if ($nIDGrupFiltre==getIDGrupTitol($nIDInscripcio, $nIDGrupSel)) return true; else return false; } // Funció que retorna l'ID de grup del títol del que penja el grup amb ID '$nIDGrup' dins la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup pel que es busca el títol del que penja. // Retorna: // >0 -> ID del subtítol del que penja. // 0 -> No trobat. // <0 -> Error. function getIDGrupTitol($nIDInscripcio, $nIDGrup) { $query="SELECT id FROM ".$nIDInscripcio."_grups WHERE id<".$nIDGrup." AND LEFT(nom, 1)='-' AND LEFT(nom, 2)<>'--' ORDER BY id DESC LIMIT 1"; $result=mysql_query($query); if (!$result) return -1; // Si no l'ha trobat, retorna 0. if (mysql_num_rows($result)==0) return 0; // L'ha trobat... retorna l'ID del grup. $res=mysql_fetch_array($result); return $res[0]; } // Funció que retorna l'ID de grup del subtítol del que penja el grup amb ID '$nIDGrup' dins la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup pel que es busca el subtítol del que penja. // Retorna: // >0 -> ID del subtítol del que penja. // 0 -> No trobat. // <0 -> Error. function getIDGrupSubtitol($nIDInscripcio, $nIDGrup) { $query="SELECT id FROM ".$nIDInscripcio."_grups WHERE id<".$nIDGrup." AND LEFT(nom, 2)='--' AND id>=(SELECT MAX(id) FROM ".$nIDInscripcio."_grups WHERE id<".$nIDGrup." AND LEFT(nom, 1)='-') ORDER BY id DESC LIMIT 1"; $result=mysql_query($query); if (!$result) return -1; // Si no l'ha trobat, retorna 0. if (mysql_num_rows($result)==0) return 0; // L'ha trobat... retorna l'ID del grup. $res=mysql_fetch_array($result); return $res[0]; } // Funció que retorna un string corresponent al codi de la funció JavaScript per la comprovació dels camps obligatoris // indicats dins el vector '$aCampsOblig'. // Paràmetres: // - $nNumCampsOblig: N. de camps obligatoris. // - $aCampsOblig: Vector amb els IDs i els tipus dels camps obligatoris. // - $cNomFormulari: Nom del formulari que conté els camps. // - $nIDInscripcio: ID de la inscripció. // Retorna: // - String amb la definició de la funció JavaScript "comprovarCampsOblig()". function getFuncioJavascriptCampsObligatoris($nNumCampsOblig, $aCampsOblig, $cNomFormulari, $nIDInscripcio) { $sortida="\n"; return $sortida; } // Retorna el dia d'un string de data / hora. // Paràmetres: // - $cStringData: String amb la data. // Retorna: // >0 -> Dia de la data. function getDiaData($cStringData) { try { $i=substr($cStringData, 8, 2); } catch(Exception $ex) { return 0; } return $i; } // Retorna el mes d'un string de data / hora. // Paràmetres: // - $cStringData: String amb la data. // Retorna: // >0 -> Mes de la data. function getMesData($cStringData) { try { $i=substr($cStringData, 5, 2); } catch(Exception $ex) { return 0; } return $i; } // Retorna l'any d'un string de data / hora. // Paràmetres: // - $cStringData: String amb la data. // Retorna: // >0 -> Any de la data. function getAnyData($cStringData) { try { $i=substr($cStringData, 0, 4); } catch(Exception $ex) { return 0; } return $i; } // Retorna la hora d'un string de data / hora. // Paràmetres: // - $cStringData: String amb la data. // Retorna: // >0 -> Hora de la data. function getHoraData($cStringData) { try { $i=substr($cStringData, 11, 2); } catch(Exception $ex) { return 0; } return $i; } // Retorna el minut d'un string de data / hora. // Paràmetres: // - $cStringData: String amb la data. // Retorna: // >0 -> Minut de la data. function getMinutData($cStringData) { try { $i=substr($cStringData, 14, 2); } catch(Exception $ex) { return 0; } return $i; } // Retorna un string HTML amb el format de presentació d'etiqueta. // Paràmetres: // - $cString: String a presentar com a etiqueta. // Retorna: // - String HTML. function getStringEtiqueta($cString) { return "

".$cString."

"; } // Retorna un string HTML amb el format de presentació d'etiqueta pels llistats de dades (presenta l'etiqueta més petita). // Paràmetres: // - $cString: String a presentar com a etiqueta. // Retorna: // - String HTML. function getStringEtiquetaLlistat($cString) { return "
".$cString."
"; } // Retorna un string amb el format de presentació d'una data / hora (DD/MM/AAAA HH:MM). // Paràmetres: // - $cDataHora: String amb la data / hora original. // Retorna: // - String amb el format (DD/MM/AAAA HH:MM). function presentarDataHora($cDataHora) { // Si no té la mida suficient, surt. if (strlen($cDataHora)<16) return ""; // El format original és 'AAAA-MM-DD HH:MM:SS'. return substr($cDataHora, 8, 2)."/". substr($cDataHora, 5, 2)."/". substr($cDataHora, 0, 4)." ". substr($cDataHora, 11, 2).":". substr($cDataHora, 14, 2); } // Retorna un string amb el format de presentació d'una data (DD/MM/AAAA). // Paràmetres: // - $cDataHora: String amb la data / hora original. // Retorna: // - String amb el format (DD/MM/AAAA). function presentarData($cDataHora) { // Si no té la mida suficient, surt. if (strlen($cDataHora)<10) return ""; // El format original és 'AAAA-MM-DD HH:MM:SS'. return substr($cDataHora, 8, 2)."/". substr($cDataHora, 5, 2)."/". substr($cDataHora, 0, 4); } // Retorna un string amb el format de presentació d'una hora (HH:MM). // Paràmetres: // - $cDataHora: String amb la data / hora original. // Retorna: // - String amb el format (HH:MM). function presentarHora($cDataHora) { // Si no té la mida suficient, surt. if (strlen($cDataHora)<16) return ""; // El format original és 'AAAA-MM-DD HH:MM:SS'. return substr($cDataHora, 11, 2).":". substr($cDataHora, 14, 2); } // Funció que guarda els valors dels camps corresponents del formulari dins la sessió de l'usuari. // Paràmetres: // - $nIDInscripcio: ID de la inscripció per la qual es guarden els camps. // - $post: $_POST del formulari. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function guardarCampsFormulariSessio($nIDInscripcio, $post, &$cError) { // Consulta que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb ID=$nIDInscripcio."; return false; } // Consulta els diferents camps de la inscripció. $query="SELECT id, tipus FROM ".$nIDInscripcio."_camps"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } // Recorre els camps obtinguts. while($res=mysql_fetch_array($result)) { // Si és numèric i està buit, hi posa un 0. if (($res[1]==2 || $res[1]==3) && $post["i".$nIDInscripcio."_c".$res[0]."_valor"]=="") { $post["i".$nIDInscripcio."_c".$res[0]."_valor"]="0"; } // Guarda el camp actual dins la sessió. $_SESSION["i".$nIDInscripcio."_c".$res[0]]=str_replace("\\'", "'", $post["i".$nIDInscripcio."_c".$res[0]."_valor"]); } return true; } // Funció que presenta les dades introduïdes en el formulari (guardades dins la sessió) // Paràmetres: // - $nIDinscripcio: ID de la inscripció. // - $sess: Sessió de dades. // - $nNumGrupSel: ID del grup seleccionat (si es treballa amb grups). // Retorna: // - caselles amb els parells : . function presentarDadesFormulari($nIDInscripcio, $sess, $nNumGrupSel) { // Consulta que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return ""; } // Determina si la inscripció treballa amb grups. $lGrups=inscripcioTreballaAmbGrups($nIDInscripcio); // Consulta els diferents camps de la inscripció. $query="SELECT id, nom, tipus, idGrupFiltre, tipusFiltre FROM ".$nIDInscripcio."_camps WHERE !ocult ORDER BY ordre"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } $ret=''; // Recorre els camps obtinguts. while($res=mysql_fetch_array($result)) { // Determina si s'ha de presentar el camp. $lPresentar=mostrarCampFiltreGrup($nIDInscripcio, $res[2], $res[3], $nNumGrupSel); // Si el camp s'ha de presentar... if ($lPresentar) { // Si és una etiqueta, presenta només la etiqueta. if ($res[2]==9) { $ret.="".getStringEtiquetaLlistat($res[1]).""; } else { // Guarda el camp actual dins el string. $ret.="".$res[1].":".($res[2]==4 ? ($sess["i".$nIDInscripcio."_c".$res[0]]=="on" ? "Si" : "No") // Si és un Check, posa 'Si / No'. : $sess["i".$nIDInscripcio."_c".$res[0]]).""; } } } // Retorna el string corresponent. return $ret; } // Funció que guarda el valors '$cValor' del camp amb nom '$cNomCamp' dins la sessió de l'usuari. // Paràmetres: // - $nIDInscripcio: ID de la inscripció per la qual es guarden els camps. // - $cNomCamp: Nom del camp dins el que es guarda. // - $cValor: Valor a guardar. // - $sess: Sessió de dades dins la que es guarda. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function assignarValorCampSessioInscripcio($nIDInscripcio, $cNomCamp, $cValor, $sess, &$cError) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb id=$nIDInscripcio."; return false; } // Obté l'ID del camp. $nIdCamp=getIDCampInscripcio($nIDInscripcio, $cNomCamp); if ($nIdCamp<=0) { $cError="No s'ha trobat cap camp amb nom=$cNomCamp."; return false; } // Guarda el camp actual dins la sessió. $_SESSION["i".$nIDInscripcio."_c".$nIdCamp]=$cValor; return true; } // Funció que registra una nova inscripció dins la cursa amb ID '$nIdCursa'. // Agafa les dades del paràmetre '$sess'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $sess: Sessió de la que agafa les dades. // - $nIDGrup: ID del grup dins el que s'inscriu. // - $cError: (S) Text del darrer error produït. // Retorna: // - >0 -> ID del nou registre. // - 0 -> Error. function registrarInscripcio($nIDInscripcio, $sess, $nIDGrup, &$cError) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb id=$nIDInscripcio."; return false; } // Consulta els diferents camps dinàmics de la inscripció. $query="SELECT id, nom, tipus FROM ".$nIDInscripcio."_camps ORDER BY ordre"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } $cFields=''; $cValues=''; // Recorre els camps obtinguts. while($res=mysql_fetch_array($result)) { // Afegeix el nom del camp al string de camps. $cFields.="c_".$res[0].", "; // Afegeix el valor pertinent dins el string de valors (entre 's o no en funció del tipus del camp). $cValues.=formatejaValorTipus($sess["i".$nIDInscripcio."_c".$res[0]], $res[2]).", "; } // Inicia una transacció. iniciarTransaccioSQL(); // Afegeix els camps constants a l'Insert. $cFields.="idGrup"; $cValues.="$nIDGrup"; // Prepara el string d'inserció. $query="INSERT INTO ".$nIDInscripcio."_inscrits ($cFields) VALUES ($cValues)"; // Executa la inserció. if (!mysql_query($query)) { $cError=mysql_error(); desferTransaccioSQL(); return false; } // Obté l'ID del nou registre inserit. $query="SELECT MAX(id) FROM ".$nIDInscripcio."_inscrits"; $result=mysql_query($query); if (!$result) { // Si s'ha produït algun error, el registra i surt. $cError=mysql_error(); desferTransaccioSQL(); return false; } // Guarda l'ID del registre. $res=mysql_fetch_array($result); $nId=$res[0]; // S'ha insertat correctament. Finalitza la transacció i retorna l'ID del nou registre. finalitzarTransaccioSQL(); // Tot Ok. Retorna l'ID del nou registre. return $nId; } // Funció que retorna dins el paràmetre '$cValor' el valor del camp amb ID '$nIdCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdReg: ID del registre. // - $cNomCamp: Nom del camp. // - $cValor: (S) Valor del camp. // - $cError: (S) Text de l'error produït. // Retorna: // - true -> Ok. // - false -> Error. function getValorCampRegistreInscripcio($nIDInscripcio, $nIdReg, $cNomCamp, &$cValor, &$cError) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb id=$nIDInscripcio."; return false; } // Obté l'identificador del camp '$cNomCamp'. $nIdCamp=getIdCampInscripcio($nIDInscripcio, $cNomCamp); if (!$nIdCamp) { $cError="No hi ha cap camp de nom '$cNomCamp' dins la inscripció."; return false; } // Obté el tipus del camp '$cNomCamp'. $nTipusCamp=getTipusCampInscripcio($nIDInscripcio, $cNomCamp); // Consulta el valor. $query="SELECT c_".$nIdCamp." FROM ".$nIDInscripcio."_inscrits WHERE id=".$nIdReg; $result=mysql_query($query); // Si hi ha hagut algun error, surt. if (!$result) return false; // Passa el resultat. $res=mysql_fetch_array($result); // Retorna el valor obringut. $cValor=tipusSQLtoPHP($res[0], $nTipusCamp); return true; } // Funció que retorna l'ID del camp de nom '$cNomCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomCamp: Nom del camp. // Retorna: // - >0 -> ID del camp. // - 0 -> Camp no trobat. function getIDCampInscripcio($nIDInscripcio, $cNomCamp) { $query="SELECT id FROM ".$nIDInscripcio."_camps WHERE nom='".htmlspecialchars($cNomCamp, ENT_QUOTES)."'"; $result=mysql_query($query); // Si no l'ha trobat, retorna 0. if (mysql_numrows($result)==0) return 0; // Passa el resultat a un vector. $res=mysql_fetch_array($result); // Retorna l'ID del camp. return $res[0]; } // Funció que retorna el string '$cString' preparat per insertar dins la BD, en funció del seu tipus. // Paràmetres: // - $cString: String a formatejar. // - $nTipus: Tipus del string. // Retorna: // - String formatejat. function formatejaValorTipus($cString, $nTipus) { switch ($nTipus) { // 1 -> String case 1: return "'".htmlspecialchars($cString, ENT_QUOTES)."'"; // 2 -> Numèric case 2: return "$cString"; // 3 -> Decimal case 3: return "$cString"; // 4 -> Logic case 4: return ($cString=="on" ? "true" : "false"); // 5 -> Opcions case 5: return "'".htmlspecialchars($cString, ENT_QUOTES)."'"; // 6 -> Llista case 6: return "'".htmlspecialchars($cString, ENT_QUOTES)."'"; // 7 -> Text case 7: return "'".htmlspecialchars($cString, ENT_QUOTES)."'"; // 8 -> Data case 8: return (isDate($cString) ? "'".getSQLDate($cString)."'" : "null"); // 9 -> Etiqueta case 7: return "'".htmlspecialchars($cString, ENT_QUOTES)."'"; default: return "'".htmlspecialchars($cString, ENT_QUOTES)."'"; } } // Funció que presenta les dades introduïdes en el formulari (guardades dins la sessió) en format de text pla. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $sess: Sessió de dades. // - $nNumGrupSel: ID del grup seleccionat. // Retorna: // - caselles amb els parells : . function presentarDadesFormulariText($nIDInscripcio, $sess, $nNumGrupSel) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb id=$nIDInscripcio."; return false; } // Determina si la inscripció treballa amb grups. $lGrups=inscripcioTreballaAmbGrups($nIDInscripcio); // Consulta els diferents camps de la cursa. $query="SELECT id, nom, tipus, idGrupFiltre, tipusFiltre FROM ".$nIDInscripcio."_camps ORDER BY ordre"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } $ret=''; // Recorre els camps obtinguts. while($res=mysql_fetch_array($result)) { // Determina si s'ha de presentar el camp. $lPresentar=mostrarCampFiltreGrup($nIDInscripcio, $res[4], $res[3], $nNumGrupSel); // Si el camp s'ha de presentar... if ($lPresentar) { // Guarda el camp actual dins el string. $ret.=$res[1].": ".($res[2]==4 ? ($sess["i".$nIDInscripcio."_c".$res[0]]=="on" ? "Sí" : "No") // Si és un Check, posa 'Si / No'. : $sess["i".$nIDInscripcio."_c".$res[0]])."\n\n"; } } // Retorna el string corresponent. return $ret; } // Funció que llibera les variables de la sessió corresponents als valors dels camps // per la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció per la qual es volen alliberar les variables. // - $sess: Sessió de la que s'han d'alliberar. function alliberarVariablesInscripcio($nIDInscripcio, &$sess) { // Recorre les variables de la sessió foreach ($sess as $key => $value) { // Si correspon a una variable de la cursa actual (comença per 'i_c'), la llibera. if (substr($key, 0, strlen("i".$nIDInscripcio."_c"))=="i".$nIDInscripcio."_c") { unset($sess[$key]); } } } // Funció que elimina l'inscrit amb ID '$nIDReg' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDReg: ID del registre a eliminar. // Retorna: // - true -> Ok. // - false -> Error. function eliminarInscrit($nIDInscripcio, $nIDReg) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb id=$nIDInscripcio."; return false; } // Executa la eliminació. $query = "DELETE FROM ".$nIDInscripcio."_inscrits WHERE id=$nIDReg"; return mysql_query($query); } // Funció que retorna el nom de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNom: (S) Nom de la inscripció. // Retorna: // - true -> Inscripció trobada. // - false -> Inscripció NO trobada. function getNomInscripcio($nIDInscripcio, &$cNom) { $query="SELECT titol FROM inscripcions WHERE id=$nIDInscripcio"; $result=mysql_query($query); // Si s'ha produït algun error, retorna false. if (!$result) return false; // Si no ha trobat la inscripció, retorna false. if (mysql_numrows($result)==0) return false; // Passa el resultat a un vector. $res=mysql_fetch_array($result); // Posa el nom dins el paràmetre '$cNom'. $cNom=$res[0]; // Retorna true conforme l'ha trobat. return true; } // Funció que carrega els valors guardats d'una inscripció dins les variables pertinents de la sessió de l'usuari. // Paràmetres: // - $nIDInscripcio: ID de la inscripció per la qual es guarden els camps. // - $nIdReg: ID del registre a carregar. // - $sess: (E/S) Referència a la sessió dins la que s'han de guardar els valors. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function carregarValorsRegistreSessio($nIDInscripcio, $nIdReg, &$sess, &$cError) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb ID=$nIDInscripcio."; return false; } // Consulta el registre a recuperar. $query="SELECT * FROM ".$nIDInscripcio."_inscrits WHERE id=$nIdReg"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } // Si no ha trobat el registre corresponent, surt. if (mysql_numrows($result)==0) { $cError="No s'ha trobat cap registre amb id=$nIdReg"; return false; } // Posa les dades del registre dins un vector. $aValors=mysql_fetch_array($result); // Consulta els diferents camps de la cursa. $query="SELECT id, tipus FROM ".$nIDInscripcio."_camps"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } // Recorre els camps obtinguts. while($res=mysql_fetch_array($result)) { // Guarda el camp actual dins la sessió. $sess["i".$nIDInscripcio."_c".$res[0]]=tipusSQLtoPHP($aValors["c_".$res[0]], $res[1]); } return true; } // Funció que passa un valor de SQL a un format viable per treballar'hi en PHP. // Paràmetres: // - $cValor: Valor a convertir. // - $nTipus: Tipus del valor. function tipusSQLtoPHP($cValor, $nTipus) { switch ($nTipus) { // 1 -> String case 1: return $cValor; // 2 -> Numèric case 2: return $cValor; // 3 -> Decimal case 3: return $cValor; // 4 -> Logic case 4: return $cValor; // 5 -> Opcions case 5: return $cValor; // 6 -> Llista case 6: return $cValor; // 7 -> Text case 7: return $cValor; // 8 -> Data case 8: return substr($cValor, 0, 4)."-".substr($cValor, 5, 2)."-".substr($cValor, 8, 2); default: return $cValor; } } // Funció que modifica una inscripció existent (amb ID '$nIdReg') dins la inscripció amb ID '$nIDInscripcio'. // Agafa les dades del paràmetre '$sess'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIdReg: ID del registre a actualitzar. // - $sess: Sessió de la que agafa les dades. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function modificarInscripcio($nIDInscripcio, $nIDReg, $sess, &$cError) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError="No s'ha trobat cap inscripció amb ID=$nIDInscripcio."; return false; } // Consulta els diferents camps dinàmics de la inscripció. $query="SELECT id, nom, tipus FROM ".$nIDInscripcio."_camps ORDER BY ordre"; $result=mysql_query($query); if(!$result) { $cError=mysql_error(); return false; } $cSet=''; // Recorre els camps obtinguts. while($res=mysql_fetch_array($result)) { // Afegeix el nom del camp amb el valor a assignar al string de camps. $cSet.="c_".$res[0]."=".formatejaValorTipus($sess["i".$nIDInscripcio."_c".$res[0]], $res[2]).","; } // Treu la última ','. if (strlen($cSet)>0) $cSet=substr($cSet, 0, -1); // Prepara el string d'actualització. $query="UPDATE ".$nIDInscripcio."_inscrits SET $cSet WHERE id=$nIDReg"; // Executa l'actualització. if (!mysql_query($query)) { $cError=mysql_error(); return false; } // Tot Ok. Retorna true. return true; } // Crea un nou usuari dins el sistema. // Paràmetres: // - $cNomUsuari: Nom de l'Usuari. // - $cClauUsuari: Clau de l'Usuari. // - $lAdmin: Indica si és Administrador. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function crearUsuariSistema($cNomUsuari, $cClauUsuari, $lAdmin, &$cError) { // Comprova que no existeixi ja un usuari amb aquest nom. $query="SELECT COUNT(*) FROM usuaris WHERE nom='".htmlspecialchars($cNomUsuari, ENT_QUOTES)."'"; $res=mysql_query($query); if (!$res) { $cError = mysql_error(); return false; } // Passa el resultat dins un vector. $aRes=mysql_fetch_array($res); // Si ja existeix un usuari amb aquest nom, ho registra i surt. if ($aRes[0]>0) { $cError = "Ja existeix un usuari amb aquest nom."; return false; } // Prepara la inserció. $query="INSERT INTO usuaris (nom, clau, tipus) VALUES ( '".htmlspecialchars($cNomUsuari, ENT_QUOTES)."', '".md5($cClauUsuari)."', ".($lAdmin ? "0" : "1").")"; if (!mysql_query($query)) { $cError = mysql_error(); return false; } return true; } // Elimina l'usuari '$cUsuari' del sistema. // Paràmetres: // - $cNomUsuari: Nom de l'Usuari. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function eliminarUsuariSistema($cNomUsuari, &$cError) { // Comprova que no existeixi ja un usuari amb aquest nom. $query="DELETE FROM usuaris WHERE nom='".htmlspecialchars($cNomUsuari, ENT_QUOTES)."'"; $res=mysql_query($query); if (!$res) { $cError = mysql_error(); return false; } return true; } // Paràmetres: // - $cNomUsuari: Nom de l'Usuari. // Retorna: // - true -> És admin. // - false -> No és admin o no existeix. function usuariSistemaAdmin($cNomUsuari) { // Comprova que no existeixi ja un usuari amb aquest nom. $query="SELECT tipus FROM usuaris WHERE nom='".htmlspecialchars($cNomUsuari, ENT_QUOTES)."'"; $res=mysql_query($query); if (!$res) { return false; } // Si no l'ha trobat, retorna false. if (mysql_numrows($res)==0) { return false; } // Passa el resultat dins un vector. $aRes=mysql_fetch_array($res); // Retorna si és admin. o no. return ($aRes[0]==0); } // Actualitza les dades d'un usuari del sistema. // Paràmetres: // - $cUsuari: Nom de l'usuari a modificar. // - $cNouUsuari: Nou nom d'usuari. // - $lAdmin: Indica si és administrador. // - $lCanviarClau: Indica si s'ha de canviar la clau de l'usuari. // - $cNovaClau: Nova clau d'usuari. // - $cError: (S) Text de l'error produït. // Retorna: // - true -> Ok. // - false -> Error. function actualitzarUsuariSistema($cUsuari, $cNouUsuari, $lAdmin, $lCanviarClau, $cNovaClau, &$cError) { // Comprova que l'usuari existeixi. $query = "SELECT COUNT(*) FROM usuaris WHERE nom='".htmlspecialchars($cUsuari, ENT_QUOTES)."'"; $res=mysql_query($query); if (!$res) { $cError = mysql_error(); return false; } $result=mysql_fetch_array($res); // Si l'usuari no existeix, missatge i fora. if ($result[0]==0) { $cError="L'usuari '$cUsuari' no existeix."; return false; } // Comprova, si es vol canviar el nom d'usuari, que no existeixi ja un usuari amb aquest nom. if ($cUsuari!=$cNouUsuari) { $query = "SELECT COUNT(*) FROM usuaris WHERE nom='".htmlspecialchars($cNouUsuari, ENT_QUOTES)."'"; $res=mysql_query($query); if (!$res) { $cError = mysql_error(); return false; } $result=mysql_fetch_array($res); // Si l'usuari ja existeix, missatge i fora. if ($result[0]>0) { $cError="L'usuari '$cNouUsuari' ja existeix."; return false; } } // Prepara l'update de l'usuari. $query = "UPDATE usuaris SET nom='".htmlspecialchars($cNouUsuari, ENT_QUOTES)."', tipus=".($lAdmin ? "0" : "1")." " .($lCanviarClau? ", clau='".md5($cNovaClau)."' " : "")." ". "WHERE nom='".htmlspecialchars($cUsuari, ENT_QUOTES)."' "; if (!mysql_query($query)) { $cError = mysql_error(); return false; } return true; } // Funció que determina si un string conté una data o no. // Paràmetres: // - $cString: String a comprovar. // Retorna: // - true -> Ho és. // - false -> No ho és. function isDate($cString) { // Comprova quin separador hi ha. if (strpos($cString, "-")) $cSeparador="-"; // Separador "-". else if (strpos($cString, "/")) $cSeparador="/"; // Separador "/". else return false; // No hi ha separador -> No és una data. // Separa l'any. $nPos1=strpos($cString, $cSeparador); $cAny=substr($cString, 0, $nPos1); // Separa el mes. $nPos2=strpos($cString, $cSeparador, $nPos1+1); $cMes=substr($cString, $nPos1+1, $nPos2-$nPos1-1); // Separa el dia. $cDia=substr($cString, -2); // Retorna si la data és correcta. return checkdate($cMes, $cDia, $cAny); } // Funció que retorna una data en format SQL. // Paràmetres: // - $cString: String amb la data original. // Retorna: // - (string) String amb la data en format SQL (AAAA-MM-DD) function getSQLDate($cString) { // Comprova quin separador hi ha. if (strpos($cString, "-")) $cSeparador="-"; // Separador "-". else if (strpos($cString, "/")) $cSeparador="/"; // Separador "/". else return false; // No hi ha separador -> No és una data. // Separa l'any. $nPos1=strpos($cString, $cSeparador); $cAny=substr($cString, 0, $nPos1); // Separa el mes. $nPos2=strpos($cString, $cSeparador, $nPos1+1); $cMes=substr($cString, $nPos1+1, $nPos2-$nPos1-1); // Separa el dia. $cDia=substr($cString, -2); // Retorna si la data és correcta. return $cAny."-".$cMes."-".$cDia; } // Funció que retorna una data / hora en format SQL. // Paràmetres: // - $cString: String amb la data original. // Retorna: // - (string) String amb la data en format SQL (AAAA-MM-DD HH:MM:SS) function getSQLDateTime($cString) { // Comprova quin separador hi ha. if (strpos($cString, "-")) $cSeparador="-"; // Separador "-". else if (strpos($cString, "/")) $cSeparador="/"; // Separador "/". else return false; // No hi ha separador -> No és una data. // Separa l'any. $nPos1=strpos($cString, $cSeparador); $cAny=substr($cString, 0, $nPos1); // Separa el mes. $nPos2=strpos($cString, $cSeparador, $nPos1+1); $cMes=substr($cString, $nPos1+1, $nPos2-$nPos1-1); // Separa el dia. $nPos3=strpos($cString, " ", $nPos2+1); if ($nPos3>0) { // Si hi ha un ' ' després del dia... $cDia=substr($cString, $nPos2+1, $nPos3-$nPos2-1); } else { // Si no hi ha un ' ' després del dia, es queda amb els últims 2 caracters del string. $cDia=substr($cString, -2); } // Posa la part de la data dins la sortida. $cRet = $cAny."-".$cMes."-".$cDia; // Si no hi ha hora, retorna la data amb 0's. if ($nPos3<=0) return $cRet." 00:00:00"; else return $cRet.substr($cString, $nPos3); } // Funció que retorna el tipus del camp de nom '$cNomCamp' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cNomCamp: Nom del camp. // Retorna: // - >0 -> ID del camp. // - 0 -> Camp no trobat. function getTipusCampInscripcio($nIDInscripcio, $cNomCamp) { $query="SELECT tipus FROM ".$nIDInscripcio."_camps WHERE nom='$cNomCamp'"; $result=mysql_query($query); // Si no l'ha trobat, retorna 0. if (mysql_numrows($result)==0) return 0; // Passa el resultat a un vector. $res=mysql_fetch_array($result); // Retorna el tipus del camp. return $res[0]; } // Funció que estableix el text de l'inici de la inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cText: Text a establir. // Retorna: // - true -> Ok. // - false -> Error. function setTextIniciInscripcio($nIDInscripcio, $cText) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return false; } // Prepara l'update. $query="UPDATE inscripcions SET text_inici='".htmlspecialchars($cText, ENT_QUOTES)."' WHERE id=".$nIDInscripcio; return mysql_query($query); } // Funció que estableix el text del final de la inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cText: Text a establir. // Retorna: // - true -> Ok. // - false -> Error. function setTextFinalInscripcio($nIDInscripcio, $cText) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return false; } // Prepara l'update. $query="UPDATE inscripcions SET text_final='".htmlspecialchars($cText, ENT_QUOTES)."' WHERE id=".$nIDInscripcio; return mysql_query($query); } // Funció que retorna el text del final de la inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // Retorna: // - (string) Text del final d'inscripció. function getTextFinalInscripcio($nIDInscripcio) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return "No existeix cap inscripció amb ID $nIDInscripcio"; } // Prepara l'update. $query="SELECT text_final FROM inscripcions WHERE id=".$nIDInscripcio; $result=mysql_query($query); if (!$result) { return "Error en la consulta: ".mysql_error(); } $res=mysql_fetch_array($result); return $res[0]; } // Funció que retorna el text de l'inici de la inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // Retorna: // - (string) Text de l'inici d'inscripció. function getTextIniciInscripcio($nIDInscripcio) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return "No existeix cap inscripció amb ID $nIDInscripcio"; } // Prepara l'update. $query="SELECT text_inici FROM inscripcions WHERE id=".$nIDInscripcio; $result=mysql_query($query); if (!$result) { return "Error en la consulta: ".mysql_error(); } $res=mysql_fetch_array($result); return $res[0]; } function stri_replace( $find, $replace, $string ) { // Case-insensitive str_replace() $parts = explode( strtolower($find), strtolower($string) ); $pos = 0; foreach( $parts as $key=>$part ){ $parts[ $key ] = substr($string, $pos, strlen($part)); $pos += strlen($part) + strlen($find); } return( join( $replace, $parts ) ); } function txt2html($txt) { // Transforms txt in html //Kills double spaces and spaces inside tags. while( !( strpos($txt,' ') === FALSE ) ) $txt = str_replace(' ',' ',$txt); $txt = str_replace(' >','>',$txt); $txt = str_replace('< ','<',$txt); //Transforms accents in html entities. $txt = htmlentities($txt); //We need some HTML entities back! $txt = str_replace('"','"',$txt); $txt = str_replace('<','<',$txt); $txt = str_replace('>','>',$txt); $txt = str_replace('&','&',$txt); //Ajdusts links - anything starting with HTTP opens in a new window $txt = stri_replace("

",$txt).'

'; $html = str_replace("$eol","
\n",$html); $html = str_replace("

","

\n\n",$html); $html = str_replace("

","

 

",$html); //Wipes
after block tags (for when the user includes some html in the text). $wipebr = Array("table","tr","td","blockquote","ul","ol","li"); for($x = 0; $x < count($wipebr); $x++) { $tag = $wipebr[$x]; $html = stri_replace("<$tag>
","<$tag>",$html); $html = stri_replace("
","",$html); } return $html; } // Funció que retorna l'ID del grup seleccionat en el registre amb ID '$nIDReg' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDReg: ID del registre. // Retorna: // >0 -> ID del grup seleccionat. function getIDGrupRegistre($nIDInscripcio, $nIDReg) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return 0; } // Consulta el valor. $query="SELECT idGrup FROM ".$nIDInscripcio."_inscrits WHERE id=".$nIDReg; $result=mysql_query($query); // Si hi ha hagut algun error, surt. if (!$result) return 0; // Passa el resultat. $res=mysql_fetch_array($result); return $res[0]; } ?> Ok. // - false -> Error. function grupLock($cSessionID, $nIDInscripcio, $nIDGrup, &$cError) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { $cError = "No existeix cap inscripció amb ID $nIDInscripcio"; return false; } // Comprova que el grup indicat existeixi. if (!existeixGrupInscripcio($nIDInscripcio, $nIDGrup)) { $cError = "No s'ha trobat cap grup amb ID $nIDGrup dins la inscripció."; return false; } // Elimina els bloquejos antics. clearOldLocks(); // Inicia una transacció SQL. iniciarTransaccioSQL(); // Obté el n. de places del grup. $nNumPlacesGrup=getNumPlacesGrupInscripcio($nIDInscripcio, $nIDGrup); // Si el n. de places és -1, vol dir que té places il·limitades. $lPlacesIlimitades=($nNumPlacesGrup==-1); // Mira el n. de places ocupades per inscrits. // Guarda el n. de places ocupades. $nNumPlacesOcupades=getNumPlacesOcupadesGrup($nIDInscripcio, $nIDGrup); // Si totes les places estan ocupades, missatge i fora. if ($nNumPlacesGrup<=$nNumPlacesOcupades && !$lPlacesIlimitades) { $cError = "Totes les places d'aquest grup ja estan ocupades.\nSeleccioneu un altre grup."; finalitzarTransaccioSQL(); return false; } // Mira el n. de places reservades temporalment. $nNumPlacesReservades=getNumPlacesReservadesGrup($nIDInscripcio, $nIDGrup); // Comprova que no tingui ja reservada una plaça dins aquest grup. if (grupCheck($cSessionID, $nIDInscripcio, $cError) == $nIDGrup) $nNumPlacesReservades--; // Si hi té una plaça reservada, decrementa el n. de places reservades no disponibles. // Si no hi ha places lliures en aquest moment, missatge i fora. if ($nNumPlacesGrup<=$nNumPlacesOcupades+$nNumPlacesReservades && !$lPlacesIlimitades) { $cError = "En aquestos moments totes les places del grup estan ocupades o reservades.\nPodeu tornar-ho a provar més tard, o seleccionar un altre grup per continuar."; finalitzarTransaccioSQL(); return false; } // Hi ha places lliures, afegeix una reserva per la sessió rebuda per paràmetre. $ret=reservarGrup($cSessionID, $nIDInscripcio, $nIDGrup, $cError); finalitzarTransaccioSQL(); return true; } // Crea una reserva per la sessió amb ID '$nSessionID' pel grup '$nIDGrup' de la inscripció '$nIDInscripcio'. // Paràmetres: // - $cSessionID: ID de la sessió per la que registrar la plaça. // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup. // - $cError: (S) Text del darrer error produït. // Retorna: // - true -> Ok. // - false -> Error. function reservarGrup($cSessionID, $nIDInscripcio, $nIDGrup, &$cError) { // Elimina qualsevol reserva anterior d'aquesta sessió. $query="DELETE FROM grup_lock WHERE sessionID='$cSessionID'"; mysql_query($query); // Inserta la nova reserva. $query="INSERT INTO grup_lock (sessionID, idInscripcio, idGrup, dataHora) VALUES (" ."'".$cSessionID."', " .$nIDInscripcio.", " .$nIDGrup.", " ."'".Date("Y-m-d H:i:s")."')"; if (!mysql_query($query)) { $cError=mysql_error(); return false; } return true; } // Elimina els bloquejos antics de grups. function clearOldLocks() { // Crea l'interval de minuts especificat. // $dInterval=new DateInterval("T".$nMinutesLockDelay."M"); // Obté la data actual. $dDataMin=date("Y-m-d H:i:s", time() - $GLOBALS['nMinutesLockDelay'] * 60); // Determina la data mínima dins la taula de bloquejos. // $dDataMin=$dData.sub($dInterval); // Elimina de la taula de bloquejos tots aquells bloquejos anteriors a la data especificada. $query="DELETE FROM grup_lock WHERE dataHora<'".getSQLDateTime($dDataMin)."'"; if (!mysql_query($query)) { return false; } return true; } // Elimina el bloqueig de grup de la sessió amb ID '$cSessionID'. // Paràmetres: // - $cSessionID: ID de la sessió. // Retorna: // - true -> Ok. // - false -> Error. function clearGroupLock($cSessionID) { // Elimina de la taula de bloquejos qualsevol bloqueig associat a la sessió. $query="DELETE FROM grup_lock WHERE sessionID='$cSessionID'"; if (!mysql_query($query)) { return false; } return true; } // Funció que comprova si la sessió amb ID '$cSessionID' té una plaça reservada dins la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $cSessionID: ID de la sessió per la que comprovar la plaça. // - $nIDInscripcio: ID de la inscripció. // - $cError: (S) Text del darrer error produït. // Retorna: // - <0 -> Error. // - 0 -> Sense cap grup assignat. // - >0 -> ID del grup assignat. function grupCheck($cSessionID, $nIDInscripcio, &$cError) { $query="SELECT idGrup FROM grup_lock WHERE sessionID='".$cSessionID."' AND idInscripcio=$nIDInscripcio"; $res=mysql_query($query); if (!$res) { $cError=mysql_error(); return -1; } // Si no l'ha trobat, retorna 0. if(mysql_numrows($res)==0) { $cError=""; return 0; } $result=mysql_fetch_array($res); // Guarda l'ID de grup. $nNumGrup=$result[0]; // N'actualitza la data/hora de bloqueig. $query="UPDATE grup_lock SET dataHora='".date("Y-m-d H:i:s")."' WHERE sessionID='".$cSessionID."'"; mysql_query($query); // Retorna el n. de grup. return $nNumGrup; } // Funció que retorna un string HTML per presentar els diferents grups de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cSessionID: ID de la sessió que ho sol·licita. // Retorna: // - String HTML amb els grups. function presentarGrupsInscripcio($nIDInscripcio, $cSessionID) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return "No existeix cap inscripció amb ID $nIDInscripcio"; } $query="SELECT id, nom, places FROM ".$nIDInscripcio."_grups ORDER BY id"; $res=mysql_query($query); if (!$res) { return "Error consultant els grups de la inscripció: "+mysql_error(); } $cSortida=""; // Recorre els grups obtinguts. while($result=mysql_fetch_array($res)) { $cSortida.=""; // Si comença per '-', és una etiqueta. if (substr($result[1], 0, 1)=="-") { // Només un '-', etiqueta gran. if (substr($result[1], 1, 1)!="-") { // Si és una etiqueta, la presenta. $cSortida.=presentarEtiquetaGrupsInscripcio(substr($result[1], 1)); } else { // Conté '--' al principi, etiqueta petita. $cSortida.=presentarEtiquetaGrupsInscripcio2(substr($result[1], 2)); } } else { // Presenta el grup. $cSortida.=presentarGrupInscripcio($nIDInscripcio, $cSessionID, $result[0], $result[1], $result[2]); } $cSortida.=""; } $cSortida.="
"; // Retorna el string obtingut. return $cSortida; } // Funció que retorna el n. de places del grup amb ID '$nIDGrup' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup. // Retorna: // - >=0 -> N.de places del grup. function getNumPlacesGrupInscripcio($nIDInscripcio, $nIDGrup) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return -1; } // Comprova que el grup existeixi. if (!existeixGrupInscripcio($nIDInscripcio, $nIDGrup)) { return -2; } $query="SELECT places FROM ".$nIDInscripcio."_grups WHERE id=".$nIDGrup; $res=mysql_query($query); if (!$res) { return -3; } $result=mysql_fetch_array($res); // Retorna el n. de places del grup. return $result[0]; } // Funció que retorna un string HTML per presentar una etiqueta gran dins els grups d'inscripció. // Paràmetres: // - $cTextEtiqueta: Text de l'etiqueta. // Retorna: // - String HTML formatejat. function presentarEtiquetaGrupsInscripcio($cTextEtiqueta) { return "

".$cTextEtiqueta."

"; } // Funció que retorna un string HTML per presentar una etiqueta petita dins els grups d'inscripció. // Paràmetres: // - $cTextEtiqueta: Text de l'etiqueta. // Retorna: // - String HTML formatejat. function presentarEtiquetaGrupsInscripcio2($cTextEtiqueta) { return "

".$cTextEtiqueta."

"; } // Funció que retorna un string HTML per presentar un grup d'inscripció. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $cSessionID: ID de la sessió que ho sol·licita. // - $nIDGrup: ID del grup. // - $cNomGrup: Nom del grup. // - $nNumPlacesGrup: N. de places del grup. function presentarGrupInscripcio($nIDInscripcio, $cSessionID, $nIDGrup, $cNomGrup, $nNumPlacesGrup) { // Si el n. de places del grup és -1, vol dir que té places il·limitades. $lPlacesIlimitades=($nNumPlacesGrup==-1); // Obté el n. de places ocupades del grup. $nNumPlacesOcupades=getNumPlacesOcupadesGrup($nIDInscripcio, $nIDGrup); // Obté el n. de places reservades del grup. $nNumPlacesReservades=getNumPlacesReservadesGrup($nIDInscripcio, $nIDGrup); // Determina les places lliures que queden. $nNumPlacesLliures=max(0, ($nNumPlacesGrup - $nNumPlacesOcupades - $nNumPlacesReservades)); // Determina si el grup actual està seleccionat. $lGrupSeleccionat=(grupCheck($cSessionID, $nIDInscripcio, $cError) == $nIDGrup); // Si la sessió té el grup actual seleccionat (com a plaça reservada), incrementa el n. de places disponibles en 1. if ($lGrupSeleccionat) $nNumPlacesLliures++; // Prepara el color (vermell o verd en funció de si queden places). $cColor=($nNumPlacesLliures>0 || $lPlacesIlimitades ? "#009900" : "#990000"); // Prepara el text amb el n. de places. $cTextNumPlaces=(!$lPlacesIlimitades ? $nNumPlacesLliures." places lliures" : "places il·limitades"); // Retorna la sortida pertinent. return "
".$cTextNumPlaces."
"; } // Funció que retorna el n. de places ocupades del grup amb ID '$nIDGrup' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup. // Retorna: // - (int) N. de places ocupades. function getNumPlacesOcupadesGrup($nIDInscripcio, $nIDGrup) { $query="SELECT COUNT(*) FROM ".$nIDInscripcio."_inscrits WHERE idGrup=".$nIDGrup; $res=mysql_query($query); if (!$res) { return -1; } $result=mysql_fetch_array($res); // Retorna el n. de places ocupades. return $result[0]; } // Funció que retorna el n. de places reservades del grup amb ID '$nIDGrup' de la inscripció amb ID '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup. // Retorna: // - (int) N. de places reservades. function getNumPlacesReservadesGrup($nIDInscripcio, $nIDGrup) { // Elimina els bloquejos antics. clearOldLocks(); $query="SELECT COUNT(*) FROM grup_lock WHERE idInscripcio=".$nIDInscripcio." AND idGrup=".$nIDGrup; $res=mysql_query($query); if (!$res) { return -1; } $result=mysql_fetch_array($res); // Retorna el n. de places ocupades. return $result[0]; } // Funció que retorna el nom del grup amb ID '$nIDGrup' de la inscripció '$nIDInscripcio'. // Paràmetres: // - $nIDInscripcio: ID de la inscripció. // - $nIDGrup: ID del grup. // Retorna: // - (String) Nom del grup seleccionat. function getNomGrup($nIDInscripcio, $nIDGrup) { // Comprova que la inscripció existeixi. if (!existeixInscripcio($nIDInscripcio)) { return "No existeix cap inscripció amb ID $nIDInscripcio"; } $query="SELECT nom FROM ".$nIDInscripcio."_grups WHERE id=".$nIDGrup; $res=mysql_query($query); if (!$res) { return "Error consultant el nom del grup seleccionat: "+mysql_error(); } if (mysql_numrows($res)==0) { return "No s'ha trobat el grup seleccionat."; } $result=mysql_fetch_array($res); // Retorna el nom del grup. return $result[0]; }