0.11beta6 Released!

Project Announcements. This is read-only, as in... not for problems/bugs/feature request.
Ted
Power Poster
Power Poster
Posts: 3329
Joined: Fri Jun 11, 2004 6:58 pm

Re: 0.11beta6 Released!

Post by Ted »

Hmmm....

So adodb lite has added Data Dictionary functions and also the date functions.  Very interesting.  As soon as I get 0.11 out, I'll start playing with it again.
kishman155
Translator
Translator
Posts: 169
Joined: Sat Mar 12, 2005 12:30 pm

Re: 0.11beta6 Released!

Post by kishman155 »

I have modified class.module.inc.php to spare some memory
it's good if you have installed a lot of modules
it spares a little bit but it does
the original

Code: Select all

$query = "SELECT * FROM ".cms_db_prefix()."modules ORDER BY module_name";
			$result = $db->Execute($query);
			if ($result)
			{
				while ($row = $result->FetchRow())
				{
					if (isset($row['module_name']))
					{
						$modulename = $row['module_name'];
						if (isset($modulename))
						{
							if ($loadall == true)
							{
								if (isset($cmsmodules[$modulename]))
								{
									$cmsmodules[$modulename]['installed'] = true;
									$cmsmodules[$modulename]['active'] = ($row['active']=='1'?true:false);
								}
							}
							else
							{
								if ($row['active'] == '1')
								{
									if (is_file("$dir/$modulename/$modulename.module.php"))
									{
										include_once("$dir/$modulename/$modulename.module.php");
										if (class_exists($modulename))
										{
											$newmodule = new $modulename;
											$name = $newmodule->GetName();

											#Check to see if version in db matches file version
											global $CMS_VERSION;
											if ($row['version'] == $newmodule->GetVersion() && version_compare($newmodule->MinimumCMSVersion(), $CMS_VERSION) != 1)
											{
												$cmsmodules[$name]['object'] = $newmodule;
												$cmsmodules[$name]['installed'] = true;
												$cmsmodules[$name]['active'] = ($row['active']=='1'?true:false);
											}
											else
											{
												unset($cmsmodules[$name]);
											}
										}
										else //No point in doing anything with it
										{
											unset($cmsmodules[$name]);
										}
									}
									else
									{
										unset($cmsmodules[$modulename]);
									}
								}
							}
						}
					}
				}
			}
the function to load only activ and installed modules
the modified

Code: Select all

if (isset($db))
		{
			$query = "SELECT * FROM ".cms_db_prefix()."modules WHERE active=1 ORDER BY module_name";
			$result = $db->Execute($query);
			if ($result)
			{
				while ($row = $result->FetchRow())
				{
						$modulename = $row['module_name'];
						if (isset($modulename))
						{
							if ($loadall == true)
							{
								if (isset($cmsmodules[$modulename]))
								{
									$cmsmodules[$modulename]['installed'] = true;
									$cmsmodules[$modulename]['active'] = true;
								}
							}
							else
							{
									if (is_file("$dir/$modulename/$modulename.module.php"))
									{
										include_once("$dir/$modulename/$modulename.module.php");
										if (class_exists($modulename))
										{
											$newmodule = new $modulename;
											$name = $newmodule->GetName();

											#Check to see if version in db matches file version
											global $CMS_VERSION;
											if ($row['version'] == $newmodule->GetVersion() && version_compare($newmodule->MinimumCMSVersion(), $CMS_VERSION) != 1)
											{
												$cmsmodules[$name]['object'] = $newmodule;
												$cmsmodules[$name]['installed'] = true;
												$cmsmodules[$name]['active'] = true;
											}
											else
											{
												unset($cmsmodules[$name]);
											}
										}
										else //No point in doing anything with it
										{
											unset($cmsmodules[$name]);
										}
									}
									else
									{
										unset($cmsmodules[$modulename]);
									}
								
							}
						
					}
				}
			}
		}
	}
with this modification i spared 1642bytes of memory by loading the modules on the contentpage
11460560
11458912

kishman155
Piratos

Re: 0.11beta6 Released!

Post by Piratos »

Yeah that is the right way.

Add if you take this you are winning speed:

Code: Select all

