'.__('Show all', 'amr-ical-events-list').'' .' '.__('Hide all', 'amr-ical-events-list').''; return($html); } /* -------------------------------------------------- */ function amr_list_event_subset ($htm, $columns, $subset, $events) { // now a flat array of ids $html = ''; $alt = false; if ((!is_array($events)) or (count($events) < 1 )) return (''); if ((!is_array($subset)) or (count($subset) < 1 )) return (''); $no_cols = count($columns); // foreach ($events as $i => $e) { /* for each event, loop through the properties and see if we should display */ foreach ($subset as $i => $eventindex) { /* for each event, loop through the properties and see if we should display */ $e = $events[$eventindex]; amr_derive_component_further ($e); amr_decide_display_timezone($e); // determine timezone that this event should be shown in if (!empty($e['Classes'])) $classes = strtolower($e['Classes']); else $classes = ''; $eprop = ''; /* each event on a new list */ $prevcol = 0; $colcount = 0; $col = 1; /* reset where we are with columns */ $rowhtml = ''; foreach ($columns as $col => $order) { // prepare the row $eprop = ''; foreach ($order as $k => $kv) { /* ie for one column in event, check how to order the bits */ /* Now check if we should print the component or not, we may have an array of empty string */ if (isset($e[$k])) { $v = amr_check_flatten_array ($e[$k]); // *** huh? shoudl we do this here? } else $v =null; $selector = $htm['li']; $selectorend = $htm['lic']; if (!empty($selector)) $selector .=' class="'.strtolower($k).'">'; if (!empty($v)) { // some custom eg: TRUMBA fields may have empty or no values $eprop .= $selector .amr_format_value($v, $k, $e,$kv['Before'],$kv['After'] ) .$selectorend; } } if (empty($eprop)) $eprop = ' '; // a value for a dummytable cell if tere were no values in the column // annoying but only way to pass variables by reference is through an array, must return array to then. // so to allow filter of column and pass which column it is, thsi is how we do it $tmp = apply_filters('amr_events_column_html', array('colhtml'=>$eprop, 'col'=>$col)); $eprop = $tmp['colhtml']; if (!empty($ul)) // will phase the ul's out eventually $eprop = $ul.' class="amrcol'.$col.' amrcol">' .$eprop .$htm['ulc']; /* each column in a cell or list */ $cellclasses = ''; if (!empty($htm['cell']) ) { // if we have a selector that surounds each property , then add classes. $cellclasses .= ' amrcol'.$col; if ($col == $no_cols) { $cellclasses .= ' lastcol'; /* only want the cell to be lastcol, not the row */ } $thiscolumn = $htm['cell'].' class="'.$cellclasses.'">' .$eprop. (empty($htm['cellc']) ? '' : $htm['cellc']); } else $thiscolumn = $eprop; $rowhtml .= $thiscolumn; // build up the row with each column } // end row // so now we have finished that group, start next // save the event or row, for next group if (!empty($rowhtml)) { $tmp = apply_filters('amr_events_event_html', array('rowhtml'=>$rowhtml, 'event'=>$e)); $rowhtml = $tmp['rowhtml']; $rowhtml = (!empty($htm['row']) ? ($htm['row'].($alt ? ' class="odd alt':' class="').$classes.' event"> ') : '') .$rowhtml .$htm['rowc']; if ($alt) $alt=false; else $alt=true; $html .= $rowhtml; /* build the group of events , adding on eprop */ $rowhtml = ''; } } //end of row or event return $html; } /* -------------------------------------------------- */ function amr_list_events_in_groupings ($htm, $id='', $columns, $groupedevents, $events) { // 2 levels of grouping only at moment if (empty($events)) return; $html = ''; if (empty($groupedevents)) { $all= array_keys($events); $html .= $htm['body'].'>'.amr_list_event_subset ($htm, $columns, $all, $events).$htm['bodyc']; return $html; } $prevtitle = ''; foreach ($groupedevents as $g => $nextlevel) { if (!empty($nextlevel['title'])) { // there are titles //echo if (is_array($nextlevel['title'])) { $hhtml = ''; foreach ($nextlevel['title'] as $i => $titlestring) { //if (isset($_GET['debugg'])) {echo '
Title='.$titlestring;} if ($i == 0 ) { // for first title only if ($titlestring == $prevtitle ) continue; // only show the outer title once else $prevtitle = $titlestring; if (!empty($nextlevel['parent'])) { $id = get_term_by('id',$nextlevel['parent'],$nextlevel['grouping'] ); $id = 'id="'.$id->slug.'" '; } } else $id=''; $hhtml .= amr_do_grouping_html($htm,$id, 'level'.$i.' '.$nextlevel['grouping'], $titlestring); } $html .= $htm['body'].' class="toggle_container" >'.$hhtml; // cannot have multiple thead } $html = $html.amr_list_event_subset ($htm, $columns, $nextlevel['events'], $events).$htm['bodyc']; } else { $html .= amr_list_events_in_groupings ($htm, $id, $columns, $nextlevel, $events); } // check next level ?? } return $html; } /* -------------------------------------------------- */ function amr_produce_tree_from_array ($terms, $parent=0) { // get all where parent = 0, unset // then for eah parent get children,unset //repeat till none left $tree = array(); // get all that match parent if (!empty($terms)) { foreach($terms as $i=>$term) { if ($term->parent == $parent) { $tree[$term->term_id] = $term->term_id; // create top level unset ($terms[$i]); if (!empty($terms)) { echo '
'.$term->term_id.' '.$term->name.' terms left:'.count($terms); $tree[$term->term_id] = amr_produce_tree_from_array ($terms, $term->term_id); // any children ? } } else echo '
not a child '.$term->term_id.' has parent '.$term->parent; } } //if (WP_DEBUG) {echo '
The tree: '; var_dump($tree);} return ($tree); } /* -------------------------------------------------- */ function amr_assign_events_to_dategrouping ($dategrouping, $eventsubset, $events) { foreach ($eventsubset['events'] as $i => $index) { //if (WP_DEBUG) echo '
dategrouping = '.$dategrouping; if (empty($events[$index]['EventDate'])) $datetouse = $events[$index]['DTSTART']; else $datetouse = $events[$index]['EventDate']; $groupstring = amr_format_grouping($dategrouping, $datetouse); $groupsubset[$groupstring]['events'][] = $index; } $first = true; foreach ($groupsubset as $groupstring => $garray) { if (is_array($eventsubset['title'])) $groupsubset[$groupstring]['title'] = $eventsubset['title']; // the top level title else $groupsubset[$groupstring]['title'][] = $eventsubset['title']; // the top level title $groupsubset[$groupstring]['title'][] = $groupstring; $groupsubset[$groupstring]['grouping'] = $dategrouping; // remember it //echo '
Date: '.$groupstring; var_dump($groupsubset[$groupstring]); echo '
'; } return $groupsubset; // subarray of events eg: [Jan2001] = array(id1,id2) } /* -------------------------------------------------- */ function amr_assign_events_to_taxogrouping ($taxonomy_groupby, $eventsubset, $events) { // still in flat taxonomy foreach ($eventsubset['events'] as $i => $index) { if (!empty($events[$index][$taxonomy_groupby])) { //ie the event has a taxonomy term if (is_array($events[$index][$taxonomy_groupby])) { // it probably will be foreach ($events[$index][$taxonomy_groupby] as $j => $taxoterm) { $groupsubset[$taxoterm]['events'][] = $index; } } else { if (isset($_GET['debugg'])) echo ' ** Taxonomy terms not an array'; var_dump($event[$taxonomy_groupby]); } } else { if (isset($_GET['debugg'])) {echo '
*** No value for '.$taxonomy_groupby.' in event '.$events[$index]['id']; } } } if (isset($_GET['debugg'])) {echo '
Grouped events by taxo grouping: '.$taxonomy_groupby.'
'; var_dump($groupsubset);} if (empty($groupsubset)) return false; // now check all the groups identified foreach ($groupsubset as $taxoterm => $garray) { // garray = array [events] $term = get_term_by('id', $taxoterm, $taxonomy_groupby); $terms[] = $term; if (is_array($eventsubset['title'])) $groupsubset[$taxoterm]['title'] = $eventsubset['title']; else $groupsubset[$taxoterm]['title'][] = $eventsubset['title']; // now add to the titles $groupsubset[$taxoterm]['title'][] = amr_prepare_term_title($taxoterm, $taxonomy_groupby); $groupsubset[$taxoterm]['grouping'] = $taxonomy_groupby; // remember it for later //if (isset($_GET['debugg'])) {echo '
Checking for parent:
'; var_dump($term);} if (isset($term->parent)) $groupsubset[$taxoterm]['parent'] = $term->parent; // remember it for later //build up levels of titlle relative to nesting //echo '
After taxo groupings: '.$taxoterm; var_dump($groupsubset[$taxoterm]); echo '
'; } //if (WP_DEBUG) {echo '
*** Terms'; VAR_DUMP($terms);} $taxo = get_taxonomy($taxonomy_groupby); //echo '
TAXO: ';var_dump($taxo); if ($taxo->hierarchical) { // if a hierarchical taxonomy , do some funky footwork !!!*** MAYBE CHECK IF WANT TO DO HIERARCHICALLY if (isset($_GET['debugg'])) echo '
It is hierarchical, so handle it:
'; $groupsubset = amr_handle_taxonomy_hierarchy($taxonomy_groupby, $groupsubset); } // now we want to reorder by the nesting / tree structure and add title ? return $groupsubset; // subarray of events eg: [cat1] = array(id1,id2), [cat2]= array(id2,id4) } /* -------------------------------------------------- */ function amr_handle_taxonomy_hierarchy ($taxonomy_groupby, $groupsubset) { // need to sort by parents , so they will appear in correct order hierarchically (add a class ?) $newset = amr_sort_by_key($groupsubset, 'parent'); //if (isset($_GET['debugg'])) {echo '
sorted by parent ';foreach ($newset as $t => $arr){ echo '
'.$t.'
'; var_dump($arr);} ;} // then for each parent, if it has not appeared, we need to 'add it' before the child - will have no events $args = array( 'orderby' => 'term_group', // id, count, name - Default, slug, term_group, none //'order' => 'ASC', // DESC 'hide_empty' => 1, 'fields' => 'all', //default 'hierarchical' => true // pass even if empty, if child not empty ); // get the terms for that taxonomy ? how to sort ???? $terms = get_terms ($taxonomy_groupby, $args); foreach ($newset as $termname => $garray) { // for our newly sorted array if (!empty($garray['parent'])) { //if (isset($_GET['debugg'])) {echo '
Term = '.$termname.' Parent = '.$garray['parent'];} $parentterm = get_term($garray['parent'],$taxonomy_groupby ); if (isset($_GET['debugg'])) {echo '
ParentTerm = '; var_dump($parentterm->name);} if (!isset($newset[$parentterm->name])) {// then it hasn't appeared //if (isset($_GET['debugg'])) {echo '
Title to add:'.$parentterm->name;} $grptitle_to_add = amr_prepare_term_title($parentterm->name, $taxonomy_groupby); if (isset($_GET['debugg'])) {echo '
Existing title ='; var_dump($newset[$termname]['title']); echo '
Title to add:'.$grptitle_to_add;} array_unshift($newset[$termname]['title'],$grptitle_to_add ); if (isset($_GET['debugg'])) {echo '
New set of titles:
'; var_dump($newset[$termname]['title']);} } else {if (isset($_GET['debugg'])) echo '
already have in this parent '.$parentterm->name;} } } return ($newset); } /* -------------------------------------------------- */ function amr_assign_events_to_a_grouping ($grouping, $eventsubset, $events) { if (in_array($grouping, array( 'Year', 'Month', 'Day', 'Week', 'Quarter', 'Astronomical Season', 'Traditional Season', 'Western Zodiac', 'Solar Term' ), true)) { $groupsubset = amr_assign_events_to_dategrouping ($grouping, $eventsubset, $events); // returns array[grouping][events] // [title] } elseif (taxonomy_exists( $grouping )) { // ie it is a taxonomy $groupsubset = amr_assign_events_to_taxogrouping ($grouping, $eventsubset, $events); } else { // as yet unknown - maybe grouping by location ? - depends how stored then, maybe save places as taxo terms ? if (WP_DEBUG) echo '
Unknown grouping: '.$grouping; $groupsubset = array(); } return ($groupsubset); } /* -------------------------------------------------- */ function amr_assign_events_to_groupings ($groupings, $events) { // assign events to first level of grouping, handling hierarchical // then assign that subset to next level ? if (empty($groupings)) return false; // chcek / convert grupings foreach ($groupings as $i => $g) { if (is_bool($g)) { if (!$g) unset ($groupings[$i]); else $groupings[$i] = $i; } } if (isset($_GET['debugg'])) {echo '
Groupings requested: '; var_dump($groupings);} $grouping = array_shift($groupings); // get the first // setup initial 'subset' which is actually all //if (WP_DEBUG) {echo '
Start with grouping '.$grouping;} foreach ($events as $i => $event) { $eventsubset['events'][] = $i; } $eventsubset['title'] = array(); $groupsubset = amr_assign_events_to_a_grouping ($grouping, $eventsubset, $events); if (empty ($groupsubset) ) return false; //should now have ? array [$taxo][events] // ............................[title] //if (isset($_GET['debugg'])) { echo '
First Pass *************
'; //foreach ($groupsubset as $g => $arr ) {echo '
***'.$g.'
'; var_dump($arr); echo '
';}} if (!empty($groupings)) { // only allows two levels for now $grouping = array_shift($groupings); // get the 2nd grouping //if (WP_DEBUG) {echo '
And then with grouping '.$grouping;} foreach ($groupsubset as $grp => $garray) { // overwrite the curremt subset with the next level tree if (isset($_GET['debugg'])) echo '
Doing grp = '.$grp; //.' with'; var_dump($garray); $groupsubset[$grp] = amr_assign_events_to_a_grouping ($grouping, $garray, $events); //should now have ? array [$taxo or date ][events] // ............................[title] //echo '
Then have '; var_dump($groupsubset[$grp]); echo '
'; } } return $groupsubset; } /* -------------------------------------------------- */ function amr_do_grouping_html($htm, $id, $class, $titlestring) { $html = ((!empty($htm['grow'])) ? $htm['grow'].$id.' class="trigger group '.$class.'">' : '') .((!empty($htm['ghcell'])) ? $htm['ghcell'].' class="group '.$class. '" >' : '') .$titlestring .$htm['ghcellc'] .$htm['growc']; return $html; } /* -------------------------------------------------- */ function amr_prepare_term_title($term, $taxo) { // this is a term global $amr_options,$amr_listtype; if (is_int($term)) $termdata = get_term_by('id', $term, $taxo, ARRAY_A); else $termdata = get_term_by('name', $term, $taxo, ARRAY_A); $termstring = ''.$termdata['name'].''; // to facilitate collapsability if (true or !empty ($amr_options['listtypes'][$amr_listtype]['grouping_settings']['show_description'])) { //*** if (!empty($termdata['description'])) $termstring .=' '.$termdata['description'].''; // allow own definition of how taxonomy term should look } $termstring = apply_filters('amr_term_grouping_title',$termstring,$term); return $termstring; } /* -------------------------------------------------- */ function amr_get_groupings_requested () { global $amr_options, $amr_listtype, $amr_groupings; if (isset ($amr_options['listtypes'][$amr_listtype]['grouping'])) { foreach (($amr_options['listtypes'][$amr_listtype]['grouping']) as $i => $level) { if ($level) { $g[$level] = $i; } } } if (!empty($g)) return ($g); else return false; } /* -------------------------------------------------------------------------------------------*/ function amr_do_a_grouping($htm, $gi, $ghtml) { /* we have a new group */ $id = amr_string($gi.$new[$gi]); $html = ((!empty($htm['grow'])) ? $htm['grow'].'class="group '.$gi.'">' : '') .((!empty($htm['ghcell'])) ? $htm['ghcell'].' class="group '.$gi. '" >' : '') .$grouping .$htm['ghcellc'] .$htm['growc']; return $html; } /* -------------------------------------------------------------------------------------------*/