phpgroupware-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Phpgroupware-cvs] CVS: email/inc class.boattach_file.inc.php,NONE,1.1 c


From: Dave Hall <address@hidden>
Subject: [Phpgroupware-cvs] CVS: email/inc class.boattach_file.inc.php,NONE,1.1 class.bojsaddressbook.inc.php,NONE,1.1 class.html_widgets.inc.php,NONE,1.1 class.mail_filters.inc.php,1.5,1.6 class.msg_bootstrap.inc.php,NONE,1.1 class.spell.inc.php,NONE,1.1 class.spell_struct.inc.php,NONE,1.1 class.spell_svc_none.inc.php,NONE,1.1 class.spell_svc_php.inc.php,NONE,1.1 class.svc_nextmatches.inc.php,NONE,1.1 class.ui_mail_debug.inc.php,NONE,1.1 class.uiattach_file.inc.php,NONE,1.1 class.uijsaddressbook.inc.php,NONE,1.1 selectboxes.js,NONE,1.1
Date: Fri, 25 Oct 2002 08:57:00 -0400

Update of /cvsroot/phpgroupware/email/inc
In directory subversions:/tmp/cvs-serv5701

Added Files:
        class.boattach_file.inc.php class.bojsaddressbook.inc.php 
        class.html_widgets.inc.php class.mail_filters.inc.php 
        class.msg_bootstrap.inc.php class.spell.inc.php 
        class.spell_struct.inc.php class.spell_svc_none.inc.php 
        class.spell_svc_php.inc.php class.svc_nextmatches.inc.php 
        class.ui_mail_debug.inc.php class.uiattach_file.inc.php 
        class.uijsaddressbook.inc.php selectboxes.js 
Log Message:
ported anglemail - used anglemail-1.1-pre5-12 release - finally :)

***** Error reading new file: [Errno 2] No such file or directory: 
'class.boattach_file.inc.php'
--- NEW FILE ---
<?php
/**************************************************************************\
 * phpGroupWare - Todo list                                                 *
 * http://www.phpgroupware.org                                              *
 * Written by Alex Borges <address@hidden>                          *
 * Low Level Design also by    Dave Hall address@hidden                         
 *
 * UI Design and market research by Gerardo Ramirez address@hidden
 *-----------------------------------------------                          *
 *  This program is free software; you can redistribute it and/or modify it *
 *  under the terms of the GNU General Public License as published by the   *
 *  Free Software Foundation; either version 2 of the License, or (at your  *
 *  option) any later version.                                              *
 \**************************************************************************/

/*!
  @class bojsaddressbiij
  @abstract logic for the javascript addressbook is here
  @author Lex 
  @ discussion  Understand that
  this is my first attempt to a bo,ui pair of objects
  that will do the job. I turned to do this because
  this thingie has to be available for use by all the
  phpgw 0.9.14 apps.
  My approach is to use abstraction as much as possible.
  This class will handle all data. DATA you hear? 
  This means that the state of the abstraction we call
  the cool addressbook chooser is here.... THE STATE!
  Nothing webish about this file. This file will no receive
  ever variables from HTTP_POST or GET. That is for the UI class
  to handle. This class has methods that receive parameters so you 
  can use it from anyware.
 */
         class bojsaddressbook
        {
                //@param $contacts phpgwapi contacts object
                var $contacts;
                //@param destboxes array that has the state of the three 
possible destination boxes
                //this thing will have the title of the destination boxes and 
their content
                //this class is session cache enabled. When you solicit the 
content of 
                //this boxes this class may get it from cache if it thinks its 
necesary
                //the boxes are named toselectbox,ccselectbox  and 
bccselectbox. 
                var $destboxes;
                //@param contactquery this is an array that holds the parameters
                //to make a query for  the contacts class. The contact class 
takes
                //as parameters: integers: start,offset. The cols array that 
has the fields that should be returned.
                //The query string that returns whatever matches the given 
string for the fields provided
                //the filter string to match against non contact fields. The 
sort boolean and the extra sort_by parameter
                //to sort by a given field.
                var $contactquery;
                //@param queryresult its the array with actual user data that 
we have gotten from contacts
                var $queryresults;
                //@param cachestate Its an internal var to tell us if we should 
expire the cache
                var $cachestate="dirty";
                var $debug = False;
                //@param result Which has an array of results from querying the 
contacts backend.
                var $result;
                //@param mass_query_cols Is an array that tells the backends 
which fields to get from the
                //contacts backend for FULL QUERIES. Full queries are made upon 
construction of this
                //object. They are different from single queries in that full 
queries are supposed to get
                //A list of contacts, each having their own fields given by 
this array.
                var $mass_query_cols = array (
                                'title'     => 'title',
                                'n_given'    => 'n_given',
                                'n_family'   => 'n_family',
                                'email'      => 'email',
                                'org_name' => 'org_name',
                                'email_home'  => 'email_home'
                                );
                //@param single_query_cols This array is similar to the one 
above except this is for
                //SINGLE QUERIES. This queries happen when you call the 
get_userdata method to get
                //the record of a single entry in the contacts backend
                //To add a field to fetch back from userdata
                //u need to add the field u want here
                //Also, in class.uijsaddressbook there is a translation array 
that has
                //the names of each field in english. Use it to decide what 
values to add here
                var $single_query_cols =  array (
                                'title'     => 'title',
                                'n_given'    => 'n_given',
                                'n_family'   => 'n_family',
                                'org_name' => 'org_name',
                                'tel_work' => 'tel_work',
                                'cat_id'  => 'cat_id'
                                );
                //@param use_session Not used at the moment
                var $use_session=true;

                //@function bojsaddressbook 
                //@abstract This class's contructor
                //@param contactquery Its a query array in the form explained 
as:
                //      order: Must be equal to the order in which you want the 
query...ASC or DESC
                //      categories: Must have the categories string as 
constrained by the categories class
                //                  ,1,2 or 1,2 are valid strings to say, 
category number 1 and 2
                //      filter: This is a whole parameter in itself, will 
explain bellow in the parse_contactquery discussion
                //      query: Freestyle query to match against any fields in a 
mass query
                //      sort:  The field to sort by.... n_give will sort by 
name, for example
                //      directory_uid: This field may be empty but, if it has a 
number in it
                //      we will search in the contacts owned by the user whose 
uid matches this value
                //@param queryresults UNUSED, might use it for caching state 
purposes later on
                //@discussion 
                //This function checks its cache. All parameters are optional. 
If called with no parameters
                //the class will assume all that it needs is in the cache and 
will get it from there
                //If a contactquery value is supplied, the class will desregard 
its cache and go fetch the whole
                //query again. 
                //To be truth, its actually quite stupid and we should be using 
more intelligence to decide
                //if the cache is stale.... for example, caching the result 
form parse_contactquery and
                //compare it with what results from parsing the incoming 
contactquery. If its the same,
                //we shouldnt refetch.
                function bojsaddressbook($contactquery="",$queryresults="")
                {
                        $this->contactsobject=CreateObject('phpgwapi.contacts');
                        //the idea is that here, right here, nowhere else, do 
we decide what to keep
                        //from the cache and what to go and query again
                                $data=$this->read_sessiondata();
                                if(is_array($contactquery))
                                {
                                        
$this->parse_contactquery($contactquery);
                                        
$data['result']=$this->contactsobject->read($this->contactquery['start'],$this->contactquery['offset'],
                                                        
$this->mass_query_cols,$this->contactquery['query'],
                                                        
$this->contactquery['filter'],
                                                        
$this->contactquery['sort'],
                                                        $this->sortby);
                                        $this->save_sessiondata($data);
                                }

                                $this->result=$data['result'];

                }
                //@function parse_contactquery 
                //@param contactquery As described in the constructor's param
                //@abstrcat Parses an incoming contactquery into what the 
contacts backend
                //likes to see in a query
                //@discussion This ignores the start and offset parameters as 
they are somehow
                //obsolete in this version. Its strange, i know, but maybe we 
will want to optimize
                //later what we want to fetch from the contacts backend by this 
parameters so all other
                //functions respect and think that thisone builds the start and 
offset
                function parse_contactquery($contactquery)
                {
                        $notfirsttime=False;
                        while(list($k,$v)=each($contactquery))
                        {
                                switch($k)
                                {
                                        case 'filter':
                                                {
                                                        switch($v)
                                                        {

                                                                case 'none':
                                                                        {
                                                                                
$this->contactquery['filter']=$this->contactquery['filter'].
                                                                                
        ($notfirsttime ? "," :"")."tid=n";
                                                                                
$notfirsttime=True;
                                                                                
break;
                                                                        }
                                                                case 
'user_only':
                                                                        {
                                                                                
$this->contactquery['filter']=$this->contactquery['filter'].
                                                                                
        ($notfirsttime ? "," :"").
                                                                                
        'owner='.$GLOBALS['phpgw_info']['user']['account_id'];
                                                                                
$notfirsttime=True;
                                                                                
break;
                                                                        }
                                                                case 
'directory':
                                                                        {
                                                                                
if(!$contactquery['directory_uid'])
                                                                                
{

                                                                                
        $this->contactquery['filter']=$this->contactquery['filter'].
                                                                                
                ($notfirsttime ? "," :"")."tid=p";
                                                                                
}
                                                                                
else
                                                                                
{
                                                                                
         $this->contactquery['filter']=$this->contactquery['filter'].
                                                                                
                      ($notfirsttime ? "," :"")."owner=".
                                                                                
                      $contactquery['directory_uid'];
                                                                                
}
                                                                                
$notfirsttime=True;
                                                                                
break;
                                                                        }
                                                                case 'private':
                                                                        {
                                                                                
$this->contactquery['filter']=$this->contactquery['filter'].
                                                                                
        ($notfirsttime ? "," :"").'owner='.
                                                                                
        $GLOBALS['phpgw_info']['user']['account_id'].
                                                                                
        ',access=private';
                                                                                
$notfirsttime=True;
                                                                                
break;
                                                                        }
                                                        }
                                                        $notfirsttime=false;
                                                        break;
                                                }
                                        case 'categories':
                                                {
                                                        if($v)
                                                        {
                                                                
$this->contactquery['filter']=$this->contactquery['filter'].
                                                                                
 ($notfirsttime ? "," :"")."cat_id=".$v;
                                                        $notfirsttime=true;
                                                        }
                                                        break;
                                                }
                                        case 'query':
                                                {
                                                        if($v)
                                                        {
                                                                
$this->contactquery['query']=$v;
                                                        }
                                                }
                                                        
                                }//end switch
                        }//end while
//                      print "<BR> built query";
//                      print_r($this->contactquery);
                }//end function
                
                //@function forget_query
                //@discussion
                //Causes the class to forget its query cache. This does not 
forget the destination boxes, only
                //the mass query
                function forget_query()
                {
                                $this->save_sessiondata("");
                }
                //@function recordinfo
                //@param addy_id The record's id in the contacts backend
                //@abstract Gets the record info descirbed by the 
single_query_cols array
                //@discussion This returns an array of field=>value that 
actually has
                //the whole record for the given id. As u can see, the values 
it gets back are
                //given by the single_query_cols attribute which u can change 
to get more data
                function recordinfo($addy_id)
                {
                        $entry = 
$this->contactsobject->read("","",$this->single_query_cols,"","id=$addy_id");
                        if(!$entry[0])
                        {
                                return false;
                        }
                        return $entry[0];       
                }
                //@function save_destboxes
                //@param destboxes The array of destbox arrays that we want 
saveed in the cache
                //@discussion This function saves the destboxes into the cache
                function save_destboxes($destboxes)
                {
                        
                        $this->save_sessiondata($destboxes,"destboxes");
                }
                //@function get_destboxes
                //@abstract Function to get the destination boxes... .this 
parameter should exlusively be gotten this way
                //@discussion This function sees if we have any destboxes 
present in the destboxes attribute
                //if we do, it returns that, if we dont, it gets them from 
cache.
                
                function get_destboxes()
                {
                        if(!is_array($this->destboxes) || 
(count($this->destboxes)<1) )
                        {
                                
$this->destboxes=$this->read_sessiondata("destboxes");
                        }
                        return $this->destboxes;
                }
                //@function forget_destbox
                //@param destboxname The name of the destbox which serves as 
key to the destboxes array
                //@abstract Will unset the live destbox corresponding to 
destboxname
                //@discussion 
                //Note that this function will not forget the destbox from the 
cache... i thought it
                //a bit unneded for the particular application since i wanted 
this function to 
                //iterate through the destboxes array and unset them one by 
one. This means that
                //thisone only operates on real, already in memory (not in 
cache) destboxes.
                //For the cache to reflect this change, you need to 
