*Experimental* Patch: AJAX Auto-backup pages to your Email while Editing

Do something cool with CMS? Show us ...
This board is for 'Answers', and the discussion of answers... Not for questions.
Post Reply
User avatar
Elijah Lofgren
Power Poster
Power Poster
Posts: 811
Joined: Mon Apr 24, 2006 1:01 am

*Experimental* Patch: AJAX Auto-backup pages to your Email while Editing

Post by Elijah Lofgren »

I've just spent a couple hours making this experimental patch for admin/editcontent.php which automatically emails you the contents of the editcontent.php form every 3 minutes:

Code: Select all

Index: editcontent.php
===================================================================
--- editcontent.php	(revision 5)
+++ editcontent.php	(working copy)
 -34,8 +34,10 @@
 $xajax = new xajax();
 $xajax->registerFunction('ajaxpreview');
 
+$xajax->registerFunction('ajaxemailbackup');
+
 $xajax->processRequests();
-$headtext = $xajax->getJavascript('../lib/xajax')."\n";
+$headtext = $xajax->getJavascript('../lib/xajax');
 
 if (isset($_POST["cancel"]))
 {
 -62,14 +64,77 @@
 $apply = false;
 if (isset($_POST["applybutton"])) $apply = true;
 
+
+if (isset($_POST["ajaxemailbackup"])) {
+
+
+
+       global $gCms;
+        $config =& $gCms->GetConfig();
+        $contentops =& $gCms->GetContentOperations();
+
+        $content_type = $params['content_type'];
+        $contentops->LoadContentType($content_type);
+        $contentobj = UnserializeObject($_POST["serialized_content"]);
+	
+
+
+/*
+	#Fill contentobj with parameters
+		$contentobj->FillParams($_POST);
+		$error = $contentobj->ValidateData();
+
+		if (isset($_POST["ownerid"]))
+		{
+			$contentobj->SetOwner($_POST["ownerid"]);
+		}
+
+		#Fill Additional Editors (kind of kludgy)
+		if (isset($_POST["additional_editors"]))
+		{
+			$addtarray = array();
+			foreach ($_POST["additional_editors"] as $addt_user_id)
+			{
+				$addtarray[] = $addt_user_id;
+			}
+			$contentobj->SetAdditionalEditors($addtarray);
+		}
+		else if ($adminaccess)
+		{
+			$contentobj->SetAdditionalEditors(array());
+		}
+
+*/
+
+
+
+
+
+
+
+  $cmsmailer =& $gCms->modules['CMSMailer']['object'];
+  $cmsmailer->AddAddress('YOUR_EMAIL@example.com');
+  $cmsmailer->SetBody(print_r($contentobj,true));
+  $cmsmailer->IsHTML(false);
+  $cmsmailer->SetSubject('Test Email Backup for CMSMs');
+  $cmsmailer->Send();
+exit("it worked to email");
+
+
+
+}
+
 $ajax = false;
 if (isset($_POST['ajax']) && $_POST['ajax']) $ajax = true;
 
+
+
 if ($preview || $apply)
 {
 	$CMS_EXCLUDE_FROM_RECENT=1;
 }
 
+
 function ajaxpreview($params)
 {
 	global $gCms;
 -356,6 +421,62 @@
 
 $headtext .= <<<EOSCRIPT
 <__script__ type="text/javascript">
+
+Edit_Content_EmailBackup = function() {
+	
+	alert("backing up");
+
+	var data = new Array();
+	data.push('ajaxemailbackup=1');
+
+	var elements = Form.getElements($('contentform'));
+	for (var cnt = 0; cnt < elements.length; cnt++)
+	{
+		var elem = elements[cnt];
+		if (elem.type == 'submit')
+		{
+			continue;
+		}
+		var query = Form.Element.serialize(elem);
+		data.push(query);
+	}
+
+	new Ajax.Request(
+		'{$_SERVER['REQUEST_URI']}'
+		, {
+			method: 'post'
+			, parameters: data.join('&')
+			, onSuccess: function(t)
+			{
+				alert("backup worked");
+			}
+			, onFailure: function(t)
+			{
+				alert('Could not save: ' + t.status + ' -- ' + t.statusText);
+			}
+		}
+	);
+
+	return false;
+
+
+}
+
+function StartTimer()
+{
+every_millisecs = 180000
+  var Timer = setInterval("DoAJAXEmailBackup()", every_millisecs);
+}
+
+function DoAJAXEmailBackup()
+{
+  $('ajaxbackupbutton').onclick();
+}
+
+
+StartTimer();
+
+
 window.Edit_Content_Apply = function(button)
 {
 	$addlScriptSubmit
 -515,6 +636,10 @@
 */
 $submit_buttons .= ' <input type="submit" name="cancel" value="'.lang('cancel').'" class="pagebutton" onclick="return confirm(\''.lang('confirmcancel').'\');" onmouseover="this.className=\'pagebuttonhover\'" onmouseout="this.className=\'pagebutton\'" title="'.lang('canceldescription').'" />';
 $submit_buttons .= ' <input type="submit" onclick="return window.Edit_Content_Apply(this);" name="applybutton" value="'.lang('apply').'" class="pagebutton" onmouseover="this.className=\'pagebuttonhover\'" onmouseout="this.className=\'pagebutton\'" title="'.lang('applydescription').'" />
+<input type="submit" onclick="return window.Edit_Content_EmailBackup(this);" name="ajaxbackupbutton" id="ajaxbackupbutton" value="Backup via Email" class="pagebutton" 
+onmouseover="this.className=\'pagebuttonhover\'" onmouseout="this.className=\'pagebutton\'" title="'.lang('applydescription').'" />
+
+
 </p>
 </div>';
 //echo $submit_buttons;
The code still has debugging "alert()" statements in it so you'll want to remove those so you don't get annoyed every 3 minutes. ;)

Make sure you find this line and change it to your email:

Code: Select all

+  $cmsmailer->AddAddress('YOUR_EMAIL@example.com');
I'm attaching my modified admin/editcontent.php if you want to try it out instead of using the above patch.

What do you think?

It'd be cool if we could work together to improve this. :)

Maybe I'll get around to improving it later. We'll see. :)

Now I'll be able to edit pages with less worry of losing more than 3 minutes of work. :)  ;D :D

Be careful! Some web hosts might not want you sending emails every 3 minutes while editing a page. ;)

Enjoy,

Elijah Lofgren
Attachments

[The extension txt has been deactivated and can no longer be displayed.]

Note: I don't have time to take on any more projects. I'm quite busy. I may be too busy to reply to emails or messages. Thanks for your understanding. :)
Post Reply

Return to “Tips and Tricks”