if (isset($db))
		{
			$query = "SELECT * FROM ".cms_db_prefix()."modules WHERE active=1 ORDER BY module_name";
			$row = $db->_Execute($query);
				while (!$row->EOF)
				{
					if (isset($row->fields['module_name']))
					{
						$modulename = $row->fields['module_name'];
						if (isset($modulename))
						{
							if ($loadall == true)
							{
								if (isset($cmsmodules[$modulename]))
								{
									$cmsmodules[$modulename]['installed'] = true;
									$cmsmodules[$modulename]['active'] = ($row['active']=='1'?true:false);
								}
							}
							else
							{
								if ($row->fields['active'] == '1')
								{
									if (is_file("$dir/$modulename/$modulename.module.php"))
									{
										include_once("$dir/$modulename/$modulename.module.php");
										if (class_exists($modulename))
										{
											$newmodule = new $modulename;
											$name = $newmodule->GetName();

											#Check to see if version in db matches file version
											global $CMS_VERSION;
											if ($row->fields['version'] == $newmodule->GetVersion() && version_compare($newmodule->MinimumCMSVersion(), $CMS_VERSION) != 1)
											{
												$cmsmodules[$name]['object'] = $newmodule;
												$cmsmodules[$name]['installed'] = true;
												$cmsmodules[$name]['active'] = ($row->fields['active']=='1'?true:false);
											}
											else
											{
												unset($cmsmodules[$name]);
											}
										}
										else //No point in doing anything with it
										{
											unset($cmsmodules[$name]);
										}
									}
									else
									{
										unset($cmsmodules[$modulename]);
									}
								}
							}
						}
					}
				$row->MoveNext();
				}
		}
	}

	/**
Piratos

Re: 0.11beta6 Released!

Post by Piratos »

Here the Adodb Speed-Version of function LoadFromId of the content.class.inc.php
        function LoadFromId($id, $loadProperties = false)
{
global $gCms, $config, $sql_queries, $debug_errors;
$db = &$gCms->db;

$result = false;

if (-1 _Execute($query, array($id));

if (!$row->EOF)
{
$this->mId = $row->fields["content_id"];
$this->mName = $row->fields["content_name"];
$this->mAlias = $row->fields["content_alias"];
$this->mOldAlias = $row->fields["content_alias"];
$this->mType = strtolower($row->fields["type"]);
$this->mOwner = $row->fields["owner_id"];
#$this->mProperties = new ContentProperties();
$this->mParentId = $row->fields["parent_id"];
$this->mOldParentId = $row->fields["parent_id"];
$this->mTemplateId = $row->fields["template_id"];
$this->mItemOrder = $row->fields["item_order"];
$this->mOldItemOrder         = $row->fields["item_order"];
$this->mHierarchy = $row->fields["hierarchy"];
$this->mMenuText = $row->fields['menu_text'];
$this->mMarkup = $row->fields['markup'];
$this->mActive = ($row->fields["active"] == 1?true:false);
$this->mCollapse = ($row->fields["collapsed"] == 1?true:false);
$this->mDefaultContent = ($row->fields["default_content"] == 1?true:false);
$this->mShowInMenu = ($row->fields["show_in_menu"] == 1?true:false);
$this->mCachable = ($row->fields["cachable"] == 1?true:false);
$this->mLastModifiedBy = $row->fields["last_modified_by"];
$this->mCreationDate = $row->fields["create_date"];
$this->mModifiedDate = $row->fields["modified_date"];

$result = true;
}
else
{
if (true == $config["debug"])
{
# :TODO: Translate the error message
$debug_errors .= "Could not retrieve content from db\n";
}
}

if ($result && $loadProperties)
{
$this->mProperties->Load($this->mId);
$this->mPropertiesLoaded = true;

if (NULL == $this->mProperties)
{
$result = false;

# debug mode
if (true == $config["debug"])
{
# :TODO: Translate the error message
$debug_errors .= "Could not load properties for content\n";
}
}
}

if (false == $result)
{
$this->SetInitialValues();
}
}
else
{
# debug mode
if ($config["debug"] == true)
{
# :TODO: Translate the error message
$debug_errors .= "The id wasn't valid : $id\n";
}
}

$this->Load();

return $result;
}
Piratos

Re: 0.11beta6 Released!

Post by Piratos »

Here some other functions of the same script:
        function ListTemplates()
{
global $gCms;

$db = $gCms->db;
$config = $gCms->config;

$retresult = array();

$query = "SELECT * from ".cms_db_prefix()."module_templates WHERE module_name = ?";
$result = $db->Execute($query, array($this->GetName()));

if (!$result->EOF)
{
array_push($retresult, $result->fields['template_name']);
}

return $retresult;
}

/**
* Returns a database saved template.  This should be used for admin functions only, as it doesn't
* follow any smarty caching rules.
*/
function GetTemplate($tpl_name)
{
global $gCms;

$db = $gCms->db;
$config = $gCms->config;

$query = "SELECT * from ".cms_db_prefix()."module_templates WHERE module_name = ? and template_name = ?";
$result = $db->Execute($query, array($this->GetName(), $tpl_name));

if (!$result->EOF)
{
return $result->fields['content'];
}

return '';
}

