Example #1
0
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;
}
Example #2
0
/**
 * 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;
}
Example #7
0
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;
}
Example #8
0
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);
}
Example #9
0
<?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>
Example #10
0
<?php

if (!getModule('Auth')->auth_user_id) {
    getModule('Utils')->doRedirect(_U('/noauth/login'));
}
Example #11
0
<?php

if (getModule('Auth')->auth_user_id) {
    getModule('Utils')->doRedirect(_U('/'));
}
Example #12
0
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']);
            ?>
">&bull;&nbsp;</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&amp;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&copy; 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 
}