/**
 * kreas liston de la aligxintoj en array-formo.
 *
 * @param int $renkontigxoID
 * @param string $ordigo
 * @param lingvokodo $lingvo
 *
 * @return array du-dimensia array de la formo: <code>
 *   array( array('sxildnomo' => ...,
 *                'personanomo' => ...,
 *                'fam' => ...,
 *                'urbo' => ...,
 *                'landoid' => (ID de la lando),
 *                'sxildlando' => (eble alia lando indikita de la aligxinto),
 *                'partoprenoID' => (identigilo de la partopreno),
 *                'ordigoID' => (numero por uzo eble anstataux
 *                               la partoprenoID),
 *                'lando' => (la lando-objekto),
 *                'landonomo' => (nomo de la lando post traduko),
 *                'ordigo' => (aux ordigoID aux partoprenoID),
 *               ),
 *          array(...),
 *          ...)
 *   </code>
 * Gxi jam estas ordigita laux la petata maniero.
 */
function &kreu_aligxintoliston($renkontigxoID, $ordigo, $lingvo)
{
    $sql = datumbazdemando(array("p.sxildnomo", "p.personanomo", "p.nomo" => "fam", "p.urbo" => 'urbo', "p.lando" => "landoid", "p.sxildlando" => 'sxildlando', "pn.ID" => 'partoprenoID', "pn.ordigoID"), array("partoprenantoj" => "p", "partoprenoj" => "pn"), array("p.ID = pn.partoprenantoID", "alvenstato = 'v'", "pn.listo = 'J'", "pn.renkontigxoID" => $renkontigxoID), "", array("order" => "pn.ID"));
    $rez = sql_faru($sql);
    $landolisto = array();
    $listo = array();
    while ($linio = mysql_fetch_assoc($rez)) {
        if ($linio['ordigoID'] != 0.0) {
            $linio['ordigo'] = (double) $linio['ordigoID'];
        } else {
            $linio['ordigo'] = (double) $linio['partoprenoID'];
        }
        if (!isset($landolisto[$linio['landoid']])) {
            $landolisto[$linio['landoid']] =& new Lando($linio['landoid']);
        }
        $linio['lando'] =& $landolisto[$linio['landoid']];
        $linio['landonomo'] = $linio['lando']->tradukita('nomo', $lingvo);
        $listo[] = $linio;
    }
    $komparilo = donu_komparilon($ordigo);
    metu_ordigolokalajxon($lingvo);
    if (!usort($listo, $komparilo)) {
        darf_nicht_sein("ordigado ne funkciis");
    }
    debug_echo("<!--" . var_export($listo, true) . "-->\n");
    $nombro_entute = eltrovu_gxenerale("COUNT(*)", "partoprenoj", array("renkontigxoID" => $renkontigxoID, "alvenstato" => 'v'));
    $nombro_landoj = eltrovu_gxenerale("COUNT(DISTINCT p.lando)", array("partoprenoj" => "pn", "partoprenantoj" => "p"), array("renkontigxoID" => $renkontigxoID, "alvenstato" => 'v', "pn.partoprenantoID = p.ID"));
    return array($listo, $nombro_entute, $nombro_landoj);
}
 function metu_la_liston()
 {
     $listilo = new SQL_alternate_merge("personanomo", "sxildnomo");
     // tiuj estas por la plenaj adresoj:
     $listilo->maldekstra_datumbazdemando(array('personanomo', 'p.nomo' => 'fnomo', 'sxildnomo', 'adreso', 'posxtkodo', 'urbo', 'l.nomo' => 'landonomo', 'sxildlando', 'telefono', 'tujmesagxiloj', 'retposxto', '"1"' => 'plena'), array('partoprenantoj' => 'p', 'partoprenoj' => 'pp', 'landoj' => 'l'), array('p.ID = pp.partoprenantoID', 'p.lando = l.ID', 'pp.alvenstato' => 'a', 'pp.intolisto' => 'J'), array("renkontigxo" => "pp.renkontigxoID"), array("order" => "personanomo ASC"));
     // por la plusendoj ni bezonas nur sxildnomon kaj veran nomon.
     $listilo->dekstra_datumbazdemando(array("sxildnomo", "personanomo", "nomo" => "fnomo"), array('partoprenantoj' => 'p', 'partoprenoj' => 'pp'), array('p.ID = pp.partoprenantoID', "p.sxildnomo <> ''", 'pp.alvenstato' => 'a'), array('renkontigxo' => "pp.renkontigxoID"), array("order" => "sxildnomo ASC"));
     metu_ordigolokalajxon('eo');
     while ($linio = $listilo->sekva()) {
         $this->aldonu_adreson($linio);
     }
 }
/**
 * ordigas array laux lingvo.
 *
 * @todo faru pli bone konfigurebla - nun estas speciale
 *    por la haveblaj LOCALE-valoroj en la eo.de-servilo.
 */
function ordigu_laux_lingvo(&$array, $lingvo)
{
    if ($lingvo and defined("STR_KOMPARO_" . $lingvo)) {
        $komp = constant("STR_KOMPARO_" . $lingvo);
        uasort($array, $komp);
    } else {
        if ($lingvo) {
            metu_ordigolokalajxon($lingvo);
            asort($array, SORT_LOCALE_STRING);
        }
    }
}