示例#1
0
 public function parse()
 {
     $executor = StepExecutor::getInstance();
     $matches = array();
     while ($line = fgets($this->_file)) {
         $line = str_replace("\n", '', $line);
         if (preg_match(self::STEP_PATTERN, $line, $matches) == 1) {
             list($full, $step, $args) = $matches;
             try {
                 $result = $executor->call($step, $args);
                 if (S_SUCCESS === $result) {
                     Output::success($line);
                 } elseif (S_PENDING === $result) {
                     Output::pending($line);
                 }
             } catch (Exception $ex) {
                 Output::error($ex);
             }
         } else {
             Output::println($line);
         }
     }
 }
示例#2
0
 public static function scan($url, $currentFolderDepth)
 {
     // debug : echo getRequest("https://docs.google.com/feeds/default/private/full?prettyprint=true");
     $result = Connection::getRequest($url);
     //."?prettyprint=true"
     $folderContent = simplexml_load_string(str_replace('gd:etag', 'etag', $result));
     $foldersArray = array();
     $pagesArray = array();
     // foldersArray: key:name => value:sub-folder
     // pagesArray: key:menu_position => value:name
     foreach ($folderContent->entry as $file) {
         $type = (string) $file->content['type'];
         $name = (string) $file->title;
         $name = str_replace('"', '\\"', str_replace('$', '\\$', $name));
         $srcUrl = (string) $file->content['src'];
         $lastModified = (string) $file->updated;
         $etag = (string) $file['etag'];
         $path = $currentFolderDepth . ($currentFolderDepth == '' ? '' : '/') . StringTools::urlFormat(StringTools::indexClean($name));
         $isNew = LAST_UPDATE_DATE < $lastModified;
         if ($type == 'application/atom+xml;type=feed') {
             if (!is_dir($path)) {
                 Output::createFolder($path);
                 Output::println("Folder: {$path}");
             }
             $foldersArray[$name . '!$!'] = self::scan($srcUrl, $path);
             // Recursively store the sub folder.
         } else {
             if (substr($srcUrl, 0, strlen('https://docs.g')) == 'https://docs.g') {
                 $pagesArray[] = $name . '!$!';
                 // !$! is a end of name protection. It's removed in StringTools::serializeForInclude()
                 Output::println("Page: {$path}");
                 PageDownloader::download($srcUrl, $etag, $path . '.php');
             } else {
                 if ($isNew || !file_exists($path)) {
                     Output::store(Connection::getRequest($srcUrl), $path);
                     Output::println("File: {$path}");
                 }
             }
         }
     }
     // Sort folders and pages by name
     ksort($foldersArray);
     sort($pagesArray);
     // Remove indexes
     foreach ($foldersArray as $key => $value) {
         $cleanKey = StringTools::indexClean($key);
         if ($key != $cleanKey) {
             $foldersArray[$cleanKey] = $foldersArray[$key];
             unset($foldersArray[$key]);
         }
     }
     foreach ($pagesArray as $key => $value) {
         $cleanValue = StringTools::indexClean($pagesArray[$key]);
         $pagesArray[$key] = $cleanValue;
     }
     return array('folders' => $foldersArray, 'pages' => $pagesArray);
 }