1*b08c3d51SMarkus Hoffrogge<?php 2*b08c3d51SMarkus Hoffrogge 3*b08c3d51SMarkus Hoffrogge/* 4*b08c3d51SMarkus Hoffrogge * GitBackedUtil.php 5*b08c3d51SMarkus Hoffrogge * 6*b08c3d51SMarkus Hoffrogge * PHP common utility function lib 7*b08c3d51SMarkus Hoffrogge * 8*b08c3d51SMarkus Hoffrogge * @package GitBackedUtil.php 9*b08c3d51SMarkus Hoffrogge * @version 1.0 10*b08c3d51SMarkus Hoffrogge * @author Markus Hoffrogge 11*b08c3d51SMarkus Hoffrogge * @copyright Copyright 2023 Markus Hoffrogge 12*b08c3d51SMarkus Hoffrogge * @repo https://github.com/woolfg/dokuwiki-plugin-gitbacked 13*b08c3d51SMarkus Hoffrogge */ 14*b08c3d51SMarkus Hoffrogge 15*b08c3d51SMarkus Hoffroggeif (__FILE__ == $_SERVER['SCRIPT_FILENAME']) die('Bad load order'); 16*b08c3d51SMarkus Hoffrogge 17*b08c3d51SMarkus Hoffrogge// ------------------------------------------------------------------------ 18*b08c3d51SMarkus Hoffrogge 19*b08c3d51SMarkus Hoffrogge/** 20*b08c3d51SMarkus Hoffrogge * GitBacked Utility Class 21*b08c3d51SMarkus Hoffrogge * 22*b08c3d51SMarkus Hoffrogge * This class provides common utility functions. 23*b08c3d51SMarkus Hoffrogge * 24*b08c3d51SMarkus Hoffrogge * @class GitBackedUtil 25*b08c3d51SMarkus Hoffrogge */ 26*b08c3d51SMarkus Hoffroggeclass GitBackedUtil { 27*b08c3d51SMarkus Hoffrogge 28*b08c3d51SMarkus Hoffrogge /** 29*b08c3d51SMarkus Hoffrogge * GitBacked temp directory 30*b08c3d51SMarkus Hoffrogge * 31*b08c3d51SMarkus Hoffrogge * @var string 32*b08c3d51SMarkus Hoffrogge */ 33*b08c3d51SMarkus Hoffrogge protected static $temp_dir = ''; 34*b08c3d51SMarkus Hoffrogge 35*b08c3d51SMarkus Hoffrogge /** 36*b08c3d51SMarkus Hoffrogge * Checks, if a given path name is an absolute path or not. 37*b08c3d51SMarkus Hoffrogge * This function behaves like absolute path determination in dokuwiki init.php fullpath() method. 38*b08c3d51SMarkus Hoffrogge * The relevant code has been copied from there. 39*b08c3d51SMarkus Hoffrogge * 40*b08c3d51SMarkus Hoffrogge * @access public 41*b08c3d51SMarkus Hoffrogge * @param string $path a file path name 42*b08c3d51SMarkus Hoffrogge * @return bool 43*b08c3d51SMarkus Hoffrogge */ 44*b08c3d51SMarkus Hoffrogge public static function isAbsolutePath($path) { 45*b08c3d51SMarkus Hoffrogge $ret = false; 46*b08c3d51SMarkus Hoffrogge 47*b08c3d51SMarkus Hoffrogge $iswin = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' || !empty($GLOBALS['DOKU_UNITTEST_ASSUME_WINDOWS'])); 48*b08c3d51SMarkus Hoffrogge // check for the (indestructable) root of the path - keeps windows stuff intact 49*b08c3d51SMarkus Hoffrogge if($path[0] == '/') { 50*b08c3d51SMarkus Hoffrogge $ret = true; 51*b08c3d51SMarkus Hoffrogge } else if($iswin) { 52*b08c3d51SMarkus Hoffrogge // match drive letter and UNC paths 53*b08c3d51SMarkus Hoffrogge if(preg_match('!^([a-zA-z]:)(.*)!',$path,$match)) { 54*b08c3d51SMarkus Hoffrogge $ret = true; 55*b08c3d51SMarkus Hoffrogge } else if(preg_match('!^(\\\\\\\\[^\\\\/]+\\\\[^\\\\/]+[\\\\/])(.*)!',$path,$match)) { 56*b08c3d51SMarkus Hoffrogge $ret = true; 57*b08c3d51SMarkus Hoffrogge } 58*b08c3d51SMarkus Hoffrogge } 59*b08c3d51SMarkus Hoffrogge 60*b08c3d51SMarkus Hoffrogge return $ret; 61*b08c3d51SMarkus Hoffrogge } 62*b08c3d51SMarkus Hoffrogge 63*b08c3d51SMarkus Hoffrogge /** 64*b08c3d51SMarkus Hoffrogge * Returns the $path as is, if it is an absolute path. 65*b08c3d51SMarkus Hoffrogge * Otherwise it will prepend the base path appropriate 66*b08c3d51SMarkus Hoffrogge * to the type of DW instance. 67*b08c3d51SMarkus Hoffrogge * 68*b08c3d51SMarkus Hoffrogge * @access public 69*b08c3d51SMarkus Hoffrogge * @param string $path a file path name 70*b08c3d51SMarkus Hoffrogge * @return string an appropriate absolute path 71*b08c3d51SMarkus Hoffrogge */ 72*b08c3d51SMarkus Hoffrogge public static function getEffectivePath($path) { 73*b08c3d51SMarkus Hoffrogge $ret = $path; 74*b08c3d51SMarkus Hoffrogge 75*b08c3d51SMarkus Hoffrogge if (self::isAbsolutePath($ret)) { 76*b08c3d51SMarkus Hoffrogge return $ret; 77*b08c3d51SMarkus Hoffrogge } 78*b08c3d51SMarkus Hoffrogge if (defined('DOKU_FARM')) { 79*b08c3d51SMarkus Hoffrogge $ret = DOKU_CONF.'../'.$ret; 80*b08c3d51SMarkus Hoffrogge } else { 81*b08c3d51SMarkus Hoffrogge $ret = DOKU_INC.$ret; 82*b08c3d51SMarkus Hoffrogge } 83*b08c3d51SMarkus Hoffrogge return $ret; 84*b08c3d51SMarkus Hoffrogge } 85*b08c3d51SMarkus Hoffrogge 86*b08c3d51SMarkus Hoffrogge /** 87*b08c3d51SMarkus Hoffrogge * Returns the temp dir for GitBacked plugin. 88*b08c3d51SMarkus Hoffrogge * It ensures that the temp dir will be created , if not yet existing. 89*b08c3d51SMarkus Hoffrogge * 90*b08c3d51SMarkus Hoffrogge * @access public 91*b08c3d51SMarkus Hoffrogge * @return string the gitbacked temp directory name 92*b08c3d51SMarkus Hoffrogge */ 93*b08c3d51SMarkus Hoffrogge public static function getTempDir() { 94*b08c3d51SMarkus Hoffrogge if (empty(self::$temp_dir)) { 95*b08c3d51SMarkus Hoffrogge global $conf; 96*b08c3d51SMarkus Hoffrogge self::$temp_dir = $conf['tmpdir'].'/gitbacked'; 97*b08c3d51SMarkus Hoffrogge io_mkdir_p(self::$temp_dir); 98*b08c3d51SMarkus Hoffrogge } 99*b08c3d51SMarkus Hoffrogge return self::$temp_dir; 100*b08c3d51SMarkus Hoffrogge } 101*b08c3d51SMarkus Hoffrogge 102*b08c3d51SMarkus Hoffrogge /** 103*b08c3d51SMarkus Hoffrogge * Creates a temp file and writes the $message to it. 104*b08c3d51SMarkus Hoffrogge * It ensures that the temp dir will be created , if not yet existing. 105*b08c3d51SMarkus Hoffrogge * 106*b08c3d51SMarkus Hoffrogge * @access public 107*b08c3d51SMarkus Hoffrogge * @param string $message the text message 108*b08c3d51SMarkus Hoffrogge * @return string the temp filename created 109*b08c3d51SMarkus Hoffrogge */ 110*b08c3d51SMarkus Hoffrogge public static function createMessageFile($message) { 111*b08c3d51SMarkus Hoffrogge $tmpfname = tempnam(self::getTempDir(), 'gitMessage_'); 112*b08c3d51SMarkus Hoffrogge $handle = fopen($tmpfname, "w"); 113*b08c3d51SMarkus Hoffrogge if (!empty($message)) { 114*b08c3d51SMarkus Hoffrogge fwrite($handle, $message); 115*b08c3d51SMarkus Hoffrogge } 116*b08c3d51SMarkus Hoffrogge fclose($handle); 117*b08c3d51SMarkus Hoffrogge return $tmpfname; 118*b08c3d51SMarkus Hoffrogge } 119*b08c3d51SMarkus Hoffrogge 120*b08c3d51SMarkus Hoffrogge} 121*b08c3d51SMarkus Hoffrogge/* End of file */ 122