function SetTemplate($tpl_name, $content)
{
$db = $this->cms->db;

$query = 'SELECT module_name FROM '.cms_db_prefix().'module_templates WHERE module_name = ? and template_name = ?';
$result = $db->Execute($query, array($this->GetName(), $tpl_name));

if ($result->EOF)
{
$query = 'INSERT INTO '.cms_db_prefix().'module_templates (module_name, template_name, content, create_date, modified_date) VALUES (?,?,?,?,?)';
$db->Execute($query, array($this->GetName(), $tpl_name, $content, $db->DBTimeStamp(time()), $db->DBTimeStamp(time())));
}
else
{
$query = 'UPDATE '.cms_db_prefix().'module_templates SET content = ?, modified_date = ? WHERE module_name = ? AND template_name = ?';
$db->Execute($query, array($content, $db->DBTimeStamp(time()), $this->GetName(), $tpl_name));
}
}
Piratos

Re: 0.11beta6 Released!

Post by Piratos »

Here the optimized class.stylsheet.inc.php:

SetInitialValues();
}

function SetInitialValues()
{
$this->id = -1;
$this->name = '';
$this->value = '';
$this->media_type = '';
}

function Save()
{
$result = false;

if ($this->id > -1)
{
$result = StylesheetOperations::UpdateStylesheet($this);
}
else
{
$newid = StylesheetOperations::InsertStylesheet($this);
if ($newid > -1)
{
$this->id = $newid;
$result = true;
}

}

return $result;
}

function Delete()
{
$result = false;

if ($this->id > -1)
{
$result = StylesheetOperations::DeleteStylesheetByID($this->id);
if ($result)
{
$this->SetInitialValues();
}
}

return $result;
}
}

/**
* Class for doing stylesheet related functions.  Maybe of the Group object functions are just wrappers around these.
*
* @since 0.11
* @package CMS
*/
class StylesheetOperations
{
function LoadStylesheets()
{
global $gCms;
$db = &$gCms->db;

$result = array();

$query = "SELECT css_id, css_name, css_text, media_type FROM ".cms_db_prefix()."css ORDER BY css_id";
$row = $db->Execute($query);

                while (!$row->EOF)
                {
                      $onestylesheet = new Stylesheet();
                      $onestylesheet->id = $row->fields['css_id'];
                      $onestylesheet->name = $row->fields['css_name'];
                      $onestylesheet->value = $row->fields['css_text'];
                      $onestylesheet->media_type = $row->fields['media_type'];
                      array_push($result, $onestylesheet);
                      $row->MoveNext();
                }


return $result;
}

function LoadStylesheetByID($id)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "SELECT css_id, css_name, css_text, media_type FROM ".cms_db_prefix()."css WHERE css_id = ?";
$row = $db->Execute($query, array($id));
while (!$row->EOF)
{
      $onestylesheet = new Stylesheet();
      $onestylesheet->id = $row->fields['css_id'];
      $onestylesheet->name = $row->fields['css_name'];
      $onestylesheet->value = $row->fields['css_text'];
      $onestylesheet->media_type = $row->fields['media_type'];
      $result = $onestylesheet;
                      $row->MoveNext();
}

return $result;
}

