How do I add new tab to the Contact Summary Page?
hook_civicrm_tabs is now deprecated and you should use https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_tabset.
Also note:
// $url should return in 4.4 and prior an HTML snippet e.g. '&lt;div&gt;&lt;p&gt;....';
// in 4.5 and higher this needs to be encoded in json. E.g. json_encode(array('content' =&gt; &lt;html form snippet as previously provided&gt;));
// or CRM_Core_Page_AJAX::returnJsonResponse($content) where $content is the html code
// in the first cases you need to echo the return and then exit, if you use CRM_Core_Page method you do not need to worry about this.

Some example code:
function koba_civicrm_tabset($tabsetName, &amp;$tabs, $context) {
  //check if the tab set is Event manage
  if ($tabsetName == 'civicrm/event/manage') {
    // Remove &quot;Mond aan mond reclame&quot; tab
    unset($tabs['friend']);
    // Remove &quot;Location&quot; tab: we use a contact subtype for location because it has better integration
    unset($tabs['location']);
    // Remove &quot;Personal campaign pages&quot;: we don't use this
    unset($tabs['pcp']);


    // Add a Beheer Bijscholingen tab, a tab that shows a Drupal view
    if (!empty($context)) {
      $eventID = $context['event_id'];
      $url = CRM_Utils_System::url('admin/sitename/bijscholingen/json');
      $result = views_get_view_result('beheer_sitename_bijscholingen', 'page', $eventID);
      $count = count($result);
      $tabs['beheer'] = array(
          'weight' =&gt; 300,
          'count' =&gt; $count,
          'title' =&gt; ts('Beheer'),
          'link' =&gt; $url,
          'valid' =&gt; 1,
          'active' =&gt; 1,
          'current' =&gt; false,
      );
    }
  }
}