Jump to content

ProcessWire Dashboard


Recommended Posts

Hi @d'Hinnisdaël I'm using the module in all my projects now, very well done. Just one issue or something I missed to configure, when I'm using the template panel in which I need to create some pages based on buttons action I got PW fatar error class Page not found.

Link to comment
Share on other sites

8 minutes ago, Sevarf2 said:

Hi @d'Hinnisdaël I'm using the module in all my projects now, very well done. Just one issue or something I missed to configure, when I'm using the template panel in which I need to create some pages based on buttons action I got PW fatar error class Page not found.

Not sure what you're running into here. If you have a repo or gist with the code that's blowing up, I'm happy to take a look. Best bet is to make sure your templates are properly namespaced (ProcessWire).

Link to comment
Share on other sites

It's just a simple page creation
 

$mainNode     = $pages->get(1030);
$today             = date("Ymd");
$checkToday = $pages->get("name=$today");
if( !$checkToday->id ){
    
    $td                    = new Page();
    $td->parent     = $mainNode;
    $td->template  = $templates->get("day");
    $td->title          = $today;
    $td->save();
    
}

 


and in my admin I call the panel which is that code
It's a fresh PW install 3.0.148

	wire()->addHookAfter('Dashboard::getPanels', function ($event) {
    
    $panels = $event->return;
	    $panels->add([
        'panel' => 'template',
        'title' => 'Excel import',
        'size'  => 'full',
        'icon'  => 'upload',
        'data' => [
            'template' => 'dashboard/dashb_import.php'
        ]
    ]);
 
	    
});
	
Link to comment
Share on other sites

@Sevarf2 How do you manage state in your template — get variables?

The template panel works best for displaying static data. For creating pages and importing data I'd suggest creating a custom panel type. That'd make it much easier to manage the required multi-step processes. Or better yet, a Process module for importing data and a separate dashboard panel that only kicks off the import and hands off the actual workload to the main module.

  • Like 1
Link to comment
Share on other sites

  • 2 months later...
51 minutes ago, apeisa said:

Just noticed that module documentation returns 404 https://philippdaun.github.io/processwire-dashboard/

You're right, thanks for letting me know. Links should be fixed now. I just switched to a different GitHub username and hadn't come around to updating the links yet.

The docs can be found here now: daun.github.io/processwire-dashboard/

  • Like 4
Link to comment
Share on other sites

Thanks @d'Hinnisdaël

Gotta say I really like this module, solid work & documentation.

One suggestion - not sure I understand the reason for current Collection pagination? It only shows the count of results, instead of showing actual pager. Changing this to actual pager is trivial, but probably something you would like to offer as an option?

$pagination = sprintf(
  $this->_('Showing %d of %d'),
  $this->collection->count,
  $this->collection->getTotal()
);
$footer .= "<div>{$pagination}</div>";

so instead of that just use:

$footer .= "<div>{$this->collection->renderPager()}</div>";

And we have default PW pager working as expected. Of course this is not fully functional (and probably reason why left out from initial version?) is that it doesn't work with current table sorts which are only client sorts.

Another route for case where you really need paging would be using pagelist, but there I think pager limit should be a setting too.

Link to comment
Share on other sites

23 hours ago, apeisa said:

One suggestion - not sure I understand the reason for current Collection pagination? It only shows the count of results, instead of showing actual pager. Changing this to actual pager is trivial, but probably something you would like to offer as an option?

There's really two reasons this isn't implemented:

1 — I don't think it's all that necessary. For actual browsing of data that requires state and pagination, there's much better tools available: PageList and PageLister, among others. The pagination info, as implemented currently, is merely meant to communicate that there's more results than currently shown and avoid any confusion there.

2 — It's probably not that trivial to build. The native pagination breaks down once you do any sorting or render multiple paginated panels on a dashboard. To make it work well, it would have to be a custom-built solution that fetches results via AJAX and does the sorting server-side.

I'm not currently doing any substantial work on the module, however I'm planning to implement some missing features when I find the time later this summer. In the meantime, I'll happily accept pull requests for a working pagination feature.

  • Like 2
Link to comment
Share on other sites

