A way to generate a changelog?

5 posts by 3 authors in: Forums > CMS Builder
Last Post: January 9, 2012   (RSS)

By zip222 - January 3, 2012 - edited: January 3, 2012

Is there a way to generate a log of changes made within the cms? I want to see the createdDate or updatedDate, and the user that made the change.

Re: [zip222] A way to generate a changelog?

By gkornbluth - January 7, 2012 - edited: January 7, 2012

Hi Zip222,

I don't know if this will help, but here's a recipe from my CMSB Cookbook http:///www.thecmsbcookbook.com that deals with creating a log of any member log ins and when they logged in. It may offer some ideas.

There's also a plugin called alertRecordSaved that Djulia wrote that has gone through several iterations. You can find out more about it in this thread. http://www.interactivetools.com/forum/gforum.cgi?do=post_view_flat;post=77560

Hope this all gets you going.

Best,

Jerry Kornbluth

CREATING A LOGIN LOG TO SEE WHICH MEMBERS SIGN IN AND WHEN

Chris Waddell from Interactive Tools offered this approach:

NOTE: Records will only be added to the "Login Log" section for actual membership logins, not by logins to the CMSB interface.

1) Create a Multi Record section called "Login Log".

2) Modify it and remove all the fields except "num" and "createdDate" (note that you'll need to "Enable System Field Editing" under the
"Advanced Commands..." dropdown to remove some of the fields.)

3) Add a List Field called "Who". Leave "Display As" set to "pulldown".

Modify your "Who" field as follows:

List Options: Get options from database (advanced)

Section Tablename: accounts
Use this field for option values: num
Use this field for option labels: username


4) Now, make some more changes to your Login Log section, this time at the top of the page:

In the General tab, change "ListPage Fields" to "createdDate, who".
Under the Viewer Urls tab, delete all the existing "Filename Fields" entries.
Under the Searching tab, set "Search Fields" to "who, createdDate".
Finally, under the Sorting tab, set "Order By" to "createdDate DESC". Now click Save Details.

5) Now open up cmsAdmin/plugins/websiteMembership/websiteMembership.php in a text editor and find "redirect on success". Add the code below
before "redirect on success":
// CUSTOM CODE! add record to login_log
global $TABLE_PREFIX;
mysql_query(mysql_escapef("INSERT INTO {$TABLE_PREFIX}login_log SET createdDate = NOW(), who = ?", $CURRENT_USER['num']))
or die("Mysql error adding login_log record: ". htmlspecialchars(mysql_error()) . "\n");


After you've created this log, you can create a list viewer that your client can access and restrict access to admins only.

Here's a simple example that you can style to match your site design.

At the top of your listing page:
NOTE: Don't forget to change the $dirsToCheck = array('/PATH_TO_YOUR_SERVER/','','../','../../','../../../'); to match your server path. You can find this in the admin>code generator code for any section.

<?php header('Content-type: text/html; charset=utf-8'); ?>
<?php
// load viewer library
$libraryPath = 'cmsAdmin/lib/viewer_functions.php';
$dirsToCheck = array('/PATH_TO_YOUR_SERVER/','','../','../../','../../../');
foreach ($dirsToCheck as $dir) { if (@include_once("$dir$libraryPath")) { break; }}
if (!function_exists('getRecords')) { die("Couldn't load viewer library, check filepath in sourcecode."); }

// load records
list($login_logRecords, $login_logMetaData) = getRecords(array(
'tableName' => 'login_log',
));
if (!$CURRENT_USER['isAdmin']) { websiteLogin_redirectToLogin(); }
?>
<!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>Login Log</title>
</head>
<body>

<?php foreach ($login_logRecords as $record): ?>
<?php echo date("F jS Y, g:i a ", strtotime($record['createdDate'])) ?>

<?php echo $record['who:label'];?>
<hr/>
<?php endforeach ?>
</body>
</html>

The first CMS Builder reference book is now available on-line!







Take advantage of a free 3 month trial subscription, only for CMSB users, at: http://www.thecmsbcookbook.com/trial.php

Re: [gkornbluth] A way to generate a changelog?

By zip222 - January 9, 2012

Thanks Jerry. I have actually implemented this specific thing before, but I am looking to do more. What am looking to do now is create a log of records that have been added, edited or deleted. Noting who made the change, when it was made, what table/record was changed, and if possible what type of change was made (add/edit/deleted).

Re: [zip222] A way to generate a changelog?

Sounds impressive and useful.

I hope you'll be willing to share you solutions.

Jerry Kornbluth
The first CMS Builder reference book is now available on-line!







Take advantage of a free 3 month trial subscription, only for CMSB users, at: http://www.thecmsbcookbook.com/trial.php