Overriding Panels' default category structure The development house I work at uses Panels for stuff a lot, and they're a central design tool for our clients. While we're able to group our own Panels content types and View Panes by specifying a category name, it isn't so easy for everything else: there's the useless content types in the "Activity" category, the confusing content types in "Entity", the overwhelming and mostly-useless content types in "Node (Tokens)", the really useless content types in "Page elements" (Why would I need to repeat design elements already in place on the page?)... I could go on. 

Plus random blocks are always dropped in the "Miscellaneous" category -- seemingly the last place I always look for content types I cannot find.

What I really need is the ability to organize Panels content types, and hide categories that aren't needed.

To that end I've started work on a module that lets the use build and organize Panels content types into custom categories. However, the first major roadblock I've run into is convincing Panels to use my layout instead of the one it generates from the plugin info hooks. 

In panels/includes/add-content.inc is template_preprocess_panels_add_content_modal(), which is where Panels seems to set up its category tree (Via the function's $vars argument). 


Is there any way of inserting a hook into the function chain that
discards the $var variable that Panels is passing to
template_preprocess_panels_add_content_modal() and instead
delivers my own?
If not, is there a way to override template_preprocess_panels_add_content_modal() with my own
version?
Or, best yet, is there a module somewhere that already does what I'm trying to do?


Many thanks!
"Whaddayamean you can override functions starting with 'template' like you can functions starting with 'hook'?" I ask...

I've finished my organizer and will post it as a sandbox module if my boss lets me. I ultimately just copied the source of template_preprocess_panels_add_content_modal() from panels/includes/add-content.inc and changed what was passed on -- $vars['categories'], $vars['categories_array'] and $vars['root_content'] were particularly important.

Surprised nobody answered this -- would've been an easy 10 points to just say "Yeah, template_preprocess functions work a bit like hooks in that you can insert your own version higher up the chain just by naming it a certain way..."