Yes, I think you are probably right with both of your reasons. I did try to make pagelist work with pagination (it does, but couldn't get limit to be set dynamically, so it follows whatever is set on pagelist module which defaults to 50). It seems that I wont need pagination at all on dashboard (more proof for your point 1), but if the need arises I will definitely take a closer look into it.

Link to comment
Share on other sites

  • 3 weeks later...

Release 0.7.0 adds a few features and fixes an issue reported by @MoritzLost.

  • Collection panel: Field names as column headers
    The collections panel now uses the field label as column header. No need to pass them in explicitly anymore. See the docs on column headers for details.
  • Shortcuts panel: Add option to hide shortcut summaries
    Disable the summaries altogether by setting the summaries option to false.
  • Shortcuts panel: Fix undefined-index error when destructuring shortcuts
  • Like 4
Link to comment
Share on other sites

On 8/2/2020 at 2:26 PM, d'Hinnisdaël said:

Release 0.7.0 adds a few features and fixes an issue reported by @MoritzLost.

I have a problem with the new version, each time I open the dashboard, I get 2 messages:

1525728519_2020-08-0510_07_04-Dashboard.png.b5924f8bee4ef9ab2edb8fd2f5c9c5b5.png

If the message is closed, it will be displayed again the next time the dashboard is opened.

Link to comment
Share on other sites

13 minutes ago, zoeck said:

I have a problem with the new version, each time I open the dashboard, I get 2 messages

Right, thanks, I left a session message in there. I pushed a patch at version 0.7.1. While it propagates to the module directory, removing line 119 of DashboardPanelCollection.module should work as well.

  • Like 1
Link to comment
Share on other sites

43 minutes ago, d'Hinnisdaël said:

Right, thanks, I left a session message in there. I pushed a patch at version 0.7.1. While it propagates to the module directory, removing line 119 of DashboardPanelCollection.module should work as well.

That's it, thank you very much! 🙂 

Link to comment
Share on other sites

  • 1 month later...

Hi,

I have a question, can't get to pass option to a chart panel.

Whatever option are not getting apply. must be a synthax probleme maybe.

Here is the code. for instance with this code the legend is still below the doughnut (it should be rigth to it) and the dougnut is fairly thin and it should be 50%.

Thanks for your help.

 

$panels->add(
['panel' => 'chart',
	 'title' => 'Tags Status',
		 'data' => [
		    'chart' => [
		      	'type' => 'doughnut',
		      	'data' => [
		      		'labels' => ['Doc without tag','Doc not reviewed','Docs tags OK'],
		        
		        	'datasets' => [
		            	[
		            	'data' => [$noTag, $TagNotReviewed, $TagReviewed]
				    ]
			    ],
			    'options' => [
			    	'cutoutPercentage' => '50',
			    	'position' => 'right',			
				]
     	    ]
     	]
	]
]
);

 

Link to comment
Share on other sites

14 hours ago, antpre said:

I have a question, can't get to pass option to a chart panel.

The code looks right to me. The fact that you're seeing a chart at all means there's probably something off in the way your options are structured. The panel itself only sets the defaults so overriding them like you're doing it should work. I'm afraid I won't be of much help here since debugging Chart.js config is a bit out of scope of this module 👽

Link to comment
Share on other sites

  • 1 month later...

@d'Hinnisdaël I'm having some trouble with a Collection panel that lists user accounts. Specifically, with the "edit" action, which appears disabled for everyone but superusers. I checked the source code, apparently the edit action is disabled on DashboardPanelCollection.module#L327. $page->editable apparently returns false if the $page is a user, even for users with the user-admin permission. Probably because editing users is a special case?

Anyway, changing this to a hardcoded false fixes the problem in my case. Of course this isn't a general solution. Maybe the module could check for this special case and only disable the edit action if the current user doesn't have the user-admin permission? Not sure what the best solution is, does anybody know why $user->editable returns false even if the current user has the user-admin permission?

Thanks!

Link to comment
Share on other sites

@schwarzdesign Thanks for reporting. I'm afraid there's no easy solution without changing how the core handles user edit permissions. Currently, the editable() check fails for all processes other than the default page-edit or page-lister ones. That's why it doesn't work in the context of the Dashboard process. See the corresponding source code of PagePermissions.module.

I'm not sure why it's done this way and if there's a chance to get this opened up. I'd suggest you open an issue in the official ProcessWire repo to get a discussion started.

Checking for user-admin permissions as a special case sounds good but won't solve the problem: the user permissions are a lot more complex when you're handling superusers vs. non-superusers and multi-layer permission systems. There's user-admin-all and any combination of user-admin-[role] permissions we'd have to check manually. It's definitely better than the current state, though. I might implement this in the near future.

  • Thanks 1
Link to comment
Share on other sites

@d'Hinnisdaël Thanks for the reply! I've opened issue #1322 regarding the context-dependence of $user->editable. Hopefully something will come of it.

I also found issue #538, which seems to be related to this? Not sure. Regardless, the fact that $user->editable returns different results based on context is troublesome in any case, so I think you're right that this should be fixed in the core.

Link to comment
Share on other sites

1 hour ago, MarkE said:

Nice module which I use on a couple of sites. Just wondering if it is possible to specify a group to be shown in a tab?

There's currently no way of grouping panels in tabs. What'd be your use case?

Link to comment
Share on other sites

Just that one of my dashboards is getting a bit large. I'd like to have maybe 3 tabs - one a pure dashboard of information, one with various settings and one webmaster-only board with system information and housekeeping etc. I could do it with a custom module, but I like your dashboard for the information view 😉

Link to comment
Share on other sites

Maybe I'm trying to push this module too far. I decided to separate the other info into a separate (tabbed presentation) module.

Now I have a different need - to use a callback function in chart options. I can't see how to do that in the syntax, but maybe it's just not possible?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Similar Content

    • By Marco Ro
      Hi guys!
      I'm a bit anxious because this is the first module I present! (beta modulo) But I will finally be able to share something with the community too! :)
      This is a BETA version of the PayPal payment system called: PayPal Commerce Platform.
      It is an advanced system (Business Pro account is needed) that brings various benefits in terms of fees and above all integrates direct payment with credit/debit cards. 
      The module integrates with Padloper 0.0.2, which is the current installation I'm using.
      This system integrates the classic PayPal buy button, the alternative or local payment method and the new payment system: credit/debit cards that doesn't go through the PayPal account. It is a Stripe-style payment, it connects directly with the bank and integrates 3D security validation.
      I say that it is a BETA because this module currently only works with Sandbox account, to put it live you need to change API url manually (manually for the moment).
      Because this module is not ready for live:
      I would like to have your opinion on how I built the module (is the first one I do). I don't want to share something that is not fish but I need a comparison with someone more experienced than me, for be sure that this is the best way to code the module.
      If you want to try this I created a git, you will find all the instructions for installation and correct operation. (Git has a MIT licensed)
      https://github.com/MarcooRo/processwire-PayPal-Commerce-Platform I hope I did something that you guys can like :)
    • By stanoliver
      Hello Community!
      I found quite a  few ways or tools to style the admin or build a dashboard:
      - the new way with the .less compilation (reno style, rock style)
      - dashboard modules or tutorials how to build your own
      - admin on stereoids
      Vocabulary: With "admin like user" I do not mean a full admin but an user with quite a lot of priviledges ...
      My problem is that I do want to change the admin template for every (admin like) user in a different way. Or if I would build a bigger dashboard certain functionlity should only be available for a few (admin like) users but not for everyone.
      I would need different versions of the admin theme or the built dashboards for different admin users
      To start with a very simple example:
      Let's say I wanna give one (admin like) user a different background color (with css). 
      Let's say I wanna have an extra button or tab for some (admin like) user which another (admin like) user should not have
      How can I take advantage of processwire roles in all these examples I mentioned in the beginning?
       
       
    • By monollonom
      (once again I was surprised to see a work of mine pop up in the newsletter, this time without even listing the module on PW modules website 😅. Thx @teppo !)
      FieldtypeQRCode
      Github: https://github.com/romaincazier/FieldtypeQRCode
      Modules directory: https://processwire.com/modules/fieldtype-qrcode/
      A simple fieldtype generating a QR Code from the public URL of the page, and more.
      Using the PHP library QR Code Generator by Kazuhiko Arase.

      Options
      In the field’s Details tab you can change between .gif or .svg formats. If you select .svg you will have the option to directly output the markup instead of a base64 image. SVG is the default.
      You can also change what is used to generate the QR code and even have several sources. The accepted sources (separated by a comma) are: httpUrl, editUrl, or the name of any text/URL/file/image field.
      If LanguageSupport is installed the compatible sources (httpUrl, text field, ...) will return as many QR codes as there are languages. Note however that when outputting on the front-end, only the languages visible to the user will be generated.
      Formatting
      Unformatted value
      When using $page->getUnformatted("qrcode_field") it returns an array with the following structure:
      [ [ "label" => string, // label used in the admin "qr" => string, // the qrcode image "source" => string, // the source, as defined in the configuration "text" => string // and the text used to generate the qrcode ], ... ] Formatted value
      The formatted value is an <img>/<svg> (or several right next to each other). There is no other markup.
      Should you need the same markup as in the admin you could use:
      $field = $fields->get("qrcode_field"); $field->type->markupValue($page, $field, $page->getUnformatted("qrcode_field")); But it’s a bit cumbersome, plus you need to import the FieldtypeQRCode's css/js. Best is to make your own markup using the unformatted value.
      Static QR code generator
      You can call FieldtypeQRCode::generateQRCode to generate any QR code you want. Its arguments are:
      string $text bool $svg Generate the QR code as svg instead of gif ? (default=true) bool $markup If svg, output its markup instead of a base64 ? (default=false) Hooks
      Please have a look at the source code for more details about the hookable functions.
      Examples
      $wire->addHookAfter("FieldtypeQRCode::getQRText", function($event) { $page = $event->arguments("page"); $event->return = $page->title; // or could be: $event->return = "Your custom text"; }) $wire->addHookAfter("FieldtypeQRCode::generateQRCodes", function($event) { $qrcodes = $event->return; // keep everything except the QR codes generated from editUrl foreach($qrcodes as $key => &$qrcode) { if($qrcode["source"] === "editUrl") { unset($qrcodes[$key]); } } unset($qrcode); $event->return = $qrcodes; })
    • By Sebi
      AppApiFile adds the /file endpoint to the AppApi routes definition. Makes it possible to query files via the api. 
      This module relies on the base module AppApi, which must be installed before AppApiFile can do its work.
      Features
      You can access all files that are uploaded at any ProcessWire page. Call api/file/route/in/pagetree?file=test.jpg to access a page via its route in the page tree. Alternatively you can call api/file/4242?file=test.jpg (e.g.,) to access a page by its id. The module will make sure that the page is accessible by the active user.
      The GET-param "file" defines the basename of the file which you want to get.
      The following GET-params (optional) can be used to manipulate an image:
      width height maxwidth maxheight cropX cropY Use GET-Param format=base64 to receive the file in base64 format.
    • By MarkE
      This fieldtype and inputfield bundle was built for storing measurement values within a field, rendering them in a variety of formats and converting them to other units or otherwise modifying them via the API.
      The API consists of a number of predefined functions, some of which include...
      render() for rendering the measurement object, valueAs() for converting the value to another unit value, convertTo() for converting the whole measurement object to different units, and add() and subtract() for for modifying the stored value by the value (converted as required) in another measurement. In the admin the inputfield includes a checkbox (which can be optionally disabled) for converting values on page save. For an example if a value was typed in as centimeters, the unit was changed to metres, and the page saved with this checkbox selected, said value would be automatically converted so that e.g. 170 cm becomes 1.7 m.

      A simple length field using Fieldtype Measurement and Inputfield Measurement.
      Combination units (e.g. feet and inches) are also supported.
      Please note that this module is 'proof of concept' at the moment - there are limited units available and quite a lot of code tidying to do. More units will be added shortly.
      See the GitHub at https://github.com/MetaTunes/FieldtypeMeasurement for full details and updates.
×
×
  • Create New...