xref: /plugin/gitbacked/classes/GitBackedUtil.php (revision b08c3d51e04f23d878d49c6b945b5f8a1aef6f50)
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