<?php
include "globals.php";
include "find_default_file.php";
// See if user already logged in.
session_start();
$logged_in = isset($_SESSION['wysiwygit']);
$admin = isset($_SESSION['wysiwygit_admin']);
if ($logged_in) {
$username = $_SESSION['wysiwygit_username'];
} else {
// See if username saved in cookie.
if (isset($_COOKIE['wysiwygit_username'])) {
$username = $_COOKIE['wysiwygit_username'];
} else {
if ($demo) {
$username = $demo_username;
} else {
$username = '';
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
Edit
</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js">
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js">
</script>
<script src="jquery.infieldlabel.min.js">
</script>
<script type="text/javascript" src="hoverIntent.js">
</script>
<script type="text/javascript" src="superfish.js">
</script>
<!--
<script src="../bbt/jquery.min.js"></script>
-->
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/themes/base/jquery-ui.css" type="text/css" media="all" />
<link rel="stylesheet" type="text/css" href="wysiwygit.css" media="screen" />
<link rel="stylesheet" type="text/css" href="superfish.css" media="screen" />
<script type="text/javascript">
//<![CDATA[
var debug = new Array();
debug[0] = false;
debug[1] = false; // Load/reload.
debug[2] = false; // Update URL.
var wLoggedIn = false;
var wAdmin = false;
var wUsername;
var wHome = '';
var wNewUrl;
var wUrlTimer;
var currentlyEditingTmpfileUrl;
var wEditorDivIndex;
var wExtraTime;
$(document).ready (function () {
// Resize iframe to match (remaining) window height.
var headerHeight = $("#wysiwygit_control_header").height ();
var windowHeight = $(window).height ();
$("#wysiwygit_page_to_edit").height (windowHeight - headerHeight);
// Controls menu.
$('ul.sf-menu').superfish({autoArrows: false});
// Load "home" page. Default location: one directory closer to
// root than this script's directory.
<?php
// Whole path (e.g. /fuggle/hosts/www.berkeleyballet.org/docs/edittest/wysiwygit/index.php)
$script_filename = $_SERVER['SCRIPT_FILENAME'];
// Change backslashes followed by non-space to forward slashes.
$script_filename = preg_replace('/\\\\(\S)/', '/$1', $script_filename);
// Take off the last part.
$home_dir = preg_replace('/\/[^\/]+\/index.php/', '', $script_filename);
// E.g, /edittest/wysiwygit/index.php
$script_name = $_SERVER['SCRIPT_NAME'];
// E.g., /edittest/wysiwygit
$script_relative_path = pathinfo($script_name, PATHINFO_DIRNAME); // e.g., /wysiwygit
// And again, e.g., /edittest
$home_relative_path = pathinfo($script_relative_path, PATHINFO_DIRNAME);
if ($home_relative_path == '\\' || $home_relative_path == '/') {
$home_relative_path = '';
}
if ($debug[0]) {
my_error_log("[wysiwygit.php] script_filename: $script_filename");
my_error_log("[wysiwygit.php] script_relative_path: $script_relative_path");
my_error_log("[wysiwygit.php] home_relative_path: $home_relative_path");
}
$basename = find_default_file($home_dir);
if ($basename) {
$home = "$home_relative_path/$basename";
} else {
$home = "";
}
if ($debug[0]) {
my_error_log("[wysiwygit.php] home_dir: $home_dir");
my_error_log("[wysiwygit.php] home: $home");
}
?>
wLoggedIn = '<?php print $logged_in ?>';
wAdmin = '<?php print $admin ?>';
wUsername = '<?php print $username ?>';
wHome = '<?php print $home ?>';
var wHomeBasename = '<?php print $basename ?>';
if (wHome) {
// Put into URL bar in header.
$('#wysiwygit_url').val(wHome);
// Put into title.
document.title = 'Edit ' + wHomeBasename;
// Load.
loadNewPage(wHome);
} else {
$('#wysiwygit_url').val('Enter URL of page to edit');
$('#wysiwygit_url').css({color: 'gray'});
}
if (wLoggedIn) {
// Display user name in header.
var html = usernameSelectHtml();
$('#header_username').html(html);
if (wAdmin) {
// Administrators get option to go to admin page.
$('.wysiwygit_admin_menu_item').css({display: 'block'});
}
} else {
setupLogin();
}
// Start timer to keep URL bar up to date, if in same domain.
if (! wUrlTimer) {
wUrlTimer = setInterval("updateUrl()", 2500);
}
// Stop update if user is entering a URL.
$('#wysiwygit_url').focus(function() {
if (wUrlTimer) {
if (debug[0]) {
$('#wysiwygit_dump').append('[focus] clearInterval(wUrlTimer)');
}
clearInterval(wUrlTimer);
wUrlTimer = null;
}
if (this.value == 'Enter URL of page to edit') {
$(this).val('').css({color: 'black'});
}
});
// Restart update once user stops entering.
$('#wysiwygit_url').blur(function() {
if (debug[0]) {
$('#wysiwygit_dump').append('[blur] starting setInterval("updateUrl()", 2500)');
}
if (this.value == '') {
$(this).css({color: 'gray'});
this.value = 'Enter URL of page to edit';
$('#wysiwygit_header_message').html('');
} else {
if (! wUrlTimer) {
wUrlTimer = setInterval("updateUrl()", 2500);
}
}
});
});
// ======================================================================
$(window).resize (function () {
var headerHeight = $("#wysiwygit_control_header").height ();
var windowHeight = $(window).height ();
$('#wysiwygit_page_to_edit').height (windowHeight - headerHeight);
});
function setupLogin() {
// Handle login.
var login = '<div id="please_log_in" style="display: inline; background: yellow; padding: 2px;">Please log in \
</div> \
<form id="login_form" style="display: inline;"> \
<div class="wysiwygit_login"> ';
if (! wUsername) {
login += ' \
<label id="wysiwygit_username_label" for="wysiwygit_username">User name</label> ';
}
login += ' <input type="text" id="wysiwygit_username" /> \
</div> \
<div class="wysiwygit_login"> \
<label id="wysiwygit_password_label" for="wysiwygit_password">Password</label> \
<input type="password" id="wysiwygit_password" /> \
<button type="submit" id="wysiwygit_login">Login</button> \
</form> \
</div>';
$('#wysiwygit_header_message').html(login);
$('label').inFieldLabels();
if (wUsername) {
$('#wysiwygit_username').val(wUsername);
$('#wysiwygit_password').focus();
} else {
$('#wysiwygit_username').focus();
}
// Enter key submits, but don't reload page (return false).
$('#login_form').submit(function() {
sendLogin();
return false;
});
}
function sendLogin() {
$('#please_log_in').html('<img src="wysiwygit_throbber.gif" border="0" />');
wUsername = $('#wysiwygit_username').val();
var password = $('#wysiwygit_password').val();
var data = 'username=' + wUsername
+ '&password=' + password;
$.ajax({
type: 'POST',
url: 'check_login.php',
data: data,
success: onLogin,
dataType: 'json'
});
}
function onLogin(returnData) {
if (returnData[0]) {
wLoggedIn = true;
wAdmin = returnData[1]
if (wAdmin) {
$('.wysiwygit_admin_menu_item').css({display: 'block'});
}
var html = usernameSelectHtml();
$('#header_username').html(html);
editButtonOn();
} else {
errmsg = returnData[2];
if (errmsg) {
alert(errmsg);
} else {
$('#please_log_in').html('Login unsuccessful').css({color: 'red', 'font-weight': 'bold'});
}
}
}
function usernameSelectHtml() {
var html = '<select onchange="logout(this)" style="background: gray; border: 0px;"> \
<option>'
+ wUsername
+' </option> \
<option> \
Logout \
</option> \
</select>';
return html;
}
function logout(selectElm) {
if (selectElm.selectedIndex == 1) {
$.ajax({
type: 'POST',
url: 'logout.php',
success: onLogout,
dataType: 'json'
});
}
}
function onLogout(returnData) {
$('#header_username').html('');
$('.wysiwygit_admin_menu_item').css({display: 'none'});
wUsername = '';
setupLogin();
}
function loadPageForEdit() {
try {
var url = window.frames.wysiwygit_page_to_edit.location.href;
// Stop timer -- restarted when page loads.
if (wUrlTimer) {
clearInterval(wUrlTimer);
wUrlTimer = null;
}
if (debug[1]) {
$('#wysiwygit_dump').append('<br />[loadPageForEdit] url: ' +url);
}
$('#wysiwygit_url').val(url);
// Basename to title.
var basename = url.replace(/.*\//, '');
if (debug[1]) {
$('#wysiwygit_dump').append('<br />[loadPageForEdit] basename: ' + basename);
}
document.title = 'Edit ' + basename;
$('#wysiwygit_header_message').html('<span style="background: yellow; padding: 2px;">Please wait...</span>');
// While waiting, screen iframe with animated gif.
$('#iframe_screen').css({display: 'block'});
var editUrl = 'prepare_page_for_edit.php?url=' + url;
$('#wysiwygit_page_to_edit').attr('src', editUrl);
// (Page will call DoubleclickMessageOn() when loaded.)
} catch (err) {
var hostname = window.location.hostname;
alert ('Sorry, can only edit pages on this site (' + hostname + ')');
}
}
// Replace edit button with "Double-click..." text.
function DoubleclickMessageOn() {
$('#editButton').css({display: 'none'});
$('#iframe_screen').css({display: 'none'});
$('#wysiwygit_header_message').html(' Double-click section to edit. ');
// Restart timer.
currentlyEditingTmpfileUrl = window.frames.wysiwygit_page_to_edit.location.href;
if (debug[2]) {
$('#wysiwygit_dump').append('<br />[DoubleclickMessageOn] currentlyEditingTmpfileUrl: ' + currentlyEditingTmpfileUrl);
}
if (! wUrlTimer) {
wUrlTimer = setInterval("updateUrl()", 2500);
}
}
function loadButton(newUrl) {
if (debug[2]) {
$('#wysiwygit_dump').append('<br />[loadButton] newUrl: ' + newUrl);
}
if (wUrlTimer) {
clearInterval(wUrlTimer);
wUrlTimer = null;
}
// If unsaved changes...
var pteFrame = window.frames.wysiwygit_page_to_edit;
if (pteFrame.wysiwygit && pteFrame.wysiwygit.editor) {
if (pteFrame.wysiwygit.editor.checkDirty()) {
if (confirm("Changes have not been saved. Save now? Click Cancel to load/reload page without saving")) {
window.frames.wysiwygit_page_to_edit.wysiwygit.saveComplete = false;
window.frames.wysiwygit_page_to_edit.wysiwygit.save();
wNewUrl = newUrl;
setTimeout("waitForSaveThenLoad()", 100);
return 0;
}
}
window.frames.wysiwygit_page_to_edit.wysiwygit.removeLockFile('parent.loadNewPage("'+newUrl+'")');
return 0;
}
if (newUrl) {
loadNewPage(newUrl);
}
}
function waitForSaveThenLoad() {
if (window.frames.wysiwygit_page_to_edit.wysiwygit.saveComplete) {
loadNewPage(wNewUrl);
} else {
setTimeout("waitForSaveThenLoad()", 100);
}
}
function loadNewPage(newUrl) {
// Do not allow pages outside of "home" directory of this site.
// wHome is like /wysiwygit/demos/wysZHwKxq/index.php.
var homeDirUrl = wHome.replace(/\/[^\/]+$/, '');
if (newUrl.indexOf(homeDirUrl) == -1) {
alert('Sorry, page to edit must be in directory or subdirectory of ' + homeDirUrl);
} else {
$('#wysiwygit_page_to_edit').attr('src', newUrl);
// Make edit button visible only when a page is loaded. No way to
// tell when actually ready, but we'll wait a second. Get rid of
// anything there first.
$('#wysiwygit_header_message').html('');
if (wLoggedIn) {
setTimeout("editButtonOn()", 1000);
}
}
}
// Edit button and "Click to enable editing" message.
function editButtonOn() {
$('#editButton').css({display: 'inline'});
$('#wysiwygit_header_message').html('<a href="javascript: loadPageForEdit()">Click to enable editing for this page</a>');
}
// Load current page in place of editor.
function exitTo(currentUrl) {
wNewUrl = '';
// If unsaved changes...
var pteFrame = window.frames.wysiwygit_page_to_edit;
if ( pteFrame.wysiwygit
&& pteFrame.wysiwygit.editor
&& pteFrame.wysiwygit.editor.checkDirty()) {
if (confirm("Changes have not been saved. Save now? Click Cancel to exit without saving")) {
window.frames.wysiwygit_page_to_edit.wysiwygit.saveComplete = false;
window.frames.wysiwygit_page_to_edit.wysiwygit.save(true);
wNewUrl = currentUrl;
setTimeout("waitForSaveThenExit()", 100);
}
}
if (! wNewUrl) {
window.location.href = currentUrl;
}
}
function waitForSaveThenExit() {
if ( window.frames.wysiwygit_page_to_edit.wysiwygit.saveComplete) {
window.location.href = wNewUrl;
} else {
setTimeout("waitForSaveThenExit()", 100);
}
}
/*
function loadSiteHome() {
$('#wysiwygit_url').val(wHome);
$('#wysiwygit_page_to_edit').attr('src', wHome);
}
*/
// Called by setInterval() to keep url bar up to date. Only update url
// bar if not currently editing a page (don't want to show tmpfile name
// in url bar).
function updateUrl() {
try {
var url = window.frames.wysiwygit_page_to_edit.location.href;
if ( url != currentlyEditingTmpfileUrl
&& url != 'about:blank') {
if (debug[2]) {
$('#wysiwygit_dump').append(' [updateUrl] url: ' + url);
}
currentlyEditingTmpfileUrl = '';
$('#wysiwygit_url').val(url);
// Basename to title.
var basename = url.replace(/.*\//, '');
document.title = 'Edit ' + basename;
}
} catch (err) {
// Gray out -- we're not sure if URL is current.
}
}
// Bring in new tmpfile, wait for load, invoke replaceDiv().
function reloadTmpfile(editorDivIndex, tmpfileUrl) {
$('#wysiwygit_page_to_edit').attr('src', tmpfileUrl);
wEditorDivIndex = editorDivIndex;
if (debug[1]) {
$('#wysiwygit_dump').append('<br />[reloadTmpfile] wEditorDivIndex: ' + wEditorDivIndex);
}
wExtraTime = 0;
setTimeout("waitForLoad()", 100);
// wUrlTimer will be signal that tmpfile has loaded.
clearInterval(wUrlTimer);
wUrlTimer = null;
}
function waitForLoad() {
// wysiwygit.js sets flag at end. (No standard method for capturing
// load in iframe.)
if (debug[1]) {
$('#wysiwygit_dump').append(' [waitForLoad] typeof: ' + typeof window.frames.wysiwygit_page_to_edit.wysiwygit.replaceDiv);
}
if (typeof window.frames.wysiwygit_page_to_edit.wysiwygit.replaceDiv == 'function') {
// OK, it's there, supposedly. Let's wait one more time.
if (wExtraTime < 1) {
wExtraTime++;
setTimeout("waitForLoad()", 200);
} else {
window.frames.wysiwygit_page_to_edit.wysiwygit.replaceDiv(null, wEditorDivIndex);
}
} else {
setTimeout("waitForLoad()", 200);
}
}
function lockedDialog() {
$('#locked').dialog({
position: ['right', 'top'],
title: 'Help - Cannot edit'
});
}
// If editor is open, give chance to save before leaving.
// Can't work so far.
/*
window.onunload = function() {
if ( window.frames.wysiwygit_page_to_edit.wysiwygit.editor && window.frames.wysiwygit_page_to_edit.wysiwygit.editor.checkDirty()) {
if (confirm("Changes have not been saved. Save now? Click Cancel to continue without saving")) {
window.frames.wysiwygit_page_to_edit.wysiwygit.save();
}
}
}
*/
//]]>
</script>
</head>
<body style="margin: 0px; font-size: 10pt; font-family: Arial, Verdana, sans-serif;">
<div id="wysiwygit_control_header">
<ul class="sf-menu" style="margin-left: 5px">
<li>
<a href="javascript: void(0)"><img src="wysiwygit_controls.png" class="wysiwygit_image"></a>
<ul>
<li>
<a href="javascript: exitTo('backups_list.php')">
View/restore backups</a>
</li>
<li class="wysiwygit_admin_menu_item">
<a href="javascript: exitTo('admin.php')">
Admin - users/passwords</a>
</li>
</ul>
</li>
</ul>
<!--
<img id="wysiwygit_controls_button" src="wysiwygit_controls.png" style="margin-top: 5px; border: 1px solid gray;" class="wysiwygit_image" />
-->
<button type="button" title="Load site home" onclick="loadButton(wHome);"
style="position: relative; top: -5px;" class="wysiwygit_button"><img src="wysiwygit_home.png" class="wysiwygit_image" alt="Load site home" /></button>
<input type="text" id="wysiwygit_url"
onchange="loadButton(this.value);"
style="position: relative; top: -7px; width: 300px;" />
<button id="loadButton" type="button" title="Load"
onclick="loadButton($('#wysiwygit_url').val());"
style="top: -5px;" class="wysiwygit_button"><img src="wysiwygit_reload.png" class="wysiwygit_image" alt="Load" /></button>
<button id="editButton" type="button" title="Edit"
onclick="loadPageForEdit();"
class="wysiwygit_button"
style="top: -5px; display: none;"><img src="wysiwygit_edit.gif" class="wysiwygit_image" alt="Edit" /></button
><div id="wysiwygit_header_message">
</div>
<div id="header_username"
style="position: absolute; right: 35px; top: 8px;
font-weight: bold; background: none;">
</div>
<div id="wysiwygit_exitButton" class="wysiwygit_button"
style="position: absolute; right: 7px; top: 2px;
background: none;">
<a type="button" title="End editing"
href="javascript: exitTo($('#wysiwygit_url').val());"
><img src="wysiwygit_exit_large.png" class="wysiwygit_image" alt="Exit" /></a>
</div>
<br />
<br />
<div id="wysiwygit_dump">
</div>
</div>
<!--
<div id="check" style="position: fixed; top: 5px; right: 120px;">
<button type="button"
onclick="$('#locked').dialog()">
test dialog
</button>
</div>
<div id="clear" style="position: fixed; top: 5px; right: 30px;">
<button type="button" onclick="$('#wysiwygit_dump').html('');">
Clear
</button>
</div>
-->
<div id="locked" style="display: none;">
If you or another user just closed another browser window without
exiting the editor, please try again in one minute
</div>
<div id="iframe_wrapper">
<div id="iframe_screen" class='wysiwygit_screen' style="display: none;">
<img src="wysiwygit_working.gif" border="0"
style="position: absolute; margin-left: -30px; left: 50%;
margin-top: -30px; top: 35%" />
</div>
<iframe id="wysiwygit_page_to_edit" name="wysiwygit_page_to_edit" src="about:blank"
frameborder="0">
</iframe>
</div>
</body>
</html>
<?php
// Clean up old tmp files. Don't do more often than once per day.
$is_last_cleanup = file_exists("last_cleanup");
if (! ($is_last_cleanup && time() < filemtime("last_cleanup") + 24*3600)) {
// Find tmp files from viewing previous versions (filenames look like
// .../subdir/.page_2011-09-15_083023.php) and tmp files from edits
// and lock files (.wys_lck.page...)
// Older than 24 hours. Run in background.
$pat1 = '".*[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]_[0-9][0-9][0-9][0-9][0-9][0-9].*"';
$pat2 = '".tmp.*"';
$pat3 = '".wys_lck.*"';
$cmd = "( find $home_dir -name $pat1 -o -name $pat2 -o -name $pat3 -type f -mtime +0 -print0 | xargs -0 /bin/rm -f ) &";
if ($debug[2]) {
my_error_log("[cleanup] $cmd");
}
system($cmd);
// Touch file to indicate have done cleanup.
touch("last_cleanup");
}
?>