Advertisement
lerasdn

Untitled

Jun 23rd, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 54.05 KB | None | 0 0
  1. <?php
  2. /*
  3.     axe_lib.php
  4.     Define as rotinas gerais do engine axe
  5.  
  6.     © 2013 Augusto Campos http://augustocampos.net/ (4.05.2013)
  7.     Licensed under the Apache License, Version 2.0 (the "License");
  8.     you may not use this file except in compliance with the License.
  9.     You may obtain a copy of the License at
  10.     http://www.apache.org/licenses/LICENSE-2.0
  11.  
  12.     Unless required by applicable law or agreed to in writing, software
  13.     distributed under the License is distributed on an "AS IS" BASIS,
  14.     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.     See the License for the specific language governing permissions and
  16.     limitations under the License.
  17.  
  18. */
  19.  
  20.  
  21. //      ATENÇÃO: defina os detalhes do seu blog e
  22. //      servidor no arquivo axe_config.php, e não aqui.
  23. //      ***** aqui você não precisa editar nada *****
  24.  
  25.  
  26.  
  27.  
  28. /************************************************************************
  29.                 Funções do template do blog
  30. *************************************************************************/
  31.  
  32. function axe_init() {
  33.     global $blogparmslist;
  34.     global $transfblogparmslist;
  35.     global $blogparms;
  36.     global $axedir;
  37.     global $pluginslist;
  38.     global $configfiledir;
  39.     global $axe_exepath;
  40.     global $adpages;
  41.    
  42.     require $configfiledir."axe_config.php";   
  43.  
  44.     // carrega módulo exclusivo do Efetividade, quando presente
  45.     if (file_exists($configfiledir."axe_filtraads.php")) {
  46.         include $configfiledir."axe_filtraads.php";
  47.         inicializa_filtro_ads();
  48.     }
  49.        
  50.     // confirma que diretórios do axe_config terminam com / e existem  
  51.     $axedir=valida_dir($axedir,"axedir");
  52.     $blogparms["THEMESDIR"]=valida_dir($blogparms["THEMESDIR"],"THEMESDIR");
  53.     $blogparms["THEME"]=valida_path($blogparms["THEME"],"THEME");
  54.     $blogparms["PLUGINSDIR"]=valida_dir($blogparms["PLUGINSDIR"],"PLUGINSDIR");
  55.     $blogparms["POSTSDIR"]=valida_dir($blogparms["POSTSDIR"],"POSTSDIR");
  56.     $blogparms["PREVIEWDIR"]=valida_dir($blogparms["PREVIEWDIR"],"PREVIEWDIR");
  57.  
  58.     // confirma que URLs do axe_config terminam com /  
  59.     $blogparms["BLOGURL"]=valida_url($blogparms["BLOGURL"],"BLOGURL");
  60.     $blogparms["THEMESPATH"]=valida_url($blogparms["THEMESPATH"],"THEMESPATH");
  61.     $blogparms["PREVIEWSBASEURL"]=valida_url($blogparms["PREVIEWSBASEURL"],"PREVIEWSBASEURL"); 
  62.  
  63.     $blogparms["PAGETITLE"] = $blogparms["BLOGTITLE"];
  64.     $blogparms["PAGEDESC"] = "";
  65.     $blogparms["PAGEICON"] = "";
  66.     $blogparms["PAGEURL"] = "";
  67.     $blogparms["NAVLINKS"] = "";
  68.     $blogparms["BLOGROOT"] = $axedir;  
  69.     $blogparms["BLOGINCS"] = $axe_exepath; // diretório dos executáveis  
  70.     //$blogparms["TEMPLATEDIR"] = valida_dir($axedir.'templates/',"TEMPLATEDIR");
  71.     chdir($blogparms["THEMESDIR"].$blogparms["THEME"]);
  72.     set_include_path(".".PATH_SEPARATOR.$axedir);  
  73.     $blogparms["STAGINGDIR"] = valida_dir($axedir.'staging/',"STAGINGDIR");
  74.     $blogparms["DRAFTSDIR"] = valida_dir($axedir.'drafts/',"DRAFTSDIR");   
  75.     $blogparms["IMPORTDIR"] = $axedir.'import-wp/lastexport/';
  76.     $blogparms["INPUTNAME"] = 'descriptors/';  
  77.     $blogparms["INPUTDIR"] = valida_dir($axedir.$blogparms["INPUTNAME"],"INPUTDIR");
  78.     $blogparms["AXEVERSION"]="Axe 0.98a.3";
  79.     $blogparms["YEAR"]=date("Y");
  80.     $blogparms["LASTBUILDDATE"]=date("r"); // RFC 2822 e.g. Thu, 21 Dec 2000 16:01:07 +0200
  81.     $blogparms["OLDARCHIVES"]=try_file_get_contents("oldarchives.html");
  82.     $blogparms["SEARCH"]=try_file_get_contents("search.php");
  83.     $blogparms["MIDAD"]=try_file_get_contents("midad.php");
  84.     $blogparms["CENTERAD"]=try_file_get_contents("centerad.php");
  85.     $blogparms["TOPAD"]=try_file_get_contents("topad.php");
  86.     $blogparms["RIGHTAD"]=try_file_get_contents("rightad.php");
  87.     $blogparms["OVERTEXTAD"]=try_file_get_contents("bodyad.php");
  88.     if ($blogparms['EXIBIRPOPULARES']===true) {
  89.         $blogparms["POPULARES"]=try_file_get_contents("populares.php");
  90.     } else {
  91.         $blogparms["POPULARES"]="";
  92.     }  
  93.     if (is_readable("menu.php")) $menudata=file("menu.php");
  94.     else $menudata="";
  95.     $blogparms["SIDEBAR"]="";
  96.     $blogparms["MENU"]=""; 
  97.     if (strlen($blogparms['PLUGINSDIR'])>0) registra_plugins();        
  98.     // após atribuir todos os itens no array de blogparms, gera a lista de transformação
  99.     carrega_blogparmlist();
  100.     if (!empty($menudata)) {
  101.         foreach($menudata as $linha) {
  102.             $a=explode(';;',substparms($linha));
  103.             $a[1]=trim($a[1]);
  104.             if (substr($linha,0,1)!="-") $blogparms["SIDEBAR"].="<li class=\"link\"><a href=\"".blogparm('BLOGURL').$a[1]."\">$a[0]</a></li>";
  105.             if (substr($linha,0,1)=="-") $blogparms["MENU"].='<option value="" data-link="">&bull;&bull;&bull;</option>';
  106.             else $blogparms["MENU"].="<option value=\"".blogparm('BLOGURL').$a[0]."\" data-link=\"$a[1]\">$a[0]</option>";
  107.         }
  108.         // gera de novo após processar o menu, que pode fazer uso das demais variáveis
  109.         carrega_blogparmlist();
  110.     }  
  111.     carrega_destaques();
  112.     setquadrorecentes();
  113.     $blogparms=aplica_plugins('blogparms',$blogparms); 
  114. }
  115.  
  116. function carrega_blogparmlist() {
  117.     global $blogparmslist;
  118.     global $transfblogparmslist;
  119.     global $blogparms;
  120.     foreach($blogparms as $nome => $parm) {
  121.         $transfblogparmslist["%%".$nome."%%"]=$parm;       
  122.     }
  123. }
  124.  
  125. function valida_dir($dir,$nome) {
  126.     if (0===strlen($dir)) axe_error("Configuração: $nome indefinido ou vazio");
  127.     if (substr($dir,-1)!="/") $dir.="/";
  128.     if (!is_dir($dir)) axe_error("Configuração: diretório $dir inexistente");
  129.     if (!is_writable($dir)) axe_error("Configuração: diretório $dir sem permissão de gravação");
  130.     return($dir);  
  131. }
  132.  
  133. function valida_path($dir,$nome) {
  134.     if (0===strlen($dir)) axe_error("Configuração: $nome indefinido ou vazio");
  135.     if (substr($dir,-1)!="/") $dir.="/";
  136.     return($dir);  
  137. }
  138.  
  139. function valida_url($url,$nome="") {
  140.     if (0===strlen($url)) axe_error("Configuração: $nome indefinido ou vazio");
  141.     if (substr($url,-1)!="/") $url.="/";
  142.     return($url);  
  143. }
  144.  
  145.  
  146. function setpagetitle($pagetitle) {
  147.     global $blogparms;
  148.     $blogparms["PAGETITLE"] = removequotes($pagetitle);
  149.     carrega_blogparmlist();
  150. }
  151.  
  152. function setquadrorecentes() {
  153.     global $blogparms;
  154.     $blogparms["QUADRORECENTES"] = try_file_get_contents(substparms("%%POSTSDIR%%")."recentes.html");  
  155.     carrega_blogparmlist();
  156. }
  157.  
  158. function setmonthlyindexdate($date) {
  159.     global $blogparms;
  160.     $blogparms["MONTHLYINDEXDATE"] = $date;
  161.     carrega_blogparmlist();
  162. }
  163.  
  164. function setmonthlyindextitle($title) {
  165.     global $blogparms;
  166.     $blogparms["MONTHLYINDEXTITLE"] = $title;  
  167.     carrega_blogparmlist();
  168. }
  169.  
  170.  
  171. function setnavlinks($navlinks) {
  172.     global $blogparms;
  173.     $blogparms["NAVLINKS"] = $navlinks;
  174.     carrega_blogparmlist();
  175. }
  176.  
  177. function setpageicon($icon) {
  178.     global $blogparms;
  179.     $blogparms["PAGEICON"] = $icon;
  180.     carrega_blogparmlist();
  181. }
  182.  
  183. function setpageurl($url) {
  184.     global $blogparms;
  185.     $blogparms["PAGEURL"] = $url;  
  186.     carrega_blogparmlist();
  187. }
  188.  
  189.  
  190. function setpagedesc($description) {
  191.     global $blogparms;
  192.     $blogparms["PAGEDESC"] = removequotes($description);   
  193.     carrega_blogparmlist();
  194. }
  195.  
  196.  
  197. function substparms($trecho) {
  198. // aplica o template de parâmetros do blog a um texto
  199.     global $transfblogparmslist;
  200.     global $transfpost;
  201.         //  dmsg("--> " .$trecho);
  202.  
  203.     if (function_exists("filtro_ads")) {
  204.         // filtrar_ads
  205.         $year=date("Y",strtotime($transfpost["%%POSTTIME%%"]));
  206.         $name=$transfpost["%%POSTNAME%%"];
  207.         if (!filtro_ads($name,$year)) {
  208.             // dmsg($year." ".$name);
  209.             $trecho=preg_replace('/%%(BODY|MID|RIGHT|OVERTEXT)AD%%/',"",$trecho); // remove tags de anuncios
  210.             // dmsg("--> " .$trecho);
  211.             // dmsg($trecho);
  212.         }  
  213.     }
  214.  
  215.     $trecho=strtr($trecho,$transfblogparmslist);
  216.     return $trecho;
  217. }
  218.  
  219.  
  220. function blogparm($parametro)   {
  221. // Retorna um parâmetro sobre o blog
  222.     global $blogparms;
  223.     global $transfpost;
  224. /*
  225.     if (substr($parametro,-2)=="AD") {
  226.         if (function_exists("filtro_ads")) {
  227.             // filtrar_ads
  228.             $year=date("Y",strtotime($transfpost["%%POSTTIME%%"]));
  229.             $name=$transfpost["%%POSTNAME%%"];
  230.             dmsg($year,$name);
  231.         }
  232.     }  
  233. */
  234.     $parmsg=$parametro; // para o caso de ter de mostrar na mensagem de erro
  235.     $parametro=strtoupper(preg_replace('/%/','',$parametro));
  236.     if (isset($blogparms[$parametro])) {
  237.         return s_rss($blogparms[$parametro]);
  238.     } else {
  239.         return "Parâmetro desconhecido - $parmsg";
  240.     }
  241. }  
  242.  
  243.  
  244.  
  245.  
  246.  
  247. /************************************************************************
  248.                 Funções do template de posts
  249. *************************************************************************/
  250.  
  251. function loadpostvars() {
  252. // inicializa as variáveis que descrevem um post
  253.     global $POST;
  254.     global $blogparms;
  255.     unset($GLOBALS['transfpost']);
  256.     global $transfpost;
  257.     if (isset($POST)) {
  258.         foreach($POST as $origem => $parm) {
  259.             $transfpost["%%".$origem."%%"]=$parm;      
  260.         }
  261.         if (isset($transfpost["%%POSTTAGS%%"])) {
  262.             $transfpost["%%POSTTAGS%%"]=preg_replace('/[[:blank:]]*/',"",$transfpost["%%POSTTAGS%%"]).',';
  263.             $transfpost["%%POSTTAGS%%"]=preg_replace('/([^,]*),/',"<a href=\"".blogparm('BLOGURL')."tag-\\1.html\">\\1</a>,",$transfpost["%%POSTTAGS%%"]);
  264.             $transfpost["%%POSTTAGS%%"]=preg_replace('/,$/',"",$transfpost["%%POSTTAGS%%"]);
  265.             $transfpost["%%POSTTAGS%%"]=preg_replace('/,/',", ",$transfpost["%%POSTTAGS%%"]);                      
  266.         } else {
  267.             $transfpost["%%POSTTAGS%%"]="";
  268.         }
  269.         $transfpost["%%BODYAD%%"]=try_file_get_contents("bodyad.php");
  270.         if (strlen(trim($transfpost["%%POSTOLDCOMMENTS%%"]))<15) $transfpost["%%POSTOLDCOMMENTS%%"]="Ninguém quer saber!";
  271.         else if (strlen(trim($transfpost["%%POSTOLDCOMMENTS%%"]))>40000) {
  272.             $transfpost["%%POSTOLDCOMMENTS%%"]=substr($transfpost["%%POSTOLDCOMMENTS%%"],0,40000);
  273.             $divpos=strrpos($transfpost["%%POSTOLDCOMMENTS%%"],"</div>");
  274.             $transfpost["%%POSTOLDCOMMENTS%%"]=substr($transfpost["%%POSTOLDCOMMENTS%%"],0,$divpos+5);
  275.         }
  276.         if (!isset($transfpost["%%POSTICON%%"])) {
  277.             if (!isset($transfpost["%%POSTMETAMYSTAMP%%"])) {
  278.                 $transfpost["%%POSTICON%%"]=blogparm('BLOGURL').blogparm("THEMESPATH").blogparm("THEME")."posticons/noicon.jpg";
  279.             } else {
  280.                 $transfpost["%%POSTICON%%"]=$transfpost["%%POSTMETAMYSTAMP%%"];
  281.                 if (substr($transfpost["%%POSTICON%%"],0,5)!="http:") $transfpost["%%POSTICON%%"]="http://static.efetividade.net/img/".$transfpost["%%POSTICON%%"];
  282.             }  
  283.         }
  284.         if (trim(strtoupper($transfpost["%%POSTICON%%"]) != "NEWS")) setpageicon($transfpost["%%POSTICON%%"]);
  285.         else setpageicon(blogparm('BLOGLOGO'));
  286.         if (!isset($transfpost["%%POSTTIME%%"])) {
  287.             $transfpost["%%POSTTIME%%"]=date("r");
  288.         }
  289.         $transfpost["%%POSTDATE%%"]=date("j/m/Y",strtotime($transfpost["%%POSTTIME%%"])); // RFC 2822 e.g. Thu, 21 Dec 2000 16:01:07 +0200
  290.         $transfpost["%%POSTDATEFEED%%"]=date("r",strtotime($transfpost["%%POSTTIME%%"])); // RFC 2822 e.g. Thu, 21 Dec 2000 16:01:07 +0200
  291.         if (blogparm('YEARLY')=="01") {
  292.             $transfpost["%%POSTANOMES%%"]=date("Y/",strtotime($transfpost["%%POSTTIME%%"])).blogparm('YEARLY');
  293.         } else {
  294.             $transfpost["%%POSTANOMES%%"]=date("Y/m",strtotime($transfpost["%%POSTTIME%%"]));
  295.         }  
  296.         if (strlen(blogparm('YEARLY'))=="01") {
  297.             $transfpost["%%POSTNAME%%"]=preg_replace('|(..../)..(/.*)$|',"\\1aBaB\\2",$transfpost["%%POSTNAME%%"]);
  298.             $transfpost["%%POSTNAME%%"]=preg_replace('/aBaB/',blogparm('YEARLY'),$transfpost["%%POSTNAME%%"]);
  299.         }      
  300.         if (!isset($transfpost["%%POSTURL%%"])) {
  301.             $transfpost["%%POSTURL%%"]=$transfpost["%%POSTANOMES%%"]."/".$transfpost["%%POSTNAME%%"].".html";
  302.         } else {
  303.             $caminho=preg_replace('/^https?:\/\/[^\/]*/',"",$transfpost["%%POSTURL%%"]);
  304.             if (substr_count($caminho,'/')<3) $caminho=$transfpost["%%POSTANOMES%%"].$caminho;
  305.             $transfpost["%%POSTURL%%"]=rtrim(ltrim($caminho,'/'),'/').'.html';
  306.         }
  307.         $transfpost["%%POSTURL%%"]=preg_replace('/(....\/..)\/..(\/.*)/',"\\1\\2",$transfpost["%%POSTURL%%"]);
  308.         setpageurl(blogparm('BLOGURL').blogparm('POSTSURLPREFIX').$transfpost["%%POSTURL%%"]);
  309.         $transfpost["%%POSTSHORT%%"]=cutonword(strip_tags(corrigehtml($POST['POSTBODY'])),250);    
  310.         if (empty($transfpost["%%DESC%%"])) {
  311.             setpagedesc($transfpost["%%POSTSHORT%%"]);
  312.         } else {
  313.             setpagedesc($transfpost["%%DESC%%"]);
  314.         }  
  315.         $transfpost["%%POSTFEAT%%"]=buscaparagrafos($POST['POSTBODY'],6,1000);
  316.         $transfpost["%%POSTMID%%"]=trim(cutonword(strip_tags(corrigehtml($POST['POSTBODY'])),350));
  317.         $transfpost["%%POSTMID%%"]=preg_replace('/[[:cntrl:]]/',"",$transfpost["%%POSTMID%%"]);    
  318.         //$transfpost["%%POSTMID%%"]=strip_tags($transfpost["%%POSTMID%%"]);               
  319.         //$transfpost["%%POSTBODY%%"]=paragrafos(corrigehtml($POST['POSTBODY']));      
  320.         $transfpost["%%POSTNEWSBODY%%"]=corrigehtml($POST['POSTBODY']);    
  321.         if (!isset($transfpost['POSTAUTHOR'])) {
  322.             $transfpost['%%POSTAUTHOR%%']=blogparm('BLOGOWNER');
  323.             $transfpost['%%POSTAUTHORURL%%']=blogparm('BLOGOWNERURL');
  324.             $transfpost['%%POSTAUTHORTWITTER%%']=blogparm('BLOGOWNERTWITTER');     
  325.         }
  326.         $transfpost["%%POSTBIO%%"]=authorbio($transfpost['%%POSTAUTHOR%%']);       
  327.         if (!isset($transfpost['POSTTWIT'])) {
  328.             $transfpost['%%POSTTWIT%%']=$transfpost['%%POSTTITLE%%'];
  329.         }
  330.         $transfpost['%%POSTTWIT%%']=$transfpost['%%POSTTWIT%%']." %CR%%CR%".blogparm('BLOGURL').blogparm('POSTSURLPREFIX').$transfpost['%%POSTURL%%'];     
  331.         // %25CR%25 é o mesmo que %CR%, mas url-encoded
  332.         $transfpost['%%POSTTWITTHIS%%']=preg_replace('/%25CR%25/',"\n",'http://twitter.com/home?status='.urlencode(html_entity_decode("☞ ".$transfpost['%%POSTTWIT%%'])."\nvia @".$transfpost['%%POSTAUTHORTWITTER%%']));
  333.         $transfpost['%%POSTSHARETHIS%%']="http://www.facebook.com/sharer/sharer.php?u=".blogparm('BLOGURL').blogparm('POSTSURLPREFIX').$transfpost['%%POSTURL%%'];
  334.         $transfpost['%%DESTAQUES%%']=quadro_destaques();
  335.     } else {
  336.         // se ainda não foi lido nenhum post
  337.         $transfpost["%%POSTTITLE%%"]=blogparm('BLOGTITLE')." ".blogparm('BLOGURL');    
  338.     }
  339.     setnavlinks("");
  340.     $transfpost=aplica_plugins('postvars',$transfpost);
  341. }
  342.  
  343.  
  344. function substpostvars($trecho) {
  345.     global $POST;
  346.     global $transfpost;
  347.     $trecho=preg_replace('/(%%#[^#]*#%%)/',"<!-- \\1 -->",$trecho); // remove itens que os plugins nao processaram
  348.     $trecho=strtr($trecho,$transfpost);
  349.     return $trecho;
  350. }
  351.  
  352. function authorbio($author) {
  353.     $authorfile=substparms('%%BLOGROOT%%')."authors/".normaliza($author).".html";
  354.     $bio=try_file_get_contents($authorfile);
  355.     if(empty($bio)) $bio="Este artigo foi publicado em ".substpostvars("%%POSTDATE%%")." por $author.";
  356.     return trim($bio);
  357. }
  358.  
  359.  
  360. /************************************************************************
  361.                 Funções de geração de drafts a partir do staging
  362. *************************************************************************/
  363.  
  364.  
  365. function gera_draft($arquivo,$quiet=false) {
  366. // gera um draft a partir de um arquivo de entrada fornecido pelo usuario
  367.     global $MYPOST;
  368.     global $noold;
  369.     global $strict;
  370.     decho("Vou ler o arquivo de entrada: ".blogparm('STAGINGDIR').$arquivo);
  371.     if (!is_file(blogparm('STAGINGDIR').$arquivo)) {
  372.         axe_error('Não existe o arquivo '.blogparm('STAGINGDIR').$arquivo,E_USER_ERROR);
  373.         die;
  374.     } else {   
  375.         $filein=blogparm('STAGINGDIR').$arquivo;
  376.         $linhas=file($filein);
  377.         $linhas=preg_replace("/'/","&#39;",$linhas);
  378.         $linhas=str_replace("$","&#36;",$linhas);
  379.         if (!$strict) {
  380.             $MYPOST['POSTTITLE']=$linhas[0];
  381.             $inicio=1;
  382.             if (strtolower(substr($linhas[1],0,5))=="tags:") {
  383.                 $MYPOST['POSTTAGS']=substr($linhas[1],5);
  384.                 $inicio=2;
  385.             }
  386.             $MYPOST['POSTTAGS']=preg_replace('/[[:space:]]/',"",$MYPOST['POSTTAGS']);      
  387.         } else {
  388.             // a opção strict não dá nenhum significado inicial às 2 primeiras
  389.             // linhas do arquivo de entrada. Para definir título e tags, precisa
  390.             // referenciar explicitamente @@POSTTITLE: e @@POSTTAGS:
  391.             $inicio=0; 
  392.         }
  393.         $t="";
  394.         for ($i=$inicio; $i < count($linhas); $i++) {
  395.             if (substr($linhas[$i],0,2)=="@@") break;
  396.             $t.=$linhas[$i];
  397.         }
  398.         $MYPOST['POSTBODY']=$t;
  399.         for ($i=$i; $i < count($linhas); $i++) {
  400.             if (substr($linhas[$i],0,13)=="@@OLDCOMMENTS") break;
  401.             $t=$linhas[$i];
  402.             $chave=strtoupper(trim(preg_replace('/^@@([^:]*):.*/',"\\1",$t)));
  403.             $valor=trim(preg_replace('/^@@[^:]*:(.*)/',"\\1",$t));
  404.             $MYPOST[$chave]=$valor;
  405.         }
  406.         $t="";
  407.         if (substr($linhas[$i],0,13)=="@@OLDCOMMENTS") {
  408.             $i++;
  409.             for ($i=$i; $i < count($linhas); $i++) {
  410.                 $t.=$linhas[$i];
  411.             }
  412.             $MYPOST['OLDCOMMENTS']=$t;
  413.         }
  414.         $saida="<?php\n";  
  415.         foreach ($MYPOST as $key => $value) {
  416.             if ($key=="POSTBODY") {
  417.                 $saida.='$POST["POSTBODY"]= <<< endPBPBPBaxe'."\n";
  418.                 $saida.=$value."\n";
  419.                 $saida.='endPBPBPBaxe;'."\n";
  420.             } elseif ($key=="OLDCOMMENTS") {
  421.                 $saida.='$POST["POSTOLDCOMMENTS"]= <<< endPCPCPCaxe'."\n";
  422.                 $saida.=$value."\n";
  423.                 $saida.='endPCPCPCaxe;'."\n";      
  424.             } else $saida.="\$POST[$key]='".trim($value)."';\n";   
  425.         }
  426.         $saida.="?>";
  427.         if (isset($MYPOST['POSTTITLE'])) {
  428.             $arquivo=normaliza($MYPOST['POSTTITLE']).".php";       
  429.         }  
  430.         $arquivo=preg_replace('/\.[^.]*$/',".php", $arquivo);
  431.         if (isset($MYPOST['POSTTIME']) && isset($MYPOST['POSTNAME'])) $arquivo="upd_".$arquivo;
  432.         else if (isset($MYPOST['CRON'])) {
  433.             $horario=preg_replace('/[^0-9]/',"-",trim($MYPOST['CRON']));
  434.             $horario=preg_replace('/-+/',"-",$horario);
  435.             dmsg($horario);
  436.             $horario=preg_replace('/^([0-9][-_])/',"0\\1",$horario);
  437.             $horario=preg_replace('/-([0-9][-_])/',"-0\\1",$horario);
  438.             $horario=preg_replace('/-([0-9])$/',"-0\\1",$horario);
  439.             dmsg($horario);
  440.             $arquivo="@".$horario."_".$arquivo;
  441.             $h=explode("-",$horario);
  442.             dmsg("** CRON ** Artigo será agendado para as $h[1]:$h[2] do dia $h[0].");
  443.         } else if (isset($MYPOST['PRI'])) {
  444.             if($MYPOST['PRI']<10) $MYPOST['PRI']=10+$MYPOST['PRI'];
  445.             $arquivo="PRI".$MYPOST['PRI']."_$arquivo";
  446.             dmsg("** PRIORIZAÇÃO ** Artigo recebeu prioridade ".$MYPOST['PRI'].".");         
  447.         }
  448.         gravaarquivo(basename(blogparm('DRAFTSDIR')).'/'.$arquivo,$saida,true);
  449.         if (!$noold) move_oldfile($filein);
  450.         decho("Gravei: ".blogparm('DRAFTSDIR').$arquivo);
  451.         return $arquivo;
  452.     }  
  453. }
  454.  
  455. function hack_the_header($header) {
  456. // an ugly hack to substitute some header fields on local tests
  457. // see also references to @@PAGEICON@@ on single, indexes and monthly
  458.     global $blogparms;
  459.     if (!empty($blogparms['CSSFIXEDURL'])) {
  460.         $header=preg_replace('/%%BLOGURL%%%%THEMESPATH%%%%THEME%%/','%%CSSFIXEDURL%%',$header);
  461.     }
  462.     return $header;
  463. }
  464.  
  465. function first_image($body) {
  466. // retorna a URL da primeira imagem referenciada em HTML no $body
  467.     $s="";
  468.     if (preg_match('/<img/i',$body)) {
  469.         $s=substr($body,stripos($body,"<img"));
  470.         $s=substr($s,0,stripos($s,">"));
  471.         $s=preg_replace('/.*src="?([^"[:blank:]]*)"?.*/',"\\1",$s);
  472.     }  
  473.     return $s;
  474. }
  475.  
  476.  
  477.  
  478. /************************************************************************
  479.                 Funções de indexação de tags
  480. *************************************************************************/
  481.  
  482.  
  483. function cria_tagindex($tag,$force=false) {
  484. // gera os indices para UMA tag
  485.     global $tritem;
  486.     global $sparsedebug;
  487.     $postsfilename=blogparm('INPUTDIR').'tags/'."catalog-$tag.txt";
  488.     $indexfilename=blogparm('POSTSDIR')."tag-$tag.html";
  489.     $gerar=(!is_file($indexfilename));
  490.     if (!$gerar) {
  491.         $gerar= ((filemtime($postsfilename) > filemtime($indexfilename)));
  492.     }
  493.     if ($force || !is_file($indexfilename) || $gerar) {  
  494.         $postsfiles=file($postsfilename,FILE_IGNORE_NEW_LINES);
  495.         sort($postsfiles);
  496.         $contaitems=0;
  497.         $contafeats=0;
  498.         $containdexes=0;
  499.         for ($i=count($postsfiles)-1; $i >=0; $i--) {
  500.             if (0 == $contaitems % blogparm('NUMPOSTSCOVER')) {
  501.                 setpagetitle("Tag: ".$tag." - ".blogparm('%%BLOGTITLE%%'));
  502.                 $pageurl=blogparm('BLOGURL').preg_replace('/'.basename(blogparm('POSTSDIR')).'\//',"/",$nome);
  503.                 setpageurl($pageurl);          
  504.                 $item=cover_header('tags');
  505.                 $item.="<h1 style=\"margin-top:25px;\">Artigos marcados com a tag $tag</h1>";
  506.             }  
  507.             $fpost=$postsfiles[$i];
  508.             unset($GLOBALS['POST']);
  509.             global $POST;
  510.             //$k=preg_split('/;;/',$fpost);
  511.             //$myimportfile=blogparm('INPUTDIR').'posts/'.$k[1];
  512.             //include $myimportfile;
  513.             loadpostvars_fromcatalog($fpost);      
  514.             if(strtoupper($POST['POSTICON'])=="NEWS") {
  515.                 $item.=cover_news('tags');
  516.             }  
  517.             else if ($contafeats<blogparm('NUMFEATSCOVER')) {
  518.                 $item.=cover_feature('tags');
  519.                 $contafeats++;
  520.             }  
  521.             else $item.=cover_post('tags');
  522.             $contaitems++;
  523.             if ((0 == $contaitems % blogparm('NUMPOSTSCOVER')) || ($i==0)) {
  524.                 $numindex=$containdexes+1;
  525.                 $previndex=$numindex-1;
  526.                 $proxindex=$numindex+1;
  527.                 $prevlink='tag-'.$tag."-".$previndex.".html";
  528.                 $proxlink='tag-'.$tag."-".$proxindex.".html";
  529.                 if ($containdexes==1) $prevlink='tag-'.$tag.".html";
  530.                 $navlinks="";
  531.                 if ($i>0) $navlinks='<span class="next"><a href="'.blogparm('BLOGURL').$proxlink.'" rel="next">&larr; Mais antigos</a></span>';
  532.                 if($containdexes>0) $navlinks.='<span class="prev"><a href="'.blogparm('BLOGURL').$prevlink.'" rel="prev">Mais recentes &rarr;</a></span>';
  533.                 setnavlinks($navlinks);
  534.                 $item.=cover_footer('tags');
  535.                 $nome="tag-".$tag."-".$numindex.".html";
  536.                 if ($containdexes==0) $nome=basename(blogparm('POSTSDIR')).'/'."tag-".$tag.".html";
  537.                 $pageurl=blogparm('BLOGURL').preg_replace('/'.basename(blogparm('POSTSDIR')).'\//',"/",$nome);
  538.                 setpageurl($pageurl);
  539.                 $sparsedebug=1;        
  540.                 gravaarquivonaraiz($nome,$item);
  541.                 $sparsedebug=0;        
  542.                 $containdexes++;
  543.                 $item="";
  544.             }  
  545.         }
  546.     }  
  547.     return $item;
  548. }
  549.  
  550. function rebuild_tags($force=false) {
  551. // reconstroi todos os indices de tags que estiverem desatualizados
  552.     $tagfilelist=glob(blogparm('INPUTDIR').'tags/catalog-*.txt');
  553.     for ($i=count($tagfilelist)-1; $i >=0; $i--) {
  554.         $fpost=$tagfilelist[$i];
  555.         $tag=preg_replace('/.*catalog-([^.]*)\.txt/',"\\1",$fpost);
  556.         cria_tagindex($tag,$force);
  557.     }
  558. }
  559.  
  560.  
  561. /************************************************************************
  562.                 Funções de formatação e tratamento de strings
  563. *************************************************************************/
  564.  
  565. function corrigehtml($trecho) {
  566.     $transf = array("<i>" => "<em>", "</i>" => "</em>",
  567.             "<*>" => "<span class=\"marker\">", "</*>" => "</span>",
  568.             "<b>" => "<strong>", "</b>" => "</strong>",
  569.             "<tt>" => "<code>", "</tt>" => "</code>",
  570.             "<pre>" => "<pre><code>", "</pre>" => "</code></pre>" );
  571.     $trecho=strtr($trecho,$transf);
  572.     $trecho=preg_replace('/\[adsense\]/',substpostvars("%%BODYAD%%"),$trecho);
  573.     $trecho=preg_replace('/\[\/img\]/',"",$trecho);
  574.     $trecho=preg_replace('/\[(img[^]]*)]/',"<\\1><br>",$trecho);
  575.     // rodapés com [@@rod:xxxxtextoxxxx]
  576.     while (preg_match('/\[@@rod:[^]]*\]/',$trecho)) {
  577.         //inneficcient as hell
  578.         $contarod++;
  579.         $rod_ref=$contarod."_".normaliza(substpostvars("%%POSTTITLE%%"));
  580.         preg_match('/\[@@rod:([^\]]*)\]/',$trecho,$m);
  581.         $rodapes[$rod_ref]=$m[1];
  582.         $trecho=preg_replace('/\[@@rod:[^\]]*\]/',"<sup><a title=\"".removequotes(strip_tags($m[1]))."\" name=\"ret-$rod_ref\"class=rodape_link href=\"#$rod_ref\">$contarod</a></sup>",$trecho,1);    
  583.     }
  584.     $contarod=0;
  585.     if (count($rodapes)>0) {
  586.         $trecho.="<div id=\"rodapes\"><div id=\"rodapes_halfline\">&nbsp;</div><ol>";
  587.         foreach ($rodapes as $key => $value) {
  588.             $contarod++;
  589.             $trecho.="\n<li><a class=rodape_numero name=\"$key\">&nbsp;</a>$value <a href=\"#ret-$key\">↩</a></p>";
  590.         }
  591.         $trecho.="\n</ol></div><!--id-rodapes-->";
  592.     }
  593.    
  594.        
  595.     // chame aqui algum filtro externo desejado (exemplo: MarkDown)
  596.     return $trecho;
  597. }
  598.  
  599. function removequotes($s) {
  600.     return preg_replace('/"/',"&quot;",$s);
  601. }
  602.  
  603. function button($texto,$url) {
  604.     return("<a href=\"$url\" class=\"button\">$texto</a>");
  605. }
  606.  
  607.  
  608.  
  609. function buscaparagrafos($texto,$quantos=3,$limite=1000) {
  610.         //trim(cutonword(strip_tags(corrigehtml($POST['POSTBODY'])),350));
  611.         //:cntrl:
  612.     $texto=strip_tags(corrigehtml($texto));
  613.     $texto=substr($texto,0,$limite);
  614.     $texto=preg_replace('/\n(\n)+/',"\n\n",$texto);
  615.     $pars=explode("\n\n",$texto);
  616.     $texto="";
  617.     for ($i=0;$i<=$quantos;$i++) {
  618.         if ($i < count($pars)-1) $texto.="<p>".$pars[$i]."\n\n";
  619.     }  
  620.     $postbutton="(<a href=\"".blogparm('POSTSURLPREFIX').substpostvars('%%POSTURL%%')."\">&hellip;</a>) ".button("leia mais",blogparm('POSTSURLPREFIX').substpostvars('%%POSTURL%%'));
  621.     return $texto.$postbutton;
  622. }
  623.  
  624.  
  625.  
  626. function insereanunciocentral($texto) {
  627.         //trim(cutonword(strip_tags(corrigehtml($POST['POSTBODY'])),350));
  628.         //:cntrl:
  629.         // if defined... blogparm('CENTERAD')
  630.  
  631.   global $blogparms;
  632.   if (blogparm('CENTERAD')!="") {  
  633.     $pars=explode("\n",$texto);
  634.     $cp=count($pars);
  635.     if ($cp>50) {
  636.         // primeiro so conta
  637.         $i=20;
  638.         $contaparstotal=0;
  639.         while ($i<$cp-10) {
  640.               $i++;
  641.           if ((substr($pars[$i],0,3)=="<p>") || (substr($pars[$i],0,4)=="<li>")) {
  642.               $contaparstotal++;
  643.           }
  644.         }
  645.         // agora modifica
  646.         $i=20;
  647.         $contapars=0;
  648.         $inseriu=0;
  649.         while (($i<$cp-10) && ($inseriu==0)) {
  650.               $i++;
  651.           if ((substr($pars[$i],0,3)=="<p>") || (substr($pars[$i],0,4)=="<li>")) {
  652.               $contapars++;
  653.               // tanto o p quanto o li contam, mas só o p recebe a inserção
  654.               if (($contapars>=14) && ($contapars<$contaparstotal-5) && (substr($pars[$i],0,3)=="<p>")) {
  655.                 $inseriu=1;
  656.                 $pars[$i]="<!-- CENTERAD $i -->\n".$blogparms['CENTERAD'].$pars[$i];       
  657.               }
  658.           }
  659.         }
  660.     }
  661.     $texto=implode("\n",$pars);
  662. /* 
  663.     for ($i=0;$i<=$quantos;$i++) {
  664.         if ($i < count($pars)-1) $texto.="<p>".$pars[$i]."\n\n";
  665.     }  
  666.     $postbutton="(<a href=\"".blogparm('POSTSURLPREFIX').substpostvars('%%POSTURL%%')."\">&hellip;</a>) ".button("leia mais",blogparm('POSTSURLPREFIX').substpostvars('%%POSTURL%%'));
  667. */ 
  668.   }
  669.   return $texto;
  670. }
  671.  
  672.  
  673.  
  674.  
  675. function cutonword($trecho,$len) {
  676. // corta uma string na primeira frase concluída após o 80º caracter --
  677. // ou no limite de uma palavra, dentro de um tamanho máximo
  678.     $trecho.=" ";
  679.     if(strlen($trecho)<=$len) return $trecho;
  680.     $trecho=strip_tags(preg_replace('/[[:cntrl:]]/'," ",$trecho));
  681.     $trecho=preg_replace('/[[:blank:]][^[:blank:]]+$/','',substr($trecho,0,$len-5));
  682.     $trecho=preg_replace('/([.?!])[^.?!]*$/','\\1',$trecho);
  683.     $postbutton="";
  684.     if ($len <= 250) {
  685.         $trecho=preg_replace('/(.{79}[^.?!]*[.?!]) .*$/','\1',substr($trecho,0,$len-5));
  686.         //$postbutton=" (...)";
  687.     }  
  688.     else $postbutton="(<a href=\"".blogparm('POSTSURLPREFIX').substpostvars('%%POSTURL%%')."\">&hellip;</a>) ".button("leia mais",blogparm('POSTSURLPREFIX').substpostvars('%%POSTURL%%'));
  689.     $trecho=preg_replace('/[[:cntrl:]]/',"",$trecho);
  690.     return trim($trecho.$postbutton);
  691. }
  692.  
  693. function s_rss($saida)   {
  694. // Sanitiza uma string de saída para o feed rss
  695.     $saida=htmlentities($saida, ENT_QUOTES|ENT_DISALLOWED|ENT_XML1, 'UTF-8');
  696.     return $saida;
  697. }  
  698.  
  699.  
  700. function normaliza($string,$extra="") {
  701. // tks allixsenos
  702.     $table = array(
  703.         'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
  704.         'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
  705.         'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
  706.         'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
  707.         'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
  708.         'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
  709.         'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
  710.         'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r', ' '=>'-'
  711.     );  
  712.     $string=strtolower(strtr(trim($string), $table));
  713.     $string=preg_replace('/&#[^;]{1,4};/',"",$string);
  714.     $expr="/[^-A-Za-z0-9$extra]/";
  715.     $string=preg_replace($expr,"",$string);
  716.     $string=preg_replace('/-+/',"-",$string);
  717.     return $string;
  718. }
  719.  
  720.  
  721. function preg_quebras($quebras) {
  722. // chamada pela função paragrafos()
  723.     $conv=str_replace("\n", "<xXzZ />", $quebras[0]);
  724.     return($conv);
  725. }
  726.  
  727. function paragrafos($trecho) {
  728. // insere <p> onde houver dupla quebra.
  729. // Tks André Tobias && http://ma.tt/2003/01/updated-autop/
  730.     if ( (blogparm('BREAKLINES') === false) || (trim($trecho) === '') ) return '';
  731.     $trecho = $trecho . "\n";
  732.     $blocos_pre = array();
  733.     // remove o conteúdo de todos os blocos <pre> e guarda num array, para reinserir depois
  734.     if ( strpos($trecho, '<pre') !== false ) {
  735.         $trecho_sub = explode( '</pre>', $trecho );
  736.         $par_end = array_pop($trecho_sub);
  737.         $trecho = '';
  738.         $i = 0;
  739.         foreach ( $trecho_sub as $trecho_part ) {
  740.             $start = strpos($trecho_part, '<pre');
  741.             if ( $start === false ) {
  742.                 $trecho .= $trecho_part;
  743.                 continue;
  744.             }
  745.             $name = "<pre bloco-$i></pre>";
  746.             $blocos_pre[$name] = substr( $trecho_part, $start ) . '</pre>';
  747.             $trecho .= substr( $trecho_part, 0, $start ) . $name;
  748.             $i++;
  749.         }
  750.         $trecho .= $par_end;
  751.     }
  752.     $pipe="|"; 
  753.     // troca quebras sucessivas em HTML por ASCII
  754.     $trecho = preg_replace('|<br />\s*<br />|', "\n\n", $trecho);
  755.     // insere uma quebra antes de cada bloco, 2 quebras depois
  756.     $bloqueiras="p;ul;ol;li;dd;dt;dl;div;hr;blockquote;h1;h2;h3;h4;h5;h6;pre;fieldset;form;option;select;map;area;table;tr;td;thead;tfoot;caption;tbody;math;style";
  757.     $bloqueiras="(?:".strtr($bloqueiras,";",$pipe).")";
  758.     $bigblocks='form|div|address';
  759.     $smallblocks='pre|p|ul|ol|li|td|div|dl|dd|dt|th';
  760.     $trecho = preg_replace('!(<' . $bloqueiras . '[^>]*>)!', "\n$1", $trecho);
  761.     $trecho = preg_replace('!(</' . $bloqueiras . '>)!', "$1\n\n", $trecho);
  762.     // substitui quebras MS-DOS por quebras UNIX, trata quebras múltiplas (2 ou +)
  763.     $trecho = str_replace(array("\r\n", "\r"), "\n", $trecho);
  764.     $trecho = preg_replace("/\n\n+/", "\n\n", $trecho);
  765.  
  766.     // divide os parágrafos (.*\n\n) em um array
  767.     $trechos = preg_split('/\n\s*\n/', $trecho, -1, PREG_SPLIT_NO_EMPTY);
  768.     $trecho = '';
  769.  
  770.     // marca todo paragrafo como <p>.*</p> 
  771.     foreach ( $trechos as $paragrafo )
  772.         $trecho .= '<p>' . trim($paragrafo, "\n") . "</p>\n";
  773.  
  774.     // remove parágrafos vazios
  775.     $trecho = preg_replace('|<p>\s*</p>|', '', $trecho);
  776.    
  777.     // casos especiais em que o <p> precisa ser movido ou removido
  778.     $trecho = preg_replace(';<p>([^<]+)</('.$bigblocks.')>;',"<p>$1</p></$2>", $trecho);
  779.     $trecho = preg_replace(";<p>(<li.+?)</p>;","$1",$trecho);
  780.     $trecho = preg_replace(';<p><blockquote([^>]*)>;i',"<blockquote$1><p>",$trecho);
  781.     $trecho = str_replace('</blockquote></p>','</p></blockquote>', $trecho);
  782.     $trecho = preg_replace(';<p>\s*(</?'.$bloqueiras.'[^>]*>)\s*</p>;',"$1",$trecho);
  783.     $trecho = preg_replace(';<p>\s*(</?'.$bloqueiras.'[^>]*>);',"$1",$trecho);
  784.     $trecho = preg_replace(';(</?'.$bloqueiras.'[^>]*>)\s*</p>;',"$1", $trecho);
  785.     // remonta o trecho
  786.     $trecho = preg_replace_callback(';<(script|style).*?<\/\\1>;s','preg_quebras',$trecho);
  787.     $trecho = preg_replace(';(?<!<br />)\s*\n;',"<br />\n",$trecho);
  788.     $trecho = str_replace('<xXzZ />',"\n", $trecho);
  789.     $trecho = preg_replace(';(</?'.$bloqueiras.'[^>]*>)\s*<br />;',"$1",$trecho);
  790.     $trecho = preg_replace(';<br />(\s*</?(?:'.$smallblocks.')[^>]*>);','$1',$trecho);
  791.     $trecho = preg_replace( ";\n</p>$;",'</p>', $trecho );
  792.     if (0<count($blocos_pre) )
  793.         $trecho = str_replace(array_keys($blocos_pre), array_values($blocos_pre), $trecho);
  794.     return $trecho;
  795. }
  796.  
  797.  
  798. /************************************************************************
  799.                 Funções de agendamento e priorização de posts
  800. *************************************************************************/
  801.  
  802. function verifica_agendamentos() {
  803. // verifica se no draftsdir tem algum artigo agendado para ser postado hoje, e
  804. // se o horário dele já chegou. Se sim, retorna o nome do PRIMEIRO
  805. // artigo nesta situação.
  806.     $arquivos=glob(blogparm('DRAFTSDIR')."@*.php");
  807.     if (isset($arquivos[0])) {
  808.         $horario=preg_split('/[-_]/',basename($arquivos[0]));
  809.         $horario[0]=preg_replace('/@/',"",$horario[0]);
  810.         if ((0+date("j")) == (0+$horario[0])) {
  811.             if (((0+date("G")) > (0+$horario[1])) || (((0+date("G")) >= (0+$horario[1])) && ((0+date("i")) >= (0+$horario[2])))) {
  812.                 return(basename($arquivos[0]));
  813.             }
  814.         }
  815.     }
  816. }
  817.  
  818. function simula_prioridades($hora,$intervalo) {
  819. // mostra em que horários seriam postados cada um dos posts priorizados
  820. // presentes no DRAFTSDIR, a partir da $hora, a cada $intervalo minutos.
  821.     $minutos=0;
  822.     $arquivos=glob(blogparm('DRAFTSDIR')."PRI??_*.php");
  823.     foreach ($arquivos as $item) {
  824.         $h=$hora+floor($minutos/60);
  825.         $m=$minutos % 60;
  826.         echo sprintf("%02d:%02d %-60s\n",$h,$m,$item);
  827.         $minutos += $intervalo;
  828.     }
  829. }
  830.  
  831. function verifica_prioritarios() {
  832. // verifica se no draftsdir tem algum artigo com prioridade definida para ser postado
  833. // e retorna o nome do PRIMEIRO (ou seja, o de menor prioridade) artigo nesta situação.
  834.     $arquivos=glob(blogparm('DRAFTSDIR')."PRI??_*.php");
  835.     if (isset($arquivos[0])) return(basename($arquivos[0]));
  836. }
  837.  
  838.  
  839. function agenda_post($dia,$hora,$minuto,$post) {
  840. // agenda um draft para ir ao ar no dia e horário mencionado
  841.     $arquivo=blogparm('DRAFTSDIR').$post;
  842.     if (!is_file($arquivo)) {
  843.         axe_error('Não existe o arquivo '.$arquivo,E_USER_ERROR);
  844.         die;
  845.     }
  846.     $novonome=blogparm('DRAFTSDIR')."@$dia-$hora-$minuto_$post";
  847.     rename($arquivo,$novonome);
  848.     dmsg("Agendei post para dia $dia ($hora:$minuto): $post");
  849. }
  850.  
  851.  
  852. /************************************************************************
  853.                 Funções de notificação
  854. *************************************************************************/
  855.  
  856. function verifica_notificacoes() {
  857. // verifica se no draftsdir tem alguma notificacao agendada para ser postada hoje, e
  858. // se o horário dela já chegou. Se sim, imprime na saída padrão o conteúdo da PRIMEIRA
  859. // notificação nesta situação.
  860.     $arquivos=glob(blogparm('DRAFTSDIR')."N@*.txt");
  861.     if (isset($arquivos[0])) {
  862.         $horario=preg_split('/[-_]/',basename($arquivos[0]));
  863.         $horario[0]=preg_replace('/N@/',"",$horario[0]);
  864.         //echo date("j")." ".date("G")." ".date("i")."\n";
  865.         //echo "$horario[0] $horario[1] $horario[2]\n";
  866.         if ((0+date("j")) == (0+$horario[0])) {
  867.             if (((0+date("G")) > (0+$horario[1])) || (((0+date("G")) >= (0+$horario[1])) && ((0+date("i")) >= (0+$horario[2])))) {
  868.                 echo("@@NOTIFY:".trim(file_get_contents($arquivos[0])));
  869.                 rename($arquivos[0],blogparm('DRAFTSDIR').'old/'.basename($arquivos[0]));
  870.             }
  871.         }
  872.     }
  873. }
  874.  
  875. function sched_notify_post() {
  876. // agenda as notificações de UM post
  877.     global $notifyparms;
  878.     if (isset($notifyparms['NOTIFYCMD'])) {
  879.         $hoje=date("j");
  880.         $novo="";
  881.         $amanha=date("j",time()+86400);
  882.         $i=0;
  883.         $q=0;
  884.         $h=date("G")+0;
  885.         $m=date("i")+0;
  886.         $txt=substpostvars('%%POSTTWIT%%');
  887.         foreach($notifyparms['NOTIFYTIMES'] as $twh) {     
  888.             $hh=0+floor($twh/100);
  889.             $hm=0+$twh%100;
  890.             // if (($hh>$h) || (($hh==$h) && ($hm>=$m))) {
  891.             if (1==1) {
  892.                 $q++;
  893.                 // novo esquema multilinhas, não usa mais os "notifymsgs" do arquivo conf
  894.                 sched_one_notification($amanha,$hh,$hm,"%S$q%$txt");
  895.                 // sched_one_notification($hoje,$hh,$hm,"%S$q%$txt");
  896.                 /*
  897.                 if ($novo=="") {
  898.                     $novo="Novo post: ";
  899.                     sched_one_notification($hoje,$hh,$hm,"$novo$txt");
  900.                 }
  901.                 else {
  902.                     sched_one_notification($hoje,$hh,$hm,$notifyparms['NOTIFYMSGS'][$i]."$txt");
  903.                 }  
  904.                 */
  905.             }
  906.             $i++;
  907.         }
  908.     }
  909. }
  910.  
  911. function sched_one_notification($dia,$hora,$minuto,$texto) {
  912. // agenda UMA notificacao para ir ao ar no dia e horário mencionado
  913.     $notifyid=normaliza(substr($texto,0,30));
  914.     $dia=sprintf("%02d",$dia);
  915.     $hora=sprintf("%02d",$hora);
  916.     $minuto=sprintf("%02d",$minuto);
  917.     $novonome=blogparm('DRAFTSDIR')."N@$dia-$hora-".$minuto."_$notifyid.txt";
  918.     file_put_contents($novonome,$texto);   
  919.     dmsg("Agendei notificação para dia $dia ($hora:$minuto): $texto");
  920. }
  921.  
  922.  
  923. function do_notify_post($texto) {
  924. // executa uma notificação de post - esta função nunca é chamada na configuração default do Axe
  925.     global $notifyparms;
  926.     if (isset($notifyparms['NOTIFYCMD'])) {
  927.         system(escapeshellcmd($notifyparms['NOTIFYCMD']."'$texto'"));
  928.     }
  929. }
  930.  
  931.  
  932.  
  933.  
  934. /************************************************************************
  935.                 Funções do quadro de destaques
  936. *************************************************************************/
  937.  
  938. function carrega_destaques() {
  939. // lê e ordena aleatoriamente o catálogo da tag destaques
  940.     global $DESTAQUE;
  941.     $catdestaque=blogparm('INPUTDIR')."tags/catalog-destaques.txt";
  942.     if(is_file($catdestaque)) {
  943.         $DESTAQUE=file($catdestaque);  
  944.         foreach($DESTAQUE as $k => $v) {
  945.             $DESTAQUE[$k]=rand(0,10000).";;".$v;
  946.         }  
  947.     }
  948. }
  949.  
  950. function quadro_destaques() {
  951.     global $DESTAQUE;
  952.     $r=""; //count($DESTAQUE);
  953.     if(count($DESTAQUE)>6) {
  954.         $randkeys=array_rand($DESTAQUE,3);
  955.         $inicio=0; // rand(0,count($DESTAQUE)-3);
  956.         $r='<div class="quadrodestaque">';
  957.         for($i=$inicio;$i<=$inicio+2;$i++) {
  958.             $l=preg_split('/;;/',$DESTAQUE[$randkeys[$i]]);
  959.             $l[2]=preg_replace('/\.php$/',".html",$l[2]);
  960.             $linha='<div class=umdestaque><a href="'.blogparm('BLOGURL').$l[2].'">';
  961.             $linha.='<img style="width:100%" src="'.$l[6].'"><div style="legendadestaque">'.$l[4].'</div></a></div>';          
  962.             $r.=$linha;
  963.         }
  964.         $r.='</div>';
  965.     }
  966.     return $r;
  967. }
  968.  
  969.  
  970.  
  971. /************************************************************************
  972.                 Funções de tratamento de arquivos
  973. *************************************************************************/
  974.  
  975. function try_file_get_contents($file) {
  976.     $s="";
  977.     if (is_readable($file)) $s=file_get_contents($file);
  978.     return $s;
  979. }
  980.  
  981.  
  982. function criasymlink($nome,$numero) {
  983. // cria um symlink numérico pros posts importados do WordPress
  984.     $dir=blogparm('POSTSDIR')."links/";
  985.     $link=$dir.'link-'.$numero.".html";
  986.     if (is_link($link)) {
  987.         unlink($link);
  988.     }
  989.     symlink(blogparm('POSTSDIR').$nome, $link);
  990.     decho("Criei o link $link para $nome");
  991.     $redir=$dir.'post-'.$numero.".php";
  992.     $linha='<?php header("HTTP/1.1 301 Moved Permanently"); Header("Location: '.blogparm('BLOGURL').$nome.'"); ?>';
  993.     file_put_contents($redir, $linha, LOCK_EX);
  994.     decho("Criei o redirect $redir");     // para ".blogparm('BLOGURL')."$nome");
  995. }
  996.  
  997. function apagasymlink($nome,$numero) {
  998. // apaga symlink numérico de post importado do WordPress (ao removê-lo)
  999.     $dir=blogparm('POSTSDIR')."links/";
  1000.     $link=$dir.'link-'.$numero.".html";
  1001.     if (is_link($link)) {
  1002.         unlink($link);
  1003.         decho("Apaguei o link $link de $nome");
  1004.     }
  1005.     $redir=$dir.'post-'.$numero.".php";
  1006.     if (is_link($redir)) {
  1007.         unlink($redir);
  1008.         decho("Apaguei o redirect $redir de $nome");
  1009.     }
  1010.    
  1011. }
  1012.  
  1013. function move_oldfile($fullpath) {
  1014. // cria um symlink numérico pros posts importados do WordPress
  1015.     global $quiet;
  1016.     $dest=preg_replace('/\/([^\/]+)$/',"/old/\\1",$fullpath);
  1017.     rename($fullpath, $dest);
  1018.     decho("Renomeei o arquivo de entrada para $dest");
  1019. }
  1020.  
  1021.  
  1022. function gravaarquivonaraiz($nome,$conteudo) {
  1023. // grava um arquivo atomicamente na raiz do blog (para indices, tags, feed)
  1024.     global $quiet;
  1025.     global $sparsedebug;
  1026.     static $contamensagens;
  1027.     $gravoumesmo=false;
  1028.     $dir=blogparm('POSTSDIR');
  1029.     $nome=basename($nome);
  1030.     $gravar=true;
  1031.     $fp = fopen($dir.$nome.".temp", 'w');
  1032.     if ($fp) {
  1033.         if (fwrite($fp, $conteudo)) {
  1034.             if (fclose($fp)) {
  1035.                 if (rename($dir.$nome.".temp", $dir.$nome)) {
  1036.                     $gravoumesmo=true;
  1037.                     $mostramensagem=!$quiet;
  1038.                     if ($sparsedebug==1) {
  1039.                         if (($contamensagens % 10)>0) $mostramensagem=false;
  1040.                         $contamensagens++;
  1041.                     }  
  1042.                     if ($mostramensagem) decho("Gravei o arquivo ".$nome);
  1043.                 } else axe_error('Não consegui renomear '.$nome,E_USER_ERROR);
  1044.             } else axe_error('Não consegui fechar '.$nome,E_USER_ERROR);
  1045.         } else axe_error('Não consegui gravar '.$nome,E_USER_ERROR);  
  1046.     } else axe_error('Não consegui abrir para gravar '.$nome,E_USER_ERROR);   
  1047.     return($gravoumesmo);
  1048. }
  1049.  
  1050. function grava_postsrecentes($postsrecentes) {
  1051. // cria um quadro de posts recentes para uso em temas - #2014
  1052.     //$postsrecentes="<div id=quadropostsrecentes><ul>\n".$postsrecentes."</ul></div>\n";
  1053.     gravaarquivonaraiz("recentes.html",$postsrecentes);
  1054.     setquadrorecentes($postsrecentes);
  1055. }
  1056.  
  1057.  
  1058. function gravaarquivohtml($nome,$conteudo,$force = false,$preview=false) {
  1059. // grava um arquivo atomicamente, para uso no postsdir e previewdir
  1060.     global $quiet;
  1061.     global $sparsedebug;
  1062.     static $contamensagens;
  1063.     $gravoumesmo=false;
  1064.     $nome=preg_replace('/%[0-9A-Fa-f][0-9A-Fa-f]/',"",$nome);
  1065.     if ($preview) $fullnome=blogparm('PREVIEWDIR').$nome;
  1066.     else $fullnome=blogparm('POSTSDIR').$nome;
  1067.     $dir=dirname($fullnome);
  1068.     if (!is_dir($dir)) {
  1069.         if (mkdir($dir,0755,true)) {
  1070.             decho('Criei diretório '.$dir);
  1071.         } else axe_error('Não consegui criar dir '.$dir,E_USER_ERROR);
  1072.     }  
  1073.     $gravar=true;
  1074.     // verifica se existe o mesmo arquivo nos fontes, e se é mais novo.
  1075.     // sem espertezas booleanas, para ficar mais clara a condição.
  1076.     if (!($force || $preview)) {
  1077.         $possivelfonte=preg_replace('/\.html$/',".php",blogparm('INPUTDIR').'posts/'.$nome);
  1078.         if (is_file($possivelfonte)) {
  1079.             $tempofonte=filectime($possivelfonte);
  1080.             if ($tempofonte) {
  1081.                 if (is_file($fullnome)) {
  1082.                     $tempodestino=filectime($fullnome);
  1083.                     if ($tempodestino) {
  1084.                         if ($tempodestino > $tempofonte) {
  1085.                             $gravar=false;
  1086.                             //decho('Nao precisei regravar '.$fullnome);
  1087.                         }
  1088.                     }
  1089.                 }
  1090.             }  
  1091.         }
  1092.     }  
  1093.     if ($gravar || $force) {   
  1094.         $fp = fopen($fullnome.".temp", 'w');
  1095.         if ($fp) {
  1096.             if (fwrite($fp, $conteudo)) {
  1097.                 if (fclose($fp)) {
  1098.                     if (rename($fullnome.".temp", $fullnome)) {
  1099.                         decho('Gravei '.$fullnome);
  1100.                         //if ($force) echo "\nGravado: ".blogparm('BLOGROOT').$fullnome;
  1101.                         $gravoumesmo=true;
  1102.                         $mostramensagem=!$quiet;
  1103.                         if ($sparsedebug==1) {
  1104.                             if (($contamensagens % 10)>0) $mostramensagem=false;
  1105.                             $contamensagens++;
  1106.                         }  
  1107.                         if ($mostramensagem) decho("Gravei o arquivo ".$fullnome);
  1108.                     } else axe_error('Não consegui renomear: '.$fullnome,E_USER_ERROR);   
  1109.                 } else axe_error('Não consegui fechar '.$fullnome,E_USER_ERROR);
  1110.             } else axe_error('Não consegui gravar '.$fullnome,E_USER_ERROR);  
  1111.         } else axe_error('Não consegui abrir para gravar '.$fullnome,E_USER_ERROR);   
  1112.     }  
  1113.     return($gravoumesmo);
  1114. }
  1115.  
  1116.  
  1117. function gravaarquivo($nome,$conteudo,$force = false) {
  1118. // grava um arquivo atomicamente dentro do blogroot
  1119.     global $quiet;
  1120.     global $sparsedebug;
  1121.     static $contamensagens;
  1122.     $nome=preg_replace('/%[0-9A-Fa-f][0-9A-Fa-f]/',"",$nome);  
  1123.     $gravoumesmo=false;
  1124.     $dir=dirname($nome);
  1125.     if (!is_dir(blogparm('BLOGROOT').$dir)) {
  1126.         if (mkdir(blogparm('BLOGROOT').$dir,0755,true)) {
  1127.             decho('Criei diretório '.blogparm('BLOGROOT').$dir);
  1128.         } else axe_error('Não consegui criar dir '.blogparm('BLOGROOT').$dir,E_USER_ERROR);   
  1129.     }  
  1130.     $gravar=true;
  1131.     // verifica se existe o mesmo arquivo nos fontes, e se é mais novo.
  1132.     // sem espertezas booleanas, para ficar mais clara a condição.
  1133.     if (!$force) {
  1134.         $possivelfonte=preg_replace('/\.html$/',".php",blogparm('INPUTDIR').$nome);
  1135.         if (is_file($possivelfonte)) {
  1136.             $tempofonte=filectime($possivelfonte);
  1137.             if ($tempofonte) {
  1138.                 if (is_file(blogparm('BLOGROOT').$nome)) {
  1139.                     $tempodestino=filectime(blogparm('BLOGROOT').$nome);
  1140.                     if ($tempodestino) {
  1141.                         if ($tempodestino > $tempofonte) {
  1142.                             $gravar=false;
  1143.                             //decho('Nao precisei regravar '.blogparm('BLOGROOT').$nome);
  1144.                         }
  1145.                     }
  1146.                 }
  1147.             }  
  1148.         } else axe_error("Não encontrei $possivelfonte");  
  1149.     }  
  1150.     if ($gravar || $force) {   
  1151.         $fp = fopen(blogparm('BLOGROOT').$nome.".temp", 'w');
  1152.         if ($fp) {
  1153.             if (fwrite($fp, $conteudo)) {
  1154.                 if (fclose($fp)) {
  1155.                     if (rename(blogparm('BLOGROOT').$nome.".temp", blogparm('BLOGROOT').$nome)) {
  1156.                         decho('Gravei '.blogparm('BLOGROOT').$nome);
  1157.                         //if ($force) echo "\nGravado: ".blogparm('BLOGROOT').$nome;
  1158.                         $gravoumesmo=true;
  1159.                         $mostramensagem=!$quiet;
  1160.                         if ($sparsedebug==1) {
  1161.                             if (($contamensagens % 10)>0) $mostramensagem=false;
  1162.                             $contamensagens++;
  1163.                         }  
  1164.                         if ($mostramensagem) decho("Gravei o arquivo ".blogparm('BLOGROOT').$nome);
  1165.                     } else axe_error('Não consegui renomear '.blogparm('BLOGROOT').$nome,E_USER_ERROR);   
  1166.                 } else axe_error('Não consegui fechar '.blogparm('BLOGROOT').$nome,E_USER_ERROR);
  1167.             } else axe_error('Não consegui gravar '.blogparm('BLOGROOT').$nome,E_USER_ERROR); 
  1168.         } else axe_error('Não consegui abrir para gravar '.blogparm('BLOGROOT').$nome,E_USER_ERROR);  
  1169.     }  
  1170.     return($gravoumesmo);
  1171. }
  1172.  
  1173.  
  1174. function gravadescriptor($nome,$conteudo,$force=false) {
  1175. // grava um arquivo atomicamente, para uso no postsdir e previewdir
  1176.     global $quiet;
  1177.     global $sparsedebug;
  1178.     static $contamensagens;
  1179.     $gravoumesmo=false;
  1180.     $fullnome=blogparm('INPUTDIR').'posts/'.$nome;
  1181.     $dir=dirname($fullnome);
  1182.     if (!is_dir($dir)) {
  1183.         if (mkdir($dir,0755,true)) {
  1184.             decho('Criei diretório '.$dir);
  1185.         } else axe_error('Não consegui criar dir '.$dir,E_USER_ERROR);
  1186.     }  
  1187.     $gravar=true;
  1188.     // verifica se existe o mesmo arquivo nos fontes, e se é mais novo.
  1189.     // sem espertezas booleanas, para ficar mais clara a condição.
  1190.     if (!($force || $preview)) {
  1191.         $possivelfonte=preg_replace('/\.html$/',".php",blogparm('INPUTDIR').'posts/'.$nome);
  1192.         if (is_file($possivelfonte)) {
  1193.             $tempofonte=filectime($possivelfonte);
  1194.             if ($tempofonte) {
  1195.                 if (is_file($fullnome)) {
  1196.                     $tempodestino=filectime($fullnome);
  1197.                     if ($tempodestino) {
  1198.                         if ($tempodestino > $tempofonte) {
  1199.                             $gravar=false;
  1200.                             //decho('Nao precisei regravar '.$fullnome);
  1201.                         }
  1202.                     }
  1203.                 }
  1204.             }  
  1205.         } else axe_error("Não encontrei $possivelfonte");  
  1206.     }  
  1207.     if ($gravar || $force) {   
  1208.         $fp = fopen($fullnome.".temp", 'w');
  1209.         if ($fp) {
  1210.             if (fwrite($fp, $conteudo)) {
  1211.                 if (fclose($fp)) {
  1212.                     if (rename($fullnome.".temp", $fullnome)) {
  1213.                         decho('Gravei '.$fullnome);
  1214.                         //if ($force) echo "\nGravado: ".blogparm('BLOGROOT').$fullnome;
  1215.                         $gravoumesmo=true;
  1216.                         $mostramensagem=!$quiet;
  1217.                         if ($sparsedebug==1) {
  1218.                             if (($contamensagens % 10)>0) $mostramensagem=false;
  1219.                             $contamensagens++;
  1220.                         }  
  1221.                         if ($mostramensagem) decho("Gravei o arquivo ".$fullnome);
  1222.                     } else axe_error('Não consegui renomear: '.$fullnome,E_USER_ERROR);   
  1223.                 } else axe_error('Não consegui fechar '.$fullnome,E_USER_ERROR);
  1224.             } else axe_error('Não consegui gravar '.$fullnome,E_USER_ERROR);  
  1225.         } else axe_error('Não consegui abrir para gravar '.$fullnome,E_USER_ERROR);   
  1226.     }  
  1227.     return($gravoumesmo);
  1228. }
  1229.  
  1230.  
  1231. function lista_arquivos_processaveis($titulo,$fullpath,$comando="") {
  1232.     if (strlen($comando)>1) $comando.=" ";
  1233.     echo "Informe um nome de arquivo como parâmetro.\n\n";
  1234.     echo "$titulo\n";
  1235.     $arqs=scandir($fullpath);
  1236.     foreach ($arqs as $k) {
  1237.         if ((substr($k,0,1) != ".") && (substr($k,-1,1) != "~") && ($k != "old")) echo "$comando$k\n";       
  1238.     }
  1239.     echo "--fim\n";
  1240. }
  1241.  
  1242.  
  1243. /************************************************************************
  1244.                 Funções do catálogo de posts
  1245. *************************************************************************/
  1246.  
  1247. function loadpostvars_fromcatalog($fpost) {
  1248. // carrega as variáveis do template de posts diretamente a partir do catálogo
  1249.     global $POST;
  1250.     $k=preg_split('/;;/',$fpost);  
  1251.     $POST['POSTNAME']=preg_replace('/.*\/([^.]*)\.php.*/',"\\1",$k[1]);
  1252.     $POST['POSTTIME']=$k[2];
  1253.     $POST['POSTTITLE']=$k[3];
  1254.     $POST['POSTBODY']=$k[4];
  1255.     //print_r($POST);
  1256.     if (strlen($k[5])>=4) $POST['POSTICON']=$k[5];
  1257.     loadpostvars();
  1258.     //decho($transfpost["%%POSTMID%%"]);   
  1259.        
  1260. }
  1261.  
  1262. function catalog_add($nome,$conteudo) {
  1263. // adiciona uma entrada a um dos catalogos de posts na pasta descriptors
  1264.     $file = blogparm('INPUTDIR')."$nome";  
  1265.     $conteudo=preg_replace('/[[<[:cntrl:]]]/',"",$conteudo);
  1266.     file_put_contents($file, $conteudo, FILE_APPEND | LOCK_EX);
  1267.     decho("Adicionei um post ao catálogo blogparm('BLOGROOT').$nome;");
  1268. }
  1269.  
  1270. function catalog_replace($nome,$conteudo) {
  1271. // substitui uma entrada em um dos catalogos de posts na pasta descriptors
  1272.     global $sparsedebug;
  1273.     $s=$sparsedebug;
  1274.     $sparsedebug=0;
  1275.     $conteudo=preg_replace('/[[<[:cntrl:]]]/',"",$conteudo);
  1276.     $k=preg_split('/;;/',$conteudo);
  1277.     $caminho=$k[1];
  1278.     catalog_del($caminho,$nome);
  1279.     $file = blogparm('INPUTDIR')."$nome";  
  1280.     file_put_contents($file, $conteudo, FILE_APPEND | LOCK_EX);
  1281.     decho("Adicionei um post ao catálogo blogparm('BLOGROOT').$nome;");
  1282.     $sparsedebug=$s;
  1283. }
  1284.  
  1285. function catalog_del($caminho,$catname) {
  1286. // apaga um post com este nome que exista no catálogo mencionado
  1287.     if (!is_readable(blogparm('INPUTDIR').$catname)) {
  1288.         axe_warning("catalog_del: não existe o arquivo ".blogparm('INPUTDIR').$catname);
  1289.         return;
  1290.     }
  1291.     $catalogo=file(blogparm('INPUTDIR').$catname);
  1292.     $nome=preg_replace('/\.html$/',".php",$caminho);
  1293.     if (substr($nome,-4)!=".php") $nome=$nome.".php";
  1294.     foreach($catalogo as $k => $v) {
  1295.         if (strpos($v,$caminho)) {
  1296.             decho("Apagando a linha $k em $catname: $v");
  1297.             unset($catalogo[$k]);
  1298.         }
  1299.     }
  1300.     file_put_contents(blogparm('INPUTDIR').$catname,$catalogo,LOCK_EX);
  1301. }
  1302.  
  1303. function already_exists($name) {
  1304. // verifica se um post com o mesmo nome já existe no catálogo principal
  1305.     if (!is_readable(blogparm('INPUTDIR')."posts/catalog.txt")) return false;
  1306.     $catalogo=file(blogparm('INPUTDIR')."posts/catalog.txt");
  1307.     $busca="/\/$name.php/";
  1308.     $match=preg_grep($busca,$catalogo);
  1309.     return(count($match)>0);
  1310. }
  1311.  
  1312.  
  1313. function rebuild_catalogs() {
  1314.     // utilitario para recriar os catalogos de posts e de tags caso sejam corrompidos
  1315.     $raiz=blogparm('INPUTDIR')."posts/";
  1316.     $raiztags=blogparm('INPUTDIR')."tags/";
  1317.     dmsg("Reconstruindo catálogos em $raiz");
  1318.     foreach(glob($raiz."????",GLOB_ONLYDIR) as $ano) {
  1319.         dmsg("Posts do diretório $ano");
  1320.         foreach(glob($ano."/??",GLOB_ONLYDIR) as $mes) {
  1321.             dmsg($mes");
  1322.             foreach(glob($mes."/*.php") as $arq) {
  1323.                 dmsg("      $arq");
  1324.                 include $arq;
  1325.                 $short=cutonword(strip_tags(corrigehtml($POST['POSTBODY'])),250);
  1326.                 $short=preg_replace('/[[:cntrl:]]/',"",$short);
  1327.                 if (blogparm('YEARLY')=="01") {
  1328.                     $anomes=date("Y/",strtotime($POST["POSTTIME"]))."01/";
  1329.                 } else {
  1330.                     $anomes=date("Y/m/",strtotime($POST["POSTTIME"]));
  1331.                 }  
  1332.                 $linha=date("Y/m/d-H:i:s",strtotime($POST["POSTTIME"])).";;";
  1333.                 $linha.=$anomes.trim($POST["POSTNAME"]).".php;;".$POST["POSTTIME"].";;".$POST["POSTTITLE"].";;";
  1334.                 $linha.=$short.";;".$POST["POSTICON"].";;".time()."\n";
  1335.                 dmsg($linha);
  1336.                 // grava no catálogo geral
  1337.                 if (!isset($iabertos["catalog.txt"])) {
  1338.                     $maincat=fopen($raiz."catalog.txt","w");
  1339.                     $iabertos["catalog.txt"]=$maincat;
  1340.                 }
  1341.                 fputs($maincat,$linha);            
  1342.                 // grava no catalogo do mês
  1343.                 if (!isset($iabertos[$anomes."catalog.txt"])) {
  1344.                     $xcat=fopen($raiz.$anomes."catalog.txt","w");
  1345.                     $iabertos[$anomes."catalog.txt"]=$xcat;
  1346.                 }
  1347.                 dmsg("Gravando: ".$raiz.$anomes."catalog.txt");
  1348.                 fputs($iabertos[$anomes."catalog.txt"],$linha);            
  1349.  
  1350.                 // tags            
  1351.                 $tags=$POST["POSTTAGS"];
  1352.                 $tags=preg_replace('/[[:space:]]/',"",$tags);
  1353.                 foreach(explode(",",$tags) as $tag) {
  1354.                     if(0<strlen($tag)) {
  1355.                         dmsg("tag: $tag");
  1356.                         if (!isset($iabertos["tags/catalog-$tag.txt"])) {
  1357.                             $xcat=fopen($raiztags."catalog-$tag.txt","w");
  1358.                             $iabertos["tags/catalog-$tag.txt"]=$xcat;
  1359.                         }
  1360.                         fputs($iabertos["tags/catalog-$tag.txt"],$linha);                              
  1361.                     }
  1362.                 }
  1363.             }
  1364.         }
  1365.     }              
  1366.     foreach($iabertos as $k=>$m) {
  1367.         dmsg("Fechando: $k");
  1368.         fclose($m);
  1369.     }
  1370. }
  1371.  
  1372.  
  1373.  
  1374.  
  1375. /************************************************************************
  1376.                 Funções de sitemap
  1377. *************************************************************************/
  1378.  
  1379. function sitemap_entry($loc,$last="",$pri="0.5") {
  1380.     $s="        <url>\n";
  1381.     $s.="           <loc>$loc</loc>\n";
  1382.     if ($last) {
  1383.         $last=preg_replace('/\//',"-",$last);
  1384.         $s.="           <lastmod>$last</lastmod>\n";
  1385.     }  
  1386.     if ($pri)  $s.="            <priority>$pri</priority>\n";
  1387.     $s.='       </url>'."\n";      
  1388.     return $s;
  1389. }
  1390.  
  1391. function sitemap() {
  1392.     global $blogparms;
  1393.     $postsfiles=file(blogparm('INPUTDIR').'posts/'."catalog.txt",FILE_IGNORE_NEW_LINES);
  1394.     sort($postsfiles);
  1395.     $contaitems=0;
  1396.     $item='<?xml version="1.0" encoding="UTF-8"?>
  1397.     <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";
  1398.     for ($i=count($postsfiles)-1; $i >=0; $i--) {
  1399.         $fpost=$postsfiles[$i];
  1400.         unset($GLOBALS['POST']);
  1401.         global $POST;
  1402.         $k=preg_split('/;;/',$fpost);
  1403.         if (count($k)<=5) {
  1404.             axe_warning("Linha incompleta no catalog.txt: $fpost");
  1405.             continue; // pula essa linha no loop 'for'
  1406.         }
  1407.         if (blogparm('YEARLY')=="01") {
  1408.             $k[1]=preg_replace('/(....\/)..(\/.*)$/',"\\1aBaB\\2",$k[1]);
  1409.             $k[1]=preg_replace('/aBaB/',blogparm('YEARLY'),$k[1]);
  1410.         }              
  1411.         loadpostvars_fromcatalog($fpost);      
  1412.         $k[1]=preg_replace('/.php$/',".html",$k[1]);
  1413.         $item.=sitemap_entry(blogparm('BLOGURL').$k[1],substr($k[0],0,10),"0.7");
  1414.         $contaitems++;
  1415.     }
  1416.     $item.=sitemap_entry(blogparm('BLOGURL')."index.html","","0.7");
  1417.     $item.=sitemap_entry(blogparm('BLOGURL')."archive.html","","0.5");
  1418.     foreach (glob(blogparm("POSTSDIR")."{index,archive,tag}-*.html",GLOB_BRACE) as $filename) {
  1419.         //echo "<a href=\"".blogparm('BLOGURL').basename($filename)."\">".$filename."</a><br/>\n";
  1420.         $item.=sitemap_entry(blogparm('BLOGURL').basename($filename),"","0.2");
  1421.     }
  1422.     $item.='    </urlset>';
  1423.     gravaarquivonaraiz("sitemap-axe.xml",$item);
  1424.     return $item;
  1425. }
  1426.  
  1427.  
  1428. /************************************************************************
  1429.                 Funções de plugins
  1430. *************************************************************************/
  1431.  
  1432. function registra_plugins() {
  1433.     global $pluginlist;
  1434.     $files=glob(blogparm('PLUGINSDIR').'*.php');
  1435.     if (!empty($files)) {
  1436.         foreach ($files as $filename) {
  1437.             // decho("Carregando o plugin ".basename($filename));
  1438.             include_once($filename);
  1439.             $pluginlist[]=preg_replace('/([^_.]*)(_.*)?\.php$/', "\\1", basename($filename));
  1440.         }
  1441.     }  
  1442. }
  1443.  
  1444. function aplica_plugins($tipo, $conteudo='', $p1='', $p2='', $p3='', $p4='') {
  1445.     global $pluginlist;
  1446.     $retorno=$conteudo;
  1447.     if (isset($pluginlist)) {
  1448.         foreach ($pluginlist as $plugin) {
  1449.             $funcao=$plugin.'_'.$tipo;
  1450.             if (function_exists($funcao)) {
  1451.                 $retorno=$funcao($conteudo,$p1,$p2,$p3,$p4);
  1452.             }  
  1453.         }
  1454.     }
  1455.     return $retorno;
  1456. }
  1457.  
  1458.  
  1459. /************************************************************************
  1460.                 Funções de debug e mensagens
  1461. *************************************************************************/
  1462.    
  1463. function decho($texto,$level=E_USER_NOTICE) {
  1464.     global $quiet;
  1465.     global $verbose;
  1466.     static $contadecho;
  1467.     static $contadechoprint;
  1468.     if ($contadecho%3==0) {
  1469.         $helice=array("/","-","\\",'|');
  1470.         $csi=chr(27).'[';
  1471.         if (!$quiet) {
  1472.             if ($verbose) {
  1473.                 echo("[axe] $texto\n");
  1474.             } else {
  1475.                 $texto=substr($texto,0,70);
  1476.                 echo($csi."0G".$csi."K".$helice[$contadechoprint % 4]." [axe] $texto");
  1477.                 $contadechoprint++;
  1478.             }  
  1479.         }
  1480.     }  
  1481.     $contadecho++;
  1482. }
  1483.  
  1484. function dmsg($texto) {
  1485.     global $quiet;
  1486.     if (!$quiet) {
  1487.         $csi=chr(27).'[';
  1488.    
  1489.         echo("\r".$csi."K[axe] $texto\n");
  1490.     }  
  1491. }
  1492.  
  1493. function axe_error($texto,$level=E_USER_ERROR) {
  1494.     debug_print_backtrace();
  1495.     echo("\n[axe] Interrompendo a operação. Falha registrada: $texto\n");
  1496.     die(5);
  1497. }
  1498.    
  1499. function axe_warning($texto) {
  1500.     debug_print_backtrace();
  1501.     echo("\n[axe] AVISO: $texto\n");   
  1502. }
  1503.  
  1504. axe_init();
  1505. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement