Logo Search packages:      
Sourcecode: egroupware version File versions  Download package

class.common.inc.php

<?php
  /**************************************************************************\
  * eGroupWare API - Commononly used functions                               *
  * This file written by Dan Kuykendall <seek3r@phpgroupware.org>            *
  * and Joseph Engo <jengo@phpgroupware.org>                                 *
  * and Mark Peters <skeeter@phpgroupware.org>                               *
  * and Lars Kneschke <lkneschke@linux-at-work.de>                           *
  * Functions commonly used by eGroupWare developers                         *
  * Copyright (C) 2000, 2001 Dan Kuykendall                                  *
  * Copyright (C) 2003 Lars Kneschke                                         *
  * -------------------------------------------------------------------------*
  * This library is part of the eGroupWare API                               *
  * http://www.egroupware.org                                                *
  * ------------------------------------------------------------------------ *
  * This library is free software; you can redistribute it and/or modify it  *
  * under the terms of the GNU Lesser General Public License as published by *
  * the Free Software Foundation; either version 2.1 of the License,         *
  * or any later version.                                                    *
  * This library is distributed in the hope that it will be useful, but      *
  * WITHOUT ANY WARRANTY; without even the implied warranty of               *
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                     *
  * See the GNU Lesser General Public License for more details.              *
  * You should have received a copy of the GNU Lesser General Public License *
  * along with this library; if not, write to the Free Software Foundation,  *
  * Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA            *
  \**************************************************************************/

  /* $Id: class.common.inc.php,v 1.246.2.3 2004/08/26 18:38:43 mgalgoci Exp $ */

      $d1 = strtolower(@substr(PHPGW_API_INC,0,3));
      $d2 = strtolower(@substr(PHPGW_SERVER_ROOT,0,3));
      $d3 = strtolower(@substr(PHPGW_APP_INC,0,3));
      if($d1 == 'htt' || $d1 == 'ftp' || $d2 == 'htt' || $d2 == 'ftp' || $d3 == 'htt' || $d3 == 'ftp')
      {
            echo 'Failed attempt to break in via an old Security Hole!<br>'."\n";
            exit;
      }
      unset($d1);unset($d2);unset($d3);

      /*!
      @class common
      @abstract common class that contains commonly used functions
      */
00044       class common
      {
            var $debug_info; // An array with debugging info from the API
            var $found_files;

            /*!
            @function cmp_version
            @abstract Compares two Version strings and return 1 if str2 is newest (bigger version number) than str1
            @discussion This function checks for major version only.
            @param $str1
            @param $str2
            */
00056             function cmp_version($str1,$str2,$debug=False)
            {
                  ereg("([0-9]+)\.([0-9]+)\.([0-9]+)[a-zA-Z]*([0-9]*)",$str1,$regs);
                  ereg("([0-9]+)\.([0-9]+)\.([0-9]+)[a-zA-Z]*([0-9]*)",$str2,$regs2);
                  if($debug) { echo "<br>$regs[0] - $regs2[0]"; }

                  for($i=1;$i<5;$i++)
                  {
                        if($debug) { echo "<br>$i: $regs[$i] - $regs2[$i]"; }
                        if($regs2[$i] == $regs[$i])
                        {
                              continue;
                        }
                        if($regs2[$i] > $regs[$i])
                        {
                              return 1;
                        }
                        elseif($regs2[$i] < $regs[$i])
                        {
                              return 0;
                        }
                  }
            }

            /*!
            @function cmp_version_long
            @abstract Compares two Version strings and return 1 if str2 is newest (bigger version number) than str1
            @discussion This function checks all fields. cmp_version() checks release version only.
            @param $str1
            @param $str2
            */
00087             function cmp_version_long($str1,$str2,$debug=False)
            {
                  ereg("([0-9]+)\.([0-9]+)\.([0-9]+)[a-zA-Z]*([0-9]*)\.([0-9]*)",$str1,$regs);
                  ereg("([0-9]+)\.([0-9]+)\.([0-9]+)[a-zA-Z]*([0-9]*)\.([0-9]*)",$str2,$regs2);
                  if($debug) { echo "<br>$regs[0] - $regs2[0]"; }

                  for($i=1;$i<6;$i++)
                  {
                        if($debug) { echo "<br>$i: $regs[$i] - $regs2[$i]"; }

                        if($regs2[$i] == $regs[$i])
                        {
                              if($debug) { echo ' are equal...'; }
                              continue;
                        }
                        if($regs2[$i] > $regs[$i])
                        {
                              if($debug) { echo ', and a > b'; }
                              return 1;
                        }
                        elseif($regs2[$i] < $regs[$i])
                        {
                              if($debug) { echo ', and a < b'; }
                              return 0;
                        }
                  }
                  if($debug) { echo ' - all equal.'; }
            }

            // Convert an array into the format needed for the access column.
            /*!
            @function array_to_string
            @abstract Convert an array into the format needed for the access column
            @param $access
            @param $array
            */
00123             function array_to_string($access,$array)
            {
                  $this->debug_info[] = 'array_to_string() is a depreciated function - use ACL instead';
                  $s = '';
                  if ($access == 'group' || $access == 'public' || $access == 'none')
                  {
                        if (count($array))
                        {
                              while ($t = each($array))
                              {
                                    $s .= ',' . $t[1];
                              }
                              $s .= ',';
                        }
                        if (! count($array) && $access == 'none')
                        {
                              $s = '';
                        }
                  }
                  return $s;
            }

            // This is used for searching the access fields
            /*!
            @function sql_search
            @abstract this function is used for searching the access fields
            @param $table
            @param $owner
            */
00152             function sql_search($table,$owner=0)
            {
                  $this->debug_info[] = 'sql_search() is a deprecated function - use ACL instead';
                  $s = '';
                  if (!$owner)
                  {
                        $owner = $GLOBALS['phpgw_info']['user']['account_id'];
                  }
                  $groups = $GLOBALS['phpgw']->accounts->membership((int)$owner);
                  if(@is_array($groups))
                  {
                        while ($group = each($groups))
                        {
                              $s .= " OR $table LIKE '%," . $group[2] . ",%'";
                        }
                  }
                  return $s;
            }

            // return a array of installed languages
            /*!
            @function getInstalledLanguages
            @abstract return an array of installed languages
            @result $installedLanguages; an array containing the installed languages
            */
00177             function getInstalledLanguages()
            {
                  $GLOBALS['phpgw']->db->query('SELECT DISTINCT lang FROM phpgw_lang');
                  while (@$GLOBALS['phpgw']->db->next_record())
                  {
                        $installedLanguages[$GLOBALS['phpgw']->db->f('lang')] = $GLOBALS['phpgw']->db->f('lang');
                  }

                  return $installedLanguages;
            }

            // return the preferred language of the users
            // it's using HTTP_ACCEPT_LANGUAGE (send from the users browser)
            // and ...(to find out which languages are installed)
            /*!
            @function getPreferredLanguage
            @abstract return the preferred langugae of the users
            @discussion it uses HTTP_ACCEPT_LANGUAGE (from the users browser) <br>
            and .... to find out which languages are installed
            */
00197             function getPreferredLanguage()
            {
                  // create a array of languages the user is accepting
                  $userLanguages = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']);
                  $supportedLanguages = $this->getInstalledLanguages();

                  // find usersupported language
//                while (list($key,$value) = each($userLanguages))
                  foreach($userLanguages as $key => $value)
                  {
                        // remove everything behind '-' example: de-de
                        $value = trim($value);
                        $pieces = explode('-', $value);
                        $value = $pieces[0];
                        # print 'current lang $value<br>';
                        if ($supportedLanguages[$value])
                        {
                              $retValue=$value;
                              break;
                        }
                  }

                  // no usersupported language found -> return english
                  if (empty($retValue))
                  {
                        $retValue='en';
                  }

                  return $retValue;
            }

            /*!
            @function ldap_addslashes
            @abstract escapes a string for use in searchfilters meant for ldap_search.
            Escaped Characters are: '*', '(', ')', ' ', '\', NUL
            It's actually a PHP-Bug, that we have to escape space.
            For all other Characters, refer to RFC2254.
            @param $string string to be escaped
            */
00236             function ldap_addslashes($string='')
            {
                  return str_replace(array('\\','*','(',')','\0',' '),array('\\\\','\*','\(','\)','\\0','\20'),$string);
            }

            // connect to the ldap server and return a handle
            /*!
            @function ldapConnect
            @abstract connect to the ldap server and return a handle
            @param $host ldap host
            @param $dn ldap_root_dn
            @param $passwd ldap_root_pw
            */
00249             function ldapConnect($host='', $dn='', $passwd='')
            {
                  if(!function_exists('ldap_connect'))
                  {
                        /* log does not exist in setup(, yet) */
                        if(is_object($GLOBALS['phpgw']->log))
                        {
                              $GLOBALS['phpgw']->log->message('F-Abort, LDAP support unavailable');
                              $GLOBALS['phpgw']->log->commit();
                        }

                        printf('<b>Error: LDAP support unavailable</b><br>',$host);
                        return False;
                  }

                  if(!$host)
                  {
                        $host = $GLOBALS['phpgw_info']['server']['ldap_host'];
                  }

                  if(!$dn)
                  {
                        $dn = $GLOBALS['phpgw_info']['server']['ldap_root_dn'];
                  }

                  if(!$passwd)
                  {
                        $passwd = $GLOBALS['phpgw_info']['server']['ldap_root_pw'];
                  }

                  // connect to ldap server
                  if(!$ds = ldap_connect($host))
                  {
                        /* log does not exist in setup(, yet) */
                        if(is_object($GLOBALS['phpgw']->log))
                        {
                              $GLOBALS['phpgw']->log->message('F-Abort, Failed connecting to LDAP server');
                              $GLOBALS['phpgw']->log->commit();
                        }

                        printf("<b>Error: Can't connect to LDAP server %s!</b><br>",$host);
                        return False;
                  }

                  if($GLOBALS['phpgw_info']['server']['ldap_version3'])
                  {
                        if(!ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3))
                        {
                              $GLOBALS['phpgw_info']['server']['ldap_version3'] = False;
                        }
                  }

                  // bind as admin
                  if(!ldap_bind($ds,$dn,$passwd))
                  {
                        if(is_object($GLOBALS['phpgw']->log))
                        {
                              $GLOBALS['phpgw']->log->message('F-Abort, Failed binding to LDAP server');
                              $GLOBALS['phpgw']->log->commit();
                        }

                        printf("<b>Error: Can't bind to LDAP server: %s!</b><br>",$dn);
                        return False;
                  }

                  return $ds;
            }

            // This function is used if the developer wants to stop a running app in the middle of execution
            // We may need to do some clean up before hand
            /*!
            @function phpgw_exit
            @abstract function to stop running an app
            @discussion used to stop running an app in the middle of execution <br>
            There may need to be some cleanup before hand
            @param $call_footer boolean value to if true then call footer else exit
            */
