当前位置: 首页>>代码示例>>PHP>>正文


PHP datumbazdemando函数代码示例

本文整理汇总了PHP中datumbazdemando函数的典型用法代码示例。如果您正苦于以下问题:PHP datumbazdemando函数的具体用法?PHP datumbazdemando怎么用?PHP datumbazdemando使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了datumbazdemando函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: rajtas

/**
 * Kontrolas iun rajton de la aktuala uzanto.
 *
 * Faras demandon al la datumbazo tiucele.
 * @param $ago nomo de kolumno en la rajto-tabelo.
 * @return boolean true, se la uzanto havas tiun rajton,
 *                 false alikaze (ankaŭ se la uzanto ne
 *                  ekzistas aŭ pasvorto malĝustas).
 * @global string _SESSION["kodvorto"]  la pasvorto de la
 *                 uzanto, uzata por kontroli.
 * @global string _SESSION["kodnomo"] la uzantonomo por
 *                 kontroli la rajton.
 */
function rajtas($ago)
{
    $sql = datumbazdemando(array($ago, "kodvorto"), "entajpantoj", "nomo = '" . $_SESSION["kodnomo"] . "'", "", array("order" => "id"));
    $row = mysql_fetch_assoc(sql_faru($sql));
    return $row and $row['kodvorto'] == $_SESSION['kodvorto'] and 'J' == $row[$ago];
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:19,代码来源:iloj_rajtoj.php

示例2: kondicxo_havas_unulitan_cxambron

/**
 *
 * @param array $objektoj
 *     <code>array('partopreno' => {@link Partopreno}, ...)</code>
 * @return boolean
 */
function kondicxo_havas_unulitan_cxambron($objektoj)
{
    $partopreno = $objektoj['partopreno'];
    if ($partopreno->datoj["dulita"] != "U") {
        // ne mendis unulitan ĉambron
        return false;
    }
    if (estas_unu_el($partopreno->datoj['alvenstato'], 'm', 'n')) {
        // malaliĝis / ne venis
        return false;
    }
    if ($partopreno->datoj['domotipo'] != 'J') {
        return false;
    }
    $rez = eltrovu_cxambrojn($partopreno->datoj['ID']);
    if (mysql_num_rows($rez) > 0) {
        // ricevis ĉambron
        while ($linio1 = mysql_fetch_assoc($rez)) {
            $sql = datumbazdemando(array("litonombro", "dulita"), "cxambroj", "ID = '" . $linio1['cxambro'] . "'");
            $linio2 = mysql_fetch_assoc(sql_faru($sql));
            if ($linio2['litonombro'] <= 1 or $linio2['dulita'] == 'U') {
                return true;
            }
        }
        // ni ne trovis dulitan ĉambron, kvankam ri mendis
        return false;
    } else {
        // ankoraŭ ne havas ĉambron,
        // ~~> verŝajne ricevos dulitan
        return true;
    }
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:38,代码来源:kondicxoj.php

示例3: montru_konfiguran_liston

function montru_konfiguran_liston()
{
    eoecho("\n<h2>Renkontig^o-konfiguroj</h2>\n<p>Jen maniero konfiguri detalojn de via renkontig^o.</p>\n<ul>\n");
    //       TODO: ligo al helpoteksto
    foreach ($GLOBALS['konfiguraj_tipoj'] as $tipo => $titolo) {
        echo "  <li>";
        ligu("#" . $tipo, $titolo[0]);
        echo "</li>\n";
    }
    echo "</ul>\n";
    foreach ($GLOBALS['konfiguraj_tipoj'] as $tipo => $titolo) {
        eoecho("<h3 id='" . $tipo . "'>" . $titolo[0] . "</h3>");
        eoecho("<table>\n   <tr>\n      <th>ID</th><th>grupo</th><th>interna</th>\n      <th>teksto</th><th>rimarko</th>\n   </tr>\n");
        $sql = datumbazdemando(array('ID', 'grupo', 'interna', 'teksto', 'aldona_komento'), 'renkontigxaj_konfiguroj', array('tipo' => $tipo), 'renkontigxoID', array('order' => 'grupo ASC, interna ASC'));
        $rez = sql_faru($sql);
        while ($linio = mysql_fetch_assoc($rez)) {
            echo "<tr><td>";
            ligu("renkontigxaj_konfiguroj.php?id=" . $linio['ID'], $linio['ID']);
            eoecho("</td><td>" . $linio['grupo'] . "</td><td>" . $linio['interna'] . "</td><td>" . $linio['teksto'] . "</td><td>" . $linio['aldona_komento'] . "</td></tr>\n");
        }
        echo "</table>\n";
        echo "<p>";
        ligu("renkontigxaj_konfiguroj.php?id=nova&tipo=" . $tipo, "kreu novan " . $titolo[1] . "n");
        echo "</p>";
    }
    // foreach tipo/titolo
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:27,代码来源:renkontigxaj_konfiguroj.php

示例4: kreuSercxSQL

/**
 * Kreas SQL-ordonon el la $valoroj-listo.
 *
 * @param array $valoroj la senditaĵo de la formularo de
 *    {@link gxenerala_sercxo.php}.
 * @return array  array($kampoj, $informoj, $sql), kie
 *      - $kampoj estas array() de kampoj montrenda en la rezulto,
 *          en la formo    tabelo.kamponomo => alias,
 *           en la formo uzebla de datumbazdemando().
 *          - $informoj estas array() de la formo<code>
 *               alias => array('kampo' => tabelo.kamponomo,
 *                             'titolo' => titolo)
 *             </code>
 *      - $sql estas la kreita SQL-esprimo (sen ordigo).
 * @uses kreuKondicxojn()
 * @uses kreuKampoliston()
 * @uses certiguCxiujnKonektojn()
 * @uses kreuKonektKondicxojn()
 * @uses datumbazdemando()
 */
function kreuSercxSQL($valoroj)
{
    if (DEBUG) {
        echo "<!-- valoroj: " . var_export($valoroj, true) . "-->";
    }
    /*
     * TODO: metu tiun liston aliloken, ekzemple la instalilo povus ĝin krei.
     */
    $cxiujtabeloj = array("renkontigxo", "cxambroj", "litonoktoj", "partoprenoj", "partoprenantoj", "invitpetoj", "individuaj_rabatoj", "individuaj_krompagoj", "pagoj", "notoj", "landoj");
    $uzatajtabeloj = array();
    foreach ($cxiujtabeloj as $tabelnomo) {
        if ($valoroj['sercxo_tabelo_' . $tabelnomo . '_uzu'] == 'JES') {
            $uzatajtabeloj[] = $tabelnomo;
        }
    }
    $kondicxoj = kreuKondicxojn($uzatajtabeloj, $valoroj);
    list($kampoj, $inversa) = kreuKampoliston($uzatajtabeloj, $valoroj);
    if (empty($kampoj)) {
        return array("", "", "");
    }
    certiguCxiujnKonektojn($uzatajtabeloj);
    $kondicxoj = array_merge($kondicxoj, kreuKonektKondicxojn($uzatajtabeloj));
    if (DEBUG) {
        echo "<!--";
        echo "\n kampoj: ";
        var_export($kampoj);
        echo "\n kondiĉoj: ";
        var_export($kondicxoj);
        echo "\n uzatajtabeloj: ";
        var_export($uzatajtabeloj);
        echo "-->";
    }
    return array($kampoj, $inversa, datumbazdemando($kampoj, $uzatajtabeloj, $kondicxoj));
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:54,代码来源:iloj_sercxo_analizo.php

示例5: sesio_trovu_ppenon

/**
 * serĉas partoprenon por partoprenanto, kaj metas ĝin
 * en la sesion.
 * @param int $ppantoID Partoprenanto-identigilo.
 * @param int $ppenoID Partopreno-identigilo. Se ne 0,
 *           ni simple vokas {@link sesio_aktualigu_ppenon()}.
 *           Alikaze ni serĉas taŭgan partoprenon por $ppantoID,
 *           kaj metas tiun en la sesion.
 * @uses sesio_aktualigu_ppenon()
 * @return int se ni sukcesis, 1, alikaze la nombron de diversaj
 *             kandidatoj.
 */
function sesio_trovu_ppenon($ppantoID, $ppenoID = 0)
{
    debug_echo("<!-- trovu_ppenon(" . $ppantoID . ", " . $ppenoID . ") -->");
    if ($ppenoID) {
        sesio_aktualigu_ppenon($ppenoID);
        return 1;
    } else {
        if ($_SESSION['partopreno'] and $_SESSION['partopreno']->datoj['partoprenantoID'] == $ppantoID) {
            // ni havas jam unu partoprenon, kaj ĝi estas
            //  por la ĝusta partoprenanto.
            sesio_aktualigu_ppenon($_SESSION['partopreno']->datoj['ID']);
            return 1;
        }
        // malfacila kazo
        $sql = datumbazdemando("ID", "partoprenoj", array("partoprenantoID = '" . $ppantoID . "'"), array("renkontigxo" => "renkontigxoID"));
        $rez = sql_faru($sql);
        $num_pp = mysql_num_rows($rez);
        if ($num_pp == 1) {
            // precize unu partopreno por la aktuala
            // renkontiĝo - prenu tiun.
            $linio = mysql_fetch_assoc($rez);
            sesio_aktualigu_ppenon($linio['ID']);
        } else {
            // ne estas ununura taŭga partopreno por tiu ĉi
            // partoprenanto.
            unset($_SESSION['partopreno']);
        }
        // eble la vokanto volas scii, kiom da aliĝoj estis.
        return $num_pp;
    }
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:43,代码来源:iloj_sesio.php

示例6: datumbazdemando

/**
 * 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);
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:55,代码来源:iloj_listo.php

示例7: rajtas

/**
 * kontrolas, cxu la nuna uzanto (identifikata per la
 * globalaj variabloj $kodnomo kaj $kodvorto) havas la
 * rajton $ago.
 * redonas TRUE aux FALSE.
 */
function rajtas($ago)
{
    $sql = datumbazdemando($ago, "entajpantoj", array("nomo = '" . $_SESSION["kodnomo"] . "'", "kodvorto = '" . $_SESSION["kodvorto"] . "'"), "", array("order" => "id"));
    $result = sql_faru($sql);
    if ($row = mysql_fetch_array($result, MYSQL_BOTH) and $row[$ago] == "J") {
        return true;
    } else {
        return false;
    }
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:16,代码来源:iloj.php

示例8: aligilo_aligxinto_listo

function aligilo_aligxinto_listo($renkontigxoID, $lingvo, $ordigo)
{
    $prafix = $GLOBALS['prafix'] = get_option("aligilo-prafix");
    require_once $GLOBALS['prafix'] . "/iloj/iloj.php";
    malfermu_datumaro();
    $sql_listo = datumbazdemando(array("COUNT(pn.ID)" => "nombro"), array("partoprenantoj" => "p", "partoprenoj" => "pn"), array("p.ID = pn.partoprenantoID", "pn.alvenstato = 'v'", "pn.listo = 'J'", "pn.renkontigxoID ='{$renkontigxoID}'"));
    $rez_listo = sql_faru($sql_listo);
    $linio = mysql_fetch_assoc($rez_listo);
    $nombro_listo = $linio['nombro'];
    $sql_listo = datumbazdemando(array("COUNT(pn.ID)" => "nombro"), array("partoprenantoj" => "p", "partoprenoj" => "pn"), array("p.ID = pn.partoprenantoID", "pn.alvenstato = 'v'", "pn.renkontigxoID ='{$renkontigxoID}'"));
    $rez_listo = sql_faru($sql_listo);
    $linio = mysql_fetch_assoc($rez_listo);
    $nombro_chiuj = $linio['nombro'];
    $sql_landoj = datumbazdemando(array("COUNT(distinct p.lando)" => "nombro"), array("partoprenantoj" => "p", "partoprenoj" => "pn"), array("p.ID = pn.partoprenantoID", "pn.alvenstato = 'v'", "pn.renkontigxoID ='{$renkontigxoID}'"));
    echo "<!-- {$sql_landoj} -->";
    $rez_listo = sql_faru($sql_landoj);
    $linio = mysql_fetch_assoc($rez_listo);
    $nombro_landoj = $linio['nombro'];
    $sql = datumbazdemando(array("IF(p.sxildnomo<> '', p.sxildnomo, p.personanomo)" => 'persona', "p.nomo" => 'fam', "p.urbo" => 'urbo', "p.sxildlando" => 'sxildo', "l.nomo" => 'lando_eo', "l.lokanomo" => 'lando_de'), array("partoprenantoj" => "p", "partoprenoj" => "pn", "landoj" => "l"), array("p.ID = pn.partoprenantoID", "alvenstato <> 'm'", "p.lando = l.ID", "pn.listo = 'J'", "pn.renkontigxoID ='{$renkontigxoID}'"), "", array("order" => "p.personanomo ASC, p.nomo ASC"));
    $tabelo = "<tbody>";
    $rez = sql_faru($sql);
    while ($linio = mysql_fetch_array($rez)) {
        $tabelo .= "<tr>\n";
        $tabelo .= "  <td  style='text-align: right; padding-right:0.3em;'>";
        $tabelo .= uni($linio['persona']);
        $tabelo .= "</td>\n<td>";
        /*         if ($linio['fam']{1} == '^')
                     {
                         $fam = substr($linio['fam'], 0,2);
                     }
                 else
                     {
                         $fam = mb_substr($linio['fam'], 0, 1, "utf-8");
                     }
                 */
        $fam = $linio['fam'];
        $tabelo .= uni($fam);
        $tabelo .= "</td>\n  <td>";
        if ($linio['sxildo']) {
            $tabelo .= uni($linio['sxildo']);
        } else {
            if ($lingvo == 'de') {
                $tabelo .= uni($linio['lando_de']);
            } else {
                $tabelo .= uni($linio['lando_eo']);
            }
        }
        $tabelo .= "</td>\n  <td>";
        $tabelo .= uni($linio['urbo']);
        $tabelo .= "</td>\n</tr>\n";
    }
    $tabelo .= "</tbody>\n";
    return compact("tabelo", "nombro_landoj", "nombro_listo", "nombro_chiuj");
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:54,代码来源:aligilo-aligxintoj-listo.php

示例9: donu_kondicxon

 /**
  * trovas kaj redonas la kondicxo-objekton por tiu cxi
  *  malaligxkondicxosistemo kaj la menciita aligxkategori-objekto.
  */
 function donu_kondicxon($aligxkategorio)
 {
     if (is_object($aligxkategorio)) {
         $aligxkategorio = $aligxkategorio->datoj['ID'];
     }
     $sql = datumbazdemando("kondicxtipo", "malaligxkondicxoj", array("sistemo = '" . $this->datoj['ID'] . "'", "aligxkategorio = '" . $aligxkategorio . "'"));
     $linio = mysql_fetch_assoc(sql_faru($sql));
     if (!$linio) {
         return null;
     }
     return new Malaligxkondicxotipo($linio['kondicxtipo']);
 }
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:16,代码来源:iloj_kotizo_malaligxo.php

示例10: prenu_strukturon

 /**
  * initializas malplenan objekton el la strukturo de la datumbazo.
  *
  * @param resource $rezulto rezulto de (eble malplena)
  *       datumbazdemando pri tiu tabelo. Se mankas, ni mem demandas.
  * @access private
  */
 function prenu_strukturon($rezulto = null)
 {
     if (!is_resource($rezulto)) {
         /* prenu nur la strukturon el la datumbazo */
         $sql = datumbazdemando("*", $this->tabelnomo, "", "", array("limit" => "0,0"));
         $rezulto = sql_faru($sql);
     }
     for ($i = 0; $i < mysql_num_fields($rezulto); $i++) {
         $this->datoj[mysql_field_name($rezulto, $i)] = "";
     }
     mysql_free_result($rezulto);
 }
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:19,代码来源:objektoj.php

示例11: listu_konfigurojn

/**
 * Listas la renkontiĝo-konfigurojn de donita tipo por iu renkontiĝo.
 * @param asciistring $tipo unu el "pagotipo", "valuto", "rabatotipo",
 *        "kromtipo" kaj "logxtipo".
 * @param Renkontigxo|int $renkontigxo (aux ID de tiu)
 * @return array ({@link Renkontigxa_konfiguro})
 */
function listu_konfigurojn($tipo, $renkontigxo = "")
{
    $renkontigxo = kreuRenkontigxon($renkontigxo);
    $sql = datumbazdemando(array("ID", "grupo", "interna"), "renkontigxaj_konfiguroj", array('tipo' => $tipo, 'renkontigxoID' => $renkontigxo->datoj['ID']), "", array('order' => "grupo ASC, interna ASC"));
    $rez = sql_faru($sql);
    $listo = array();
    while ($linio = mysql_fetch_assoc($rez)) {
        $konf = new Renkontigxa_konfiguro($linio["ID"]);
        $listo[] = $konf;
    }
    return $listo;
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:19,代码来源:objekto_konfiguro.php

示例12: listu_kurzojn_por

function listu_kurzojn_por($valuto)
{
    $sql = datumbazdemando(array('dato', 'kurzo', 'ID'), 'kurzoj', array('valuto' => $valuto), "", array('order' => 'dato ASC'));
    $rez = sql_faru($sql);
    echo "<table class='kurzolisto'>\n";
    while ($linio = mysql_fetch_assoc($rez)) {
        echo "  <tr><td>";
        ligu("kurzoj.php?id=" . $linio['ID'], "red.");
        echo "</td><td>" . $linio['dato'] . "</td><td>" . $linio['kurzo'] . "</td></tr>\n";
    }
    echo "</table>\n";
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:12,代码来源:kurzoj.php

示例13: aligilo_aligxintoj_nombro

function aligilo_aligxintoj_nombro()
{
    $prafix = get_option("aligilo-prafix");
    $GLOBALS['prafix'] = $prafix;
    $renkID = get_option("aligilo-renkontigxo");
    require_once $prafix . "/iloj/iloj.php";
    malfermu_datumaro();
    $sql = datumbazdemando(array("COUNT(*)" => "num"), array("partoprenoj" => "p"), array("p.alvenstato = 'v'", "p.renkontigxoID = '{$renkID}'"));
    $rez = sql_faru($sql);
    $linio = mysql_fetch_assoc($rez);
    return $linio['num'];
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:12,代码来源:aligilo-aligxintoj-nombro.php

示例14: Objekto

 /**
  * Konstruilo.
  *
  * Se $id == 0, kreas novan (malplenan) objekton
  * (la strukturon gxi prenas el la datumbazo),
  * alikaze prenas la jam ekzistan objekton (kun
  * tiu identifikilo) el la datumbazo.
  *
  *  $id - la identifikilo (aux 0).
  *  $tn - la (abstrakta) nomo de la tabelo.
  */
 function Objekto($id, $tn)
 {
     $this->tabelnomo = $tn;
     if ($id == 0) {
         /* prenu nur la strukturon el la datumbazo */
         $sql = datumbazdemando("*", $tn, "", "", array("limit" => "1,1"));
         $rezulto = sql_faru($sql);
         for ($i = 0; $i < mysql_num_fields($rezulto); $i++) {
             $this->datoj[mysql_field_name($rezulto, $i)] = "";
         }
     } else {
         /* prenu tutan tabel-linion el la datumbazo */
         $this->prenu_el_datumbazo($id);
     }
 }
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:26,代码来源:objektoj.php

示例15: eltrovu_kurzon

/**
 * eltrovas la lastan kurzon de valuto ĝis iu dato.
 *
 * @param asciistring $valuto
 * @param datostring $dato (se forlasita, la nuna dato)
 * @return array (kurzo, dato)
 */
function eltrovu_kurzon($valuto, $dato = "")
{
    if ($valuto == CXEFA_VALUTO) {
        return array(1.0, null);
    }
    if (!$dato) {
        $dato = date("y-m-d");
    }
    $sql = datumbazdemando(array('kurzo', 'dato'), 'kurzoj', array('valuto' => $valuto, "dato <= '{$dato}'"), "", array('order' => 'dato DESC', 'limit' => '0,1'));
    $linio = mysql_fetch_assoc(sql_faru($sql));
    if ($linio) {
        return array($linio['kurzo'], $linio['dato']);
    } else {
        return null;
    }
}
开发者ID:BackupTheBerlios,项目名称:aligilo-svn,代码行数:23,代码来源:iloj_kurzoj.php


注:本文中的datumbazdemando函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。