$obj->save_destboxes($this->destboxes)
                //after calling this.
                function  forget_destbox($destboxname)
                {
                        $this->get_destboxes();
                        if(is_array($this->destboxes[$destboxname]))  
                        {
                                unset($this->destboxes[$destboxname]); 
                                return $this->destboxes;
                        }  
                        return false;
                        
                }
                //@function forget_destboxes
                //@abstract Will forget all the destboxes, then save the 
changes to the cache
                
                function forget_destboxes()
                {
                        if($this->get_destboxes())
                        {
                                while(list($name,$list)=each($this->destboxes))
                                {
                                        $this->forget_destbox($name);
                                }
                                $this->set_destboxes($this->destboxes);
                        }
                }
                //@function set_destboxes
                //@param aryboxes The new destboxes array
                //@param deleted An array of booleans with keys similar to the 
destboxes array
                //If a given destination box has a true entry here, it will be 
removed in the cache
                //@abstract This functions saves in cache the destination boxes 
values
                //@discussion Note that this function can be mistaken by the 
save_destboxes function.
                //Different thigs completely. This one takes an array of 
destboxes. The keys to this array
                // are the destboxes names. Inside each array, there are uid => 
name pairs. Note the absence
                //of an email field. The incoming aryboxes have NO email field 
whatsoever.
                //What we do here, is try and find the corresponding email 