00326             function phpgw_exit($call_footer = False)
            {
                  if (!defined('PHPGW_EXIT'))
                  {
                        define('PHPGW_EXIT',True);

                        if ($call_footer)
                        {
                              $this->phpgw_footer();
                        }
                  }
                  exit;
            }

            function phpgw_final()
            {
                  if (!defined('PHPGW_FINAL'))
                  {
                        define('PHPGW_FINAL',True);

                        if (is_object($GLOBALS['phpgw']->accounts))
                        {
                              $GLOBALS['phpgw']->accounts->save_session_cache();
                        }
                        // call the asyncservice check_run function if it is not explicitly set to cron-only
                        //
                        if (!$GLOBALS['phpgw_info']['server']['asyncservice'])      // is default
                        {
                              ExecMethod('phpgwapi.asyncservice.check_run','fallback');
                        }
                        /* Clean up mcrypt */
                        if (@is_object($GLOBALS['phpgw']->crypto))
                        {
                              $GLOBALS['phpgw']->crypto->cleanup();
                              unset($GLOBALS['phpgw']->crypto);
                        }
                        $GLOBALS['phpgw']->db->disconnect();
                  }
            }

            /*!
            @function randomstring
            @abstract return a random string of size $size
            @param $size int-size of random string to return
            */
00371             function randomstring($size)
            {
                  $s = '';
                  srand((double)microtime()*1000000);
                  $random_char = array(
                        '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f',
                        'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
                        'w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L',
                        'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
                  );

                  for ($i=0; $i<$size; $i++)
                  {
                        $s .= $random_char[rand(1,61)];
                  }
                  return $s;
            }

            // Look at the note towards the top of this file (jengo)
            function filesystem_separator()
            {
                  return filesystem_separator();
            }

            /*!
            @function error_list
            @abstract This is used for reporting errors in a nice format.
            @param $error - array of errors
            */
00400             function error_list($errors,$text='Error')
            {
                  if (! is_array($errors))
                  {
                        return False;
                  }

                  $html_error = '<table border="0" width="100%"><tr><td align="right"><b>' . lang($text)
                        . '</b>: </td><td align="left">' . $errors[0] . '</td></tr>';
                  for ($i=1; $i<count($errors); $i++)
                  {
                        $html_error .= '<tr><td>&nbsp;</td><td align="left">' . $errors[$i] . '</td></tr>';
                  }
                  return $html_error . '</table>';
            }

            /*!
            @function check_owner
            @abstract none yet
            @param $record ?
            @param $link ?
            @param $label ?
            @param $extravars
            */
            // This is a depreciated function - use ACL instead (jengo)
00425             function check_owner($record,$link,$label,$extravars = '')
            {
                  $this->debug_info[] = 'check_owner() is a depreciated function - use ACL instead';
                  /*
                  $s = '<a href="' . $GLOBALS['phpgw']->link($link,$extravars) . '"> ' . lang($label) . ' </a>';
                  if (ereg('^[0-9]+$',$record))
                  {
                        if ($record != $GLOBALS['phpgw_info']['user']['account_id'])
                        {
                              $s = '&nbsp;';
                        }
                  }
                  else
                  {
                        if ($record != $GLOBALS['phpgw_info']['user']['userid'])
                        {
                              $s = '&nbsp';
                        }
                  }

                  return $s;
                  */
            }

            /*!
            @function display_fullname
            @abstract return the fullname of a user
            @param $lid account loginid
            @param $firstname firstname
            @param $lastname lastname
            */
00456             function display_fullname($lid = '', $firstname = '', $lastname = '')
            {
                  if (! $lid && ! $firstname && ! $lastname)
                  {
                        $lid       = $GLOBALS['phpgw_info']['user']['account_lid'];
                        $firstname = $GLOBALS['phpgw_info']['user']['firstname'];
                        $lastname  = $GLOBALS['phpgw_info']['user']['lastname'];
                  }

                  $display = $GLOBALS['phpgw_info']['user']['preferences']['common']['account_display'];

                  if ($firstname && $lastname)
                  {
                        $delimiter = ', ';
                  }
                  else
                  {
                        $delimiter = '';
                  }
                  
                  $name = '';
                  switch($display)
                  {
                        case 'firstname':
                              $name = $firstname . ' ' . $lastname;
                              break;
                        case 'lastname':
                              $name = $lastname . $delimiter . $firstname;
                              break;
                        case 'username':
                              $name = $lid;
                              break;
                        case 'firstall':
                              $name = $firstname . ' ' . $lastname . ' ['.$lid.']';
                              break;
                        case 'lastall':
                              $name = $lastname . $delimiter . $firstname . ' ['.$lid.']';
                              break;
                        case 'all':
                              /* fall through */
                        default:
                              $name = '['.$lid.'] ' . $firstname . ' ' . $lastname;
                  }
                  return $name;
            }

            /*!
            @function grab_owner_name
            @abstract grab the owner name
            @param $id account id
            */
00507             function grab_owner_name($accountid = '')
            {
                  $GLOBALS['phpgw']->accounts->get_account_name($accountid,$lid,$fname,$lname);
                  return $this->display_fullname($lid,$fname,$lname);
            }

            /*!
            @function create_tabs
            @abstract create tabs
            @param $tabs ?
            @param $selected ?
            @param $fontsize optional
            */
