Changeset 12047

Show
Ignore:
Timestamp:
09/06/07 14:56:09 (1 year ago)
Author:
bergie
Message:

Support for importing xCal RSS events into net.nemein.calendar

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/midcom/net.nemein.calendar/config/config.inc

    r12045 r12047  
    2020 
    2121'categories' => '', 
     22 
     23'rss_subscription_enable' => false, 
  • trunk/midcom/net.nemein.calendar/config/schemadb_config.inc

    r12045 r12047  
    127127        ), 
    128128         
     129        'rss_subscription_enable' => array 
     130        ( 
     131            'description' => 'rss_subscription_enable', 
     132            'datatype' => 'text', 
     133            'location' => 'config', 
     134            'config_domain' => 'net.nemein.calendar', 
     135            'config_key' => 'rss_subscription_enable', 
     136            'widget' => 'config_radiobox', 
     137            'widget_radiobox_choices' => array 
     138            ( 
     139                '' => 'default setting', 
     140                '1' => 'yes', 
     141                '0' => 'no', 
     142            ), 
     143        ), 
     144         
    129145         /**** Schema settings ****/ 
    130146        'schemadb' => array 
  • trunk/midcom/net.nemein.calendar/documentation/CHANGES

    r12045 r12047  
    1111  + Added categories to navigation 
    1212  + Made categories configurable 
     13  + Added support for event importing via RSS 
    1314 
    14152007-09-04 bergie 
  • trunk/midcom/net.nemein.calendar/viewer.php

    r12045 r12047  
    174174            'variable_args' => 1, 
    175175        ); 
     176 
     177        if ($this->_config->get('rss_subscription_enable')) 
     178        { 
     179            $_MIDCOM->load_library('net.nemein.rss'); 
     180            $rss_switches = net_nemein_rss_manage::get_plugin_handlers(); 
     181            $this->_request_switch = array_merge($this->_request_switch, $rss_switches); 
     182        } 
    176183 
    177184        // Make the hCalendar output GRDDL compatible 
     
    312319            } 
    313320        } 
     321         
     322        if ($this->_config->get('rss_subscription_enable')) 
     323        {         
     324            $this->_node_toolbar->add_item 
     325            ( 
     326                array 
     327                ( 
     328                    MIDCOM_TOOLBAR_URL => 'feeds/subscribe/', 
     329                    MIDCOM_TOOLBAR_LABEL => $_MIDCOM->i18n->get_string('subscribe feeds', 'net.nemein.rss'), 
     330                    MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/stock_news.png', 
     331                    MIDCOM_TOOLBAR_ENABLED => $this->_topic->can_do('midgard:create'), 
     332                ) 
     333            ); 
     334            $this->_node_toolbar->add_item 
     335            ( 
     336                array 
     337                ( 
     338                    MIDCOM_TOOLBAR_URL => 'feeds/list/', 
     339                    MIDCOM_TOOLBAR_LABEL => $_MIDCOM->i18n->get_string('manage feeds', 'net.nemein.rss'), 
     340                    MIDCOM_TOOLBAR_ICON => 'stock-icons/16x16/properties.png', 
     341                    MIDCOM_TOOLBAR_ENABLED => $this->_topic->can_do('midgard:create'), 
     342                ) 
     343            ); 
     344        } 
    314345 
    315346        if (   $this->_topic->can_do('midgard:update') 
  • trunk/midcom/net.nemein.rss/documentation/CHANGES

    r11980 r12047  
    66  which might even break existing functionality. 
    77- All items marked with "+" represent completly new features. 
     8 
     92007-09-06 bergie 
     10  + Added support for importing events via xCal RSS feeds to net.nemein.calendar 
    811 
    9122007-09-04 bergie 
  • trunk/midcom/net.nemein.rss/fetch.php

    r12000 r12047  
    1010/** 
    1111 * RSS and Atom feed fetching class. Caches the fetched items as articles 
    12  * in net.nehmer.blog 
     12 * in net.nehmer.blog or events in net.nemein.calendar 
    1313 * 
    1414 * @package net.nemein.rss 
     
    3636     */ 
    3737    var $_node = null; 
     38 
     39    /** 
     40     * Configuration of node we're importing to 
     41     * @var midcom_helper_configuration 
     42     */ 
     43    var $_node_config = null; 
     44 
     45    /** 
     46     * Datamanager for handling saves 
     47     * @var midcom_helper_datamanager2 
     48     */ 
     49    var $_datamanager = null; 
    3850     
    3951    /** 
     
    4759 
    4860        $this->_component = 'net.nemein.rss'; 
     61         
     62        $this->_node_config = $GLOBALS['midcom_component_data'][$this->_node->component]['config']; 
     63         
    4964        parent::midcom_baseclasses_components_purecode(); 
    5065    } 
     
    162177            case 'net.nehmer.blog': 
    163178                return $this->import_article($item); 
     179                break; 
     180                 
     181            case 'net.nemein.calendar': 
     182                return $this->import_event($item); 
    164183                break; 
    165184                 
     
    380399            return false; 
    381400        } 
     401    } 
     402     
     403    /** 
     404     * Imports an item as an event 
     405     */ 
     406    private function import_event($item) 
     407    { 
     408        // Check that we're trying to import item suitable to be an event 
     409        if (!isset($item['xcal'])) 
     410        { 
     411            // Not an event 
     412            return false; 
     413        } 
     414             
     415        // Load root event 
     416        if (!$this->_node_config->get('root_event')) 
     417        { 
     418            // This calendar is not really functional 
     419            return false; 
     420        }    
     421        static $root_event = null; 
     422        if (is_null($root_event)) 
     423        { 
     424            $root_event = new net_nemein_calendar_event($this->_node_config->get('root_event')); 
     425        } 
     426        if (!$root_event->guid) 
     427        { 
     428            return false; 
     429        } 
     430 
     431        // Get start and end times 
     432        $start = null; 
     433        $end = null; 
     434        if (isset($item['xcal']['dtstart'])) 
     435        { 
     436            $start = strtotime($item['xcal']['dtstart']); 
     437        } 
     438        elseif (isset($item['xCal']['start'])) 
     439        { 
     440            // The format used by Upcoming 
     441            $start = strtotime($item['xCal']['start']); 
     442        } 
     443        if (isset($item['xcal']['dtend'])) 
     444        { 
     445            $end = strtotime($item['xcal']['dtend']); 
     446        } 
     447        elseif (isset($item['xCal']['end'])) 
     448        { 
     449            // The format used by Upcoming 
     450            $end = strtotime($item['xCal']['end']); 
     451        } 
     452         
     453        if (   !$start 
     454            || !$end) 
     455        { 
     456            return false; 
     457        } 
     458         
     459        if (!$this->_datamanager) 
     460        { 
     461            $schemadb = midcom_helper_datamanager2_schema::load_database($this->_node_config->get('schemadb')); 
     462            $this->_datamanager = new midcom_helper_datamanager2_datamanager($schemadb); 
     463        } 
     464 
     465        $qb = net_nemein_calendar_event::new_query_builder(); 
     466        $qb->add_constraint('up', '=', $root_event->id); 
     467        $qb->add_constraint('extra', '=', md5($item['guid'])); 
     468        $events = $qb->execute();   
     469        if (count($events) > 0) 
     470        { 
     471            // This item has been imported already earlier. Update 
     472            $event = $events[0]; 
     473        } 
     474        else 
     475        { 
     476            // This is a new item 
     477            $event = new net_nemein_calendar_event(); 
     478            $event->start = $start; 
     479            $event->end = $end; 
     480            $event->extra = md5($item['guid']); 
     481            $event->up = $root_event->id; 
     482            if (!$event->create()) 
     483            { 
     484                return false; 
     485            } 
     486        } 
     487         
     488        $this->_datamanager->autoset_storage($event); 
     489        $this->_datamanager->types['start']->value = new Date($start); 
     490        $this->_datamanager->types['end']->value = new Date($end); 
     491        foreach ($item as $key => $value) 
     492        { 
     493            if (isset($this->_datamanager->types[$key])) 
     494            { 
     495                $this->_datamanager->types[$key]->value = $value; 
     496            } 
     497        } 
     498         
     499        if (!$this->_datamanager->save()) 
     500        { 
     501            return false; 
     502        } 
     503         
     504        return $event->guid; 
    382505    } 
    383506     
  • trunk/midcom/net.nemein.rss/manage.php

    r11787 r12047  
    175175                ); 
    176176            } 
    177  
    178             $qb = midcom_db_article::new_query_builder(); 
    179             $qb->add_constraint('topic', '=', $this->_topic->id); 
    180              
    181177            $data['feed_category'] = 'feed:' . md5($feed->url); 
    182             $qb->add_constraint('extra1', 'LIKE', "%|{$data['feed_category']}|%"); 
    183             $data['feed_items'] = $qb->count_unchecked(); 
    184  
     178             
     179            $data['feed_items'] = 0; 
     180             
     181            switch ($this->_topic->component) 
     182            { 
     183                case 'net.nehmer.blog': 
     184                    $qb = midcom_db_article::new_query_builder(); 
     185                    $qb->add_constraint('topic', '=', $this->_topic->id); 
     186                    $qb->add_constraint('extra1', 'LIKE', "%|{$data['feed_category']}|%"); 
     187                    $data['feed_items'] = $qb->count_unchecked(); 
     188                    break; 
     189            } 
     190             
    185191            midcom_show_style('net-nemein-rss-feeds-list-item'); 
    186192        } 
  • trunk/midcom/net.nemein.rss/style/net-nemein-rss-feed-fetch.php

    r11760 r12047  
    5959        else 
    6060        { 
    61             $local_article = new midcom_db_article($item['local_guid']); 
    62             $local_link = $_MIDCOM->permalinks->create_permalink($item['local_guid']); 
    63             echo "    <td><a href=\"{$local_link}\">{$local_article->title}</a></td>\n"; 
     61            switch ($_MIDCOM->get_context_data(MIDCOM_CONTEXT_COMPONENT)) 
     62            { 
     63                case 'net.nehmer.blog': 
     64                    $local_article = new midcom_db_article($item['local_guid']); 
     65                    $local_link = $_MIDCOM->permalinks->create_permalink($item['local_guid']); 
     66                    echo "    <td><a href=\"{$local_link}\">{$local_article->title}</a></td>\n"; 
     67                    break; 
     68                 
     69                case 'net.nemein.calendar': 
     70                    $local_event = new net_nemein_calendar_event($item['local_guid']); 
     71                    $local_link = $_MIDCOM->permalinks->create_permalink($item['local_guid']); 
     72                    echo "    <td><a href=\"{$local_link}\">{$local_event->title}</a></td>\n"; 
     73                    break; 
     74            } 
    6475        } 
    6576