/**
  * Return categories that have documents $user can see
  * 
  * Only if $user is administrator or can see private objects all categories
  * are returned
  *
  * @param User $user
  * @return array
  */
 function findAll($user)
 {
     if ($user->isAdministrator() || $user->canSeePrivate()) {
         return DocumentCategories::find(array('order' => 'name'));
     } else {
         $document_categories_table = TABLE_PREFIX . 'document_categories';
         $documents_table = TABLE_PREFIX . 'documents';
         return DocumentCategories::findBySQL("SELECT DISTINCT {$document_categories_table}.* FROM {$document_categories_table}, {$documents_table} WHERE {$document_categories_table}.id = {$documents_table}.category_id AND {$documents_table}.visibility >= ? ORDER BY {$document_categories_table}.name", array(VISIBILITY_NORMAL));
     }
     // if
 }