Changeset 14480

Show
Ignore:
Timestamp:
01/17/08 15:16:51 (11 months ago)
Author:
rambo
Message:

smarter, configurable get_icon and get_create_icon

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/midcom/midcom.helper.reflector/config/config.inc

    r14459 r14480  
    2727    'midgard_language', 
    2828    'midgard_quota', 
     29    /* members should not be root classes by MgSchema, workaround a bug */ 
     30    'midgard_member', 
    2931    /* These use GUID to link to many parents */ 
    3032    'net_nemein_tag_link', 
     
    6163( 
    6264), 
     65// keyed by icon, values are arrays of classes (__default__ marking the default icon) names, used to determine icon to use for object 
     66'object_icon_magic' => array 
     67( 
     68    'document.png' => array 
     69    ( 
     70        '__default__', 
     71    ), 
     72    'stock_folder.png' => array 
     73    ( 
     74        'midgard_topic', 
     75        'midgard_snippetdir', 
     76        'midgard_style', 
     77        'midgard_page', 
     78        'net_nemein_discussion_thread', 
     79        'org_openpsa_products_product_group', 
     80    ), 
     81    'stock_people.png' => array 
     82    ( 
     83        'net_nehmer_buddylist_entry_db', 
     84        'org_openpsa_campaign', 
     85    ), 
     86    'stock_news.png' => array 
     87    ( 
     88        'org_openpsa_notifications_notification', 
     89        'net_nemein_rss_feed', 
     90    ), 
     91    'locale.png' => array 
     92    ( 
     93        'org_routamc_positioning_country', 
     94    ), 
     95    'geoclue.png' => array 
     96    ( 
     97        'org_routamc_positioning_location', 
     98    ), 
     99    'stock-discussion.png' => array 
     100    ( 
     101        'net_nemein_discussion_post', 
     102    ), 
     103    'package.png' => array 
     104    ( 
     105        'org_openpsa_products_product', 
     106    ), 
     107    'camera.png' => array 
     108    ( 
     109        'org_routamc_photostream_photo', 
     110    ), 
     111), 
     112// This works just like object_icon_magic 
     113'create_type_magic' => array 
     114( 
     115    'new-text.png' => array 
     116    ( 
     117        '__default__', 
     118    ), 
     119    'new-dir.png' => array 
     120    ( 
     121        'midgard_topic', 
     122        'midgard_page', 
     123        'midgard_snippetdir', 
     124        'midgard_style', 
     125        'net_nemein_discussion_thread', 
     126    ), 
     127    'stock_people-new.png' => array 
     128    ( 
     129        'org_openpsa_campaign', 
     130    ), 
     131), 
    63132 
    64 'experimental_root_class_detection' => false, 
    65  
  • trunk/midcom/midcom.helper.reflector/reflector.php

    r14465 r14480  
    343343    function get_create_icon($type) 
    344344    { 
    345         // FIXME make 1. smarter 2. configurable 
    346         switch ($type) 
    347         { 
    348             case 'midgard_topic': 
    349             case 'midgard_page': 
    350             case 'midgard_snippetdir': 
    351             case 'midgard_style': 
    352             case 'net_nemein_discussion_thread': 
    353                 $icon = 'new-dir.png'; 
    354                 break; 
    355             case 'midgard_group': 
    356             case 'org_openpsa_organization': 
    357             case 'org_openpsa_campaign': 
     345        static $config_icon_map = false; 
     346        if (!$config_icon_map) 
     347        { 
     348            $icons2classes = $this->_config->get('create_type_magic'); 
     349            foreach ($icons2classes as $icon => $classes) 
     350            { 
     351                foreach ($classes as $class) 
     352                { 
     353                    $config_icon_map[$class] = $icon; 
     354                } 
     355            } 
     356            unset($icons2classes, $classes, $class, $icon); 
     357        } 
     358 
     359        $icon_callback = array($type, 'get_create_icon'); 
     360        switch (true) 
     361        { 
     362            // class has static method to tell us the answer ? great ! 
     363            case (is_callable($icon_callback)): 
     364                $icon = call_user_func($icon_callback); 
     365            // configuration icon 
     366            case (isset($config_icon_map[$type])): 
     367                $icon = $config_icon_map[$type]; 
     368                break; 
     369 
     370            // heuristics magic (in stead of adding something here, take a look at config key "create_type_magic") 
     371            case (strpos($type, 'member') !== false): 
     372            case (strpos($type, 'organization') !== false): 
    358373                $icon = 'stock_people-new.png'; 
    359374                break; 
    360             case 'midgard_person': 
    361             case 'org_openpsa_person': 
    362             case 'midgard_member': 
    363             case 'midgard_eventmember': 
     375            case (strpos($type, 'person') !== false): 
     376            case (strpos($type, 'member') !== false): 
    364377                $icon = 'stock_person-new.png'; 
    365378                break; 
    366             case 'midgard_event': 
    367             case 'org_openpsa_event': 
    368             case 'net_nemein_calendar_event'; 
     379            case (strpos($type, 'event') !== false): 
    369380                $icon = 'stock_event_new.png'; 
    370381                break; 
     382 
     383            // Config default value  
     384            case (isset($config_icon_map['__default__'])): 
     385                $icon = $config_icon_map['__default__']; 
     386                break; 
     387            // Fallback default value 
    371388            default: 
    372389                $icon = 'new-text.png'; 
     
    378395    function get_object_icon(&$obj) 
    379396    { 
    380         // Check against static calling 
    381         if (   !isset($this->mgdschema_class) 
    382             || empty($this->mgdschema_class)) 
    383         { 
    384             debug_push_class(__CLASS__, __FUNCTION__); 
    385             debug_add('May not be called statically', MIDCOM_LOG_ERROR); 
    386             debug_pop(); 
    387             return false; 
    388         } 
    389  
    390         debug_push_class(__CLASS__, __FUNCTION__); 
    391397        $properties = get_object_vars($obj); 
    392398        if (empty($properties)) 
    393399        { 
     400            debug_push_class(__CLASS__, __FUNCTION__); 
    394401            debug_add("Could not list object properties, aborting", MIDCOM_LOG_ERROR); 
    395402            debug_pop(); 
    396403            return false; 
    397404        } 
    398  
     405         
     406        static $config_icon_map = false; 
     407        if (!$config_icon_map) 
     408        { 
     409            $icons2classes = $this->_config->get('object_icon_magic'); 
     410            foreach ($icons2classes as $icon => $classes) 
     411            { 
     412                foreach ($classes as $class) 
     413                { 
     414                    $config_icon_map[$class] = $icon; 
     415                } 
     416            } 
     417            unset($icons2classes, $classes, $class, $icon); 
     418        } 
     419 
     420        $object_class = get_class($obj); 
     421        $object_baseclass = midcom_helper_reflector::resolve_baseclass($object_class); 
    399422        switch(true) 
    400423        { 
     424            // object knows it's icon, how handy! 
    401425                case (method_exists($obj,'get_icon')): 
    402426                        $icon = $obj->get_icon(); 
    403427                        break; 
    404             // FIXME make 1. smarter 2. configurable 
    405             case (is_a($obj, 'midgard_person')): 
    406             case (is_a($obj, 'org_openpsa_person')): 
     428 
     429            // configuration icon 
     430            case (isset($config_icon_map[$object_class])): 
     431                $icon = $config_icon_map[$object_class]; 
     432                break; 
     433            case (isset($config_icon_map[$object_baseclass])): 
     434                $icon = $config_icon_map[$object_baseclass]; 
     435                break; 
     436             
     437            // heuristics magic (in stead of adding something here, take a look at config key "object_icon_magic") 
     438            case (strpos($object_class, 'person') !== false): 
    407439                $icon = 'stock_person.png'; 
    408440                break; 
    409  
    410             case (is_a($obj, 'midgard_topic')): 
    411             case (is_a($obj, 'midgard_snippetdir')); 
    412             case (is_a($obj, 'midgard_style')): 
    413             case (is_a($obj, 'midgard_page')): 
    414             case (is_a($obj, 'net_nemein_discussion_thread')): 
    415             case (is_a($obj, 'org_openpsa_products_product_group')): 
    416                 $icon='stock_folder.png'; 
    417                 break; 
    418             case (is_a($obj, 'midgard_event')): 
    419             case (is_a($obj, 'org_openpsa_event')): 
    420             case (is_a($obj, 'net_nemein_calendar_event')): 
     441            case (strpos($object_class, 'event') !== false): 
    421442                $icon='stock_event.png'; 
    422443                break; 
    423             case (is_a($obj, 'midgard_eventmember')): 
    424             case (is_a($obj, 'midgard_member')): 
    425             case (is_a($obj, 'midgard_group')): 
    426             case (is_a($obj, 'org_openpsa_organization')): 
    427             case (is_a($obj, 'net_nehmer_buddylist_entry_db')): 
    428             case (is_a($obj, 'org_openpsa_campaign')): 
     444            case (strpos($object_class, 'member') !== false): 
     445            case (strpos($object_class, 'organization') !== false): 
    429446                $icon='stock_people.png'; 
    430447                break; 
     
    432449                $icon='stock_internet.png'; 
    433450                break; 
    434             case (is_a($obj, 'midgard_pageelement')): 
    435             case (is_a($obj, 'midgard_element')): 
    436                 $icon = 'text-x-generic-template.png'; 
    437                 break; 
    438             case (is_a($obj, 'org_openpsa_notifications_notification')): 
    439             case (is_a($obj, 'net_nemein_rss_feed')): 
    440                 $icon = 'stock_news.png'; 
    441                 break; 
    442             case (is_a($obj, 'org_routamc_positioning_country')): 
    443                 $icon = 'locale.png'; 
    444                 break; 
    445             case (is_a($obj, 'org_routamc_positioning_location')): 
    446                 $icon = 'geoclue.png'; 
    447                 break; 
    448             case (is_a($obj, 'net_nemein_discussion_post')): 
    449                 $icon='stock-discussion.png'; 
    450                 break; 
    451             case (is_a($obj, 'org_openpsa_products_product')): 
    452                 $icon='package.png'; 
    453                 break; 
    454             case (is_a($obj, 'org_routamc_photostream_photo')): 
    455                 $icon='camera.png'; 
    456                 break; 
    457451            case (is_a($obj, 'midgard_snippet')): 
    458452                $icon='script.png'; 
    459453                break; 
     454            case (strpos($object_class, 'element') !== false): 
     455                $icon = 'text-x-generic-template.png'; 
     456                break; 
     457 
     458            // Config default value  
     459            case (isset($config_icon_map['__default__'])): 
     460                $icon = $config_icon_map['__default__']; 
     461                break; 
     462            // Fallback default value 
    460463            default: 
    461464                $icon = 'document.png'; 
    462         } 
    463  
    464         $icon = "<img src='" . MIDCOM_STATIC_URL . "/stock-icons/16x16/{$icon}' align='absmiddle' border='0' alt='". get_class($obj) . " '/> "; 
     465                break; 
     466        } 
     467 
     468        // TODO: What if the icon is not in stock-icons/16x16 ?? especially the ->get_icon should probably be able to specify components static path 
     469        $icon = "<img src='" . MIDCOM_STATIC_URL . "/stock-icons/16x16/{$icon}' align='absmiddle' border='0' alt='{$object_class}'/> "; 
    465470        debug_pop(); 
    466471        return $icon;