function InsertStylesheet($stylesheet)
{
$result = -1;

global $gCms;
$db = &$gCms->db;

$new_stylesheet_id = $db->GenID(cms_db_prefix()."css_seq");
$query = "INSERT INTO ".cms_db_prefix()."css (css_id, css_name, css_text, media_type, create_date, modified_date) VALUES (?,?,?,?,?,?)";
$dbresult = $db->Execute($query, array($new_stylesheet_id, $stylesheet->name, $stylesheet->value, $stylesheet->media_type, $db->DBTimeStamp(time()), $db->DBTimeStamp(time())));
if ($dbresult !== false)
{
$result = $new_stylesheet_id;
}

return $result;
}

function UpdateStylesheet($stylesheet)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "UPDATE ".cms_db_prefix()."css SET css_name = ?,css_text = ?, media_type = ?, modified_date = ? WHERE css_id = ?";
$dbresult = $db->Execute($query, array($stylesheet->name, $stylesheet->value, $stylesheet->media_type, $db->DBTimeStamp(time()), $stylesheet->id));
if ($dbresult !== false)
{
$result = true;
}

return $result;
}

function DeleteStylesheetByID($id)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "DELETE FROM ".cms_db_prefix()."css_assoc where assoc_css_id = ?";
$dbresult = $db->Execute($query, array($id));

$query = "DELETE FROM ".cms_db_prefix()."css where css_id = ?";
$dbresult = $db->Execute($query, array($id));

if ($dbresult !== false)
{
$result = true;
}

return $result;
}

function CheckExistingStylesheetName($name)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "SELECT css_id from ".cms_db_prefix()."css WHERE css_name = ?";
$dbresult = $db->Execute($query,array($name));

if (!$dbresult->EOF)
{
$result = true;
}

return $result;
}
}

# vim:ts=4 sw=4 noet
?>
Piratos

Re: 0.11beta6 Released!

Post by Piratos »

And here some Adodb optimized functions of class.group.inc.php:

function LoadGroups()
{
global $gCms;
$db = &$gCms->db;

$result = array();

$query = "SELECT group_id, group_name, active FROM ".cms_db_prefix()."groups ORDER BY group_id";
$row = $db->Execute($query);
while (!$row->EOF)
{
      $onegroup = new Group();
      $onegroup->id = $row->fields['group_id'];
      $onegroup->name = $row->fields['group_name'];
      $onegroup->active = $row->fields['active'];
      array_push($result, $onegroup);
                      $row->MoveNext();
}

return $result;
}

function LoadGroupByID($id)
{

$result = false;

global $gCms;
$db = &$gCms->db;

$query = "SELECT group_id, group_name, active FROM ".cms_db_prefix()."groups WHERE group_id = ? ORDER BY group_id";
$row = $db->Execute($query, array($id));
while (!$row->EOF)
{
      $onegroup = new Group();
      $onegroup->id = $row->fields['group_id'];
      $onegroup->name = $row->fields['group_name'];
      $onegroup->active = $row->fields['active'];
      $result = $onegroup;
      $row->MoveNext();
}
return $result;
}
Piratos

Re: 0.11beta6 Released!

Post by Piratos »

And here the Adodb optimized class.user.inc.php:

SetInitialValues();
}

/**
* Sets object to some sane initial values
*
* @since 0.6.1
*/
function SetInitialValues()
{
$this->id = -1;
$this->username = '';
$this->password = '';
$this->firstname = '';
$this->lastname = '';
$this->email = '';
$this->active = false;
$this->adminaccess = false;
}

/**
* Encrypts and sets password for the User
*
* @since 0.6.1
*/
function SetPassword($password)
{
$this->password = md5($password);
}

/**
* Saves the user to the database.  If no user_id is set, then a new record
* is created.  If the uset_id is set, then the record is updated to all values
* in the User object.
*
* @returns mixed If successful, true.  If it fails, false.
* @since 0.6.1
*/
function Save()
{
$result = false;

if ($this->id > -1)
{
$result = UserOperations::UpdateUser($this);
}
else
{
$newid = UserOperations::InsertUser($this);
if ($newid > -1)
{
$this->id = $newid;
$result = true;
}

}

return $result;
}

/**
* Delete the record for this user from the database and resets
* all values to their initial values.
*
* @returns mixed If successful, true.  If it fails, false.
* @since 0.6.1
*/
function Delete()
{
$result = false;

if ($this->id > -1)
{
$result = UserOperations::DeleteUserByID($this->id);
if ($result)
{
$this->SetInitialValues();
}
}

return $result;
}
}