00520             function create_tabs($tabs, $selected, $fontsize = '')
            {
                  $output_text = '<table border="0" cellspacing="0" cellpadding="0"><tr>';

                  /* This is a php3 workaround */
                  if(PHPGW_IMAGES_DIR == 'PHPGW_IMAGES_DIR')
                  {
                        $ir = ExecMethod('phpgwapi.phpgw.common.get_image_path', 'phpgwapi');
                  }
                  else
                  {
                        $ir = PHPGW_IMAGES_DIR;
                  }

                  if ($fontsize)
                  {
                        $fs  = '<font size="' . $fontsize . '">';
                        $fse = '</font>';
                  }

                  $i = 1;
                  while ($tab = each($tabs))
                  {
                        if ($tab[0] == $selected)
                        {
                              if ($i == 1)
                              {
                                    $output_text .= '<td align="right"><img src="' . $ir . '/tabs-start1.gif"></td>';
                              }

                              $output_text .= '<td align="left" background="' . $ir . '/tabs-bg1.gif">&nbsp;<b><a href="'
                                    . $tab[1]['link'] . '" class="tablink" '.$tab[1]['target'].'>' . $fs . $tab[1]['label']
                                    . $fse . '</a></b>&nbsp;</td>';
                              if ($i == count($tabs))
                              {
                                    $output_text .= '<td align="left"><img src="' . $ir . '/tabs-end1.gif"></td>';
                              }
                              else
                              {
                                    $output_text .= '<td align="left"><img src="' . $ir . '/tabs-sepr.gif"></td>';
                              }
                        }
                        else
                        {
                              if ($i == 1)
                              {
                                    $output_text .= '<td align="right"><img src="' . $ir . '/tabs-start0.gif"></td>';
                              }
                              $output_text .= '<td align="left" background="' . $ir . '/tabs-bg0.gif">&nbsp;<b><a href="'
                                    . $tab[1]['link'] . '" class="tablink" '.$tab[1]['target'].'>' . $fs . $tab[1]['label'] . $fse
                                    . '</a></b>&nbsp;</td>';
                              if (($i + 1) == $selected)
                              {
                                    $output_text .= '<td align="left"><img src="' . $ir . '/tabs-sepl.gif"></td>';
                              }
                              elseif ($i == $selected || $i != count($tabs))
                              {
                                    $output_text .= '<td align="left"><img src="' . $ir . '/tabs-sepm.gif"></td>';
                              }
                              elseif ($i == count($tabs))
                              {
                                    if ($i == $selected)
                                    {
                                          $output_text .= '<td align="left"><img src="' . $ir . '/tabs-end1.gif"></td>';
                                    }
                                    else
                                    {
                                          $output_text .= '<td align="left"><img src="' . $ir . '/tabs-end0.gif"></td>';
                                    }
                              }
                              else
                              {
                                    if ($i != count($tabs))
                                    {
                                          $output_text .= '<td align="left"><img src="' . $ir . '/tabs-sepr.gif"></td>';
                                    }
                              }
                        }
                        $i++;
                        $output_text .= "\n";
                  }
                  $output_text .= "</table>\n";
                  return $output_text;
            }

            /*!
            @function get_app_dir
            @abstract get directory of application
            @discussion $appname can either be passed or derived from $phpgw_info['flags']['currentapp'];
            @param $appname name of application
            */
00611             function get_app_dir($appname = '')
            {
                  if ($appname == '')
                  {
                        $appname = $GLOBALS['phpgw_info']['flags']['currentapp'];
                  }
                  if ($appname == 'home' || $appname == 'logout' || $appname == 'login')
                  {
                        $appname = 'phpgwapi';
                  }

                  $appdir         = PHPGW_INCLUDE_ROOT . '/'.$appname;
                  $appdir_default = PHPGW_SERVER_ROOT . '/'.$appname;

                  if (@is_dir ($appdir))
                  {
                        return $appdir;
                  }
                  elseif (@is_dir ($appdir_default))
                  {
                        return $appdir_default;
                  }
                  else
                  {
                        return False;
                  }
            }

            /*!
            @function get_inc_dir
            @abstract get inc (include dir) of application
            @discussion $appname can either be passed or derived from $phpgw_info['flags']['currentapp'];
            @param $appname name of application
            */
00645             function get_inc_dir($appname = '')
            {
                  if (! $appname)
                  {
                        $appname = $GLOBALS['phpgw_info']['flags']['currentapp'];
                  }
                  if ($appname == 'home' || $appname == 'logout' || $appname == 'login' || $appname == 'about')
                  {
                        $appname = 'phpgwapi';
                  }

                  $incdir         = PHPGW_INCLUDE_ROOT . '/' . $appname . '/inc';
                  $incdir_default = PHPGW_SERVER_ROOT . '/' . $appname . '/inc';

                  if (@is_dir ($incdir))
                  {
                        return $incdir;
                  }
                  elseif (@is_dir ($incdir_default))
                  {
                        return $incdir_default;
                  }
                  else
                  {
                        return False;
                  }
            }

            /*!
            @function list_themes
            @abstract list themes available
            @note themes can either be css file like in HEAD (if the template has a css-dir and has css-files in is) \
                  or ordinary .14 themes-files
            */
00679             function list_themes()
            {
                  $tpl_dir = $this->get_tpl_dir('phpgwapi');

                  if ($dh = @opendir($tpl_dir . SEP . 'css'))
                  {
                        while ($file = readdir($dh))
                        {
                              if (eregi("\.css$", $file) && $file != 'phpgw.css')
                              {
                                    $list[] = substr($file,0,strpos($file,'.'));
                              }
                        }
                  }
                  if(!is_array($list))
                  {
                        $dh = opendir(PHPGW_SERVER_ROOT . '/phpgwapi/themes');
                        while ($file = readdir($dh))
                        {
                              if (eregi("\.theme$", $file))
                              {
                                    $list[] = substr($file,0,strpos($file,'.'));
                              }
                        }
                  }
                  closedir($dh);
                  reset ($list);
                  return $list;
            }

            /**
            * List available templates
            *
            * @returns array alphabetically sorted list of templates
            */
00714             function list_templates()
            {
                  $d = dir(PHPGW_SERVER_ROOT . '/phpgwapi/templates');
                  while ($entry=$d->read())
                  {
                        if ($entry != 'CVS' && $entry != '.' && $entry != '..'
                              && $entry != 'phpgw_website'
                              && is_dir(PHPGW_SERVER_ROOT . '/phpgwapi/templates/' . $entry))
                        {
                              $list[$entry]['name'] = $entry;
                              $f = PHPGW_SERVER_ROOT . '/phpgwapi/templates/' . $entry . '/details.inc.php';
                              if (file_exists ($f))
                              {
                                    include($f);
                                    $list[$entry]['title'] = 'Use '.$GLOBALS['phpgw_info']['template'][$entry]['title'].'interface';
                              }
                              else
                              {
                                    $list[$entry]['title'] = $entry;
                              }
                        }
                  }
                  $d->close();
                  ksort($list);
                  return $list;
            }

            /*!
            @function get_tpl_dir
            @abstract get template dir of an application
            @param $appname appication name optional can be derived from $phpgw_info['flags']['currentapp'];
            */
00746             function get_tpl_dir($appname = '')
            {
                  if (! $appname)
                  {
                        $appname = $GLOBALS['phpgw_info']['flags']['currentapp'];
                  }
                  if ($appname == 'home' || $appname == 'logout' || $appname == 'login')
                  {
                        $appname = 'phpgwapi';
                  }

                  if (!isset($GLOBALS['phpgw_info']['server']['template_set']) && isset($GLOBALS['phpgw_info']['user']['preferences']['common']['template_set']))
                  {
                        $GLOBALS['phpgw_info']['server']['template_set'] = $GLOBALS['phpgw_info']['user']['preferences']['common']['template_set'];
                  }

                  // Setting this for display of template choices in user preferences
                  if ($GLOBALS['phpgw_info']['server']['template_set'] == 'user_choice')
                  {
                        $GLOBALS['phpgw_info']['server']['usrtplchoice'] = 'user_choice';
                  }

                  if (($GLOBALS['phpgw_info']['server']['template_set'] == 'user_choice' ||
                        !isset($GLOBALS['phpgw_info']['server']['template_set'])) &&
                        isset($GLOBALS['phpgw_info']['user']['preferences']['common']['template_set']))
                  {
                        $GLOBALS['phpgw_info']['server']['template_set'] = $GLOBALS['phpgw_info']['user']['preferences']['common']['template_set'];
                  }
                  elseif ($GLOBALS['phpgw_info']['server']['template_set'] == 'user_choice' ||
                        !isset($GLOBALS['phpgw_info']['server']['template_set']))
                  {
                        $GLOBALS['phpgw_info']['server']['template_set'] = 'default';
                  }

                  $tpldir         = PHPGW_SERVER_ROOT . '/' . $appname . '/templates/' . $GLOBALS['phpgw_info']['server']['template_set'];
                  $tpldir_default = PHPGW_SERVER_ROOT . '/' . $appname . '/templates/default';

                  if (@is_dir($tpldir))
                  {
                        return $tpldir;
                  }
                  elseif (@is_dir($tpldir_default))
                  {
                        return $tpldir_default;
                  }
                  else
                  {
                        return False;
                  }
            }

            /*!
            @function is_image_dir
            @abstract checks if image_dir exists and has more than just a navbar-icon
            @note this is just a workaround for idots, better to use find_image, which has a fallback \
                  on a per image basis to the default dir
            */
