array( 'title' => t('Show my bookmarks block'), 'description' => t('access own bookmarks block'), ), ); } /** * Implements hook_menu(). */ function materio_flag_menu() { $items = array(); $base = array( 'type' => MENU_CALLBACK, 'file' => 'materio_flag.pages.inc', ); $items['materioflag/refresh/block/bookmarks'] = $base+array( 'access arguments' => array('flag bookmarks'), 'page callback' => 'materio_flag_refresh_block', 'page arguments' => array(3), ); $items['bookmarks'] = $base+array( 'access arguments' => array('flag bookmarks'), 'page callback' => 'materio_flag_user_bookmarks', 'page arguments' => array(), ); $items['materioflag/refresh/block/lists'] = $base+array( 'access arguments' => array('create flag lists'), 'page callback' => 'materio_flag_refresh_block', 'page arguments' => array(3), ); $items['materioflag/createlist/form/%'] = $base+array( 'access arguments' => array('create flag lists'), 'access callback' => 'user_access', 'page callback' => 'materio_flag_createlist_form', 'page arguments' => array(3), ); $items['materioflag/editlistform/%/%'] = $base+array( 'access arguments' => array('create flag lists'), 'access callback' => 'user_access', 'page callback' => 'materio_flag_editlist_form', 'page arguments' => array(2,3), ); $items['materioflag/editlist/%/%'] = $base+array( 'access arguments' => array('create flag lists'), 'access callback' => 'user_access', 'page callback' => 'materio_flag_edit_list', 'page arguments' => array(2,3), ); $items['materioflag/deletelist/%'] = $base+array( 'access arguments' => array('create flag lists'), 'access callback' => 'user_access', 'page callback' => 'materio_flag_delete_list', 'page arguments' => array(2,3), ); $items['materioflag/nodelinks'] = $base+array( 'access arguments' => array('create flag lists'), 'access callback' => 'user_access', 'page callback' => 'materio_flag_nodelinks', // 'page arguments' => array(3), ); $items['lists/%'] = $base+array( 'access arguments' => array('view flag lists'), 'access callback' => 'user_access', 'page callback' => 'materio_flag_user_lists', 'page arguments' => array(1), ); $items['materioflag/ajax/list/%'] = $base+array( 'page callback' => 'materio_flag_ajax_list', 'access callback' => 'materio_access_ajax_flags', 'page arguments' => array(3, 4), ); return $items; } function materio_access_ajax_flags(){ return user_access('create flag lists') || user_access('flag bookmarks'); } /** * Implements hook_menu_alter(). */ function materio_flag_menu_alter(&$items) { // Example - disable the page at node/add /* *$items['node/add']['access callback'] = FALSE; */ // disable tabs on user page $items['user/%user/flags/lists']['access callback'] = false; $items['user/%user/flags/lists/%']['access callback'] = false; } /** * Implements hook_block_info(). */ function materio_flag_block_info() { $blocks['materio_flag_mybookmarks'] = array( 'info' => t('My bookmarks'), 'cache' => DRUPAL_NO_CACHE ); $blocks['materio_flag_mylists'] = array( 'info' => t('My Materio flag lists'), 'cache' => DRUPAL_NO_CACHE ); $blocks['materio_flag_mylists_nav'] = array( 'info' => t('My Materio flag lists navigation'), 'cache' => DRUPAL_NO_CACHE ); return $blocks; } /** * Implements hook_block_view(). */ function materio_flag_block_view($delta = '') { global $user; $block = array(); switch ($delta) { case 'materio_flag_mybookmarks': if(user_access('access mybookmarks block')){ $userflags = flag_get_user_flags('node'); //dsm($userflags, 'userflags'); if(isset($userflags['bookmarks'])){ $userbookmarks = array(); foreach ($userflags['bookmarks'] as $nid => $flag) { $userbookmarks[] = node_load($nid); } // TODO: put this title generation on a theme function $subject = ''.t('My bookmarks (@len) ', array("@len"=>count($userbookmarks))).''; $block['subject'] = $subject . l('', 'bookmarks', array('html'=>true, 'attributes' => array('class' => array('open-list')),)); // $block['content'] = theme('materio_flag_mybookmarks_block', array("bookmarks"=>$userbookmarks, "viewmode"=>"bookmark")); }else{ $block['subject'] = t('My bookmarks'); $block['content'] = t('No bookmarks yet. Add bookmarks on clicking on results star'); } drupal_add_js(drupal_get_path('module', 'materio_flag').'/js/dist/materio_flag.min.js'); } break; case 'materio_flag_mylists': if(user_access('create flag lists')){ $flags = flag_lists_get_user_flags(NULL, $user); // $userflags = flag_get_user_flags('node'); // dsm($userflags, 'userflags'); // dsm($flags, 'flags'); foreach ($flags as $name => $flag) { $flag->path = url('lists/'.$flag->fid); $flaged_content = flag_lists_get_flagged_content($flag->fid, $user->uid); // dsm($flaged_content, 'flaged_content'); $fcn = array(); foreach ($flaged_content as $entity) { if($entity->entity_type == 'node'){ $node = node_load($entity->entity_id); // dsm($node, 'node'); // $node->flag_names[] = $name; $fcn[] = $node; } } $lists[$name] = array( 'list' => $flag, 'content' => $fcn, ); } if(isset($lists)){ // $block['subject'] = t('My !listname'.'s', array('!listname'=>t(variable_get('flag_lists_name', 'list')))); $block['subject'] = t('My '.variable_get('flag_lists_name', 'list').'s'); $block['content'] = theme('materio_flag_mylists_block', array("lists"=>$lists, "viewmode"=>"bookmark")); // $block['content'] = theme('flag_lists_user_page', array('uid' => $user->uid)); }else{ $block['subject'] = t('My '. variable_get('flag_lists_name', 'list') .'s'); $block['content'] = t('No !listname yet. Add !listname on clicking on results star', array('!listname'=>variable_get('flag_lists_name', 'list'))); } drupal_add_js(drupal_get_path('module', 'materio_flag').'/js/dist/materio_flag.min.js'); } break; case 'materio_flag_mylists_nav': if(user_access('create flag lists')){ $flags = flag_lists_get_user_flags(NULL, $user); foreach ($flags as $name => $flag) { $flaged_content = flag_lists_get_flagged_content($flag->fid, $user->uid); $flag->flaged_content = $flaged_content; $flags[$name] = $flag; } // if($flags){ // $block['subject'] = t('My !listname'.'s', array('!listname'=>variable_get('flag_lists_name', 'list'))); $block['subject'] = t('My '.variable_get('flag_lists_name', 'list').'s'); $block['content'] = theme('materio_flag_mylists_nav_block', array("flags"=>$flags)); // $block['content'] = theme('flag_lists_user_page', array('uid' => $user->uid)); // } # what happend if no flags yet // else{ // $block['subject'] = t('My '.variable_get('flag_lists_name', 'list').'s'); // // $block['content'] = t('No !listname yet. Add !listname on clicking on results star', array('!listname'=>variable_get('flag_lists_name', 'list'))); // } } break; } return $block; } /** * Implements hook_entity_info_alter(). */ function materio_flag_entity_info_alter(&$entity_info) { $entity_info['node']['view modes']['bookmark'] = array( 'label' => t('Bookmark'), 'custom settings' => TRUE, ); } /** * Implements hook_entity_view(). * * Note this is broken for taxonomy terms. @see http://drupal.org/node/1067120 */ function materio_flag_entity_view($entity, $type, $view_mode, $langcode) { if($type == 'node'){ if(user_access('create flag lists') && $view_mode != 'print'){ $entity->content['flaglistslinks'] = materio_flag_get_entity_links($entity, $type, $view_mode); drupal_add_css(drupal_get_path('module', 'flag') . '/theme/flag.css'); drupal_add_js(drupal_get_path('module', 'flag') . '/theme/flag.js'); // Do we have a list template for this node type, or are we s if (flag_lists_template_exists($entity->type)) { global $user; if ($flags = flag_lists_get_user_flags($entity->type, $user)) { foreach ($flags as $flag) { // dsm($flag, 'flag'); if ( ($flag->module == 'flag_lists' && _flag_lists_is_flagged($flag, $entity->nid, $user->uid, 0)) || $flag->is_flagged($entity->nid) ) { $entity->flags[] = $flag; } } } } } } } function materio_flag_get_entity_links($entity, $type, $view_mode = null){ // dsm($entity, 'entity'); // Do we have a list template for this node type, or are we s if (!flag_lists_template_exists($entity->type)) { return; } global $user; $links = array(); # if flag name is provided we are on flaglists content list (block mylists) if($view_mode == 'bookmark'){ // TODO: define view mode in settings // if (isset($entity->flag_names) && $flags = flag_lists_get_user_flags($entity->type, $user)) { // // dsm($flags, 'flags'); // // TODO: limit flag link by current flag list // foreach ($flags as $flag) { // //dsm($flag->name, 'flag'); // if(in_array($flag->name, $entity->flag_names)){ // if ($flag->module == 'flag_lists') { // $action = _flag_lists_is_flagged($flag, $entity->nid, $user->uid, 0) ? 'unflag' : 'flag'; // } else { // $action = $flag->is_flagged($entity->nid) ? 'unflag' : 'flag'; // } // $flag->module = 'materio_flag'; // $link = $flag->theme($action, $entity->nid); // // If it's a list, fix the link. // if ($flag->module == 'flag_lists') { // flag_lists_fix_link($link, $action); // } // $items[] = array( // 'data' => $link, // 'class' => array('flag-lists-link', $action.'-action'), // ); // // array_splice($entity->flag_names, array_search($flag->name, $entity->flag_names), 1); // // dsm($entity->flag_names, 'entity->flag_name'); // // break; // } // } // } #normal display }else{ if ($flags = flag_lists_get_user_flags($entity->type, $user)) { // dsm($flags, 'flags'); // Build the list of lists for this node. foreach ($flags as $flag) { // dsm($flag, 'flag'); if ($flag->module == 'flag_lists') { $action = _flag_lists_is_flagged($flag, $entity->nid, $user->uid, 0) ? 'unflag' : 'flag'; } else { $action = $flag->is_flagged($entity->nid) ? 'unflag' : 'flag';; } $link = $flag->theme($action, $entity->nid); // If it's a list, fix the link. if ($flag->module == 'flag_lists') { flag_lists_fix_link($link, $action); } $items[] = array( 'data' => $link, 'class' => array('flag-lists-link', $action.'-action', 'fid-'.$flag->fid), ); } } // dsm($items, 'items '.$entity->title); #create new list $link = l( ' ' . t('New @name', array('@name' => t(variable_get('flag_lists_name', 'list')))) . '', 'flag-lists/add/' . $entity->type, array( 'attributes' => array( 'class' => array('flag-lists-create'), 'title' => t('create a new @name and use it.', array('@name'=>t(variable_get('flag_lists_name', 'list')))), 'nid' => $entity->nid, 'token' => flag_get_token($entity->nid), ), 'html' => TRUE, ) ); $create = array( 'data' => $link, 'class' => array('flag-lists-create'), ); } if(isset($items)){ $ops = array( '#node' => $entity, '#items' => $items, ); } if(isset($create)){ $ops['#create'] = $create; } if(isset($ops)){ // dsm($ops, 'ops'); drupal_add_js(drupal_get_path('module', 'materio_flag').'/js/dist/materio_flag.min.js'); $ops['#theme'] = "materio_flag_mylists_entity_links"; return $ops; } return; } function _materio_flag_get_listpagetitle($flag){ $cont = ''; $cont .= ''.check_plain($flag->title).''; if(flag_lists_is_owner('edit', $flag->fid)){ $cont .= l('', 'flags/lists/edit/'.$flag->fid, array( 'html'=>true, 'attributes'=>array('class'=>array('edit-list', $flag->name)), ) ); } return $cont; } /** * Implements hook_theme(). */ function materio_flag_theme($existing, $type, $theme, $path) { return array( 'materio_flag_mybookmarks_block' => array( 'arguments' => array(), 'template' => 'materio-flag-mybookmarks-block', 'path' => drupal_get_path('module', 'materio_flag').'/templates', ), 'materio_flag_mylists_block' => array( 'arguments' => array(), 'template' => 'materio-flag-mylists-block', 'path' => drupal_get_path('module', 'materio_flag').'/templates', ), 'materio_flag_mylists_nav_block' => array( 'arguments' => array(), 'template' => 'materio-flag-mylists-nav-block', 'path' => drupal_get_path('module', 'materio_flag').'/templates', ), 'materio_flag_mylists_entity_links' => array( 'variables' => array('node' => NULL, 'create' => NULL, 'items' => array()), ), 'materio_flag_mylists_list' => array( 'template' => 'materio-flag-mylists-list', 'path' => drupal_get_path('module', 'materio_flag').'/templates', 'variables' => array( 'count' => 0, 'items' => array(), 'view_mode' => 'teaser', 'pager' => NULL, 'fid' => null, 'name' => null, 'title' => null, ), ), ); } function template_preprocess_materio_flag_mybookmarks_block(&$vars){ // dsm($vars, 'vars'); } function template_preprocess_materio_flag_mylists_block(&$vars){ // dsm($vars, 'vars'); } function template_preprocess_materio_flag_mylists_nav_block(&$vars){ // dsm($vars, 'vars'); } /** * theme_materio_flag_mylists_entity_links() * * see theme_flag_lists_list() */ function theme_materio_flag_mylists_entity_links($vars){ // $node = $vars['node']; $items = $vars['items']; // dsm($vars, 'vars HO'); if(isset($vars['create'])) $items[] = $vars['create']; return theme('item_list', array('items' => $items, 'type' => 'ul', 'attributes' => array('class' => 'flag-lists-entity-links'))); } function template_preprocess_materio_flag_mylists_list(&$vars) { $vars['list_count'] = format_plural( $vars['count'], '@name @title contains 1 item.', // in @sec seconds '@name @title contains @count items.', // in @sec seconds array( '@name' => t($vars['name']), '@title' => $vars['title'], ) ); // dsm($vars, '$vars'); }