Beispiel #1
0
 /**
  * Process file
  *
  * @param int $directoryID
  * @param DirectoryIterator $entries
  */
 protected final function _processFile($directoryID, DirectoryIterator $entries)
 {
     $scanID = $this->_scanRow->scanID;
     // Load row when exists
     $fileRow = $this->_fileTable->fetchRow(array('directoryID' => $directoryID, 'name' => $entries->getFilename()));
     // Already scanned
     if ($fileRow && $fileRow->lastScanID == $scanID) {
         return;
     }
     $pathname = $entries->getPathname();
     // Data
     $data = array('modifyDate' => $this->_normalizeDate($entries->getMTime()), 'owner' => $this->_normalizeUser($entries->getOwner()), 'group' => $this->_normalizeGroup($entries->getGroup()), 'permissions' => $entries->getPerms(), 'size' => $entries->getSize(), 'linkTarget' => $entries->isLink() ? $entries->getLinkTarget() : null);
     // Content
     $contentHash = null;
     if (!$entries->isLink() && ($this->_alwaysCheckContent || !$fileRow || $fileRow->modifyDate != $data['modifyDate'] || $fileRow->size != $data['size'])) {
         // Non-accessible file
         if (!is_readable($pathname)) {
             $this->_log(self::LOG_ERROR, "\t{$pathname} cannot be read.");
             if ($fileRow) {
                 $contentHash = $fileRow->contentHash;
             }
         } else {
             $contentHash = md5_file($pathname);
         }
     }
     // Transaction
     $this->_db->beginTransaction();
     // New row
     if ($newRow = !$fileRow) {
         fwrite(STDOUT, "\t{$pathname} is new.\n");
         $fileRow = $this->_createFileRow(array('directoryID' => $directoryID, 'name' => $entries->getFilename()) + $data);
     }
     // Store values
     $oldValues = $fileRow->toArray();
     // Content
     if ($fileRow->contentHash != $contentHash) {
         $data['contentHash'] = $contentHash;
         if ($this->_storagePath) {
             $data['storedAs'] = $this->_copyFile($fileRow->fileID, $entries);
         }
     }
     // Update row
     $this->_updateFileRow($pathname, $fileRow, $data);
     $fileRow->lastScanID = $scanID;
     $fileRow->save();
     // Scan row update
     $this->_scanRow->lastOperationDate = new SeekR_Expression('NOW()');
     $this->_scanRow->save();
     // Transaction
     $this->_db->commit();
 }
/**
 * Automatically find and create drush aliases on the server.
 * @param  array $aliases  array of drush aliases
 */
function _elmsln_alises_build_server(&$aliases, &$authorities = array())
{
    // static cache assembled aliases as this can get tripped often
    static $pulledaliases = array();
    static $pulledauthorities = array();
    static $config = array();
    // check for pervasive cache if static is empty
    if (empty($pulledaliases)) {
        // assumption here is that it lives where we expect
        // change this line if that's not the case though we really don't
        // support changes to that part of the install routine
        $cfg = file_get_contents('/var/www/elmsln/config/scripts/drush-create-site/config.cfg');
        $lines = explode("\n", $cfg);
        // read each line of the config file
        foreach ($lines as $line) {
            // make sure this line isn't a comment and has a = in it
            if (strpos($line, '#') !== 0 && strpos($line, '=')) {
                $tmp = explode('=', $line);
                // ensure we have 2 settings before doing this
                if (count($tmp) == 2) {
                    // never pass around the dbsu
                    if (!in_array($tmp[0], array('dbsu', 'dbsupw'))) {
                        // strip encapsulation if it exists
                        $config[$tmp[0]] = str_replace('"', '', str_replace("'", '', $tmp[1]));
                    }
                }
            }
        }
        // support the fact that $elmsln is used to reference in many bash vars
        foreach ($config as $key => $value) {
            if (strpos($value, '$elmsln') !== FALSE) {
                $config[$key] = str_replace('$elmsln', $config['elmsln'], $value);
            }
        }
        // base address of all domains
        $address = $config['address'];
        // your web root
        $root = $config['stacks'] . '/';
        // calculate the stacks we have
        $stacks = array();
        $stackfinder = new DirectoryIterator("{$root}");
        while ($stackfinder->valid()) {
            // Look for directories that are stacks
            if ($stackfinder->isDir() && !$stackfinder->isDot() && !$stackfinder->isLink()) {
                $stacks[] = $stackfinder->getBasename();
            }
            $stackfinder->next();
        }
        // loop through known stacks
        foreach ($stacks as $stack) {
            // step through sites directory assuming it isn't the 'default'
            if ($stack != 'default' && is_dir("{$root}{$stack}/sites/{$stack}")) {
                try {
                    $stackdir = new DirectoryIterator("{$root}{$stack}/sites/{$stack}");
                    while ($stackdir->valid()) {
                        // Look for directories containing a 'settings.php' file
                        if ($stackdir->isDir() && !$stackdir->isDot() && !$stackdir->isLink()) {
                            $group = $stackdir->getBasename();
                            // only include stack if it has things we can step through
                            // this helps avoid issues of unused stacks throwing errors
                            if (file_exists("{$root}{$stack}/sites/{$stack}/{$group}")) {
                                // build root alias for the stack
                                $pulledauthorities[$stack] = array('root' => $root . $stack, 'uri' => "{$stack}.{$address}");
                                // step through sites directory
                                if (is_dir("{$root}{$stack}/sites/{$stack}/{$group}")) {
                                    $site = new DirectoryIterator("{$root}{$stack}/sites/{$stack}/{$group}");
                                    while ($site->valid()) {
                                        // Look for directories containing a 'settings.php' file
                                        if ($site->isDir() && !$site->isDot() && !$site->isLink()) {
                                            if (file_exists($site->getPathname() . '/settings.php')) {
                                                // Add site alias
                                                $basename = $site->getBasename();
                                                // test that this isn't actually something like coursename = host
                                                if ($basename == $config['host'] && !is_dir("{$root}{$stack}/sites/{$stack}/{$group}/{$group}")) {
                                                    $pulledaliases["{$stack}.{$basename}"] = array('root' => $root . $stack, 'uri' => "{$stack}.{$address}");
                                                } else {
                                                    $pulledaliases["{$stack}.{$basename}"] = array('root' => $root . $stack, 'uri' => "{$stack}.{$address}.{$basename}");
                                                }
                                            }
                                        }
                                        $site->next();
                                    }
                                }
                            }
                        }
                        $stackdir->next();
                    }
                } catch (Exception $e) {
                    // that tool doesn't have a directory, oh well
                }
            }
        }
    }
    $aliases = $pulledaliases;
    $authorities = $pulledauthorities;
    return $config;
}
 /**
  * returns true if $fileinfo describes a model file
  *
  * @param DirectoryIterator $fileinfo
  * @return bool
  */
 protected function _isModelFile(DirectoryIterator $fileinfo)
 {
     $isModel = !$fileinfo->isDot() && !$fileinfo->isLink() && $fileinfo->isFile() && !preg_match('/filter\\.php/i', $fileinfo->getBasename()) && !preg_match('/abstract\\.php/i', $fileinfo->getBasename());
     return $isModel;
 }