Changes between Version 1 and Version 2 of CalendarWrapper


Ignore:
Timestamp:
11/03/11 11:31:05 (8 years ago)
Author:
adir
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CalendarWrapper

    v1 v2  
    1 <?php 
    2  
    3 set_include_path('../libs/ZendFramework-1.11.6/library'); 
    4 //require_once ('libs/ZendFramework-1.11.6/library/Zend/Config.php'); 
    5 require_once("../libs/ZendFramework-1.11.6/library/Zend/Ldap.php"); 
    6 require_once("../libs/ZendFramework-1.11.6/library/Zend/Db.php"); 
    7 //require_once("../libs/ZendFramework-1.11.6/library/Zend/Db/Adapter/Pdo/Abstract.php"); 
    8 //require_once("../libs/ZendFramework-1.11.6/library/Zend/Db/Adapter/Pdo/Pgsql.php"); 
    9 require_once("../libs/ZendFramework-1.11.6/library/Zend/Ldap/Exception.php"); 
    10 require_once("../libs/ZendFramework-1.11.6/library/Zend/Db/Adapter/Exception.php"); 
    11 require_once("../PluginInterface.php"); 
    12 require_once("pFramework.php"); 
    13  
    14 /** 
    15 * 
    16 * Copyright (C) 2011 Consórcio Expresso Livre - Prognus Software Livre (www.prognus.com.br) 
    17 * 
    18 * This program is distributed in the hope that it will be useful, but WITHOUT 
    19 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
    20 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more 
    21 * details. 
    22 * 
    23 * You should have received a copy of the GNU Affero General Public License 
    24 * along with this program; if not, see www.gnu.org/licenses or write to 
    25 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
    26 * MA 02110-1301 USA. 
    27 * 
    28 * This code is based on the OpenXchange Connector and on the Prognus pSync 
    29 * Connector both developed by the community and licensed under the GPL 
    30 * version 2 or above as published by the Free Software Foundation. 
    31 * 
    32 * You can contact Prognus Software Livre headquarters at Av. Tancredo Neves, 
    33 * 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at 
    34 * e-mail address prognus@prognus.com.br. 
    35 * 
    36 * classe para funções de namespace para Calendar 
    37 * 
    38 * @package    expresso-semantico 
    39 * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    40 * @author     Prognus Software Livre (www.prognus.com.br) 
    41 * @author     
    42 * @version    0.1 
    43 * @since      0.1 
    44 */ 
    45  
    46 /** 
    47  * plugin ContactWrapper implementa PluginInterface 
    48  */ 
    49 class CalendarWrapper implements PluginInterface { 
    50         private $_hostFromDb = '192.168.0.241'; 
    51         private $_userFromDb = 'expressodev'; 
    52         private $_passFromDb = ''; 
    53         private $_dbName     = 'expressoadir'; 
    54         private $_portFromDb = '5432'; 
    55  
    56         private $_dbConnection; 
    57         private $model; 
    58  
    59         private $userUri = "file://"; 
    60         private $userPrefix = "usuario"; 
    61         private $calUri = "file://"; 
    62         private $conUri = "file://"; 
    63  
    64         function __construct() { 
    65                 echo "Hello Semantic World!"; 
    66                  
    67         } 
    68  
    69         /** 
    70         * Método responsável por fazer a chamada aos principais metodos 
    71         * 
    72         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    73         * @author     Prognus Software Livre (www.prognus.com.br) 
    74         * @author     Eugênio Carrer 
    75         * @param      Integer $userID Identificador do usuário do ldap 
    76         * @return     String $doc String contendo o arquivo RDF descrito pela ontologia. 
    77         * @access     public 
    78         */ 
    79  
    80         public function init($userID) { 
    81                 /* @Todo ESTA PARTE DO CODIGO E PARA DESCREVER A PIMO DO USUÁRIO E DEVERA 
    82                       SER COLOCADA JUNTO A FUNCIONALIDADE DE ATIVAR SEMANTICA    
    83                 ****************************************************************************************** 
    84  
    85                 */ 
    86  
    87                 $this->userUri = $this->userUri . $userID . "#"; 
    88                 $this->userPrefix = $this->userPrefix.md5($userID); 
    89  
    90                 Namespaces::setNS('pimo', 'http://www.semanticdesktop.org/ontologies/2007/11/01/pimo/#'); 
    91                 Namespaces::setNS('ncal', 'http://www.semanticdesktop.org/ontologies/2007/04/02/ncal/#'); 
    92                 Namespaces::setNS('nco', 'http://www.semanticdesktop.org/ontologies/2007/03/22/nco/#'); 
    93                 Namespaces::setNS('nao', 'http://www.semanticdesktop.org/ontologies/2007/08/15/nao/#'); 
    94                 Namespaces::setNS('nie', 'http://www.semanticdesktop.org/ontologies/2007/01/19/nie/#'); 
    95                 Namespaces::setNS($this->userPrefix, $this->userUri); 
    96  
    97                 $this->model = new Model; 
    98  
    99                 //DESCREVE O CONTATO DO USUARIO (DEVERA SER EXECUTADO UMA UNICA VEZ NA INICIALIZACAO PARA TODOS OS USUARIOS) 
    100                 $uriContact  = $this->conUri . $userID . "#Contact"; 
    101                 $userContact = $this->model->resource($uriContact, 'nco:Contact'); 
    102                 require_once("ContactWrapper.php"); 
    103                 $cw = new ContactWrapper(); 
    104                 $rsContact = $cw->getContactFromLdap($userID); 
    105                 //O METODO getAllContactsFromLdap RETORNA TODOS OS USUARIO DO LDAP E NA INICIALIZACAO NO LACO FOREACH DEVERA 
    106                 //SER DESCRITO O CONTATO PARA CADA USUARIO 
    107                 //$rsContact = $cw->getAllContactsFromLdap(); 
    108                 if($rsContact){ 
    109                         foreach($rsContact as $key=>$linha){ 
    110                                 /* 
    111                                 echo $linha['cn'][0]; 
    112                                 echo $linha ['sn'][0]; 
    113                                 echo $linha ['gidnumber'][0]; //id usuario grupo 
    114                                 echo $linha ['uidnumber'][0]; //id usuario 
    115                                 */ 
    116  
    117                                 $userContact->addStatement('nco:contactUID', $linha['uid'][0]); 
    118                                 $userContact->addStatement('nco:nameGiven', $linha['givenname'][0]); 
    119                                 $userEmail = $this->model->resource('', 'nco:EmailAddress');  
    120                                 $userEmail->addStatement('nco:emailAddress', $linha['mail'][0]); 
    121                                 $userContact->addStatement('nco:hasEmailAddress', $userEmail); 
    122                         } 
    123                 } 
    124                 // <== 
    125  
    126                 $userPerson = $this->model->resource($this->userUri.'User', 'pimo:Person'); 
    127                 $userPIMO = $this->model->resource($this->userUri.'PIMO', 'pimo:PersonalInformationModel'); 
    128                 //$userES->addStatement('rdfs:label', $nome); 
    129                 $userPerson->addStatement('pimo:isDefinedBy', $userPIMO); 
    130                 //REFERENCIA A URI DO CONTATO DO USUARIO 
    131                 $userPerson->addStatement('pimo:groundingOccurrence', $uriContact); 
    132  
    133                 $userPIMO->addStatement('pimo:creator', $userPerson); 
    134                 $userPIMO->addStatement('nao:hasDefaultNamespace', $this->userUri); 
    135                 $userPIMO->addStatement('nao:hasDefaultNamespaceAbbreviation', $this->userPrefix); 
    136  
    137                 /* 
    138                 ****************************************************************************************** 
    139                 */ 
    140  
    141                 $result = $this->getAllCalendarsFromDb($userID); 
    142                 $doc = $this->describeCalendar($result, $userID, $userPIMO); 
    143  
    144                 return $doc; 
    145         } 
    146  
    147         /** 
    148         * Método responsável verifica dados de conexão 
    149         * 
    150         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    151         * @author     Prognus Software Livre (www.prognus.com.br) 
    152         * @author     Eugênio Carrer 
    153         * @param      Array $arr Array contendo os dados para realizar a conexao 
    154         * @return     Boolean  
    155         * @access     public 
    156         */ 
    157  
    158         public function setConnectionData($arr) { 
    159                 if(!is_array($arr) || (!isset($arr['host']) && empty($arr['host']) && !isset($arr['user']) && empty($arr['user']) && !isset($arr['pass']) && empty($arr['pass']) )){ 
    160                         return (!trigger_error('Dados de conexão inválidos', E_USER_ERROR)); 
    161                 } 
    162                 $this->_host = $arr['host']; 
    163                 if (isset($arr['port']) && !empty($arr['port'])) 
    164                         $this->_port = (int) $arr['port']; 
    165                 $this->_user = $arr['user']; 
    166                 $this->_pass = $arr['pass']; 
    167                 return true; 
    168         } 
    169  
    170         /** 
    171         * Método responsável por verifica se os dados da conexao foram setados corretamente 
    172         * 
    173         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    174         * @author     Prognus Software Livre (www.prognus.com.br) 
    175         * @author     Eugênio Carrer 
    176         * @param       
    177         * @return     Boolean  
    178         * @access     public 
    179         */ 
    180  
    181         public function hasConnectionDataDb() { 
    182                 if (!empty($this->_hostFromDb) || !empty($this->_userFromDb) || !empty($this->_passFromDb) ) { 
    183                         return true; 
    184                 } 
    185                 else { 
    186                         return false; 
    187                 } 
    188         } 
    189  
    190         /** 
    191         * Métodos responsáveis por retornar o atributos privados da classe 
    192         * 
    193         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    194         * @author     Prognus Software Livre (www.prognus.com.br) 
    195         * @author     Eugênio Carrer 
    196         * @param       
    197         * @return     String ou Integer  
    198         * @access     public 
    199         */ 
    200  
    201         public function getHostFromDb() { 
    202                 return $this->_hostFromDb; 
    203         } 
    204         public function getUserFromDb() { 
    205                 return $this->_userFromDb; 
    206         } 
    207         public function getPassFromDb() { 
    208                 return $this->_passFromDb; 
    209         } 
    210         public function getPortFromDb() { 
    211                 return $this->_portFromDb; 
    212         } 
    213         public function getDbName() { 
    214                 return $this->_dbName; 
    215         } 
    216  
    217         /** 
    218         * Método responsável por realiza a conexao com o DB 
    219         * 
    220         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    221         * @author     Prognus Software Livre (www.prognus.com.br) 
    222         * @author     Eugênio Carrer 
    223         * @param       
    224         * @return     Boolean 
    225         * @access     public 
    226         */ 
    227  
    228         public function connectDb() { 
    229                 if (!$this->hasConnectionDataDB()) { 
    230                         return (!trigger_error('Dados de conexão DB inválidos', E_USER_ERROR)); 
    231                          
    232                 } 
    233                 try { 
    234                         $this->_dbConnection = Zend_Db::factory('Pdo_Pgsql', array( 
    235                                 'host'     => $this->getHostFromDb(), 
    236                                 'username' => $this->getUserFromDb(), 
    237                                 'password' => $this->getPassFromDb(), 
    238                                 'dbname'   => $this->getDbName(), 
    239                                 'port'     => $this->getPortFromDb(), 
    240                                 )); 
    241  
    242                         //$this->_dbConnection = $db->getConnection(); 
    243                         return true; 
    244                 } 
    245                 catch(Zend_Db_Adapter_Exception $e) { 
    246                         echo $e; 
    247                         echo "xau"; 
    248                         return false; 
    249                 } 
    250         } 
    251  
    252         /** 
    253         * Método responsável por retorna um unico compromisso do Usuário 
    254         * 
    255         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    256         * @author     Prognus Software Livre (www.prognus.com.br) 
    257         * @author     Eugênio Carrer 
    258         * @param      Integer $userID Id do usuário no Ldap 
    259         * @param      Integer $calID  Id do calendar no DB 
    260         * @return     Array $result Array contendo as linhas retornadas do BD 
    261         * @access     public 
    262         */ 
    263  
    264         public function getCalendarFromDb($userID, $calID){ 
    265                 $this->connectDB(); 
    266  
    267                 $sql = "select a.*, b.cal_id, b.cal_login, b.cal_status  
    268                                 from  
    269                                         phpgw_cal a,  
    270                                         phpgw_cal_user b  
    271                                 where  
    272                                         a.cal_id = b.cal_id and 
    273                                         a.cal_id=$calID and 
    274                                         a.owner = $userID  
    275                                 order by  
    276                                         a.cal_id ASC"; 
    277  
    278                 $result =  $this->_dbConnection->fetchAll($sql); 
    279  
    280                 return $result; 
    281         } 
    282  
    283         /** 
    284         * Método responsável por retorna todos os Compromissos do Usuário. 
    285         * 
    286         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    287         * @author     Prognus Software Livre (www.prognus.com.br) 
    288         * @author     Eugênio Carrer 
    289         * @param      Integer $userID Id do usuário no Ldap 
    290         * @return     Array $result Array contendo as linhas retornadas do BD 
    291         * @access     public 
    292         */ 
    293  
    294         public function getAllCalendarsFromDb($userID){ 
    295                 $this->connectDB(); 
    296  
    297                 $sql = "select a.*, b.cal_id, b.cal_login, b.cal_status  
    298                                 from  
    299                                         phpgw_cal a,  
    300                                         phpgw_cal_user b  
    301                                 where  
    302                                         a.cal_id = b.cal_id and  
    303                                         a.owner = ?  
    304                                 order by  
    305                                         a.cal_id ASC"; 
    306  
    307                 $result = $this->_dbConnection->fetchAll($sql, $userID); 
    308  
    309                 return $result; 
    310         } 
    311  
    312         /** 
    313         * Método responsável por descrever os compromissos conforme a ontologia e gerar o arquivo RDF. 
    314         * 
    315         * @license    http://www.gnu.org/copyleft/gpl.html GPL 
    316         * @author     Prognus Software Livre (www.prognus.com.br) 
    317         * @author     Eugênio Carrer 
    318         * @param      Array $result Array contendo as linhas do BD com os compromissos 
    319         * @param      Integer $userID Id do usuário no Ldap 
    320         * @return     String $this->model->toRDFXML() contendo o RDF descrito 
    321         * @access     public 
    322         */ 
    323  
    324         public function describeCalendar($result, $userID, $userPIMO){ 
    325                 if(isset($userID) && isset($this->model)){ 
    326                         if (is_array($result)){ 
    327                                 foreach($result as $linha){ 
    328                                         unset($userCalendar); 
    329                                         unset ($uriCalendar); 
    330                                         unset($userCal); 
    331  
    332                                         $uriCalendar  = $this->calUri . $linha['cal_id'] . "#Calendar"; 
    333                                         $userCal = $this->model->resource($this->userUri.'User:'.$uriCalendar, 'pimo:Task'); 
    334                                         $userCal->addStatement('pimo:isDefinedBy', $this->userUri.'PIMO'); 
    335                                         $userCal->addStatement('pimo:groundingOccurrence', $uriCalendar); 
    336  
    337                                         $userCalendar = $this->model->resource($uriCalendar, 'ncal:Calendar'); 
    338  
    339                                         if(isset($linha['location'])){  
    340                                                 $userCalendar->addStatement('ncal:locationAltRep', $linha['location']); 
    341                                         } 
    342                                         if(isset($linha['cal_id'])){  
    343                                                 $userCalendar->addStatement('ncal:uid', $linha['cal_id']); 
    344                                         } 
    345                                         if(isset($linha['datetime'])){  
    346                                                 $userCalendar->addStatement('ncal:dtstart', $linha['datetime']); //Data Inicial 
    347                                         } 
    348                                         if(isset($linha['edatetime'])){  
    349                                                 $userCalendar->addStatement('ncal:dtend', $linha['edatetime']); //Data Final 
    350                                         } 
    351                                         if(isset($linha['title'])){  
    352                                                 $userCalendar->addStatement('ncal:descriptionAltRep', $linha['title']);  
    353                                         } 
    354                                         if(isset($linha['description'])){  
    355                                                 $userCalendar->addStatement('ncal:description', $linha['description']);  
    356                                         } 
    357                                         if(isset($linha['priority'])){  
    358                                                 $userCalendar->addStatement('ncal:priority', $linha['priority']); 
    359                                         } 
    360  
    361                                         if ($linha['cal_login'] != $linha['owner']) { 
    362                                                 $uriContact  = $this->conUri . $linha['cal_login'] . "#Contact"; 
    363                                                 $userAttendee = $this->model->resource('', 'ncal:Attendee');  
    364                                                 $userAttendee->addStatement('ncal:delegatedTo', $uriContact); 
    365                                                 $userAttendee->addStatement('ncal:member', $uriContact); 
    366                                                 if(isset($linha['cal_type'])){  
    367                                                         $userAttendee->addStatement('ncal:cutype', $linha['cal_type']); 
    368                                                 } 
    369                                                 if(isset($linha['cal_status'])){  
    370                                                         $userAttendee->addStatement('ncal:partstat', $linha['cal_status']); 
    371                                                 } 
    372                                                 $userCalendar->addStatement('ncal:attendee', $userAttendee); 
    373                                         } 
    374                                 } 
    375                         } 
    376                         echo nl2br(str_replace(array('<', '>'), array('&lt;', '&gt;'), $this->model->toRDFXML())); 
    377                         return $this->model->toRDFXML(); 
    378                 } 
    379         } 
    380 } 
    381 ?>