/**
* Class for doing user related functions.  Maybe of the User object functions
* are just wrappers around these.
*
* @since 0.6.1
* @package CMS
*/
class UserOperations
{
/**
* Gets a list of all users
*
* @returns array An array of User objects
* @since 0.6.1
*/
function LoadUsers()
{
global $gCms;
$db = &$gCms->db;

$result = array();

$query = "SELECT user_id, username, password, first_name, last_name, email, active, admin_access FROM ".cms_db_prefix()."users ORDER BY username";
$row = $db->Execute($query);
        while (!$row->EOF)
{
      $oneuser = new User();
      $oneuser->id = $row->fields['user_id'];
      $oneuser->username = $row->fields['username'];
      $oneuser->firstname = $row->fields['first_name'];
      $oneuser->lastname = $row->fields['last_name'];
      $oneuser->email = $row->fields['email'];
      $oneuser->password = $row->fields['password'];
      $oneuser->active = $row->fields['active'];
      $oneuser->adminaccess = $row->fields['admin_access'];
      array_push($result, $oneuser);
                      $row->MoveNext();
}

return $result;
}


/**
* Gets a list of all users in a given group
*
* @param mixed $groupid Group for the loaded users
* @returns array An array of User objects
*/
function LoadUsersInGroup($groupid)
{
global $gCms;
$db = &$gCms->db;
$result = array();

$query = "SELECT u.user_id, u.username, u.password, u.first_name, u.last_name, u.email, u.active, u.admin_access FROM ".cms_db_prefix()."users u, ".cms_db_prefix()."groups g, ".cms_db_prefix()."user_groups cg where cg.user_id = u.user_id and cg.group_id = g.group_id and g.group_id =? ORDER BY username";
$row = $db->Execute($query, array($groupid));
while (!$row->EOF)
{
      $oneuser = new User();
      $oneuser->id = $row->fields['user_id'];
      $oneuser->username = $row->fields['username'];
      $oneuser->firstname = $row->fields['first_name'];
      $oneuser->lastname = $row->fields['last_name'];
      $oneuser->email = $row->fields['email'];
      $oneuser->password = $row->fields['password'];
      $oneuser->active = $row->fields['active'];
      $oneuser->adminaccess = $row->fields['admin_access'];
      array_push($result, $oneuser);
      $row->MoveNext();
}

return $result;
}

/**
* Loads a user by username.
*
* @param mixed $username Username to load
* @param mixed $password Password to check against
* @param mixed $activeonly Only load the user if they are active
* @param mixed $adminaccessonly Only load the user if they have admin access
*
* @returns mixed If successful, the filled User object.  If it fails, it returns false.
* @since 0.6.1
*/
function LoadUserByUsername($username, $password = '', $activeonly = true, $adminaccessonly = false)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$params = array();

$query = "SELECT user_id FROM ".cms_db_prefix()."users WHERE username = ?";
array_push($params, $username);

if ($password != '')
{
$query .= " AND password = ?";
array_push($params, md5($password));
}

if ($activeonly == true)
{
$query .= " AND active = 1";
}

if ($adminaccessonly == true)
{
$query .= " AND admin_access = 1";
}

$row = $db->Execute($query, $params);

if (!$row->EOF)
{
$id = $row->fields['user_id'];
$result = UserOperations::LoadUserByID($id);
}

return $result;
}

/**
* Loads a user by user id.
*
* @param mixed $id User id to load
*
* @returns mixed If successful, the filled User object.  If it fails, it returns false.
* @since 0.6.1
*/
function LoadUserByID($id)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "SELECT username, password, active, first_name, last_name, admin_access, email FROM ".cms_db_prefix()."users WHERE user_id = ?";
$row = $db->Execute($query, array($id));
if (!$row->EOF)
{
  $oneuser = new User();
  $oneuser->id = $id;
  $oneuser->username = $row->fields['username'];
  $oneuser->password = $row->fields['password'];
  $oneuser->firstname = $row->fields['first_name'];
  $oneuser->lastname = $row->fields['last_name'];
  $oneuser->email = $row->fields['email'];
  $oneuser->adminaccess = $row->fields['admin_access'];
  $oneuser->active = $row->fields['active'];
  $result = $oneuser;
}

return $result;
}

