+++ /dev/null
-<?php
-/* update friendica */
-define('APIBASE', 'http://github.com/api/v2/');
-define('F9KREPO', 'friendica/friendica');
-
-$up_totalfiles = 0;
-$up_countfiles = 0;
-$up_lastp = -1;
-
-function checkUpdate(){
- $r = fetch_url( APIBASE."json/repos/show/".F9KREPO."/tags" );
- $tags = json_decode($r);
-
- $tag = 0.0;
- foreach ($tags->tags as $i=>$v){
- $i = (float)$i;
- if ($i>$tag) $tag=$i;
- }
-
- if ($tag==0.0) return false;
- $f = fetch_url("https://raw.github.com/".F9KREPO."/".$tag."/boot.php","r");
- preg_match("|'FRIENDICA_VERSION', *'([^']*)'|", $f, $m);
- $version = $m[1];
-
- $lv = explode(".", FRIENDICA_VERSION);
- $rv = explode(".",$version);
- foreach($lv as $i=>$v){
- if ((int)$lv[$i] < (int)$rv[$i]) {
- return array($tag, $version, "https://github.com/friendica/friendica/zipball/".$tag);
- break;
- }
- }
- return false;
-}
-function canWeWrite(){
- $bd = dirname(dirname(__file__));
- return is_writable( $bd."/boot.php" );
-}
-
-function out($txt){ echo "§".$txt."§"; ob_end_flush(); flush();}
-
-function up_count($path){
-
- $file_count = 0;
-
- $dir_handle = opendir($path);
-
- if (!$dir_handle) return -1;
-
- while ($file = readdir($dir_handle)) {
-
- if ($file == '.' || $file == '..') continue;
- $file_count++;
-
- if (is_dir($path . $file)){
- $file_count += up_count($path . $file . DIRECTORY_SEPARATOR);
- }
-
- }
-
- closedir($dir_handle);
-
- return $file_count;
-}
-
-
-
-function up_unzip($file, $folder="/tmp"){
- $folder.="/";
- $zip = zip_open($file);
- if ($zip) {
- while ($zip_entry = zip_read($zip)) {
- $zip_entry_name = zip_entry_name($zip_entry);
- if (substr($zip_entry_name,strlen($zip_entry_name)-1,1)=="/"){
- mkdir($folder.$zip_entry_name,0777, true);
- } else {
- $fp = fopen($folder.$zip_entry_name, "w");
- if (zip_entry_open($zip, $zip_entry, "r")) {
- $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
- fwrite($fp,"$buf");
- zip_entry_close($zip_entry);
- fclose($fp);
- }
- }
- }
- zip_close($zip);
- }
-}
-
-/**
- * Walk recoursively in a folder and call a callback function on every
- * dir entry.
- * args:
- * $dir string base dir to walk
- * $callback function callback function
- * $sort int 0: ascending, 1: descending
- * $cb_argv any extra value passed to callback
- *
- * callback signature:
- * function name($fn, $dir [, $argv])
- * $fn string full dir entry name
- * $dir string start dir path
- * $argv any user value to callback
- *
- */
-function up_walktree($dir, $callback=Null, $sort=0, $cb_argv=Null , $startdir=Null){
- if (is_null($callback)) return;
- if (is_null($startdir)) $startdir = $dir;
- $res = scandir($dir, $sort);
- foreach($res as $i=>$v){
- if ($v!="." && $v!=".."){
- $fn = $dir."/".$v;
- if ($sort==0) $callback($fn, $startdir, $cb_argv);
- if (is_dir($fn)) up_walktree($fn, $callback, $sort, $cb_argv, $startdir);
- if ($sort==1) $callback($fn, $startdir, $cb_argv);
- }
- }
-
-}
-
-function up_copy($fn, $dir){
- global $up_countfiles, $up_totalfiles, $up_lastp;
- $up_countfiles++; $prc=(int)(((float)$up_countfiles/(float)$up_totalfiles)*100);
-
- if (strpos($fn, ".gitignore")>-1 || strpos($fn, ".htaccess")>-1) return;
- $ddest = dirname(dirname(__file__));
- $fd = str_replace($dir, $ddest, $fn);
-
- if (is_dir($fn) && !is_dir($fd)) {
- $re=mkdir($fd,0777,true);
- }
- if (!is_dir($fn)){
- $re=copy($fn, $fd);
- }
-
- if ($re===false) {
- out("ERROR. Abort.");
- killme();
- }
- out("copy@Copy@$prc%");
-}
-
-function up_ftp($fn, $dir, $argv){
- global $up_countfiles, $up_totalfiles, $up_lastp;
- $up_countfiles++; $prc=(int)(((float)$up_countfiles/(float)$up_totalfiles)*100);
-
- if (strpos($fn, ".gitignore")>-1 || strpos($fn, ".htaccess")>-1) return;
-
- list($ddest, $conn_id) = $argv;
- $l = strlen($ddest)-1;
- if (substr($ddest,$l,1)=="/") $ddest = substr($ddest,0,$l);
- $fd = str_replace($dir, $ddest, $fn);
-
- if (is_dir($fn)){
- if (ftp_nlist($conn_id, $fd)===false) {
- $ret = ftp_mkdir($conn_id, $fd);
- } else {
- $ret=true;
- }
- } else {
- $ret = ftp_put($conn_id, $fd, $fn, FTP_BINARY);
- }
- if (!$ret) {
- out("ERROR. Abort.");
- killme();
- }
- out("copy@Copy@$prc%");
-}
-
-function up_rm($fn, $dir){
- if (is_dir($fn)){
- rmdir($fn);
- } else {
- unlink($fn);
- }
-}
-
-function up_dlfile($url, $file) {
- $in = fopen ($url, "r");
- $out = fopen ($file, "w");
-
- $fs = filesize($url);
-
-
- if (!$in || !$out) return false;
-
- $s=0; $count=0;
- while (!feof ($in)) {
- $line = fgets ($in, 1024);
- fwrite( $out, $line);
-
- $count++; $s += strlen($line);
- if ($count==50){
- $count=0;
- $sp=$s/1024.0; $ex="Kb";
- if ($sp>1024) { $sp=$sp/1024; $ex="Mb"; }
- if ($sp>1024) { $sp=$sp/1024; $ex="Gb"; }
- $sp = ((int)($sp*100))/100;
- out("dwl@Download@".$sp.$ex);
- }
- }
- fclose($in);
- return true;
-}
-
-function doUpdate($remotefile, $ftpdata=false){
- global $up_totalfiles;
-
-
- $localtmpfile = tempnam("/tmp", "fk");
- out("dwl@Download@starting...");
- $rt= up_dlfile($remotefile, $localtmpfile);
- if ($rt==false || filesize($localtmpfile)==0){
- out("dwl@Download@ERROR.");
- unlink($localtmpfile);
- return;
- }
- out("dwl@Download@Ok.");
-
- out("unzip@Unzip@");
- $tmpdirname = $localfile."ex";
- mkdir($tmpdirname);
- up_unzip($localtmpfile, $tmpdirname);
- $basedir = glob($tmpdirname."/*"); $basedir=$basedir[0];
- out ("unzip@Unzip@Ok.");
-
- $up_totalfiles = up_count($basedir."/");
-
- if (canWeWrite()){
- out("copy@Copy@");
- up_walktree($basedir, 'up_copy');
- }
- if ($ftpdata!==false && is_array($ftpdata) && $ftpdata['ftphost']!="" ){
- out("ftpcon@Connect to FTP@");
- $conn_id = ftp_connect($ftpdata['ftphost']);
- $login_result = ftp_login($conn_id, $ftpdata['ftpuser'], $ftpdata['ftppwd']);
-
- if ((!$conn_id) || (!$login_result)) {
- out("ftpcon@Connect to FTP@FAILED");
- up_clean($tmpdirname, $localtmpfile);
- return;
- } else {
- out("ftpcon@Connect to FTP@Ok.");
- }
- out("copy@Copy@");
- up_walktree($basedir, 'up_ftp', 0, array( $ftpdata['ftppath'], $conn_id));
-
- ftp_close($conn_id);
- }
-
- up_clean($tmpdirname, $localtmpfile);
-
-}
-
-function up_clean($tmpdirname, $localtmpfile){
- out("clean@Clean up@");
- unlink($localtmpfile);
- up_walktree($tmpdirname, 'up_rm', 1);
- rmdir($tmpdirname);
- out("clean@Clean up@Ok.");
-}
/**
* Friendica admin
*/
-require_once("include/remoteupdate.php");
require_once("include/enotify.php");
require_once("include/text.php");
'$logname' => get_config('system','logfile')
));
}
-/**
- * @param App $a
- */
-function admin_page_remoteupdate_post(&$a) {
- // this function should be called via ajax post
- if(!is_site_admin()) {
- return;
- }
-
-
- if (x($_POST,'remotefile') && $_POST['remotefile']!=""){
- $remotefile = $_POST['remotefile'];
- $ftpdata = (x($_POST['ftphost'])?$_POST:false);
- doUpdate($remotefile, $ftpdata);
- } else {
- echo "No remote file to download. Abort!";
- }
-
- killme();
-}
-
-/**
- * @param App $a
- * @return string
- */
-function admin_page_remoteupdate(&$a) {
- if(!is_site_admin()) {
- return login(false);
- }
-
- $canwrite = canWeWrite();
- $canftp = function_exists('ftp_connect');
-
- $needupdate = true;
- $u = checkUpdate();
- if (!is_array($u)){
- $needupdate = false;
- $u = array('','','');
- }
-
- $tpl = get_markup_template("admin_remoteupdate.tpl");
- return replace_macros($tpl, array(
- '$baseurl' => $a->get_baseurl(true),
- '$submit' => t("Update now"),
- '$close' => t("Close"),
- '$localversion' => FRIENDICA_VERSION,
- '$remoteversion' => $u[1],
- '$needupdate' => $needupdate,
- '$canwrite' => $canwrite,
- '$canftp' => $canftp,
- '$ftphost' => array('ftphost', t("FTP Host"), '',''),
- '$ftppath' => array('ftppath', t("FTP Path"), '/',''),
- '$ftpuser' => array('ftpuser', t("FTP User"), '',''),
- '$ftppwd' => array('ftppwd', t("FTP Password"), '',''),
- '$remotefile'=>array('remotefile','', $u['2'],''),
- ));
-
-}
+++ /dev/null
-
-<script src="js/jquery.htmlstream.js"></script>
-<script>
- /* ajax updater */
- function updateEnd(data){
- //$("#updatepopup .panel_text").html(data);
- $("#remoteupdate_form").find("input").removeAttr('disabled');
- $(".panel_action_close").fadeIn()
- }
- function updateOn(data){
-
- var patt=/§([^§]*)§/g;
- var matches = data.match(patt);
- $(matches).each(function(id,data){
- data = data.replace(/§/g,"");
- d = data.split("@");
- console.log(d);
- elm = $("#updatepopup .panel_text #"+d[0]);
- html = "<div id='"+d[0]+"' class='progress'>"+d[1]+"<span>"+d[2]+"</span></div>";
- if (elm.length==0){
- $("#updatepopup .panel_text").append(html);
- } else {
- $(elm).replaceWith(html);
- }
- });
-
-
- }
-
- $(function(){
- $("#remoteupdate_form").submit(function(){
- var data={};
- $(this).find("input").each(function(i, e){
- name = $(e).attr('name');
- value = $(e).val();
- e.disabled = true;
- data[name]=value;
- });
-
- $("#updatepopup .panel_text").html("");
- $("#updatepopup").show();
- $("#updatepopup .panel").hide().slideDown(500);
- $(".panel_action_close").hide().click(function(){
- $("#updatepopup .panel").slideUp(500, function(){
- $("#updatepopup").hide();
- });
- });
-
- $.post(
- $(this).attr('action'),
- data,
- updateEnd,
- 'text',
- updateOn
- );
-
-
- return false;
- })
- });
-</script>
-<div id="updatepopup" class="popup">
- <div class="background"></div>
- <div class="panel">
- <div class="panel_in">
- <h1>Friendica Update</h1>
- <div class="panel_text"></div>
- <div class="panel_actions">
- <input type="button" value="{{$close|escape:'html'}}" class="panel_action_close">
- </div>
- </div>
- </div>
-</div>
-<div id="adminpage">
- <dl> <dt>Your version:</dt><dd>{{$localversion}}</dd> </dl>
-{{if $needupdate}}
- <dl> <dt>New version:</dt><dd>{{$remoteversion}}</dd> </dl>
-
- <form id="remoteupdate_form" method="POST" action="{{$baseurl}}/admin/update">
- <input type="hidden" name="{{$remotefile.0}}" value="{{$remotefile.2|escape:'html'}}">
-
- {{if $canwrite}}
- <div class="submit"><input type="submit" name="remoteupdate" value="{{$submit|escape:'html'}}" /></div>
- {{else}}
- <h3>Your friendica installation is not writable by web server.</h3>
- {{if $canftp}}
- <p>You can try to update via FTP</p>
- {{include file="field_input.tpl" field=$ftphost}}
- {{include file="field_input.tpl" field=$ftppath}}
- {{include file="field_input.tpl" field=$ftpuser}}
- {{include file="field_password.tpl" field=$ftppwd}}
- <div class="submit"><input type="submit" name="remoteupdate" value="{{$submit|escape:'html'}}" /></div>
- {{/if}}
- {{/if}}
- </form>
-{{else}}
-<h4>No updates</h4>
-{{/if}}
-</div>