update.php [co nowego na CVS]

0

Witam,
Ostatnio napisalem skrypt sprawdzajacy czy jest cos nowego na cvs.
Chce podzielic sie z wami swoim kodem. Mam nadzieje ze komus sie przyda.
Skrypt jest skomentowany, jest to testowa wersja, calkowicie integralna z Coyote.

// Poprawione zgodnie z uwagami.

<?php
/*************************************************************************
**   Coyote Project
**
**   Update.php
**
**   File name :   update.php
**   Autor     :   Dominium
**   License   :   GPL
**************************************************************************
*/

  DEFINE('COYOTE', true);
  $root_dir = './';
  $cvs = 'http://cvs.4programmers.net/cgi-bin/cvsweb/coyote/ChangeLog'; // Adres servera CVS
  include_once($root_dir . 'extension.inc');
  include_once($root_dir . 'common.' . $phpEx);

  if ( $user->data['user_level'] <= MODERATOR )
  {
      trigger_error($user->lang['E_AUTH_FAILED']);
  }

  if ( $_GET['action'] == 'update' )
  {
      // Pobieramu 1024 znaki z pliku ChangeLog i zapisujemy na dysku.
          $fileremote = @fopen($cvs, 'r');
          $remote = @fread($fileremote, 1024);
          @fclose($fileremote);
          $fp = fopen("ChangeLog", "w");
      // zapisanie danych
      fputs($fp, $remote);
          header("Location: update.php");
         
  }

  if ( $_POST['action'] == 'check_update' )
  {
          if ( !ini_get('allow_url_fopen') )
          {
             $template->assign(array('CONTENT' => 'Nie można sprawdzić nowych aktualizacji. allow_url_fopen jest wyłączony w tym systemie.'));
      }
          // Pobieramy dane z serwera CVS
      $fileremote = @fopen($cvs, 'r');
          $remote = @fread($fileremote, 1024);
          $remote = md5($remote);
          @fclose($fileremote);
         
      // Pobieramu dane z pliku lokalnego
      $filelocal = @fopen(''.$config['SITE_URL'].'ChangeLog', 'r');
          $local = @fread($filelocal, 1024);
          $local = md5($local);
          @fclose($filelocal);

      // Spradzamy czy ma jakas zawartosc.
          if ( $remote == '' )
      {
                  $template->assign(array('CONTENT' => 'Nie można sprawdzić nowych aktualizacji.'));
      }
          // Sprawdzamy czy hashe obu plikow sa identyczne.
          if ( $local == $remote )
      {
                  $template->assign(array('CONTENT' => 'Posiadasz najnowszą wersje Coyote.'));

          } else {
                  $template->assign(array('CONTENT' => 'Nowa wersja Coyote jest już dostępna. Sciągnij nowe aktualizacje z <a href="http://cvs.4programmers.net/cgi-bin/cvsweb/coyote/">Coyote</a>.<br><b>Pamiętaj aby zgrać plik ChangeLog z nowej wersji.<br>Możesz to zrobic automatycznie klikając <a href="'.$config['SITE_URL'].'update.php?action=update">tu </a></b>.'));
          }
               $template->assign(array('DISABLEFORM' => 'style="display: none"'));
                  page_display('update');

  } else {
            $template->assign(array('DISABLEDIV' => 'style="display: none"'));
                page_display('update');
  }
?>

Template:

{INCLUDE index_header.tpl}



<div class="content" >
	<div class="contentTop">
		<div style="padding: 20px; text-align: center">
		<div align="center">
	<script type="text/javascript" src="{SITE_URL}templates/NewAge/scripts.js"></script>
	    <div id="tab2Content" {DISABLEFORM}>
			<form method="POST" action"update.php">
			<input type="submit" value="Sprawdź aktualizacje">
			<input type="hidden" name="action" value="check_update">
			</form>					
		</div>


        <div id="tab2Content" {DISABLEDIV}>
			<p align="left" >{CONTENT}</p>
		</div>
		</div>
		</div>


	</div>
	{INCLUDE right_menu.tpl}

	<div style="clear: both"></div>
</div>
						
{INCLUDE index_footer.tpl}

Pozdrawiam.

0

a nie łatwiej kliknąć jeden przycisk w kliencie CVS ?

0

Może nie każdy go ma - w każdym razie interesująca inicjatywa.

0
Adamo napisał(a)

a nie łatwiej kliknąć jeden przycisk w kliencie CVS ?

W zasadzie to nie posiadam klienta. Korzystam z Coyote od jakiegos czasu i coraz czesciej dodawane sa nowe aktualizacje. Mysle ze jezeli projekt mialby byc dostepny jako CMS to taki dodatek jest dosc ciekawy.
Moze nie jest to szczyt techniki, ale curl nie mozna wykozystac, bo nie kazdy go ma.

Pozdrawiam.

0

Taki dodatek to się przyda, jak będzie panel admina, można tam dodać powiadamianie o nowych wersjach jak i ostatnie info na temat cmsa. (tak jak to jest zrobione w smf).

A co do samego sprawdzania, czy nie lepiej sprawdzać rewizję plik ChangeLog i pokazywać linijki dodane od rewizji X.Y (można wyciąć z nagłówka pliku lokalnego) do wersji najnowszej.

0

ja bym zmienil sztywne adresy na zmienne konfiguracji, ktore mozna ustawic na poczatku skryptu - raz, a dobrze...
jezeli 9zalozmy) zmienilby sie adres serwera, trzeba by bylo zmieniac WSZYSTKIE adresy w skrypcie

0
lofix napisał(a)

ja bym zmienil sztywne adresy na zmienne konfiguracji, ktore mozna ustawic na poczatku skryptu - raz, a dobrze...
jezeli 9zalozmy) zmienilby sie adres serwera, trzeba by bylo zmieniac WSZYSTKIE adresy w skrypcie

sluszna uwaga, juz poprawiam.. :)
Swoja droga postaram sie napisac bardziej optymalny skrypt. Niestety ten trwa dosc dlugo. Jezeli macie jakies sugestie prosze o opisanie ich w tym watku.

Ok, zatem wersja nieco ulepszona jest do pobrania. Jezeli sie komus chce mozna testowac.
http://download.hackingplanet.org/co_nowego

0

http://nav.int.pl/Coyote/ - Wersja pokazująca zmiany w nowej wersji oraz korzystająca z protokołu CVS zamiast http.

//"if ($s == "I LOVE YOU\n")" o lol, niezłe ;) - M

0
nav napisał(a)

http://nav.int.pl/Coyote/ - Wersja pokazująca zmiany w nowej wersji oraz korzystająca z protokołu CVS zamiast http.

tez myslalem nad protololem CVS, ale ma on jedna wade. Dosc dlugo trwa. Szybciej jest wejsc na CVS via www. Chyba ze tak dziala moj serwer.

0

Czas generowania strony: 0.3493 sek. na localu. Od zwykłego czasu generowania jest większy o 100-150ms.

0

OT: a jak logowanie się nie uda to odsyła "I HATE YOU" ...
kto to wymyślał [???] :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1