#!/usr/bin/env php
<?php
/**
 * This script will set the permissions on your Horde tree so that the files
 * will be accessible by the web server.
 *
 * Copyright 2011 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file COPYING for license information (LGPL). If you
 * did not receive this file, see http://www.horde.org/licenses/lgpl21.
 *
 * @author   Michael Slusarz <slusarz@horde.org>
 * @category Horde
 * @license  http://www.horde.org/licenses/lgpl21 LGPL 2.1
 * @package  Horde
 */

$baseFile = dirname(__FILE__) . '/../lib/Application.php';
if (file_exists($baseFile)) {
    require_once $baseFile;
} else {
    require_once 'PEAR/Config.php';
    require_once PEAR_Config::singleton()
        ->get('horde_dir', null, 'pear.horde.org') . '/lib/Application.php';
}
Horde_Registry::appInit('horde', array(
    'authentication' => 'none',
    'cli' => true
));

$cli->message('Horde directory: ' . realpath(HORDE_BASE), 'cli.message');

$owner = $cli->prompt(
    'Owner of Horde files?',
    null,
    'root'
);

$group = $cli->prompt(
    'Group under which web server/PHP runs?',
    null,
    'nobody'
);

$cli->writeln();

if ($cli->prompt($cli->red('Are you sure you want to alter permissions?'), array('y' => 'Yes', 'n' => 'No'), 'n') == 'y') {
    $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(realpath(HORDE_BASE)));
    foreach ($it as $key => $val) {
        if (!$it->isDot()) {
            if ($val->getOwner() != $owner) {
                $cli->message('Changing owner for ' . $key, 'cli.message');
                chown($key, $owner);
            }

            if ($val->getGroup() != $group) {
                $cli->message('Changing group for ' . $key, 'cli.message');
                chgrp($key, $group);
            }

            $octal_perms = substr(sprintf('%o', $val->getPerms()), -4);

            if ($val->isDir()) {
                if ($octal_perms != 0750) {
                    $cli->message('Changing permissions for ' . $key, 'cli.message');
                    chmod($key, 0750);
                }
            } elseif ($val->isFile()) {
                if ($octal_perms != 0640) {
                    $cli->message('Changing permissions for ' . $key, 'cli.message');
                    chmod($key, 0640);
                }
            }
        }
    }
}