/**
* Saves a new user to the database.
*
* @param mixed $usre User object to save
*
* @returns mixed The new user id.  If it fails, it returns -1.
* @since 0.6.1
*/
function InsertUser($user)
{
$result = -1;

global $gCms;
$db = &$gCms->db;

$new_user_id = $db->GenID(cms_db_prefix()."users_seq");
$query = "INSERT INTO ".cms_db_prefix()."users (user_id, username, password, active, first_name, last_name, email, admin_access, create_date, modified_date) VALUES (?,?,?,?,?,?,?,?,?,?)";
#$dbresult = $db->Execute($query, array($new_user_id, $user->username, $user->password, $user->active, $user->firstname, $user->lastname, $user->email, $user->adminaccess, $db->DBTimeStamp(time()), $db->DBTimeStamp(time())));
$dbresult = $db->Execute($query, array($new_user_id, $user->username, $user->password, $user->active, $user->firstname, $user->lastname, $user->email, 1, $db->DBTimeStamp(time()), $db->DBTimeStamp(time()))); //Force admin access on
if ($dbresult !== false)
{
$result = $new_user_id;
}

return $result;
}

/**
* Updates an existing user in the database.
*
* @param mixed $user User object to save
*
* @returns mixed If successful, true.  If it fails, false.
* @since 0.6.1
*/
function UpdateUser($user)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "UPDATE ".cms_db_prefix()."users SET username = ?, password = ?, active = ?, modified_date = ?, first_name = ?, last_name = ?, email = ?, admin_access = ? WHERE user_id = ?";
#$dbresult = $db->Execute($query, array($user->username, $user->password, $user->active, $db->DBTimeStamp(time()), $user->firstname, $user->lastname, $user->email, $user->adminaccess, $user->id));
$dbresult = $db->Execute($query, array($user->username, $user->password, $user->active, $db->DBTimeStamp(time()), $user->firstname, $user->lastname, $user->email, 1, $user->id));
if ($dbresult !== false)
{
$result = true;
}

return $result;
}

/**
* Deletes an existing user from the database.
*
* @param mixed $id Id of the user to delete
*
* @returns mixed If successful, true.  If it fails, false.
* @since 0.6.1
*/
function DeleteUserByID($id)
{
$result = false;

global $gCms;
$db = &$gCms->db;

$query = "DELETE FROM ".cms_db_prefix()."additional_users where user_id = ?";
$db->Execute($query, array($id));

$query = "DELETE FROM ".cms_db_prefix()."users where user_id = ?";
$dbresult = $db->Execute($query, array($id));

$query = "DELETE FROM ".cms_db_prefix()."userprefs where user_id = ?";
$dbresult = $db->Execute($query, array($id));

if ($dbresult !== false)
{
$result = true;
}

return $result;
}

/**
* Show the number of pages the given user's id owns.
*
* @param mixed $id Id of the user to count
*
* @returns mixed Number of pages they own.  0 if any problems.
* @since 0.6.1
*/
function CountPageOwnershipByID($id)
{
$result = 0;

global $gCms;
$db = &$gCms->db;

$query = "SELECT count(*) AS count FROM ".cms_db_prefix()."content WHERE owner_id = ?";
$row = $db->Execute($query, array($id));
if (!$row->EOF && isset($row->fields["count"]))
{
  $result = $row->fields["count"];

}

return $result;
}

function GenerateDropdown($currentuserid='', $name='ownerid')
{
$result = '';

$allusers = @UserOperations::LoadUsers();

if (count($allusers) > 0)
{
$result .= '';
foreach ($allusers as $oneuser)
{
$result .= 'id.'"';
if ($oneuser->id == $currentuserid)
{
$result .= ' selected="selected"';
}
$result .= '>'.$oneuser->username.'';
}
$result .= '';
}

return $result;
}
}

# vim:ts=4 sw=4 noet
?>
Ted
Power Poster
Power Poster
Posts: 3329
Joined: Fri Jun 11, 2004 6:58 pm

Re: 0.11beta6 Released!

Post by Ted »

Thanks for all of these.  I've implemented most of them, but not all because of it being a manual process.  I've tried to concentrate on things that involve rendering front end pages (content, templates), and left the users, groups stuff that's admin only for later.

If you could develop these against svn checkouts, I can probably get them in a lot easier.

Thanks again!
Post Reply

Return to “Announcements”