function controleurs_article_intro3_dist($regs) { list(,$crayon,$type,$champ,$id) = $regs; $valeur = valeur_colonne_table($type, array('descriptif', 'chapo', 'texte'), $id); if ($valeur === false) { return array("$type $id $champ: " . _U('crayons:pas_de_valeur'), 6); } $n = new Crayon('article-intro3-' . $id, $valeur, array('hauteurMini' => 234)); $return = array( // html $n->formulaire( // champs et attributs propres array( 'descriptif' => array('type' => 'texte', 'attrs' => array( 'style' => 'height:' . ceil($n->hauteur*2/13) . 'px;' . 'width:' . $n->largeur . 'px;')), 'chapo' => array('type' => 'texte', 'attrs' => array( 'style' => 'height:' . ceil($n->hauteur*4/13) . 'px;' . 'width:' . $n->largeur . 'px;')), 'texte' => array('type' => 'texte', 'attrs' => array( 'style' => 'height:' . ceil($n->hauteur*4/13) . 'px;' . 'width:' . $n->largeur . 'px;'))) //, // attributs communs :( marche pas pour style , pas 2 fois ? // array('style' => 'width:' . $n->largeur . 'px;') ), // status null); return $return; }
/** * Le controlleur de CFG * * @param Array $regs * @return Array */ function controleurs_config_dist($regs) { list(,$crayon,$type,$champ,$id) = $regs; // evidemment, pour CFG, on recupere pas tout a fait ce qu'on souhaite... // retraduire depot___plugin__casier__cle en depot::plugin/casier/cle include_spip('cfg_fonctions'); $config = cfg_crayon2config($champ); $val = lire_config($config); if ($val === null) { return array("$type $config: " . _U('crayons:pas_de_valeur'), 6); } $valeur = array('config' => $val); $n = new Crayon($crayon, $valeur); $contexte = array(); if (is_string($val) and preg_match(",[\n\r],", $val)) $contexte['config'] = array('type'=>'texte'); else $contexte['config'] = array('type'=>'ligne'); $html = $n->formulaire($contexte); include_spip('action/crayon_html'); $html = crayons_formulaire($html, 'crayons_config_store'); $status = NULL; return array($html, $status); }
function controleurs_article_intro3_dist($regs) { list(, $crayon, $type, $champ, $id) = $regs; $valeur = valeur_colonne_table($type, array('descriptif', 'chapo', 'texte'), $id); if ($valeur === false) { return array("{$type} {$id} {$champ}: " . _U('crayons:pas_de_valeur'), 6); } $n = new Crayon('article-intro3-' . $id, $valeur, array('hauteurMini' => 234)); $return = array($n->formulaire(array('descriptif' => array('type' => 'texte', 'attrs' => array('style' => 'height:' . ceil($n->hauteur * 2 / 13) . 'px;' . 'width:' . $n->largeur . 'px;')), 'chapo' => array('type' => 'texte', 'attrs' => array('style' => 'height:' . ceil($n->hauteur * 4 / 13) . 'px;' . 'width:' . $n->largeur . 'px;')), 'texte' => array('type' => 'texte', 'attrs' => array('style' => 'height:' . ceil($n->hauteur * 4 / 13) . 'px;' . 'width:' . $n->largeur . 'px;')))), null); return $return; }
function controleurs_article_introduction_dist($regs) { list(, $crayon, $type, $champ, $id) = $regs; $valeur = valeur_colonne_table($type, array('descriptif', 'chapo', 'texte'), $id); if ($valeur === false) { return array("{$type} {$id} {$champ}: " . _U('crayons:pas_de_valeur'), 6); } $n = new Crayon('article-introduction-' . $id, $valeur, array('hauteurMini' => 234, 'controleur' => 'controleurs/article_introduction')); $contexte = array('h_descriptif' => (int) ceil($n->hauteur * 2 / 13), 'h_chapo' => (int) ceil($n->hauteur * 4 / 13), 'h_texte' => (int) ceil($n->hauteur * 4 / 13)); $html = $n->formulaire($contexte); $status = NULL; return array($html, $status); }
function crayons_store_set_modifs($modifs, $return) { // sinon on bosse : toutes les modifs ont ete acceptees // verifier qu'on a tout ce qu'il faut pour mettre a jour la base // et regrouper les mises a jour par type/id foreach ($modifs as $modif) { list($type, $modele, $id, $content, $wid) = $modif; $fun = ''; // si le crayon est un MODELE avec une fonction xxx_revision associee // cas ou une fonction xxx_revision existe if (function_exists($f = $type . '_' . $modele . "_revision") or function_exists($f = $modele . "_revision") or function_exists($f = $type . "_revision")) { $fun = $f; } elseif (function_exists('lister_tables_objets_sql') and $tables_objet = lister_tables_objets_sql() and isset($tables_objet[table_objet_sql($type)])) { $fun = 'crayons_objet_modifier'; } else { switch ($type) { case 'article': $fun = 'crayons_update_article'; break; case 'breve': include_spip('action/editer_breve'); $fun = 'revisions_breves'; break; case 'forum': include_spip('inc/forum'); $fun = 'enregistre_et_modifie_forum'; break; case 'rubrique': include_spip('action/editer_rubrique'); $fun = 'revisions_rubriques'; break; case 'syndic': case 'site': include_spip('action/editer_site'); $fun = 'revisions_sites'; break; case 'document': include_spip('plugins/installer'); include_spip('inc/plugin'); if (spip_version_compare($GLOBALS['spip_version_branche'], '3.0.0alpha', '>=')) { include_spip('action/editer_document'); $fun = 'document_modifier'; } else { include_spip('inc/modifier'); $fun = 'revision_document'; } break; // cas geres de la maniere la plus standard // cas geres de la maniere la plus standard case 'auteur': case 'mot': case 'signature': case 'petition': default: include_spip('inc/modifier'); $fun = 'revision_' . $type; break; } } // si on a pas reussi on passe par crayons_update() qui fera un update sql brutal if (!$fun or !function_exists($fun)) { $fun = 'crayons_update'; // $return['$erreur'] = "$type: " . _U('crayons:non_implemente'); // break; } if (!isset($updates[$type][$fun])) { $updates[$type][$fun] = array(); } if (!isset($updates[$type][$fun][$id])) { $updates[$type][$fun][$id] = array('wdg' => array(), 'chval' => array()); } // pour reaffecter le retour d'erreur sql au cas ou $updates[$type][$fun][$id]['wdg'][] = $wid; foreach ($content as $champtable => $val) { $updates[$type][$fun][$id]['chval'][$champtable] = $val; } } // il manque une fonction de mise a jour ==> on ne fait rien ! if ($return['$erreur']) { return $return; } // hop ! mises a jour table par table et id par id foreach ($updates as $type => $idschamps) { foreach ($idschamps as $fun => $ids) { foreach ($ids as $id => $champsvaleurs) { /* cas particulier du logo dans un crayon complexe : ce n'est pas un champ de la table */ if (isset($champsvaleurs['chval']['logo'])) { spip_log('revision logo', 'crayons'); logo_revision($id, $champsvaleurs['chval'], $type, $champsvaleurs['wdg']); unset($champsvaleurs['chval']['logo']); } if (count($champsvaleurs['chval'])) { // -- revisions_articles($id_article, $c) -- spip_log("{$fun}({$id} ...)", 'crayons'); $updok = $fun($id, $champsvaleurs['chval'], $type, $champsvaleurs['wdg']); // Renvoyer erreur si update base distante echoue, on ne regarde pas les updates base local car ils ne renvoient rien list($distant, $table) = distant_table($type); if ($distant and !$updok) { $return['$erreur'] = "{$type}: " . _U('crayons:update_impossible'); } } } } } return $return; }
/** * Ajoute les scripts css et js nécessaires aux crayons dans le code HTML * * @uses crayons_var2js() * * @param string $page * Code HTML de la page complète ou du header seulement * @param string $droits * - Liste de css définissant les champs crayonnables * (séparés par virgule) dont l'édition est autorisée * - "*" si tous sont autorisés * @param array $wdgcfg * Description de la configuration des crayons (attribut => valeur) * @param string $mode * - page : toute la page est présente dans `$page` * - head : seul le header est présent dans `$page` * @return **/ function &Crayons_preparer_page(&$page, $droits, $wdgcfg = array(), $mode = 'page') { /** * Si pas forcer_lang, on charge le contrôleur dans la langue que l'utilisateur a dans le privé */ if (!isset($GLOBALS['forcer_lang']) or !$GLOBALS['forcer_lang'] or $GLOBALS['forcer_lang'] === 'non') { lang_select($GLOBALS['auteur_session']['lang']); } $jsFile = generer_url_public('crayons.js'); if (_DEBUG_CRAYONS) { $jsFile = parametre_url($jsFile, 'debug_crayons', 1, '&'); } include_spip('inc/filtres'); // rien que pour direction_css() :( $cssFile = direction_css(find_in_path('crayons.css')); $config = crayons_var2js(array('imgPath' => dirname(find_in_path('images/crayon.png')), 'droits' => $droits, 'dir_racine' => _DIR_RACINE, 'self' => self('&'), 'txt' => array('error' => _U('crayons:svp_copier_coller'), 'sauvegarder' => $wdgcfg['msgAbandon'] ? _U('crayons:sauvegarder') : ''), 'img' => array('searching' => array('txt' => _U('crayons:veuillez_patienter')), 'crayon' => array('txt' => _U('crayons:editer')), 'edit' => array('txt' => _U('crayons:editer_tout')), 'img-changed' => array('txt' => _U('crayons:deja_modifie'))), 'cfg' => $wdgcfg)); // Est-ce que PortePlume est la ? $meta_crayon = isset($GLOBALS['meta']['crayons']) ? unserialize($GLOBALS['meta']['crayons']) : array(); $pp = ''; if (isset($meta_crayon['barretypo']) && $meta_crayon['barretypo']) { if (function_exists('chercher_filtre') and $f = chercher_filtre('info_plugin') and $f('PORTE_PLUME', 'est_actif')) { $pp = <<<EOF cQuery(function() { \tif (typeof onAjaxLoad == 'function') { \t\tfunction barrebouilles_crayons() { \t\t\t\$('.formulaire_crayon textarea.crayon-active') \t\t\t.barre_outils('edition'); \t\t} \t\tonAjaxLoad(barrebouilles_crayons); \t} }); EOF; } } $incCSS = "<link rel=\"stylesheet\" href=\"{$cssFile}\" type=\"text/css\" media=\"all\" />"; $incJS = <<<EOH <script type="text/javascript">/* <![CDATA[ */ var configCrayons; function startCrayons() { \tconfigCrayons = new cQuery.prototype.cfgCrayons({$config}); \tcQuery.fn.crayonsstart(); {$pp} } var cr = document.createElement('script'); cr.type = 'text/javascript'; cr.async = true; cr.src = '{$jsFile}&callback=startCrayons'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(cr, s); /* ]]> */</script> EOH; if ($mode == 'head') { //js inline avant les css, sinon ca bloque le chargement $page = $page . $incJS . $incCSS; return $page; } $pos_head = strpos($page, '</head>'); if ($pos_head === false) { return $page; } // js inline avant la premiere css, ou sinon avant la fin du head $pos_link = strpos($page, '<link '); if (!$pos_link) { $pos_link = $pos_head; } $page = substr_replace($page, $incJS, $pos_link, 0); // css avant la fin du head $pos_head = strpos($page, '</head>'); $page = substr_replace($page, $incCSS, $pos_head, 0); return $page; }
function crayons_store_set_modifs($modifs, $return) { // sinon on bosse : toutes les modifs ont ete acceptees // verifier qu'on a tout ce qu'il faut pour mettre a jour la base // et regrouper les mises a jour par type/id foreach ($modifs as $modif) { list($type, $modele, $id, $content, $wid) = $modif; // MODELE $fun = ''; if (function_exists($f = $type.'_'. $modele . "_revision") OR function_exists($f = $modele . "_revision") OR function_exists($f = $type . "_revision")) $fun = $f; else switch($type) { case 'article': $fun = 'crayons_update_article'; break; case 'breve': include_spip('action/editer_breve'); $fun = 'revisions_breves'; break; case 'forum': include_spip('inc/forum'); $fun = 'enregistre_et_modifie_forum'; break; case 'rubrique': include_spip('action/editer_rubrique'); $fun = 'revisions_rubriques'; break; case 'syndic': case 'site': include_spip('action/editer_site'); $fun = 'revisions_sites'; break; // cas geres de la maniere la plus standard case 'auteur': case 'document': case 'mot': case 'signature': case 'petition': default: include_spip('inc/modifier'); $fun = 'revision_'.$type; break; } if (!$fun or !function_exists($fun)) { $fun = 'crayons_update'; // $return['$erreur'] = "$type: " . _U('crayons:non_implemente'); // break; } if (!isset($updates[$type][$fun])) { $updates[$type][$fun] = array(); } if (!isset($updates[$type][$fun][$id])) { $updates[$type][$fun][$id] = array('wdg'=>array(), 'chval'=>array()); } // pour reaffecter le retour d'erreur sql au cas ou $updates[$type][$fun][$id]['wdg'][] = $wid; foreach ($content as $champtable => $val) { $updates[$type][$fun][$id]['chval'][$champtable] = $val; } } // il manque une fonction de mise a jour ==> on ne fait rien ! if ($return['$erreur']) return $return; // hop ! mises a jour table par table et id par id foreach ($updates as $type => $idschamps) foreach ($idschamps as $fun => $ids) { foreach ($ids as $id => $champsvaleurs) { /* cas particulier du logo dans un crayon complexe : ce n'est pas un champ de la table */ if (isset($champsvaleurs['chval']['logo'])) { spip_log('revision logo', 'crayons'); logo_revision($id, $champsvaleurs['chval'], $type, $champsvaleurs['wdg']); unset($champsvaleurs['chval']['logo']); } if (count($champsvaleurs['chval'])) { // -- revisions_articles($id_article, $c) -- spip_log("$fun($id ...)", 'crayons'); $updok = $fun($id, $champsvaleurs['chval'], $type, $champsvaleurs['wdg']); // Renvoyer erreur si update base distante echoue, on ne regarde pas les updates base local car ils ne renvoient rien list($distant,$table) = distant_table($type); if ($distant AND !$updok) $return['$erreur'] = "$type: " . _U('crayons:update_impossible'); } } } return $return; }
function controleur_dist($regs, $c=null) { list( , $nomcrayon, $type, $champ, $id, $class) = $regs; $options = array( 'class' => $class ); list($distant,$table) = distant_table($type); // Si le controleur est un squelette html, on va chercher // les champs qu'il lui faut dans la table demandee // Attention, un controleur multi-tables ne fonctionnera // que si les champs ont le meme nom dans toutes les tables // (par exemple: hyperlien est ok, mais pas nom) if (($fichier = find_in_path( ($controleur = 'controleurs/' . $type . '_' . $champ) . '.html')) || ($fichier = find_in_path( ($controleur = 'controleurs/' . $champ) .'.html'))) { if (!lire_fichier($fichier, $controldata)) die('erreur lecture controleur'); if (preg_match_all('/\bname=(["\'])#ENV\{name_(\w+)\}\1/', $controldata, $matches, PREG_PATTERN_ORDER)) { $champ = $matches[2]; } } else { $controleur = ''; } $valeur = valeur_colonne_table($type, $champ, $id); #spip_log("$valeur = valeur_colonne_table($type, $champ, $id);"); #spip_log($champ); if ($valeur === false) { return array("$type $id $champ: " . _U('crayons:pas_de_valeur'), 6); } /* if (is_scalar($valeur)) { $valeur = array($champ => $valeur); }*/ // type du crayon (a revoir quand le core aura type ses donnees) $inputAttrs = array(); if ($controleur) { $options['hauteurMini'] = 80; // base de hauteur mini $option['inmode'] = 'controleur'; $options['controleur'] = $controleur; } else // si la valeur fait plusieurs lignes on doit mettre un textarea // derogation specifique pour descriptif_site de spip_metas if ( preg_match(",[\n\r],", $valeur[$champ]) OR (($champ == 'valeur') && ($id == 'descriptif_site')) OR // on regarde le type tel que defini dans serial // (attention il y avait des blob dans les vieux spip) ($sqltype = colonne_table($type, $champ)) && ( in_array($sqltype['type'] , array('mediumtext', 'longblob', 'longtext')) || (($sqltype['type'] == 'text' || $sqltype['type'] == 'blob') && in_array($champ, array('descriptif', 'bio'))))) { $options['hauteurMini'] = 80; // hauteur mini d'un textarea $option['inmode'] = 'texte'; } else { // ligne, hauteur naturelle $options['hauteurMaxi'] = 0; $option['inmode'] = 'ligne'; if ($sqltype['long']) { $inputAttrs['maxlength'] = is_array($sqltype['long']) ? $sqltype['long'][0] : $sqltype['long']; } } $crayon = new Crayon($nomcrayon, $valeur, $options, $c); $inputAttrs['style'] = join($crayon->styles); if (!$controleur) { $inputAttrs['style'] .= 'width:' . $crayon->largeur . 'px;' . ($crayon->hauteur ? ' height:' . $crayon->hauteur . 'px;' : ''); } $html = $controleur ? $crayon->formulaire(null, $inputAttrs) : $crayon->formulaire($option['inmode'], $inputAttrs); $status = NULL; return array($html,$status); }
<?php include "globals.php"; include "includes/lib_common.php"; include "includes/lib_html.php"; HTML_Header("CL7 Scoreboards"); HTML_Content_Title("CL7 Scoreboards", ""); $cgi = "cgi-bin/league_scoreboard.cgi"; $scores = array(array("mode" => "finished", "title" => "Finished matches only:"), array("mode" => "ongoing", "title" => "Including ongoing matches:")); foreach ($scores as $score) { HTML_Item($score["title"]); HTML_AnimatedLoadURL($cgi . "?mode=" . _U($score["mode"]) . "&clan=" . _U($CLAN['shortname']), $score["mode"]); } HTML_Legend(); HTML_Item($CLAN['name'] . " matches:"); HTML_AnimatedLoadURL($cgi . "?mode=matches&clanid=" . _U($CLAN['clanid']), "list"); HTML_Footer(); function HTML_Item($title = "") { ?> <h4><?php echo _H($title); ?> </h4> <?php } function HTML_Legend() { ?> <h4>Legend:</h4> <ul>
<?php if (!getModule('Auth')->auth_user_id) { getModule('Utils')->doRedirect(_U('/noauth/login')); }
<?php if (getModule('Auth')->auth_user_id) { getModule('Utils')->doRedirect(_U('/')); }
function HTML_Header($title = "") { global $APP; global $CLAN; if ($title) { $title = " :: {$title}"; } // CCT = EST (but actually calculated CST+1, so DST kicks in at a different hour) $cctime = new DateTime(null, new DateTimeZone('America/New_York')); $currenttime = $cctime->format("M d Y, H:i:s"); $currenttime_html = $cctime->format("M d, H:i:s"); // Annoucements $announcements = array(); if ($fd = @fopen($APP['DataDir'] . "/announcements.txt", "r")) { $i = 0; while (($announcement = fgetcsv($fd, 1000, "\t")) && ++$i <= $APP['MaxAnnouncements']) { $announcements[] = array("title" => $announcement[0], "url" => count($announcement) > 1 ? $announcement[1] : "", "hidden" => $i > $APP['VisibleAnnouncements'], "style" => "1"); } fclose($fd); } // Localhost matching $is_local = in_array($_SERVER["SERVER_NAME"], array("localhost", "127.0.0.1", gethostname())); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title><?php echo _H($APP['HTML_Title']); echo _H($title); ?> </title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta name="description" content="Tools for ConquerClub players"/> <meta name="keywords" content="conquer club,risk"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <link rel="shortcut icon" href="favicon.ico"/> <link rel="stylesheet" href="css/skidoo_too.min.css"/> <link rel="stylesheet" href="css/stylesheet.css"/> <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.min.js" integrity="sha384-XxcvoeNF5V0ZfksTnV+bejnCsJjOOIzN6UVwF85WBsAnU3zeYh5bloN+L4WLgeNE" crossorigin="anonymous"></script> <script type="text/javascript" src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js" integrity="sha384-YWP9O4NjmcGo4oEJFXvvYSEzuHIvey+LbXkBNJ1Kd0yfugEZN9NCQNpRYBVC1RvA" crossorigin="anonymous"></script> <link rel="stylesheet" href="https://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.min.css" integrity="sha384-A/CgvDCSM2jOpa4G++hlEtzweAjg53uGXJLUnen/qb5faVDcN+vaHrL5czAdzhK8" crossorigin="anonymous"/> <script type="text/javascript"> // Load local jquery as fallback if CDN is not available // Use a single test for all files, assuming that if first fails all others will fail too window.jQuery || document.write( '\x3Cscript type="text/javascript" src="js/jquery-1.12.0.min.js"\x3E\x3C/script\x3E\n' + '\x3Cscript type="text/javascript" src="js/jquery-ui-1.11.4.min.js"\x3E\x3C/script\x3E\n' + '\x3Clink type="text/css" href="css/jquery-ui-1.11.4.smoothness.min.css" rel="stylesheet" /\x3E\n' ); </script> <script type="text/javascript"> var app_id = ''; var app_context = ''; var is_mobile_device = false; var is_new_recruit = false; var is_new_player = false; var currenttime = <?php echo _J($currenttime); ?> ; var GameHideNav = 'N'; </script> <script type="text/javascript" src="js/common.js"></script> <script type="text/javascript" src="js/lightbox.js"></script> <script type="text/javascript" src="js/pagination1.js"></script> </head> <body> <div id="pageWrapper"> <div id="mainheader"> <div id="mainNavAndLogo"> <div id="CC_mainlogo"><a href="<?php echo _H($APP['VirtualPath']); ?> "><img src="images/static/cc_logo.png" alt="<?php echo _H($APP['HTML_Title']); ?> " title="<?php echo _H($APP['HTML_Title']); ?> "/></a></div> <div id="mainNav"> <ul><li><a>Welcome to MestreLion's amazing ConquerClub humble tools!</a></li></ul> </div> </div> <div id="rightNav"></div> </div> <div id="mainheader_mobile"> <div id="CC_mainlogo_mobile"><a href="<?php echo _H($APP['VirtualPath']); ?> "><img src="images/static/icon.png" alt="<?php echo _H($APP['HTML_Title']); ?> " title="<?php echo _H($APP['HTML_Title']); ?> "/></a></div> <div id="mainNav_mobile"> <span><a><?php echo _H($APP['HTML_Title']); ?> </a></span> </div> </div> <div id="outerColumnContainer"> <div id="innerColumnContainer"> <div id="SOWrap"> <div id="leftColumn"> <div id="leftColumninner" class="inside"> <!--- left column begin --> <div class="vnav" id="leftnav"> <div id="cctime" style="font-size:12px; font-weight:bold; color:black; display: inline-block; text-align:center;z-index:10;padding:0px;width:100%;"> <span id="servertime"><?php echo _H($currenttime_html); ?> CCT</span> </div> <p style='margin-bottom:0px;width:100%;display: inline-block; text-align:center;'>[<a href="logout.php">logout <b><?php echo _H(session('username')); ?> </b></a>]</p> <h3>Main Tools</h3> <ul> <li><a href="maprank.php">Map Rank</a></li> </ul> <h3>Clan League 7</h3> <ul> <li><a href="cl7scoreboard.php">Scoreboards</a></li> <li><a href="cl7player.php">Player Rank</a></li> </ul> <?php if ($announcements) { ?> <h3>Announcements</h3> <ul style='opacity:.9;font-size:10px;'> <?php foreach ($announcements as $i) { ?> <li<?php if ($i['hidden']) { ?> class="announcements" style="display:none;"<?php } ?> ><a title="<?php echo _H($i['title']); ?> " href="<?php echo _H($i['url']); ?> "><span class="player<?php echo _H($i['style']); ?> ">• </span><?php echo _H($i['title']); ?> </a></li> <?php } ?> <li><a id="more" href="#" onclick="showannouncements(); return false;">More</a></li> </ul> <?php } ?> <h3>Conquer Club</h3> <ul> <li><a href="https://www.conquerclub.com/player.php?mode=mygames1">Central Command</a></li> <li><a href="https://www.conquerclub.com/forum/memberlist.php?mode=viewprofile&un=<?php echo _U(session('username')); ?> ">Profile</a></li> <li><a href="https://www.conquerclub.com/forum/index.php">Forum</a></li> <li><a href="https://www.conquerclub.com/forum/viewforum.php?f=<?php echo _U($CLAN['forumid']); ?> "><?php echo _H($CLAN['shortname']); ?> Forum</a></li> </ul> <h3>Risk Tools</h3> <ul> <li><a href="http://gamesbyemail.com/games/gambit/battleodds">Gambit Battle Odds</a></li> <li><a href="http://riskodds.com">RISK© Odds Generator</a></li> <li><a href="http://www.morningtoast.com/feature/risk/">Risk Dice Roller</a></li> <li><a href="http://diceroll.stritar.net/risk.html">Dice Roll Simulation</a></li> </ul> <?php if ($is_local) { ?> <h3>Development</h3> <ul> <li><a href="template.html">HTML Template</a></li> <li><a href="template.php">PHP Template</a></li> <li><a href="phpinfo.php">PHP Info</a></li> <li><a href="error.php">Error Test</a></li> </ul> <?php } ?> </div> <!--- left column end --> </div> </div> <div id="middleColumn"> <div class="inside"> <!--- middle (main content) column begin --> <?php }