fields either in cache or directly
                //in our mass query cache and set that field correctly to save 
it in cache
                //This function is redundant, inneficient and dead slow. Not to 
say complex and unreadable
                //Please change this please please please.
                //Previous disclaimer said, it works now, and will release this 
way.
                function set_destboxes($aryboxes,$deleted='')
                {
                        //print_r($aryboxes);
//                      print "<br> SAVed DESTBOXES <br>";
                        //We get our own destboxes from the cache
                        $saveddestboxes=$this->get_destboxes();
                //      print_r($saveddestboxes);
                        $found=false;
                        //We iterate into each box
                        while(list($ak,$li)=each($aryboxes))
                        {
//                              print $ak." ".$li."<BR>";
//                              print_r($li);
//                              print "<br>";
                                //We make shure this box has an array in it
                                if($aryboxes[$ak])
                                {
                                        //We iterate into the incoming box to 
search
                                        //for its values in the cache
                                        
while(list($numary,$ary)=each($aryboxes[$ak]))
                                        {
//                                              print "<br> Iterating aryboxes 
$numary";        
//                                              print_r($ary);
                                                list($id,$name)=each($ary);
                                                //Look for this record in the 
cached destboxes
                                                
if(is_array($saveddestboxes[$ak]))
                                                {
                                                        //Well, we found that 
we have this destboxed cached so
                                                        //now we will iterate 
through that
                                                        
while(list($numarysave,$arysave)=each($saveddestboxes[$ak]))
                                                        {
                                                                //We will try 
and get each addressbook key
                                                                //out of the 
cached destbox
                                                                
list($sid,$sname)=each($arysave);
                                                                
//                                                              print "<br> 
Iterating destboxes $id -> $name / $sid $sname";    
                                                                //So we can 
compare it and set the email field in it
                                                                if($id==$sid)
                                                                {
//                                                                      print 
"<br> found $id in $ak";
//                                                                      print 
"<br> seting mail to $arysave[email]";
                                                                        
$ary['email']=$arysave['email'];
                                                                        
$aryboxes[$ak][$numary]=$ary;
                                                                        
                                                                        
$found=true;
                                                                }

                                                        }
                                                        
reset($saveddestboxes[$ak]);
                                                }
                                                //couldnt find it in saved 
destboxes, lookfor ir in result
                                                //This redundant POSH makes me 
angry....
                                                //Now we look into our names 
cache...im not shure why, if i 
                                                //try and evade this search 
when i find it in the cache, 
                                                //it all goes borken
                                                //We iterate into the query 
cache
                                                
while(list($num,$record)=each($this->result))
                                                {
//                                                      print "<br> Iterating 
results $id   ---> $name <br>$record[id]---> $record[email]";
                                                        //Found what we are 
looking for
                                                        if($id == $record["id"])
                                                        {
                                                                //Set the mail 
record to what it should be
//                                                              print "<br> 
seting mail to $record[email] <br>";
                                                                
$ary['email']=($record["email"] ? $record["email"] : $record["home_email"]);
                                                                
$aryboxes[$ak][$numary]=$ary;
                                                                
$retboxes[$ak][$id]['email']= $ary['email'];
                                                                
$retboxes[$ak][$id]['name']= $name;
                                                                
                                                        }
                                                }
                                                reset($this->result);
                                                $found=false;
                                        }

                                }
                                elseif(!$deleted[$ak])
                                {
//                                      print "<br>Saving $ak from destination 
data $deleted[$ak]<br>";
//                                      print_r($deleted);
                                        //Delete the destboxes that need 
deletion
                                        $aryboxes[$ak]=$saveddestboxes[$ak];
                                }
                        }
//                      print "<br>modified<br>";
//                              print_r($aryboxes);
                                reset($aryboxes);
                        //Save the resulting destboxes
                        $this->save_destboxes($aryboxes);
                        //We return what we couldnt find in cache so the caller 
can evaluate
                        //if he needs to refresh his info...
                        return $retboxes; 
                        
                }
                //@function save_sessiondata
                //@param data The data to be saved
                //@param location An extra string to save data in diferent 
