blob: 15e00b17b202a5f0fe59db58cc141e98ef1ce410 [file] [log] [blame]
<?
/*******************************************************************************
* Copyright (c) 2007 Eclipse Foundation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Wayne Beaton (Eclipse Foundation)- initial API and implementation
*******************************************************************************/
/*
* Let's not make things any harder then they need to be. For our purposes,
* a valid file name will always be the name of a subdirectory of $root,
* followed by a forward slash, and the name of a file.
*/
function is_valid_article_file(&$path) {
global $root;
$parts = explode('/', $path);
if (count($parts) != 2) return false;
$directory = $parts[0];
$file = $parts[1];
if (!is_actual_article_directory($directory)) return false;
if (!file_exists("$root/$directory/$file")) return false;
return true;
}
/*
* Sure, we could just do an is_dir call, but I'm being extra paranoid.
* Since we're only breaking on a backslash, I am somewhat concerned that
* some future version of PHP might be smart enough to automatically handle
* backslashes in file names, or some other sort of silliness. So... either
* the first part of the $file, is the name of an actual subdirectory of
* "/articles", or it is not.
*/
function is_actual_article_directory(&$directory_name) {
global $root;
if ($directory_name == ".") return false;
if ($directory_name == "..") return false;
$dir_handle = @opendir($root);
while ($file = readdir($dir_handle)) {
if ($directory_name == $file) {
closedir($dir_handle);
return true;
}
}
closedir($dir_handle);
return false;
}
function get_title_from_html_document(&$file_name) {
$header = get_header_from_html_document($file_name);
/*
* Break the header up into multiple lines. Handle the
* case where line breaks are lf, crlf, or cr.
*/
$lines = preg_split("/\r?\n|\r/", $header);
/*
* Merge the lines into a single line so that eregi
* can find the title even if it is split over multiple
* lines
*/
$one_line = implode(" ", $lines);
/*
* If we can match a title tag, extract it.
*/
if (preg_match("/<title>(.*)<\/title>/i", $one_line, $title)) {
return "Eclipse Corner Article: $title[1]";
}
return "Eclipse Corner Article";
}
function get_header_from_html_document(&$file_name) {
$handle = @fopen($file_name, "r");
$content = "";
while (!feof($handle)) {
$part = fread($handle, 1024);
$content .= $part;
/*
* Only read up to the part that includes the
* end tag for the header area.
*/
if (preg_match("/<\/head>/i", $part)) break;
}
fclose($handle);
return $content;
}