Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

All other Modules /

Discuss all other Modules here.

Moderators: martimiz, Sean, Ed, biapar, Willr, Ingo, swaiba

Dashboard Module


Go to End


84 Posts   27698 Views

Avatar
Mo

Community Member, 541 Posts

5 October 2009 at 10:50am

Just an update. I have now updated the Trunk. Updates are:

Some tweaks to the templates, should be linking better now.

Latest version checking. The DashboardAdmin class uses the DOMDocument php class to screen scrape the Silverstripe SVN browser and pull out the latest version. It then compares to local version, and if out of date, shows an update message.

I would be interested to see how well this works for others?

Cheers,

Mo

Avatar
UncleCheese

Forum Moderator, 4102 Posts

8 October 2009 at 1:32am

To replicate the DataObjectManager error:

Click "edit" from the dashboard on a page with a DataObjectManager. Click "add," and you'll get the "I can't handle URLs..." error. Click the same page in the site tree to refresh, and the DataObjectManager works as expected.

It must have something to do with the URL being different? /admin/content/show/16 instead of just /admin/. I don't know. That's weird.

I have to check out that DOMDocument class. That sounds fantastic.

Avatar
Mad_Clog

Community Member, 78 Posts

9 October 2009 at 9:54pm

This module look really promising!
One bug i found, on the dashboard where it lists the last pages edited, when you click on the edit icon it links to the wrong page.

Currently:
admin/content/show/$ID
Changed to:
admin/cms/show/$ID

Same goes for the 'View' all link, content instead of cms

Another thing thing i noticed, editing assets, the link contains a target="_blank".
I don't think this should be the default behavior.

Also, it would be nice if you could add multiple RSS feeds instead of just a single one.

Keep up the good work!
Loving it so far, thanks for this module!

Avatar
Mad_Clog

Community Member, 78 Posts

9 October 2009 at 10:33pm

Edited: 09/10/2009 10:34pm

Here's a small patch for fetching the number of members

		// Count query is faster then fetching all members and counting the rows
		// Also check if they have atleast a single group assigned
		$members = new SQLQuery(
      		'COUNT(DISTINCT Member.ID)',
      		'Member INNER JOIN Group_Members ON Group_Members.MemberID = Member.ID'
    	);
    	$memberCount = $members->execute()->value();
		$membersStr	= ($memberCount == 1) ? 'member' : 'members';
		$output->push(new ArrayData(array(
			'Number' => $memberCount,
			'Item' => $membersStr
		)));

Avatar
Mo

Community Member, 541 Posts

10 October 2009 at 2:30am

I am aware, and have fixed the issue with the incorrect URL's in the trunk. Not added them to a new release yet, because I want to get the links in Silverstripe Navigator fixed.

I want to get the edit assets link to open in a lightbox popup, as if you were editing them from a tablefield. I am trying to work out if it would be easier try and use the prototype code in the core cms, or write my own jquery to do the same job.

The only trouble with multiple RSS fields is that I am not quite sure where they would go. I am trying to keep this simple and minimise the amount of clutter.

I will try your patch as soon as I get 5 mins (been a bit busy). I will also try and add some more features and release a new version.

Mo

Avatar
Mo

Community Member, 541 Posts

10 October 2009 at 2:31am

Uncle cheese: How did you generate the popups for DataObjectManager? Did you write your own javascript, or re-use some of the builtin Silverstripe code?

Avatar
UncleCheese

Forum Moderator, 4102 Posts

10 October 2009 at 8:52am

DataObjectManager uses Facebox. It's pretty lightweight and easy to use.

Avatar
UncleCheese

Forum Moderator, 4102 Posts

10 October 2009 at 9:10am

Edited: 10/10/2009 9:16am

Okay, I couldn't help myself. I jumped into the Dashboard module today and tweaked it to be more customizable with an open API. The basic idea is that every component of the dashboard is a plugin. You can create a plugin by building a subclass of DashboardPlugin and assigning $position and $sort properties to give it a spot on the dashboard. There are a few other properties you can throw at it, as well, such as $icon and $link. Other than that, it's just straight ViewableData, so any functions you need to create are nicely contained within the plugin class and feed the corresponding template.

Let's look at an example. On my site, let's say my client has a custom page type and really wants a view of it on the dashboard. Let's use the old standby "Staff Member" page example.

/mysite/code/StaffMemberPlugin.php

<?php

class StaffMemberPlugin extends DashboardPlugin
{

 static $position = "bottom";
 static $sort = 1;
 static $title = "Recent Staff Members";
 static $link = "admin/cms/staffmembers";
 static $link_text = "View All";
 static $icon = "dashboard/images/22/gear.png";
  
  function RecentStaffMembers()
  {
    return DataObject::get("StaffMember",null, "Created DESC");
  }
  
}

Let's walk through this..

static $position: this plugin will go on the bottom, by where the "unmoderated comments" box is. Other choices are "left," "middle" (where "recent activity" is), and "top" (where "get updates" is)

static $sort: The sort order of the plugin in its given position. Duplicate sort values will get resolved arbitrarily by the controller.

static $title: Title for the header tag

static $link: Optional link for the header tag

static $link_text: Text fot the link. This defaults to "View All." This line is unnecessary unless you want to assign a value other than "view all." Shown here just for example.

static $icon: Optional link to the icon for the header

function RecentStaffMembers: We'll use this function on the template to get our list of staff members.

Now, on to the template.

/mysite/templates/plugins/StaffMemberPlugin.ss

<% if RecentStaffMembers %>
<ul>
  <% control RecentStaffMembers %>
    <li>$Name, $JobTitle (<em>$Created.Ago</em>)</li>
  <% end_control %>
</ul>
<% else %>
<h4>There are no staff members.</h4>
<% end_if %>

All plugins are enabled by default. But let's say I want to get rid of the "Silverstripe News" plugin on my site.

/mysite/_config.php

DashboardPlugin::disable('SSNews');

The SSNews plugin is no longer visible on my dashboard.

That's it! In the ZIP file attached, I have modified the DashboardAdmin class to use plugins, and have migrated all the functions into their own plugin classes in /dashboard/code/plugins. They include: RecentFiles.php, RecentPages.php, SiteInfo.php, SSNews.php, UnmoderatedComments.php, and Updates.php.

Feedback and bug reports welcome. I think this will help make the dashboard more marketable to all kinds of sites now that users have the ability to create custom feeds. Let's keep this thing going!

Attached Files