locations
                //@abstract Saves the data into the app session cache
                //@discussion
                //If you pass it no location, it will save into jsbook_data
                //If you do, it will save into jsbook_data_location
                //This is important cause we sometimes only need the destboxes 
and not
                //the whole queries so we only get what we need
                function save_sessiondata($data,$location="")
                {
                        if ($this->use_session)
                        {
                                
$GLOBALS['phpgw']->session->appsession('session_data',"jsbook_data".($location 
? '_'.$location :""),$data);
                        }
                        if($this->debug)
                        {
                                echo '<br>Saving: ';
                                _debug_array($data);
                        }
                }
                //@function read_sessiondata
                //@param location
                //@abstract gets data out of the appsesion cache
                //@discussion
                //The location field behaves like the one described in 
save_sessiondata

                function read_sessiondata($location="")
                {
                        $data = 
$GLOBALS['phpgw']->session->appsession('session_data','jsbook_data'.($location 
? '_'.$location :""));
                        if($this->debug)
                        {
                                echo '<br>Read: ';
                                _debug_array($data);
                        }
                        return $data;
                }
                
        }
?>

***** Error reading new file: [Errno 2] No such file or directory: 
'class.html_widgets.inc.php'

***** Error reading new file: [Errno 2] No such file or directory: 
'class.msg_bootstrap.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.spell.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.spell_struct.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.spell_svc_none.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.spell_svc_php.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.svc_nextmatches.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.ui_mail_debug.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.uiattach_file.inc.php'
***** Error reading new file: [Errno 2] No such file or directory: 
'class.uijsaddressbook.inc.php'
--- NEW FILE ---
/**************************************************************************\
 * phpGroupWare - Todo list                                                 *
 * http://www.phpgroupware.org                                              *
 * Written by Alex Borges <address@hidden>                          *
 * Low Level Design also by    Dave Hall address@hidden                         
 *
 * UI Design and market research by Gerardo Ramirez address@hidden
 * Code ripped off deveral public domain and gpl sites. Credits in each function
 * for those
 *-----------------------------------------------                          *
 *  This program is free software; you can redistribute it and/or modify it *
 *  under the terms of the GNU General Public License as published by the   *
 *  Free Software Foundation; either version 2 of the License, or (at your  *
 *  option) any later version.                                              *
 \**************************************************************************/




//@class box_parser 
[...985 lines suppressed...]
//@discussion Returns the selected index as normal js selectedIndex call
//We only use this because we use funny names for our selectboxes
function getSelectedIdx(selbox)
{
        var len;
        var sbox;
        var j;
        sbox=document.forms[this.formname][selbox];
        return sbox.selectedIndex;
}
//@function optionvalue 
//@param selectbox The name of the selectbox
//@param selectedidx The index of the selected option
//@discussion Returns the value of the option pointed to by selectedidx
function optionvalue(selectbox,selectedidx)
{
        var sbox;
        sbox=document.forms[this.formname][selectbox];
        return sbox.options[selectedidx].value;
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]