puggan icon

/usr/local/bin/phpstorm

puggan | PRO | 01/12/22 11:17:24 AM UTC (Edited) | 0 ⭐ | 555 👁️ | Never ⏰ | []
PHP |

2.66 KB

|

None

|

0 👍

/

0 👎

#!/usr/local/bin/php7
<?php
 
    $dir = getcwd();
    if(substr($dir, -1) != '/')
    {
        $dir .= '/';
    }
 
    $phpstorm_app_path = '/Applications/PhpStorm.app/Contents/MacOS/phpstorm';
    $project_path = '/Users/puggan/PhpstormProjects/';
 
    $projects = [
        'bb' => $project_path . 'Bokborsen/',
        'bbadmin' => $project_path . 'admin.bokborsen/',
        'bbexport' => $project_path . 'Bok Export/',
        'ts' => $project_path . 'testseek/',
    ];
    $project_alias = [
            '/Users/puggan/htdocs/bokborsen/' => 'bb',
            '/Users/puggan/htdocs/bokborsen_admin/' => 'bbadmin',
            '/Users/puggan/htdocs/bokborsen_export/' => 'bbexport',
            '/home/vagrant/bokborsen/' => 'bb',
        ] + array_flip($projects);
 
    uksort(
        $project_alias,
        function ($a, $b)
        {
            $ld = strlen($b) - strlen($a);
            if($ld)
            {
                return $ld;
            }
            return strcmp($a, $b);
        }
    );
 
    function dir_match($dir, $list)
    {
        if(substr($dir, -1) != '/')
        {
            $dir .= '/';
        }
        foreach($list as $compare_dir)
        {
            if(substr($dir, 0, strlen($compare_dir)) == $compare_dir)
            {
                return $compare_dir;
            }
        }
        return FALSE;
    }
 
    $project_dir = dir_match($dir, array_keys($project_alias));
 
    foreach(array_slice($argv, 1) as $argument)
    {
        if(preg_match('#:([0-9]+):?$#', $argument, $match))
        {
            $line_number = $match[1];
            $file_name = substr($argument, 0, -strlen($match[0]));
        }
        else
        {
            $line_number = NULL;
            $file_name = $argument;
        }
 
        if(substr($file_name, 0, 1) != '/')
        {
            if(file_exists("{$dir}{$file_name}"))
            {
                $file_name = "{$dir}{$file_name}";
            }
            else if($project_dir AND file_exists("{$project_dir}{$file_name}"))
            {
                $file_name = "{$project_dir}{$file_name}";
            }
            else
            {
                $file_name = "{$dir}{$file_name}";
            }
        }
 
        $real_project_dir = is_dir($file_name) ? $file_name : dirname($file_name);
        $file_project_dir = dir_match($real_project_dir, array_keys($project_alias));
        if($file_project_dir)
        {
            $real_project_dir = $projects[$project_alias[$file_project_dir]];
            if($real_project_dir != $file_project_dir)
            {
                $file_name = $real_project_dir . substr($file_name, strlen($file_project_dir));
            }
        }
 
        if(!file_exists($file_name))
        {
            fprintf(STDERR, "File missing %s\n", $file_name);
            continue;
        }
 
        $command = [
            escapeshellcmd($phpstorm_app_path),
            escapeshellarg($real_project_dir)
        ];
        if(!is_dir($file_name))
        {
            if($line_number)
            {
                $command[] = escapeshellarg('--line');
                $command[] = escapeshellarg($line_number);
            }
            $command[] = escapeshellarg($file_name);
        }
        echo implode(' ',$command) . PHP_EOL;
        passthru(implode(' ',$command));
    }

Comments