00803             function is_image_dir($dir)
            {
                  if (!@is_dir($dir))
                  {
                        return False;
                  }
                  if ($d = opendir($dir))
                  {
                        while ($f = readdir($d))
                        {
                              $ext = strtolower(strrchr($f,'.'));
                              if (($ext == '.gif' || $ext == '.png') && strstr($f,'navbar') === False)
                              {
                                    return True;
                              }
                        }
                  }
                  return False;
            }

            /*!
            @function get_image_dir
            @abstract get image dir of an application
            @param $appname application name optional can be derived from $phpgw_info['flags']['currentapp'];
            */
00828             function get_image_dir($appname = '')
            {
                  if ($appname == '')
                  {
                        $appname = $GLOBALS['phpgw_info']['flags']['currentapp'];
                  }
                  if (empty($GLOBALS['phpgw_info']['server']['template_set']))
                  {
                        $GLOBALS['phpgw_info']['server']['template_set'] = 'default';
                  }

                  $imagedir            = PHPGW_SERVER_ROOT . '/' . $appname . '/templates/'
                        . $GLOBALS['phpgw_info']['server']['template_set'] . '/images';
                  $imagedir_default    = PHPGW_SERVER_ROOT . '/' . $appname . '/templates/default/images';
                  $imagedir_olddefault = PHPGW_SERVER_ROOT . '/' . $appname . '/images';

                  if ($this->is_image_dir ($imagedir))
                  {
                        return $imagedir;
                  }
                  elseif ($this->is_image_dir ($imagedir_default))
                  {
                        return $imagedir_default;
                  }
                  elseif ($this->is_image_dir ($imagedir_olddefault))
                  {
                        return $imagedir_olddefault;
                  }
                  else
                  {
                        return False;
                  }
            }

            /*!
            @function get_image_path
            @abstract get image path of an application
            @param $appname appication name optional can be derived from $phpgw_info['flags']['currentapp'];
            */
00867             function get_image_path($appname = '')
            {
                  if ($appname == '')
                  {
                        $appname = $GLOBALS['phpgw_info']['flags']['currentapp'];
                  }

                  if (empty($GLOBALS['phpgw_info']['server']['template_set']))
                  {
                        $GLOBALS['phpgw_info']['server']['template_set'] = 'default';
                  }

                  $imagedir            = PHPGW_SERVER_ROOT . '/'.$appname.'/templates/'.$GLOBALS['phpgw_info']['server']['template_set'].'/images';
                  $imagedir_default    = PHPGW_SERVER_ROOT . '/'.$appname.'/templates/default/images';
                  $imagedir_olddefault = PHPGW_SERVER_ROOT . '/'.$appname.'/images';

                  if ($this->is_image_dir ($imagedir))
                  {
                        return $GLOBALS['phpgw_info']['server']['webserver_url'].'/'.$appname.'/templates/'.$GLOBALS['phpgw_info']['server']['template_set'].'/images';
                  }
                  elseif ($this->is_image_dir ($imagedir_default))
                  {
                        return $GLOBALS['phpgw_info']['server']['webserver_url'].'/'.$appname.'/templates/default/images';
                  }
                  elseif ($this->is_image_dir ($imagedir_olddefault))
                  {
                        return $GLOBALS['phpgw_info']['server']['webserver_url'].'/'.$appname.'/images';
                  }
                  else
                  {
                        return False;
                  }
            }

            function find_image($appname,$image)
            {
                  $imagedir = '/'.$appname.'/templates/'.$GLOBALS['phpgw_info']['user']['preferences']['common']['template_set'].'/images';
                  
                  if (!@is_array($this->found_files[$appname]))
                  {
                        $imagedir_olddefault = '/'.$appname.'/images';
                        $imagedir_default    = '/'.$appname.'/templates/default/images';
                        
                        if (@is_dir(PHPGW_INCLUDE_ROOT.$imagedir_olddefault))
                        {
                              $d = dir(PHPGW_INCLUDE_ROOT.$imagedir_olddefault);
                              while (false != ($entry = $d->read()))
                              {
                                    if ($entry != '.' && $entry != '..')
                                    {
                                          $this->found_files[$appname][$entry] = $imagedir_olddefault;
                                    }
                              }
                              $d->close();
                        }

                        if (@is_dir(PHPGW_INCLUDE_ROOT.$imagedir_default))
                        {
                              $d = dir(PHPGW_INCLUDE_ROOT.$imagedir_default);
                              while (false != ($entry = $d->read()))
                              {
                                    if ($entry != '.' && $entry != '..')
                                    {
                                          $this->found_files[$appname][$entry] = $imagedir_default;
                                    }
                              }
                              $d->close();
                        }

                        if (@is_dir(PHPGW_INCLUDE_ROOT.$imagedir))
                        {
                              $d = dir(PHPGW_INCLUDE_ROOT.$imagedir);
                              while (false != ($entry = $d->read()))
                              {
                                    if ($entry != '.' && $entry != '..')
                                    {
                                          $this->found_files[$appname][$entry] = $imagedir;
                                    }
                              }
                              $d->close();
                        }
                  }
                  
                  if (!$GLOBALS['phpgw_info']['server']['image_type'])
                  {
                        // priority: GIF->JPG->PNG
                        $img_type=array('.gif','.jpg','.png');
                  }
                  else
                  {
                        // priority: : PNG->JPG->GIF
                        $img_type=array('.png','.jpg','.gif');
                  }

                  // first look in the selected template dir
                  if(@$this->found_files[$appname][$image.$img_type[0]]==$imagedir)
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image.$img_type[0]].'/'.$image.$img_type[0];
                  }
                  elseif(@$this->found_files[$appname][$image.$img_type[1]]==$imagedir)
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image.$img_type[1]].'/'.$image.$img_type[1];
                  }
                  elseif(@$this->found_files[$appname][$image.$img_type[2]]==$imagedir)
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image.$img_type[2]].'/'.$image.$img_type[2];
                  }
                  // then look everywhere else
                  elseif(isset($this->found_files[$appname][$image.$img_type[0]]))
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image.$img_type[0]].'/'.$image.$img_type[0];
                  }
                  elseif(isset($this->found_files[$appname][$image.$img_type[1]]))
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image.$img_type[1]].'/'.$image.$img_type[1];
                  }
                  elseif(isset($this->found_files[$appname][$image.$img_type[2]]))
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image.$img_type[2]].'/'.$image.$img_type[2];
                  }
                  elseif(isset($this->found_files[$appname][$image]))
                  {
                        $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$image].'/'.$image;
                  }
                  else
                  {
                        // searching the image in the api-dirs
                        if (!isset($this->found_files['phpgwapi']))
                        {
                              $this->find_image('phpgwapi','');
                        }

                        if(isset($this->found_files['phpgwapi'][$image.$img_type[0]]))
                        {
                              $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files['phpgwapi'][$image.$img_type[0]].'/'.$image.$img_type[0];
                        }
                        elseif(isset($this->found_files['phpgwapi'][$image.$img_type[1]]))
                        {
                              $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files['phpgwapi'][$image.$img_type[1]].'/'.$image.$img_type[1];
                        }
                        elseif(isset($this->found_files['phpgwapi'][$image.$img_type[2]]))
                        {
                              $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files['phpgwapi'][$image.$img_type[2]].'/'.$image.$img_type[2];
                        }
                        elseif(isset($this->found_files['phpgwapi'][$image]))
                        {
                              $imgfile = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files['phpgwapi'][$image].'/'.$image;
                        }
                        else
                        {
                              $imgfile = '';
                        }
                  }
                  return $imgfile;
            }

            function image($appname,$image='',$ext='',$use_lang=True)
            {
                  if (!is_array($image))
                  {
                        if (empty($image))
                        {
                              return '';
                        }
                        $image = array($image);
                  }
                  if ($use_lang)
                  {
                        while (list(,$img) = each($image))
                        {
                              $lang_images[] = $img . '_' . $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'];
                              $lang_images[] = $img;
                        }
                        $image = $lang_images;
                  }
                  while (empty($image_found) && list(,$img) = each($image))
                  {
                        if(isset($this->found_files[$appname][$img.$ext]))
                        {
                              $image_found = $GLOBALS['phpgw_info']['server']['webserver_url'].$this->found_files[$appname][$img.$ext].'/'.$img.$ext;
                        }
                        else
                        {
                              $image_found = $this->find_image($appname,$img.$ext);
                        }
                  }
                  return $image_found;
            }

            function image_on($appname,$image,$extension='_on')
            {
                  $with_extension = $this->image($appname,$image,$extension);
                  $without_extension = $this->image($appname,$image);
                  if($with_extension != '')
                  {
                        return $with_extension;
                  }
                  elseif($without_extension != '')
                  {
                        return $without_extension;
                  }
                  else
                  {
                        return '';
                  }
            }

            /*!
            @function navbar
            @abstract none yet
            @discussion *someone wanna add some detail here*
            */
