phpDocumentor pond
[ class tree: pond ] [ index: pond ] [ all elements ]

Todo List



  • fp>This should be moved to the backoffice. In the BO, this should actually be split into: App Settings: checkbox [] allow cross posting another checkbox [] allow moving posting between different blogs Each blog's settings: radio between:
    • One category per post
    • Multiple categories per post (requires transparent handling of main cat)
    • Main cat + extra cats
    • Don't use categories (this requires to transparently manage a default category)


  • fp> we'd probably want to group all the advanced debug vars under a single setting now. We might even auto enable it when $debug=2. (And we might actually want to include a $debug="cookie" mode for easy switching with bookmarks or a bookmarklet)


  • This might be used in switch_layout().


  • move to admin interface (specific list editor), include query params


  • dh> If the query itself uses already e.g. "CHARACTER SET latin1" it should not get overridden..


  • move to admin interface (T_useragents list editor)

    'type' aggregator currently gets only used to "translate" user agent strings. An aggregator hit gets detected by accessing the feed.


  • (legacy): Allow overriding from /qp_config/_config_TEST.php?
  • EdB: IMPORTANT! make this be configurable new user defaults one day


  • (legacy): Allow overriding from /qp_config/_config_TEST.php?
  • EdB: IMPORTANT! $_defaults excites me. dunno why ... or what this is even for


  • add some checking for $vals to be an array of xmlrpcvals?


  • add some checking for $vals to be an array?


  • dh> "children" is plural..!


  • (legacy): fp> include basic.css ? -- rename to add_headlines_for* -- potential problem with inclusion order of CSS files!! dh> would be nice to have the batch of CSS in a separate file. basic.css would get included first always, then e.g. this toolbar.css.




  • dh> IMHO this method is too generic used! It gets used for:
    • comment author name
    • comment/message author email
    • comment content
    • message (email) content
    • validate_url
    ..and validates all this against the antispam blacklist! We should rather differentiate here more and make it pluggable!


  • Allow applying / re-checking of the known data, not just after an update!


  • Transform to $field_params schema.


  • EdB: this is used by qp_inc/items/views/_item_list_full.view.php in v0.0.0 (EdB)


  • EdB: this is used in 3 cases in this file in v0.0.0 (EdB)


  • Implement iconv and PHP mapping tables


  • this seems a bit weird (not really relying on the cache ($_count) and unsetting 'all') -> write testcases to safely be able to change it.


  • allow overriding?
  • handle problem of empty groups!


  • move this to Blog object (only half done here)


  • NOT UP TO DATE AT ALL :( -- update field names before activating this


  • add 5 plugin hooks. Will be widgetized later (same as TemplateTag became Widgets)


  • dh> Provide iteration "interface"!


  • Handle COMMENT for tables?!


  • (legacy): dh> This appears to not display e.g. errors which got inserted?!! I also don't see how this is a "simple" param (in the sense of useful/required)
  • (legacy): optimize


  • Make this simple! start by getting rid of the $category selection and the special cases for 'all'. If you don't want to display ALL messages, then you should not log them in the same Log object and you should instantiate separate logs instead.


  • EdB: one day this needs a 'class' param instead of assuming "msg_nothing"


  • @Francois: please check API and change as appropriate.


  • dh> Should we try remaining methods, if the previous one(s) failed?
  • Tblue> Also allow HTTP POST.


  • dh> Steal the code from phpMyAdmin :)


  • htmlspecialchars() takes a charset argument, which we could provide ($evo_charset?)


  • EdB: this is used 9 times by qp_install/index.php in v0.0.0 (EdB)


  • check this in a multiblog page...
  • This should support visibility: at least in the default front office (_feedback.php), there should only the number of visible comments/trackbacks get used (Item::feedback_link()).


  • dh> Add support for ETag / If-Modified-Since. Maybe send "Expires", too? (to "force" caching) fp> for more efficient caching (like creating a thumbnail on view 1 then displaying the thumbnail again on view 2), this should probably redirect to the static file right after creating it (when $public_access_to_media=true OF COURSE) dh> this would add another redirect/HTTP request and no cache handling, assuming that the server is not configured for smart caching. Additionally, it does not help for non-public access, which is the meat of this file. I've added "Expires: in ten years" now, but not for thumbs (see comment there).


  • Allow the user to choose whether to upload attachments to the blog media folder or to his user root.
  • check different encodings. only tested with iso-8859-1
  • tested and working with thunderbird (text, html, signed), yahoo mail (text, html), outlook webmail, K800i
  • try more exotic email clients like mobile phones


  • fp> We may need to add some keys like the locale or the charset, I'm not sure.


  • fp> split into 1 function per case. (typed @return values)


  • implement $order


  • Provide functionality to make those links accessible without JS (using GET parameter)


  • (legacy): replace [?] with icon,
  • (legacy): write url suffix dynamically based on topic and language


  • dh> refactor this into e.g. create_media_dir() and use it for Blog::get_media_dir, too.
  • These status messages should rather go to a "syslog" and not be displayed to a normal user


  • explore usage of mb_http_input(): does it detect http headers + post data? if so, use it instead of hand-detection!!!


  • fp> do NOT allow $redirect_to = NULL. This leads to spaghetti code and unpredictable behavior.


  • dh> I don't think using entities/HTML as default for $implode_last is sane! Use "&" instead and make sure that the output for HTML is HTML compliant..
  • Support for locales that have a different kind of enumeration?!


  • EdB: do this the other way. Create an array for timestamps with values for each timestamped bit based on the most recent is "now minus 10 seconds" and 24 +/-4 hours between items, then flip the array and work through it as we insert posts. That gives us built-in variance between posts and the most recent will always be right about now :)


  • if used by install only, then put it into the install folder!!!


  • make a UNION query when we upgrade to MySQL 4


  • fp> check that we are not creating a loop!


  • dh> this should make sure, that e.g. "charset" is set for the locale in $locales. See


  • dh> this should not replace links in tags! currently fails for something like '<img src="" />' (not usual though!) fp> I am trying to address this by not replacing anything inside tags fp> This should be replaced by a clean state machine (one single variable for current state)


  • Tblue: Default values taken from Log::disp() ... this seems redundant


  • dh> we should use the current_User's ID, if he's logged in here. It seems that only the message form gets pre-filled with hidden fields currently.



  • when bad_request_die() gets called, the GLOBAL should not be left set to the invalid value! fp> Why? if the process dies anyway


  • dh> Not implemented?!


  • Move this to _abstractsettings.class.php - the other Settings object can also make use of it!


  • add 2nd & 3rd param to be passed to ParseResponse() ???


  • integrate it into the templates to avoid ugly die() on error and confusing redirect on success.


  • dh> IMHO this function should not be included in a file that gets used often/always.


  • (legacy): make it complete with all possible params!
  • (legacy): single month: Respect locales datefmt
  • (legacy): single post: posts do no get proper checking (wether they are in the requested blog or wether their permissions match user rights, thus the title sometimes gets displayed even when it should not. We need to pre-query the ItemList instead!!


  • dh>merge with require_js()


  • dh>merge with require_css()


  • Support $cols[]['order_rows_callback'] / order_objects_callback also if there's a LIMIT?


  • dh> We might just use "SELECT SQL_CALC_FOUND_ROWS ..." and "FOUND_ROWS()"..! - available since MySQL 4 - would save one query just for counting!
  • fplanque: I am seriously considering putting $count_sql into 2nd or 3rd position. Any prefs?
  • we might not want to count total rows when not needed...


  • (legacy): should go into ResultSel class (was tagged deprecated - doh!)


  • cache message by locale like Item::send_email_notifications()
  • dh> "Beautify" like Item::send_email_notifications() ? fp > sure
  • dh> Indicator in url to see where the user came from (&from=subnote ["subscription notification"]) - Problem: too long urls.
  • fp> SEPARATE MODERATION notifications from SUBSCRIPTION notifications
  • shall we notify suscribers of blog were this is in extra-cat?
  • Should include "visibility status" in the mail to the Item's Author


  • dh> Move this out into some more specific (not always included) file.


  • Unit testing with "nice addresses" This gets broken over and over again.


  • check correctness of urlencoding cookie value (copied from php way of doing it...)


  • (fplanque)


  • integrate it into the templates to avoid ugly die() on error and confusing redirect on success.


  • dh> shouldn't this be in a separate file?


  • add autodiscovery


  • EdB: this is used by qp_inc/items/views/_item_list_full.view.php in v0.0.0 (EdB)


  • separate object inits and permission checks


  • template compliant header!


  • disable when MySQL < 4


  • add a check for params of 'resource' type
  • add an option to suppress php warnings in invocation of user function, similar to server debug level 3?
  • add some trigger_errors / error_log when returning false?
  • decide how to deal with params passed by ref: bomb out or allow?
  • finish using javadoc info to build method sig if all params are named but out of order
  • what to do when the PHP function returns NULL? we are currently an empty string value...


  • add check that $val / $fcode / $fstr is of correct type??? NB: as of now we do not do it, since it might be either an xmlrpcval or a plain php val, or a complete xml chunk, depending on usage of xmlrpc_client::send() inside which creator is called...


  • do a bit of basic benchmarking (strtr vs. str_replace)
  • make usage of iconv() or recode_string() or mb_string() where available


  • EdB: this is used only by qp_srvc/getmail.php in v0.0.0 (EdB)


  • Allow applying / re-checking of the known data, not just after an update!


  • Allow applying / re-checking of the known data, not just after an update!


  • dh> Move this to some other directory?


  • implement CommentCache based on LinkCache


  • transaction support


  • Provide buffering of whole Form to be able to add onsubmit-JS to enable/disabled (group) checkboxes again and other useful stuff.

    NOTE: we use an member array ($_common_params) for exchanging params between functions. This will most probably cause problems, when nesting inputs. This should be refactored to use a field_name-based member array. (blueyed)


  • Move as much as possible to $Settings / $UserSettings


  • Make it a class / global object!
    • Provide (static) functions to extract .po files / generate _global.php files (single quoted strings!)


  • dh> Refactor into smaller chunks/files. We should avoid using a "huge" misc early!

    • _debug.funcs.php
    • _formatting.funcs.php
    • _date.funcs.php
    • ?
    NOTE: Encapsulation functions into classes would allow using autoloading ( in PHP5..!

  • implement method wrapping with preservation of php objs in calls
  • implement self-parsing of php code for PHP <= 4
  • separate introspection from code generation for func-2-method wrapping
  • use some better templating system from code generation?
  • when wrapping methods without obj rebuilding, use return_type = 'phpvals' (faster)



  • EdB: figure out if this useful, shed if not else embrace and move to /qp_templates/


  • yabs > change this to param array


  • (EdB/7618): verify/ensure each widget needs to identify it's own param possibilities


  • this is destined to be overridden by derived Template classes


  • EdB: this is obsolete from way back. The only thing it does is help an old skin act like a new template


  • EdB: $disp_handler is very nice :)


  • do not install if template doesn't exist. Important for upgrade. Need to NOT fail if ZERO templates installed though :/


  • EdB: per IRC with yabs, lets make these pages be containers


  • EdB: per IRC with yabs, lets make these pages be containers


  • EdB: per IRC with yabs, lets make these pages be containers
  • EdB: tag cloud widget here? admin-configurable would be better


  • EdB: per IRC with yabs, lets make these pages be containers


  • EdB: this needs hooks for plugin profile bits


  • EdB: this needs hooks for plugin profile bits


  • (legacy): dh> A user/blog might want to accept only mails from logged in users (fp>yes!)
  • (legacy): dh> For logged in users the From name and address should be not editable/displayed (the same as when commenting). (fp>yes!!!)


  • (legacy): dh> Allow limiting to current blog and list of "public" ones (e.g. with blog_disp_bloglist==1)


  • EdB: this needs hooks for plugin profile bits



  • EdB: IMPORTANT! make this be configurable new blog defaults one day


  • (sessions) When creating a blog, provide "edit options" (3 tabs) instead of a single long "New" form (storing the new Blog object with the session data).
  • Currently if you change the name of a blog it gets not reflected in the blog list buttons!


  • (sessions) When creating a blog, provide "edit options" (3 tabs) instead of a single long "New" form (storing the new Blog object with the session data).
  • Currently if you change the name of a blog it gets not reflected in the blog list buttons!


  • EdB: one day this needs a 'class' param instead of assuming "contact_link"


  • test


  • make default a Blog param


  • fp> de-factorize. cleanup. make efficient. split access types.


  • fp> this is a super lame stub, but it's still better than nothing. Should be user configurable.


  • dh> refactor this into e.g. create_media_dir() and use it for Blog::get_media_dir, too.
  • These status messages should rather go to a "syslog" and not be displayed to a normal user


  • implement CategoryCache based on LinkCache


  • move user rights queries to object (fplanque)


  • move user rights queries to object (fplanque)



  • check current status and permission on it


  • iTunes podcast tags: Note: itunes support: .m4a, .mp3, .mov, .mp4, .m4v, and .pdf.


  • Tor - TODO
    • Sort out sql select with blog ID
    • screws up posts with multiple categories partly due to the fact that Movable Type calls to this API are different to Metaweblog API calls when handling categories.


  • extensive permissions


  • fp> do we want to restrict API definitions to a specific blog with blogID="" ?



  • This should not change class state



  • (legacy): blueyed>> IMHO we would need another value, which is the same as "lazy", but does not display a checkbox, which is useful for Plugins that add themselves as renderers on Item update


  • yabs > would like this to extend an "am_highlighter" class, but not sure how to handle $this->T_() fp> is T_() actually used? fp> you should probably just pass the plugin as argument to the constructor, this way you can call $plugin->T_() yabs> it's only used in this one class, made the changes :)


  • categories combined with 'ALL' are not supported (will output too many archives, some of which will resolve to no results). We need subqueries to support this efficiently.


  • dh> (obsolete path reference! - EdB) Allow to move setting sets up and down (order). Control goes into /inc/CONTROL/settings/plugins.php.
  • NOTE: fp> I'm using this outside of Plugins; I'm not sure about proper factorization yet. This should probably be an extension of the Form class. Sth like "AutoForm" ;)


  • Init "checkbox" values in "array" type settings (they do not get send) (dh)


  • If a specific day (mode == month) or month (mode == year) is selected, apply another class (default to some border)


  • get class="" out of here (put it into templates)


  • get class="" out of here (put it into templates)


  • fp> no table should be needed. Also since we have odd/even coloring, word wrapping may be ok. yabs > unfortunately the tables are required to make the odd/even colouring and swipeable numbers work :(

    an example : Danny uploaded a page to demo his colours of choice ( ) if you scroll down to RenderItemAsHtml() you'll see it has 4 problems 1) some lines wrap - but they wrap underneath the line number 2) some lines don't wrap so they force a browser scrollbar ( although a scrollable div will cure this) 3) the lines that don't wrap lose their background colour once they become longer than the browser width ( a scrollable div has the same problem ) 4) If you try and copy/paste the code you also get the line numbers ( like every other code formatter that we've seen on the web that uses line numbers ... which is why most don't ;) )

    compare that to the same section of code using this plugin ( )

    fp> almost all that can be fixed with proper CSS and will have the advantage of not adding extra space in front of the lines when copy/pasting. I'll work on it when I have time.

    yabs> The operative word in that sentance is "almost" ;) ... I've removed the trailing spaces for all but empty lines ( required to "prop them open" ) ... I'd forgotten all about them :p


  • This is a bit quick 'n dirty.
  • We might want to highlight this too (based on a lang attribute).
  • We might want to unfilter this too.


  • 3.0 fp> 1) This is not an event: RENAME to lowercase (in b2evo 3.0) dh> Not only events are CamelCase, but "interactions" with the Plugins(_admin) class, too! Maybe it should get prefixed with "Plugin"?! The intention is: all interfacing methods are camel-cased. That makes a lot of sense, given the provided helpers (get_plugin_url etc). This applies to the other todos below, too.
  • 3.0 fp> 2) This defines more than Default values :: confusing name
  • name tentative get_general_param_definitions()


  • 3.0 fp> 1) This is not an event: RENAME to lowercase (in b2evo 3.0)
  • 3.0 fp> 2) This defines more than Default values :: confusing name
  • name tentative get_user_param_definitions()


  • Add descriptions.


  • Handle encoding of files (to $io_charset)


  • Extend to get list of defined classes and global functions and check this list before sourcing/including a Plugin! (prevent fatal error)


  • dh> we might want to provide whitelisting of methods through $Session here and check for it in the srvc handler.


  • fp> valid_elements to try to generate less validation errors


  • fp> The plugin should discover its events itself / This question should be asked to the Plugin itself. dh> Well, "discover" means to look up if it has a given method; this does not appear to belong into the Plugin class. A plugin won't also really know if some event is enabled or disabled.


  • Use DB cache to avoid checking the same page again and again! (Plugin DB table)


  • dh> I wanted to add a MySQL INDEX on the sess_lastseen field, but this "plugin" is the only real user of this. So, when making this a plugin, this should add the index perhaps.


  • dh> Currently when a plugin goes into "broken" status (e.g. file not readable), it is "disabled" afterwards. This should rather remember the old status (e.g. "enabled") and make it enabled again.


  • Make this a setting!


  • Optimize table from time to time


  • rename


  • (legacy): automate with a table inside of Calendatr object. Table should also contain descriptions and default values to display in help screen.


  • fp> it would probably make sense to do the unfiltering in reverse order compared to filtering


  • (legacy): Remove it in XML Feeds?


  • Ideas:
    • forbid cloned comments (same content) (on the same entry or all entries)
    • detect same/similar URLs in a short period (also look at author name: if it differs, it's more likely to be spam)



  • Add links to pages in the manual, once they are "clean"/tiny


  • dh> Move plugin's group name to DB setting?! fp> this would actually make more sense than renaming the name and code of plugins, but it's still complexity we don't really need. fp> When you reach that level of needs you're already a plugin maniac/developper and you hack the plugin php code anyway.

    This file is part of Quam Plures - See also



  • dh> Refactor to allow easier contributions!



  • (legacy): fp> handle custom params for each widget


  • dh> why are "STRONG" tags hardcoded here? can this get dropped/removed? should the style get adjusted to use font-weight:bold then? fp> yes but make sure to put the font-weight in a place where it applies to all (existing) templates by default; e-g blog_base.css



  • make these direct links to &File objects


  • (legacy): fplanque>> get rid of it


  • make these direct links to &File objects


  • make these direct links to &File objects


  • make these direct links to &File objects


  • Tblue> It looks like links don't necessarily need to point to items... Not sure if this feature is actually being used in the app.
  • Tblue> Offer to delete links if all items can be edited by the user (this would require checking for item edit and not view perms, obviously).


  • fp> it would probably make sense to refactor this as the constructor for the file roots and initialize the whole cache at construction time


  • fp> Make a DirTree class (those static hacks suck)


  • (legacy): Can this be fixed for windows? filegroup() might only return 0 or 1 nad posix_getgrgid() is not available..


  • (legacy): Can this be fixed for windows? fileowner() might only return 0 or 1 nad posix_getpwuid() is not available..


  • (legacy): cache this data (NOTE: we have different params here! - imgsize() does caching already!)


  • get this outta here. This is NOT a displayable object. We might want to have a "FileListResults" object that derives from Widget/Results/FilteredResults (the more the better) This object is what the SQL or the ItemQuery object is to Results or to ItemList2. The model and the display should not be mixed. IF NOT doing the clean objects, move this at least to file.funcs.


  • flatmode always shows hidden files, even if we don't want them :/


  • dh> simpletests for this (especially for open_basedir)


  • (legacy): a million things (fp) but you get the idea... The generated thumb will be saved to a cached file here (fp) The cache will be accessed through the File object (fp)
  • (legacy): cleanup memory resources



  • fplanque>> if this is only useful to display who's online or view counts, provide option to disable all those resource consuming gadgets. (Those gadgets should be plugins actually, and they should enable this query only if needed) blueyed>> Move functionality to Plugin (with a hook in Item::content())?!


  • Transform to make this a stub for $Hitlist

    Extract stats


  • Once we require PHP5, we should think about using this as __autoload function.


  • dh> Lazily handle properties through getters (and do not detect/do much in the constructor)!



  • Normalize to set_assigned_User!?
  • use extended dbchange instead of set_param...


  • dh> Test if works better/faster (only one preg_* call and no loop).


  • Allow to use a dropdown (select) to switch between blogs ( CSS / JS onchange - no submit.. )


  • (legacy): merge with inc_viewcount


  • fp> delete related stuff: comments, cats, file links...


  • EdB: we should make a div_id_class_lang() function that does it all :)


  • caching in case of multiple calls


  • dh> Add prefetching for MainList/ItemList (get_prefetch_itemlist_IDs) The $limit param and DataObjectList2 makes this quite difficult though. Would save (N-1) queries on a blog list page for N items.


  • dh> does not get used anywhere (yet)?


  • fp> allow user to submit his own excerpt in expert editing mode


  • do we want excerpts in itemLight or not?


  • cleanup some displays
  • implement HMS part of YMDHMS


  • dh> Add $dateformat param
  • dh> Cache result
  • dh> Optimize this, if this can be said after having done query() already.


  • archives modes in clean URL mode


  • EdB: this is used by qp_install/_functions_create.php in v0.0.0 (EdB)


  • add param for saved session filter set


  • add param for saved session filter set


  • cache Link targets before letting the Link constructor handle it


  • cache Link targets before letting the Link constructor handle it


  • dh> gets not used anywhere?! and is the only user of LinkCache::get_by_item_ID().


  • count?


  • fp>> shall we notify suscribers of blog were this is in extra-cat? blueyed>> IMHO yes.


  • extra_cat_IDs recording


  • extra_cat_IDs recording


  • Tblue> Check whether a change should invalidate the ItemCatsCache for this Item.


  • Tblue> Check whether a change should invalidate the ItemTagsCache for this Item.


  • incomplete


  • crop at word boundary, maybe even sentence boundary.
  • have a maxlength param for excerpts in blog properties


  • -dstart + x days


  • blueyed>> IMHO it's not good to use CSS class .line here (mainly white-space:nowrap), because on a smaller screen you'll cut things off! (and not every browser allows "marking and moving" of text then).