01079             function navbar()
            {
                  $GLOBALS['phpgw_info']['navbar']['home']['title'] = 'Home';
                  $GLOBALS['phpgw_info']['navbar']['home']['url']   = $GLOBALS['phpgw']->link('/home.php');
                  $GLOBALS['phpgw_info']['navbar']['home']['icon']  = $this->image('phpgwapi',Array('home','nonav'));
                  $GLOBALS['phpgw_info']['navbar']['home']['icon_hover']  = $this->image_on('phpgwapi',Array('home','nonav'),'-over');

                  list($first) = each($GLOBALS['phpgw_info']['user']['apps']);
                  if(is_array($GLOBALS['phpgw_info']['user']['apps']['admin']) && $first != 'admin')
                  {
                        $newarray['admin'] = $GLOBALS['phpgw_info']['user']['apps']['admin'];
                        foreach($GLOBALS['phpgw_info']['user']['apps'] as $index => $value)
                        {
                              if($index != 'admin')
                              {
                                    $newarray[$index] = $value;
                              }
                        }
                        $GLOBALS['phpgw_info']['user']['apps'] = $newarray;
                        reset($GLOBALS['phpgw_info']['user']['apps']);
                  }
                  unset($index);
                  unset($value);
                  unset($newarray);

                  foreach($GLOBALS['phpgw_info']['user']['apps'] as $app => $data)
                  {
                        if (is_long($app))
                        {
                              continue;
                        }

                        if ($app == 'preferences' || $GLOBALS['phpgw_info']['apps'][$app]['status'] != 2 && $GLOBALS['phpgw_info']['apps'][$app]['status'] != 3)
                        {
                              $GLOBALS['phpgw_info']['navbar'][$app]['title'] = $GLOBALS['phpgw_info']['apps'][$app]['title'];
                              $GLOBALS['phpgw_info']['navbar'][$app]['url']   = $GLOBALS['phpgw']->link('/' . $app . '/index.php',$GLOBALS['phpgw_info']['flags']['params'][$app]);
                              $GLOBALS['phpgw_info']['navbar'][$app]['name']  = $app;

                              // create popup target
                              if ($data['status'] == 4)
                              {
                                    $GLOBALS['phpgw_info']['navbar'][$app]['target'] = ' target="'.$app.'" onClick="'."if (this != '') { window.open(this+'".
                                          (strstr($GLOBALS['phpgw_info']['navbar'][$app]['url'],'?') || 
                                          ini_get('session.use_trans_sid') && $GLOBALS['phpgw_info']['server']['sessions_type'] == 'php4' ?'&':'?').
                                          "referer='+encodeURI(location),this.target,'width=800,height=600,scrollbars=yes,resizable=yes'); return false; } else { return true; }".'"';
                              }

                              if ($app != $GLOBALS['phpgw_info']['flags']['currentapp'])
                              {
                                    $GLOBALS['phpgw_info']['navbar'][$app]['icon']  = $this->image($app,Array('navbar','nonav'));
                                    $GLOBALS['phpgw_info']['navbar'][$app]['icon_hover']  = $this->image_on($app,Array('navbar','nonav'),'-over');
                              }
                              else
                              {
                                    $GLOBALS['phpgw_info']['navbar'][$app]['icon']  = $this->image_on($app,Array('navbar','nonav'),'-over');
                                    $GLOBALS['phpgw_info']['navbar'][$app]['icon_hover']  = $this->image($app,Array('navbar','nonav'));
                              }

//                            if($GLOBALS['phpgw_info']['navbar'][$app]['icon'] == '')
//                            {
//                                  $GLOBALS['phpgw_info']['navbar'][$app]['icon']  = $this->image('phpgwapi','nonav');
//                            }
                        }
                  }
                  if ($GLOBALS['phpgw_info']['flags']['currentapp'] == 'home' || $GLOBALS['phpgw_info']['flags']['currentapp'] == 'preferences' || $GLOBALS['phpgw_info']['flags']['currentapp'] == 'about')
                  {
                        $app = $app_title = 'eGroupWare';
                  }
                  else
                  {
                        $app = $GLOBALS['phpgw_info']['flags']['currentapp'];
                        $app_title = $GLOBALS['phpgw_info']['apps'][$app]['title'];
                  }

                  if ($GLOBALS['phpgw_info']['user']['apps']['preferences'])  // preferences last
                  {
                        $prefs = $GLOBALS['phpgw_info']['navbar']['preferences'];
                        unset($GLOBALS['phpgw_info']['navbar']['preferences']);
                        $GLOBALS['phpgw_info']['navbar']['preferences'] = $prefs;
                  }

                  // We handle this here becuase its special
                  $GLOBALS['phpgw_info']['navbar']['about']['title'] = lang('About %1',$app_title);

                  $GLOBALS['phpgw_info']['navbar']['about']['url']   = $GLOBALS['phpgw']->link('/about.php','app='.$app);
                  $GLOBALS['phpgw_info']['navbar']['about']['icon']  = $this->image('phpgwapi',Array('about','nonav'));
                  $GLOBALS['phpgw_info']['navbar']['about']['icon_hover']  = $this->image_on('phpgwapi',Array('about','nonav'),'-over');

                  $GLOBALS['phpgw_info']['navbar']['logout']['title'] = lang('Logout');
                  $GLOBALS['phpgw_info']['navbar']['logout']['url']   = $GLOBALS['phpgw']->link('/logout.php');
                  $GLOBALS['phpgw_info']['navbar']['logout']['icon']  = $this->image('phpgwapi',Array('logout','nonav'));
                  $GLOBALS['phpgw_info']['navbar']['logout']['icon_hover']  = $this->image_on('phpgwapi',Array('logout','nonav'),'-over');
            }

            /*!
            @function app_header
            @abstract load header.inc.php for an application
            */
01177             function app_header()
            {
                  if (file_exists(PHPGW_APP_INC . '/header.inc.php'))
                  {
                        include(PHPGW_APP_INC . '/header.inc.php');
                  }
            }
            /*!
            @function phpgw_header
            @abstract load the phpgw header
            */
01188             function phpgw_header()
            {
                  // add a content-type header to overwrite an existing default charset in apache (AddDefaultCharset directiv)
                  header('Content-type: text/html; charset='.$GLOBALS['phpgw']->translation->charset());

                  include(PHPGW_INCLUDE_ROOT . '/phpgwapi/templates/' . $GLOBALS['phpgw_info']['server']['template_set']
                        . '/head.inc.php');
                  $this->navbar(False);
                  include(PHPGW_INCLUDE_ROOT . '/phpgwapi/templates/' . $GLOBALS['phpgw_info']['server']['template_set']
                        . '/navbar.inc.php');
                  if (!@$GLOBALS['phpgw_info']['flags']['nonavbar'] && !@$GLOBALS['phpgw_info']['flags']['navbar_target'])
                  {
                        echo parse_navbar();
                  }
            }

            function phpgw_footer()
            {
                  if (!defined('PHPGW_FOOTER'))
                  {
                        define('PHPGW_FOOTER',True);
                        if (!isset($GLOBALS['phpgw_info']['flags']['nofooter']) || !$GLOBALS['phpgw_info']['flags']['nofooter'])
                        {
                              include(PHPGW_API_INC . '/footer.inc.php');
                        }
                  }
            }

            /**
            * Used by template headers for including CSS in the header
            *
            * This first loads up the basic global CSS definitions, which support
            * the selected user theme colors.  Next we load up the app CSS.  This is
            * all merged into the selected theme's css.tpl file.
            *
            * @author Dave Hall (*based* on verdilak? css inclusion code)
            */
01225             function get_css()
            {
                  $tpl = createObject('phpgwapi.Template', $this->get_tpl_dir('phpgwapi'));
                  $tpl->set_file('css', 'css.tpl');
                  $tpl->set_var($GLOBALS['phpgw_info']['theme']);
                  $app_css = '';
                  if(@isset($_GET['menuaction']))
                  {
                        list($app,$class,$method) = explode('.',$_GET['menuaction']);
                        if(is_array($GLOBALS[$class]->public_functions) &&
                              $GLOBALS[$class]->public_functions['css'])
                        {
                              $app_css .= $GLOBALS[$class]->css();
                        }
                  }
                  if (isset($GLOBALS['phpgw_info']['flags']['css']))
                  {
                        $app_css .= $GLOBALS['phpgw_info']['flags']['css'];
                  }
                  $tpl->set_var('app_css', $app_css);

                  // search for app specific css file
                  if(@isset($GLOBALS['phpgw_info']['flags']['currentapp']))
                  {
                        $appname = $GLOBALS['phpgw_info']['flags']['currentapp'];

                        if(file_exists(PHPGW_SERVER_ROOT . SEP . $appname . SEP
                              . 'templates' . SEP . $GLOBALS['phpgw_info']['server']['template_set']
                              . SEP . 'app.css')
                        )
                        {
                              $tpl->set_var('css_file', '<LINK href="'.$GLOBALS['phpgw_info']['server']['webserver_url']
                                    . "/$appname/templates/".$GLOBALS['phpgw_info']['server']['template_set']
                                    . "/app.css".'" type=text/css rel=StyleSheet>');
                        }
                        elseif(file_exists(PHPGW_SERVER_ROOT . SEP . $appname . SEP
                              . 'templates' . SEP . 'default'
                              . SEP . 'app.css')
                        )
                        {
                              $tpl->set_var('css_file', '<LINK href="'.$GLOBALS['phpgw_info']['server']['webserver_url']
                              ."/$appname/templates/default/app.css".'" type=text/css rel=StyleSheet>');
                        }
                  }

                  return $tpl->subst('css');
            }

            /**
            * Used by the template headers for including javascript in the header
            *
            * The method is included here to make it easier to change the js support
            * in phpgw.  One change then all templates will support it (as long as they
            * include a call to this method).
            *
            * @author Dave Hall (*vaguely based* on verdilak? css inclusion code)
            * @return string the javascript to be included
            */
01283             function get_java_script()
            {
                  $java_script = '';

                  /* this flag is for all javascript code that has to be put before other jscode. 
                  Think of conf vars etc...  (pim@lingewoud.nl) */
                  if (isset($GLOBALS['phpgw_info']['flags']['java_script_thirst']))
                  {
                        $java_script .= $GLOBALS['phpgw_info']['flags']['java_script_thirst'] . "\n";
                  }
                  
                  if(@is_object($GLOBALS['phpgw']->js))
                  {
                        $java_script .= $GLOBALS['phpgw']->js->get_script_links();
                  }

                  if(@isset($_GET['menuaction']))
                  {
                        list($app,$class,$method) = explode('.',$_GET['menuaction']);
                        if(is_array($GLOBALS[$class]->public_functions) &&
                              $GLOBALS[$class]->public_functions['java_script'])
                        {
                              $java_script .= $GLOBALS[$class]->java_script();
                        }
                  }
                  if (isset($GLOBALS['phpgw_info']['flags']['java_script']))
                  {
                        $java_script .= $GLOBALS['phpgw_info']['flags']['java_script'] . "\n";
                  }
                  return $java_script;
            }

            /**
            * Returns on(Un)Load attributes from js class
            *
            *@author Dave Hall - skwashd at phpgroupware.org
            *@returns string body attributes
            */
01321             function get_body_attribs()
            {
                  if(@is_object($GLOBALS['phpgw']->js))
                  {
                        return $GLOBALS['phpgw']->js->get_body_attribs();
                  }
                  else
                  {
                        return '';
                  }
            }

            function hex2bin($data)
            {
                  $len = strlen($data);
                  return @pack('H' . $len, $data);
            }

            /*!
            @function encrypt
            @abstract encrypt data passed to the function
            @param $data data (string?) to be encrypted
            */
01344             function encrypt($data)
            {
                  return $GLOBALS['phpgw']->crypto->encrypt($data);
            }

            /*!
            @function decrypt
            @abstract decrypt $data
            @param $data data to be decrypted
            */
01354             function decrypt($data)
            {
                  return $GLOBALS['phpgw']->crypto->decrypt($data);
            }

            /*!
            @function encrypt_password
            @abstract legacy wrapper for newer auth class function, encrypt_password
            @abstract uses the encryption type set in setup and calls the appropriate encryption functions
            @param $password password to encrypt
            */
01365             function encrypt_password($password,$sql=False)
            {
                  if(!@is_object($GLOBALS['phpgw']->auth))
                  {
                        $GLOBALS['phpgw']->auth = CreateObject('phpgwapi.auth');
                  }
                  return $GLOBALS['phpgw']->auth->encrypt_password($password,$sql);
            }

            /*!
            @function find_portal_order
            @abstract find the current position of the app is the users portal_order preference
            @param $app application id to find current position - required
            @discussion No discussion
            */
01380             function find_portal_order($app)
            {
                  if(!is_array($GLOBALS['phpgw_info']['user']['preferences']['portal_order']))
                  {
                        return -1;
                  }
                  @reset($GLOBALS['phpgw_info']['user']['preferences']['portal_order']);
                  while(list($seq,$appid) = each($GLOBALS['phpgw_info']['user']['preferences']['portal_order']))
                  {
                        if($appid == $app)
                        {
                              @reset($GLOBALS['phpgw_info']['user']['preferences']['portal_order']);
                              return $seq;
                        }
                  }
                  @reset($GLOBALS['phpgw_info']['user']['preferences']['portal_order']);
                  return -1;
            }

            /*!
            @function hook
            @abstract temp wrapper to new hooks class
            */
01403             function hook($location, $appname = '', $no_permission_check = False)
            {
                  echo '$'."GLOBALS['phpgw']common->hook()".' has been replaced. Please change to the new $'."GLOBALS['phpgw']hooks->process()".'. For now this will act as a wrapper<br>';
                  return $GLOBALS['phpgw']->hooks->process($location, $order, $no_permission_check);
            }

            /*!
            @function hook_single
            @abstract temp wrapper to new hooks class
            */
            // Note: $no_permission_check should *ONLY* be used when it *HAS* to be. (jengo)
01414             function hook_single($location, $appname = '', $no_permission_check = False)
            {
                  echo '$'."GLOBALS['phpgw']common->hook_single()".' has been replaced. Please change to the new $'."GLOBALS['phpgw']hooks->single()".'. For now this will act as a wrapper<br>';
                  return $GLOBALS['phpgw']->hooks->single($location, $order, $no_permission_check);
            }

            /*!
            @function hook_count
            @abstract temp wrapper to new hooks class
            */
01424             function hook_count($location)
            {
                  echo '$'."GLOBALS['phpgw']common->hook_count()".' has been replaced. Please change to the new $'."GLOBALS['phpgw']hooks->count()".'. For now this will act as a wrapper<br>';
                  return $GLOBALS['phpgw']->hooks->count($location);
            }

            /* Wrapper to the session->appsession() */
            function appsession($data = '##NOTHING##')
            {
                  $this->debug_info[] = '$phpgw->common->appsession() is a depreciated function'
                        . ' - use $phpgw->session->appsession() instead';

                  return $GLOBALS['phpgw']->session->appsession('default','',$data);
            }

            /*!
            @function show_date
            @abstract show current date
            @param $t time - optional can be pulled from user preferences
            @param $format - optional can be pulled from user prefernces
            */
01445             function show_date($t = '', $format = '')
            {
                  if(!is_object($GLOBALS['phpgw']->datetime))
                  {
                        $GLOBALS['phpgw']->datetime = createobject('phpgwapi.datetime');
                  }

                  if (!$t || (int)$t <= 0)
                  {
                        $t = $GLOBALS['phpgw']->datetime->gmtnow;
                  }

                  //  + (date('I') == 1?3600:0)
                  $t += $GLOBALS['phpgw']->datetime->tz_offset;

                  if (! $format)
                  {
                        $format = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'] . ' - ';
                        if ($GLOBALS['phpgw_info']['user']['preferences']['common']['timeformat'] == '12')
                        {
                              $format .= 'h:i a';
                        }
                        else
                        {
                              $format .= 'H:i';
                        }
                  }
                  if((PHP_OS == 'Windows' || PHP_OS == 'WINNT') && (int)$t < 21600)
                  /*if(PHP_OS == 'Windows' && (int)$t < 21600)*/
                  {
                        $t = 21600;
                  }
                  return date($format,$t);
            }

            /*!
            @function dateformatorder
            @abstract
            @param $yearstr year - string
            @param $monthstr month - string
            @param $day day - string
            @param $add_seperator boolean defaults to false
            */
01488             function dateformatorder($yearstr,$monthstr,$daystr,$add_seperator = False)
            {
                  $dateformat = strtolower($GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat']);
                  $sep = substr($GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'],1,1);

                  $dlarr[strpos($dateformat,'y')] = $yearstr;
                  $dlarr[strpos($dateformat,'m')] = $monthstr;
                  $dlarr[strpos($dateformat,'d')] = $daystr;
                  ksort($dlarr);

                  if ($add_seperator)
                  {
                        return (implode($sep,$dlarr));
                  }
                  else
                  {
                        return (implode(' ',$dlarr));
                  }
            }

            /*!
            @function formattime
            @abstract format the time takes settings from user preferences
            @param $hour hour
            @param $min minutes
            @param $sec defaults to ''
            */
01515             function formattime($hour,$min,$sec='')
            {
                  $h12 = $hour;
                  if ($GLOBALS['phpgw_info']['user']['preferences']['common']['timeformat'] == '12')
                  {
                        if ($hour >= 12)
                        {
                              $ampm = ' pm';
                        }
                        else
                        {
                              $ampm = ' am';
                        }

                        $h12 %= 12;

                        if ($h12 == 0 && $hour)
                        {
                              $h12 = 12;
                        }
                        if ($h12 == 0 && !$hour)
                        {
                              $h12 = 0;
                        }
                  }
                  else
                  {
                        $h12 = $hour;
                  }

                  if ($sec !== '')
                  {
                        $sec = ":$sec";
                  }

                  return "$h12:$min$sec$ampm";
            }

            // This is not the best place for it, but it needs to be shared bewteen Aeromail and SM
            /*!
            @function get_email_passwd_ex
            @abstract uses code in /email class msg to obtain the appropriate password for email
            @param  (none - it will abtain the info it needs on its own)
            */
            /*
            function get_email_passwd_ex()
            {
                  // ----  Create the email Message Class  if needed  -----
                  if (is_object($GLOBALS['phpgw']->msg))
                  {
                        $do_free_me = False;
                  }
                  else
                  {
                        $GLOBALS['phpgw']->msg = CreateObject('email.mail_msg');
                        $do_free_me = True;
                  }
                  // use the Msg class to obtain the appropriate password
                  $tmp_prefs = $GLOBALS['phpgw']->preferences->read();
                  if (!isset($tmp_prefs['email']['passwd']))
                  {
                        $email_passwd = $GLOBALS['phpgw_info']['user']['passwd'];
                  }
                  else
                  {
                        $email_passwd = $GLOBALS['phpgw']->msg->decrypt_email_passwd($tmp_prefs['email']['passwd']);
                  }
                  // cleanup and return
                  if ($do_free_me)
                  {
                        unset ($GLOBALS['phpgw']->msg);
                  }
                  return $email_passwd;
            }
            */

            // This is not the best place for it, but it needs to be shared bewteen Aeromail and SM
            /*!
            @function create_emailpreferences
            @abstract create email preferences
            @discussion This is not the best place for it, but it needs to be shared between Aeromail and SM
            @param $prefs
            @param $account_id -optional defaults to : phpgw_info['user']['account_id']
            */
01599             function create_emailpreferences($prefs='',$accountid='')
            {
                  return $GLOBALS['phpgw']->preferences->create_email_preferences($accountid);
                  // ----  Create the email Message Class  if needed  -----
                  if (is_object($GLOBALS['phpgw']->msg))
                  {
                        $do_free_me = False;
                  }
                  else
                  {
                        $GLOBALS['phpgw']->msg = CreateObject('email.mail_msg');
                        $do_free_me = True;
                  }

                  // this sets the preferences into the phpgw_info structure
                  $GLOBALS['phpgw']->msg->create_email_preferences();

                  // cleanup and return
                  if ($do_free_me)
                  {
                        unset ($GLOBALS['phpgw']->msg);
                  }
            }

            /*
            function create_emailpreferences($prefs,$accountid='')
            {
                  $account_id = get_account_id($accountid);

                  // NEW EMAIL PASSWD METHOD (shared between SM and aeromail)
                  $prefs['email']['passwd'] = $this->get_email_passwd_ex();

                  // Add default preferences info
                  if (!isset($prefs['email']['userid']))
                  {
                        if ($GLOBALS['phpgw_info']['server']['mail_login_type'] == 'vmailmgr')
                        {
                              $prefs['email']['userid'] = $GLOBALS['phpgw']->accounts->id2name($account_id)
                                    . '@' . $GLOBALS['phpgw_info']['server']['mail_suffix'];
                        }
                        else
                        {
                              $prefs['email']['userid'] = $GLOBALS['phpgw']->accounts->id2name($account_id);
                        }
                  }
                  // Set Server Mail Type if not defined
                  if (empty($GLOBALS['phpgw_info']['server']['mail_server_type']))
                  {
                        $GLOBALS['phpgw_info']['server']['mail_server_type'] = 'imap';
                  }

                  // OLD EMAIL PASSWD METHOD
                  if (!isset($prefs['email']['passwd']))
                  {
                        $prefs['email']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd'];
                  }
                  else
                  {
                        $prefs['email']['passwd'] = $this->decrypt($prefs['email']['passwd']);
                  }
                  // NEW EMAIL PASSWD METHOD Located at the begining of this function

                  if (!isset($prefs['email']['address']))
                  {
                        $prefs['email']['address'] = $GLOBALS['phpgw']->accounts->id2name($account_id)
                              . '@' . $GLOBALS['phpgw_info']['server']['mail_suffix'];
                  }
                  if (!isset($prefs['email']['mail_server']))
                  {
                        $prefs['email']['mail_server'] = $GLOBALS['phpgw_info']['server']['mail_server'];
                  }
                  if (!isset($prefs['email']['mail_server_type']))
                  {
                        $prefs['email']['mail_server_type'] = $GLOBALS['phpgw_info']['server']['mail_server_type'];
                  }
                  if (!isset($prefs['email']['imap_server_type']))
                  {
                        $prefs['email']['imap_server_type'] = $GLOBALS['phpgw_info']['server']['imap_server_type'];
                  }
                  // These sets the mail_port server variable
                  if ($prefs['email']['mail_server_type']=='imap')
                  {
                        $prefs['email']['mail_port'] = '143';
                  }
                  elseif ($prefs['email']['mail_server_type']=='pop3')
                  {
                        $prefs['email']['mail_port'] = '110';
                  }
                  elseif ($prefs['email']['mail_server_type']=='imaps')
                  {
                        $prefs['email']['mail_port'] = '993';
                  }
                  elseif ($prefs['email']['mail_server_type']=='pop3s')
                  {
                        $prefs['email']['mail_port'] = '995';
                  }
                  // This is going to be used to switch to the nntp class
                  if (isset($phpgw_info['flags']['newsmode']) &&
                        $GLOBALS['phpgw_info']['flags']['newsmode'])
                  {
                        $prefs['email']['mail_server_type'] = 'nntp';
                  }
                  // DEBUG
                  //echo "<br>prefs['email']['passwd']: " .$prefs['email']['passwd'] .'<br>';
                  return $prefs;
            }
            */

            // This will be moved into the applications area.
            /*!
            @function check_code
            @abstract ?
            @discussion This will be moved into the applications area
            */
01713             function check_code($code)
            {
                  $s = '<br>';
                  switch ($code)
                  {
                        case 13:    $s .= lang('Your message has been sent');break;
                        case 14:    $s .= lang('New entry added sucessfully');break;
                        case 15:    $s .= lang('Entry updated sucessfully');  break;
                        case 16:    $s .= lang('Entry has been deleted sucessfully'); break;
                        case 18:    $s .= lang('Password has been updated');  break;
                        case 38:    $s .= lang('Password could not be changed');    break;
                        case 19:    $s .= lang('Session has been killed');    break;
                        case 27:    $s .= lang('Account has been updated');   break;
                        case 28:    $s .= lang('Account has been created');   break;
                        case 29:    $s .= lang('Account has been deleted');   break;
                        case 30:    $s .= lang('Your settings have been updated'); break;
                        case 31:    $s .= lang('Group has been added'); break;
                        case 32:    $s .= lang('Group has been deleted');     break;
                        case 33:    $s .= lang('Group has been updated');     break;
                        case 34:    $s .= lang('Account has been deleted') . '<p>'
                                    . lang('Error deleting %1 %2 directory',lang('users'),' '.lang('private').' ')
                                    . ',<br>' . lang('Please %1 by hand',lang('delete')) . '<br><br>'
                                    . lang('To correct this error for the future you will need to properly set the')
                                    . '<br>' . lang('permissions to the files/users directory')
                                    . '<br>' . lang('On *nix systems please type: %1','chmod 770 '
                                    . $GLOBALS['phpgw_info']['server']['files_dir'] . '/users/');
                              break;
                        case 35:    $s .= lang('Account has been updated') . '<p>'
                                    . lang('Error renaming %1 %2 directory',lang('users'),
                                    ' '.lang('private').' ')
                                    . ',<br>' . lang('Please %1 by hand',
                                    lang('rename')) . '<br><br>'
                                    . lang('To correct this error for the future you will need to properly set the')
                                    . '<br>' . lang('permissions to the files/users directory')
                                    . '<br>' . lang('On *nix systems please type: %1','chmod 770 '
                                    . $GLOBALS['phpgw_info']['server']['files_dir'] . '/users/');
                              break;
                        case 36:    $s .= lang('Account has been created') . '<p>'
                                    . lang('Error creating %1 %2 directory',lang('users'),
                                    ' '.lang('private').' ')
                                    . ',<br>' . lang('Please %1 by hand',
                                    lang('create')) . '<br><br>'
                                    . lang('To correct this error for the future you will need to properly set the')
                                    . '<br>' . lang('permissions to the files/users directory')
                                    . '<br>' . lang('On *nix systems please type: %1','chmod 770 '
                                    . $GLOBALS['phpgw_info']['server']['files_dir'] . '/users/');
                              break;
                        case 37:    $s .= lang('Group has been added') . '<p>'
                                    . lang('Error creating %1 %2 directory',lang('groups'),' ')
                                    . ',<br>' . lang('Please %1 by hand',
                                    lang('create')) . '<br><br>'
                                    . lang('To correct this error for the future you will need to properly set the')
                                    . '<br>' . lang('permissions to the files/users directory')
                                    . '<br>' . lang('On *nix systems please type: %1','chmod 770 '
                                    . $GLOBALS['phpgw_info']['server']['files_dir'] . '/groups/');
                              break;
                        case 38:    $s .= lang('Group has been deleted') . '<p>'
                                    . lang('Error deleting %1 %2 directory',lang('groups'),' ')
                                    . ',<br>' . lang('Please %1 by hand',
                                    lang('delete')) . '<br><br>'
                                    . lang('To correct this error for the future you will need to properly set the')
                                    . '<br>' . lang('permissions to the files/users directory')
                                    . '<br>' . lang('On *nix systems please type: %1','chmod 770 '
                                    . $GLOBALS['phpgw_info']['server']['files_dir'] . '/groups/');
                              break;
                        case 39:    $s .= lang('Group has been updated') . '<p>'
                                    . lang('Error renaming %1 %2 directory',lang('groups'),' ')
                                    . ',<br>' . lang('Please %1 by hand',
                                    lang('rename')) . '<br><br>'
                                    . lang('To correct this error for the future you will need to properly set the')
                                    . '<br>' . lang('permissions to the files/users directory')
                                    . '<br>' . lang('On *nix systems please type: %1','chmod 770 '
                                    . $GLOBALS['phpgw_info']['server']['files_dir'] . '/groups/');
                              break;
                        case 40: $s .= lang('You have not entered a title').'.';
                              break;
                        case 41: $s .= lang('You have not entered a valid time of day').'.';
                              break;
                        case 42: $s .= lang('You have not entered a valid date').'.';
                              break;
                        case 43: $s .= lang('You have not entered participants').'.';
                              break;
                        default:    return '';
                  }
                  return $s;
            }
            /*!
            @function phpgw_error
            @abstract process error message
            @param $error error
            @param $line line
            @param $file file
            */
01806             function phpgw_error($error,$line = '', $file = '')
            {
                  echo '<p><b>phpGroupWare internal error:</b><p>'.$error;
                  if ($line)
                  {
                        echo 'Line: '.$line;
                  }
                  if ($file)
                  {
                        echo 'File: '.$file;
                  }
                  echo '<p>Your session has been halted.';
                  exit;
            }

            /*!
            @function create_phpcode_from_array
            @abstract create phpcode from array
            @param $array - array
            */
01826             function create_phpcode_from_array($array)
            {
                  while (list($key, $val) = each($array))
                  {
                        if (is_array($val))
                        {
                              while (list($key2, $val2) = each($val))
                              {
                                    if (is_array($val2))
                                    {
                                          while (list($key3, $val3) = each ($val2))
                                          {
                                                if (is_array($val3))
                                                {
                                                      while (list($key4, $val4) = each ($val3))
                                                      {
                                                            $s .= '$phpgw_info["' . $key . '"]["' . $key2 . '"]["' . $key3 . '"]["' .$key4 . '"]="' . $val4 . '";';
                                                            $s .= "\n";
                                                      }
                                                }
                                                else
                                                {
                                                      $s .= '$phpgw_info["' . $key . '"]["' . $key2 . '"]["' . $key3 . '"]="' . $val3 . '";';
                                                      $s .= "\n";
                                                }
                                          }
                                    }
                                    else
                                    {
                                          $s .= '$phpgw_info["' . $key .'"]["' . $key2 . '"]="' . $val2 . '";';
                                          $s .= "\n";
                                    }
                              }
                        }
                        else
                        {
                              $s .= '$phpgw_info["' . $key . '"]="' . $val . '";';
                              $s .= "\n";
                        }
                  }
                  return $s;
            }

            // This will return the full phpgw_info array, used for debugging
            /*!
            @function debug_list_array_contents
            @abstract return the full phpgw_info array for debugging
            @param array - array
            */
01875             function debug_list_array_contents($array)
            {
                  while (list($key, $val) = each($array))
                  {
                        if (is_array($val))
                        {
                              while (list($key2, $val2) = each($val))
                              {
                                    if (is_array($val2))
                                    {
                                          while (list($key3, $val3) = each ($val2))
                                          {
                                                if (is_array($val3))
                                                {
                                                      while (list($key4, $val4) = each ($val3))
                                                      {
                                                            echo $$array . "[$key][$key2][$key3][$key4]=$val4<br>";
                                                      }
                                                }
                                                else
                                                {
                                                      echo $$array . "[$key][$key2][$key3]=$val3<br>";
                                                }
                                          }
                                    }
                                    else
                                    {
                                          echo $$array . "[$key][$key2]=$val2<br>";
                                    }
                              }
                        }
                        else
                        {
                              echo $$array . "[$key]=$val<br>";
                        }
                  }
            }

            // This will return a list of functions in the API
            /*!
            @function debug_list_core_functions
            @abstract return a list of functionsin the API
            */
01918             function debug_list_core_functions()
            {
                  echo '<br><b>core functions</b><br>';
                  echo '<pre>';
                  chdir(PHPGW_INCLUDE_ROOT . '/phpgwapi');
                  system("grep -r '^[ \t]*function' *");
                  echo '</pre>';
            }

            // This will return a value for the next id an app/class may need to insert values into ldap.
            /*!
            @function next_id
            @abstract return the next higher value for an integer, and increment it in the db.
            */
01932             function next_id($appname,$min=0,$max=0)
            {
                  if (!$appname)
                  {
                        return -1;
                  }

                  $GLOBALS['phpgw']->db->query("SELECT id FROM phpgw_nextid WHERE appname='".$appname."'",__LINE__,__FILE__);
                  while( $GLOBALS['phpgw']->db->next_record() )
                  {
                        $id = $GLOBALS['phpgw']->db->f('id');
                  }

                  if (empty($id) || !$id)
                  {
                        $id = 1;
                        $GLOBALS['phpgw']->db->query("INSERT INTO phpgw_nextid (appname,id) VALUES ('".$appname."',".$id.")",__LINE__,__FILE__);
                  }
                  elseif($id<$min)
                  {
                        $id = $min;
                        $GLOBALS['phpgw']->db->query("UPDATE phpgw_nextid SET id=".$id." WHERE appname='".$appname."'",__LINE__,__FILE__);
                  }
                  elseif ($max && ($id > $max))
                  {
                        return False;
                  }
                  else
                  {
                        $id = $id + 1;
                        $GLOBALS['phpgw']->db->query("UPDATE phpgw_nextid SET id=".$id." WHERE appname='".$appname."'",__LINE__,__FILE__);
                  }

                  return (int)$id;
            }

            // This will return a value for the last id entered, which an app may need to check
            // values for ldap.
            /*!
            @function last_id
            @abstract return the current id in the next_id table for a particular app/class.
            */
01974             function last_id($appname,$min=0,$max=0)
            {
                  if (!$appname)
                  {
                        return -1;
                  }

                  $GLOBALS['phpgw']->db->query("SELECT id FROM phpgw_nextid WHERE appname='".$appname."'",__LINE__,__FILE__);
                  while( $GLOBALS['phpgw']->db->next_record() )
                  {
                        $id = $GLOBALS['phpgw']->db->f('id');
                  }

                  if (empty($id) || !$id)
                  {
                        if($min)
                        {
                              $id = $min;
                        }
                        else
                        {
                              $id = 1;
                        }
                        $GLOBALS['phpgw']->db->query("INSERT INTO phpgw_nextid (appname,id) VALUES ('".$appname."',".$id.")",__LINE__,__FILE__);
                  }
                  elseif($id<$min)
                  {
                        $id = $min;
                        $GLOBALS['phpgw']->db->query("UPDATE phpgw_nextid SET id=".$id." WHERE appname='".$appname."'",__LINE__,__FILE__);
                  }
                  elseif ($max && ($id > $max))
                  {
                        return False;
                  }
                  return (int)$id;
            }
      }//end common class

Generated by  Doxygen 1.6.0   Back to index