2021-02-20 23:17:48 +01:00
< ? php
/* Copyright ( C ) 2017 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) --- Put here your own copyright and developer email ---
*
* 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 3 of the License , or
* ( at your option ) any later version .
*
* This program 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 General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*/
/**
* \file class / conferenceorbooth . class . php
* \ingroup eventorganization
* \brief This file is a CRUD class file for ConferenceOrBooth ( Create / Read / Update / Delete )
*/
// Put here all includes required by your class file
require_once DOL_DOCUMENT_ROOT . '/core/class/commonobject.class.php' ;
2021-10-25 22:07:31 +02:00
require_once DOL_DOCUMENT_ROOT . '/comm/action/class/actioncomm.class.php' ;
2021-02-20 23:17:48 +01:00
//require_once DOL_DOCUMENT_ROOT . '/product/class/product.class.php';
/**
* Class for ConferenceOrBooth
*/
2021-03-01 15:34:02 +01:00
class ConferenceOrBooth extends ActionComm
2021-02-20 23:17:48 +01:00
{
/**
* @ var string ID of module .
*/
public $module = 'eventorganization' ;
/**
* @ var string ID to identify managed object .
*/
public $element = 'conferenceorbooth' ;
/**
* @ var string Name of table without prefix where object is stored . This is also the key used for extrafields management .
*/
public $table_element = 'actioncomm' ;
/**
* @ var int Does this object support multicompany module ?
* 0 = No test on entity , 1 = Test with field entity , 'field@table' = Test with link by field @ table
*/
public $ismultientitymanaged = 1 ;
/**
* @ var int Does object support extrafields ? 0 = No , 1 = Yes
*/
public $isextrafieldmanaged = 1 ;
/**
* @ var string String with name of icon for conferenceorbooth . Must be the part after the 'object_' into object_conferenceorbooth . png
*/
2021-03-23 01:32:17 +01:00
public $picto = 'conferenceorbooth' ;
2021-02-20 23:17:48 +01:00
const STATUS_DRAFT = 0 ;
2021-02-27 13:13:42 +01:00
const STATUS_SUGGESTED = 1 ;
2021-02-27 14:24:41 +01:00
const STATUS_CONFIRMED = 2 ;
2021-03-01 15:36:22 +01:00
const STATUS_NOT_QUALIFIED = 3 ;
2021-02-27 14:24:41 +01:00
const STATUS_DONE = 4 ;
2021-03-15 18:06:23 +01:00
const STATUS_CANCELED = 9 ;
2021-02-20 23:17:48 +01:00
/**
2021-09-07 19:48:32 +02:00
* 'type' field format ( 'integer' , 'integer:ObjectClass:PathToClass[:AddCreateButtonOrNot[:Filter[:Sortfield]]]' , 'sellist:TableName:LabelFieldName[:KeyFieldName[:KeyFieldParent[:Filter]]]' , 'varchar(x)' , 'double(24,8)' , 'real' , 'price' , 'text' , 'text:none' , 'html' , 'date' , 'datetime' , 'timestamp' , 'duration' , 'mail' , 'phone' , 'url' , 'password' )
2021-02-20 23:17:48 +01:00
* Note : Filter can be a string like " (t.ref:like:'SO-%') or (t.date_creation:<:'20160101') or (t.nature:is:NULL) "
* 'label' the translation key .
* 'picto' is code of a picto to show before value in forms
* 'enabled' is a condition when the field must be managed ( Example : 1 or ' $conf -> global -> MY_SETUP_PARAM )
* 'position' is the sort order of field .
* 'notnull' is set to 1 if not null in database . Set to - 1 if we must set data to null if empty ( '' or 0 ) .
* 'visible' says if field is visible in list ( Examples : 0 = Not visible , 1 = Visible on list and create / update / view forms , 2 = Visible on list only , 3 = Visible on create / update / view form only ( not list ), 4 = Visible on list and update / view form only ( not create ) . 5 = Visible on list and view only ( not create / not update ) . Using a negative value means field is not shown by default on list but can be selected for viewing )
* 'noteditable' says if field is not editable ( 1 or 0 )
* 'default' is a default value for creation ( can still be overwrote by the Setup of Default Values if field is editable in creation form ) . Note : If default is set to '(PROV)' and field is 'ref' , the default value will be set to '(PROVid)' where id is rowid when a new record is created .
* 'index' if we want an index in database .
* 'foreignkey' => 'tablename.field' if the field is a foreign key ( it is recommanded to name the field fk_ ... ) .
* 'searchall' is 1 if we want to search in this field when making a search from the quick search button .
* 'isameasure' must be set to 1 if you want to have a total on list for this field . Field type must be summable like integer or double ( 24 , 8 ) .
* 'css' and 'cssview' and 'csslist' is the CSS style to use on field . 'css' is used in creation and update . 'cssview' is used in view mode . 'csslist' is used for columns in lists . For example : 'maxwidth200' , 'wordbreak' , 'tdoverflowmax200'
* 'help' is a 'TranslationString' to use to show a tooltip on field . You can also use 'TranslationString:keyfortooltiponlick' for a tooltip on click .
* 'showoncombobox' if value of the field must be visible into the label of the combobox that list record
* 'disabled' is 1 if we want to have the field locked by a 'disabled' attribute . In most cases , this is never set into the definition of $fields into class , but is set dynamically by some part of code .
2021-04-29 12:10:55 +02:00
* 'arrayofkeyval' to set list of value if type is a list of predefined values . For example : array ( " 0 " => " Draft " , " 1 " => " Active " , " -1 " => " Cancel " )
2021-02-20 23:17:48 +01:00
* 'autofocusoncreate' to have field having the focus on a create form . Only 1 field should have this property set to 1.
* 'comment' is not used . You can store here any text of your choice . It is not used by application .
*
* Note : To have value dynamic , you can set value to 0 in definition and edit the value on the fly into the constructor .
*/
// BEGIN MODULEBUILDER PROPERTIES
/**
* @ var array Array with all fields and their property . Do not use it as a static var . It may be modified by constructor .
*/
2021-10-25 22:07:31 +02:00
public $fields = array (
2021-02-27 15:34:28 +01:00
'id' => array ( 'type' => 'integer' , 'label' => 'TechnicalID' , 'enabled' => '1' , 'position' => 1 , 'notnull' => 1 , 'visible' => 0 , 'noteditable' => '1' , 'index' => 1 , 'css' => 'left' , 'comment' => " Id " ),
2021-03-15 18:06:23 +01:00
'ref' => array ( 'type' => 'integer' , 'label' => 'Ref' , 'enabled' => '1' , 'position' => 1 , 'notnull' => 1 , 'visible' => 2 , 'noteditable' => '1' , 'index' => 1 , 'css' => 'left' , 'comment' => " Id " ),
2022-07-25 22:28:07 +02:00
'label' => array ( 'type' => 'varchar(255)' , 'label' => 'Label' , 'enabled' => '1' , 'position' => 30 , 'notnull' => 0 , 'visible' => 1 , 'searchall' => 1 , 'css' => 'minwidth300' , 'csslist' => 'tdoverflowmax125' , 'help' => " OrganizationEvenLabelName " , 'showoncombobox' => '1' ,),
'fk_soc' => array ( 'type' => 'integer:Societe:societe/class/societe.class.php:1:status=1 AND entity IN (__SHARED_ENTITIES__)' , 'label' => 'ThirdParty' , 'enabled' => '$conf->societe->enabled' , 'position' => 50 , 'notnull' =>- 1 , 'visible' => 1 , 'index' => 1 , 'help' => " OrganizationEventLinkToThirdParty " , 'picto' => 'company' , 'css' => 'tdoverflowmax150 maxwidth500' ),
2022-06-14 17:53:17 +02:00
'fk_project' => array ( 'type' => 'integer:Project:projet/class/project.class.php:1:t.usage_organize_event=1' , 'label' => 'Project' , 'enabled' => '$conf->project->enabled' , 'position' => 52 , 'notnull' =>- 1 , 'visible' =>- 1 , 'index' => 1 , 'picto' => 'project' , 'css' => 'tdoverflowmax150 maxwidth500' ),
2021-07-05 15:35:05 +02:00
'note' => array ( 'type' => 'text' , 'label' => 'Description' , 'enabled' => '1' , 'position' => 60 , 'notnull' => 0 , 'visible' => 1 ),
2021-09-07 19:48:32 +02:00
'fk_action' => array ( 'type' => 'sellist:c_actioncomm:libelle:id::module LIKE (\'%@eventorganization\')' , 'label' => 'Format' , 'enabled' => '1' , 'position' => 60 , 'notnull' => 1 , 'visible' => 1 , 'css' => 'width300' ),
2021-06-05 15:14:10 +02:00
'datep' => array ( 'type' => 'datetime' , 'label' => 'DateStart' , 'enabled' => '1' , 'position' => 70 , 'notnull' => 0 , 'visible' => 1 , 'showoncombobox' => '2' ,),
'datep2' => array ( 'type' => 'datetime' , 'label' => 'DateEnd' , 'enabled' => '1' , 'position' => 71 , 'notnull' => 0 , 'visible' => 1 , 'showoncombobox' => '3' ,),
2021-02-27 13:13:42 +01:00
'datec' => array ( 'type' => 'datetime' , 'label' => 'DateCreation' , 'enabled' => '1' , 'position' => 500 , 'notnull' => 1 , 'visible' =>- 2 ,),
2021-02-20 23:17:48 +01:00
'tms' => array ( 'type' => 'timestamp' , 'label' => 'DateModification' , 'enabled' => '1' , 'position' => 501 , 'notnull' => 0 , 'visible' =>- 2 ,),
2021-02-27 13:13:42 +01:00
'fk_user_author' => array ( 'type' => 'integer:User:user/class/user.class.php' , 'label' => 'UserAuthor' , 'enabled' => '1' , 'position' => 510 , 'notnull' => 1 , 'visible' =>- 2 , 'foreignkey' => 'user.rowid' ,),
'fk_user_mod' => array ( 'type' => 'integer:User:user/class/user.class.php' , 'label' => 'UserModif' , 'enabled' => '1' , 'position' => 511 , 'notnull' =>- 1 , 'visible' =>- 2 ,),
2021-02-20 23:17:48 +01:00
'import_key' => array ( 'type' => 'varchar(14)' , 'label' => 'ImportId' , 'enabled' => '1' , 'position' => 1000 , 'notnull' =>- 1 , 'visible' =>- 2 ,),
2021-03-23 22:12:20 +01:00
'status' => array ( 'type' => 'smallint' , 'label' => 'Status' , 'enabled' => '1' , 'position' => 1000 , 'notnull' => 1 , 'visible' => 1 , 'default' => '0' , 'index' => 1 , 'arrayofkeyval' => array ( '0' => 'EvntOrgDraft' , '1' => 'EvntOrgSuggested' , '2' => 'EvntOrgConfirmed' , '3' => 'EvntOrgNotQualified' , '4' => 'EvntOrgDone' , '9' => 'EvntOrgCancelled' ),),
2021-07-05 15:17:21 +02:00
'num_vote' => array ( 'type' => 'smallint' , 'label' => 'NbVotes' , 'enabled' => '1' , 'position' => 1001 , 'notnull' =>- 1 , 'visible' => 5 , 'default' => '0' , 'index' => 0 ),
2021-02-20 23:17:48 +01:00
);
public $rowid ;
2021-02-27 15:34:28 +01:00
public $id ;
2021-02-20 23:17:48 +01:00
public $label ;
public $fk_soc ;
public $fk_project ;
2021-02-27 13:13:42 +01:00
public $note ;
2021-02-27 15:34:28 +01:00
public $fk_action ;
public $datec ;
2021-02-20 23:17:48 +01:00
public $tms ;
2021-02-27 15:34:28 +01:00
public $fk_user_author ;
public $fk_user_mod ;
2021-02-20 23:17:48 +01:00
public $import_key ;
public $status ;
// END MODULEBUILDER PROPERTIES
2022-01-04 12:56:08 +01:00
//public $pubregister;
2021-05-20 17:24:27 +02:00
2021-02-20 23:17:48 +01:00
/**
* Constructor
*
* @ param DoliDb $db Database handler
*/
public function __construct ( DoliDB $db )
{
global $conf , $langs ;
$this -> db = $db ;
2021-02-26 21:22:52 +01:00
if ( empty ( $conf -> global -> MAIN_SHOW_TECHNICAL_ID ) && isset ( $this -> fields [ 'rowid' ])) {
2021-03-02 22:23:54 +01:00
$this -> fields [ 'id' ][ 'visible' ] = 0 ;
2021-02-26 21:22:52 +01:00
}
if ( empty ( $conf -> multicompany -> enabled ) && isset ( $this -> fields [ 'entity' ])) {
$this -> fields [ 'entity' ][ 'enabled' ] = 0 ;
}
2021-02-20 23:17:48 +01:00
// Unset fields that are disabled
2021-02-26 21:22:52 +01:00
foreach ( $this -> fields as $key => $val ) {
if ( isset ( $val [ 'enabled' ]) && empty ( $val [ 'enabled' ])) {
2021-02-20 23:17:48 +01:00
unset ( $this -> fields [ $key ]);
}
}
// Translate some data of arrayofkeyval
2021-02-26 21:22:52 +01:00
if ( is_object ( $langs )) {
foreach ( $this -> fields as $key => $val ) {
if ( ! empty ( $val [ 'arrayofkeyval' ]) && is_array ( $val [ 'arrayofkeyval' ])) {
foreach ( $val [ 'arrayofkeyval' ] as $key2 => $val2 ) {
2021-02-20 23:17:48 +01:00
$this -> fields [ $key ][ 'arrayofkeyval' ][ $key2 ] = $langs -> trans ( $val2 );
}
}
}
}
}
/**
* Create object into database
*
* @ param User $user User that creates
* @ param bool $notrigger false = launch triggers after , true = disable triggers
* @ return int < 0 if KO , Id of created object if OK
*/
public function create ( User $user , $notrigger = false )
{
2021-03-02 22:23:54 +01:00
$this -> setPercentageFromStatus ();
2021-03-15 20:20:53 +01:00
$this -> setActionCommFields ( $user );
2021-03-01 17:06:03 +01:00
return parent :: create ( $user , $notrigger );
2021-02-20 23:17:48 +01:00
}
/**
2021-03-02 22:23:54 +01:00
* Set Percentage from status
2021-03-04 17:57:08 +01:00
*
* @ return void
2021-02-20 23:17:48 +01:00
*/
2021-03-15 20:20:53 +01:00
protected function setPercentageFromStatus ()
2021-03-02 22:34:19 +01:00
{
2021-10-25 22:07:31 +02:00
if ( $this -> status == self :: STATUS_DONE ) {
$this -> percentage = 100 ;
2021-02-26 21:22:52 +01:00
}
2021-10-25 22:07:31 +02:00
if ( $this -> status == self :: STATUS_DRAFT ) {
$this -> percentage = 0 ;
2021-02-20 23:17:48 +01:00
}
}
2021-03-15 20:20:53 +01:00
/**
* Set action comm fields
*
* @ param User $user User
* @ return void
*/
protected function setActionCommFields ( User $user )
{
2021-10-25 22:07:31 +02:00
$this -> userownerid = $user -> id ;
$this -> type_id = $this -> fk_action ;
$this -> socid = $this -> fk_soc ;
$this -> datef = $this -> datep2 ;
$this -> note_private = $this -> note ;
$this -> fk_user_author = $this -> fk_user_author ;
2021-03-15 20:20:53 +01:00
}
/**
* Get action comm fields
*
* @ return void
*/
protected function getActionCommFields ()
{
2021-10-25 22:07:31 +02:00
$this -> fk_action = $this -> type_id ;
$this -> fk_soc = $this -> socid ;
$this -> datep2 = $this -> datef ;
2021-03-15 20:20:53 +01:00
}
2021-02-20 23:17:48 +01:00
/**
* Load object in memory from the database
*
* @ param int $id Id object
* @ param string $ref Ref
2021-03-11 19:09:42 +01:00
* @ param string $ref_ext Ref ext to get
* @ param string $email_msgid Email msgid
2021-10-12 11:30:35 +02:00
* @ param int $loadresources 1 = Load also resources
2021-02-20 23:17:48 +01:00
* @ return int < 0 if KO , 0 if not found , > 0 if OK
*/
2021-10-12 11:30:35 +02:00
public function fetch ( $id , $ref = null , $ref_ext = '' , $email_msgid = '' , $loadresources = 1 )
2021-02-20 23:17:48 +01:00
{
2021-08-31 23:51:45 +02:00
global $dolibarr_main_url_root , $conf , $langs ;
2021-04-23 17:12:34 +02:00
2021-03-11 19:09:42 +01:00
$result = parent :: fetch ( $id , $ref , $ref_ext , $email_msgid );
2021-04-23 17:12:34 +02:00
2021-10-18 16:04:49 +02:00
$link_subscription = $dolibarr_main_url_root . '/public/eventorganization/attendee_new.php?id=' . urlencode ( $id ) . '&type=conf' ;
2021-04-23 17:12:34 +02:00
2021-04-27 14:01:44 +02:00
$encodedsecurekey = dol_hash ( $conf -> global -> EVENTORGANIZATION_SECUREKEY . 'conferenceorbooth' . $id , 2 );
2021-04-14 14:33:11 +02:00
$link_subscription .= '&securekey=' . urlencode ( $encodedsecurekey );
2021-04-23 17:12:34 +02:00
2022-01-04 12:56:08 +01:00
/* $this -> fields [ 'pubregister' ] = array ( 'type' => 'url' , 'label' => $langs -> trans ( " PublicAttendeeSubscriptionPage " ), 'enabled' => '1' , 'position' => 72 , 'notnull' => 0 , 'visible' => 1 );
$this -> pubregister = $link_subscription ; */
2021-04-23 17:12:34 +02:00
2021-03-15 20:20:53 +01:00
$this -> getActionCommFields ();
2021-02-20 23:17:48 +01:00
return $result ;
}
/**
* Load list of objects in memory from the database .
*
* @ param string $sortorder Sort Order
* @ param string $sortfield Sort field
* @ param int $limit limit
* @ param int $offset Offset
* @ param array $filter Filter array . Example array ( 'field' => 'valueforlike' , 'customurl' =>... )
* @ param string $filtermode Filter mode ( AND or OR )
* @ return array | int int < 0 if KO , array of pages if OK
*/
public function fetchAll ( $sortorder = '' , $sortfield = '' , $limit = 0 , $offset = 0 , array $filter = array (), $filtermode = 'AND' )
{
2021-03-01 17:06:03 +01:00
//TODO set percent according status
2021-02-20 23:17:48 +01:00
global $conf ;
dol_syslog ( __METHOD__ , LOG_DEBUG );
$records = array ();
$sql = 'SELECT ' ;
2021-03-11 19:09:42 +01:00
$sql .= $this -> getFieldList ( 't' );
2021-02-20 23:17:48 +01:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . $this -> table_element . ' as t' ;
2021-03-24 20:13:30 +01:00
$sql .= " INNER JOIN " . MAIN_DB_PREFIX . " c_actioncomm as cact ON cact.id=t.fk_action AND cact.module LIKE '%@eventorganization' " ;
2021-02-26 21:22:52 +01:00
if ( isset ( $this -> ismultientitymanaged ) && $this -> ismultientitymanaged == 1 ) {
$sql .= ' WHERE t.entity IN (' . getEntity ( $this -> table_element ) . ')' ;
} else {
$sql .= ' WHERE 1 = 1' ;
}
2021-02-20 23:17:48 +01:00
// Manage filter
$sqlwhere = array ();
if ( count ( $filter ) > 0 ) {
foreach ( $filter as $key => $value ) {
2021-03-24 20:13:30 +01:00
if ( $key == 't.id' || $key == 't.fk_project' || $key == 't.fk_soc' || $key == 't.fk_action' ) {
2021-08-28 01:45:53 +02:00
$sqlwhere [] = $key . " = " . (( int ) $value );
2021-02-20 23:17:48 +01:00
} elseif ( in_array ( $this -> fields [ $key ][ 'type' ], array ( 'date' , 'datetime' , 'timestamp' ))) {
2021-08-28 01:45:53 +02:00
$sqlwhere [] = $key . " = ' " . $this -> db -> idate ( $value ) . " ' " ;
2021-02-20 23:17:48 +01:00
} elseif ( $key == 'customsql' ) {
$sqlwhere [] = $value ;
} elseif ( strpos ( $value , '%' ) === false ) {
$sqlwhere [] = $key . ' IN (' . $this -> db -> sanitize ( $this -> db -> escape ( $value )) . ')' ;
} else {
2021-08-28 01:45:53 +02:00
$sqlwhere [] = $key . " LIKE '% " . $this -> db -> escape ( $value ) . " %' " ;
2021-02-20 23:17:48 +01:00
}
}
}
if ( count ( $sqlwhere ) > 0 ) {
2021-09-02 13:58:42 +02:00
$sql .= ' AND (' . implode ( ' ' . $this -> db -> escape ( $filtermode ) . ' ' , $sqlwhere ) . ')' ;
2021-02-20 23:17:48 +01:00
}
if ( ! empty ( $sortfield )) {
$sql .= $this -> db -> order ( $sortfield , $sortorder );
}
if ( ! empty ( $limit )) {
2021-08-27 22:42:04 +02:00
$sql .= $this -> db -> plimit ( $limit , $offset );
2021-02-20 23:17:48 +01:00
}
$resql = $this -> db -> query ( $sql );
if ( $resql ) {
$num = $this -> db -> num_rows ( $resql );
$i = 0 ;
2021-02-26 21:22:52 +01:00
while ( $i < ( $limit ? min ( $limit , $num ) : $num )) {
2021-02-20 23:17:48 +01:00
$obj = $this -> db -> fetch_object ( $resql );
$record = new self ( $this -> db );
$record -> setVarsFromFetchObj ( $obj );
$records [ $record -> id ] = $record ;
$i ++ ;
}
$this -> db -> free ( $resql );
return $records ;
} else {
$this -> errors [] = 'Error ' . $this -> db -> lasterror ();
dol_syslog ( __METHOD__ . ' ' . join ( ',' , $this -> errors ), LOG_ERR );
return - 1 ;
}
}
/**
* Update object into database
*
* @ param User $user User that modifies
* @ param bool $notrigger false = launch triggers after , true = disable triggers
* @ return int < 0 if KO , > 0 if OK
*/
public function update ( User $user , $notrigger = false )
{
2021-03-02 22:23:54 +01:00
$this -> setPercentageFromStatus ();
2021-03-15 20:20:53 +01:00
$this -> setActionCommFields ( $user );
2021-03-02 22:23:54 +01:00
return parent :: update ( $user , $notrigger );
2021-02-20 23:17:48 +01:00
}
/**
* Delete object in database
*
* @ param bool $notrigger false = launch triggers after , true = disable triggers
* @ return int < 0 if KO , > 0 if OK
*/
2021-03-11 19:09:42 +01:00
public function delete ( $notrigger = false )
2021-02-20 23:17:48 +01:00
{
2021-03-02 22:23:54 +01:00
//TODO delete attendees and subscription
return parent :: delete ( $notrigger );
2021-02-20 23:17:48 +01:00
}
/**
* Validate object
*
* @ param User $user User making status change
* @ param int $notrigger 1 = Does not execute triggers , 0 = execute triggers
* @ return int <= 0 if OK , 0 = Nothing done , > 0 if KO
*/
public function validate ( $user , $notrigger = 0 )
{
global $conf , $langs ;
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
$error = 0 ;
// Protection
2021-10-21 17:48:29 +02:00
if ( $this -> status == self :: STATUS_CONFIRMED ) {
2021-02-20 23:17:48 +01:00
dol_syslog ( get_class ( $this ) . " ::validate action abandonned: already validated " , LOG_WARNING );
return 0 ;
}
$now = dol_now ();
$this -> db -> begin ();
2021-02-27 15:34:28 +01:00
// Validate
$sql = " UPDATE " . MAIN_DB_PREFIX . $this -> table_element ;
$sql .= " status = " . self :: STATUS_CONFIRMED ;
$sql .= " WHERE id = " . $this -> id ;
2021-02-20 23:17:48 +01:00
2021-02-27 15:34:28 +01:00
dol_syslog ( get_class ( $this ) . " ::validate() " , LOG_DEBUG );
$resql = $this -> db -> query ( $sql );
2021-03-02 22:34:19 +01:00
if ( ! $resql ) {
2021-02-27 15:34:28 +01:00
dol_print_error ( $this -> db );
$this -> error = $this -> db -> lasterror ();
$error ++ ;
2021-02-20 23:17:48 +01:00
}
2021-03-02 22:34:19 +01:00
if ( ! $error && ! $notrigger ) {
2021-02-27 15:34:28 +01:00
// Call trigger
$result = $this -> call_trigger ( 'CONFERENCEORBOOTH_VALIDATE' , $user );
2021-10-25 22:07:31 +02:00
if ( $result < 0 ) {
$error ++ ;
}
2021-02-27 15:34:28 +01:00
// End call triggers
2021-02-20 23:17:48 +01:00
}
// Set new ref and current status
2021-02-26 21:22:52 +01:00
if ( ! $error ) {
2021-03-02 22:23:54 +01:00
$this -> status = self :: STATUS_CONFIRMED ;
2021-02-20 23:17:48 +01:00
}
2021-02-26 21:22:52 +01:00
if ( ! $error ) {
2021-02-20 23:17:48 +01:00
$this -> db -> commit ();
return 1 ;
} else {
$this -> db -> rollback ();
return - 1 ;
}
}
/**
* Set draft status
*
* @ param User $user Object user that modify
* @ param int $notrigger 1 = Does not execute triggers , 0 = Execute triggers
* @ return int < 0 if KO , > 0 if OK
*/
public function setDraft ( $user , $notrigger = 0 )
{
// Protection
2021-02-26 21:22:52 +01:00
if ( $this -> status <= self :: STATUS_DRAFT ) {
2021-02-20 23:17:48 +01:00
return 0 ;
}
/* if ( ! (( empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && ! empty ( $user -> rights -> eventorganization -> write ))
|| ( ! empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && ! empty ( $user -> rights -> eventorganization -> eventorganization_advance -> validate ))))
{
$this -> error = 'Permission denied' ;
return - 1 ;
} */
return $this -> setStatusCommon ( $user , self :: STATUS_DRAFT , $notrigger , 'CONFERENCEORBOOTH_UNVALIDATE' );
}
/**
* Set cancel status
*
* @ param User $user Object user that modify
* @ param int $notrigger 1 = Does not execute triggers , 0 = Execute triggers
* @ return int < 0 if KO , 0 = Nothing done , > 0 if OK
*/
public function cancel ( $user , $notrigger = 0 )
{
// Protection
2021-03-02 21:48:35 +01:00
if ( $this -> status != self :: STATUS_CONFIRMED ) {
2021-02-20 23:17:48 +01:00
return 0 ;
}
/* if ( ! (( empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && ! empty ( $user -> rights -> eventorganization -> write ))
|| ( ! empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && ! empty ( $user -> rights -> eventorganization -> eventorganization_advance -> validate ))))
{
$this -> error = 'Permission denied' ;
return - 1 ;
} */
return $this -> setStatusCommon ( $user , self :: STATUS_CANCELED , $notrigger , 'CONFERENCEORBOOTH_CANCEL' );
}
/**
* Set back to validated status
*
* @ param User $user Object user that modify
* @ param int $notrigger 1 = Does not execute triggers , 0 = Execute triggers
* @ return int < 0 if KO , 0 = Nothing done , > 0 if OK
*/
public function reopen ( $user , $notrigger = 0 )
{
// Protection
2021-02-26 21:22:52 +01:00
if ( $this -> status != self :: STATUS_CANCELED ) {
2021-02-20 23:17:48 +01:00
return 0 ;
}
/* if ( ! (( empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && ! empty ( $user -> rights -> eventorganization -> write ))
|| ( ! empty ( $conf -> global -> MAIN_USE_ADVANCED_PERMS ) && ! empty ( $user -> rights -> eventorganization -> eventorganization_advance -> validate ))))
{
$this -> error = 'Permission denied' ;
return - 1 ;
} */
2021-02-27 15:34:28 +01:00
return $this -> setStatusCommon ( $user , self :: STATUS_CONFIRMED , $notrigger , 'CONFERENCEORBOOTH_REOPEN' );
2021-02-20 23:17:48 +01:00
}
/**
* Return a link to the object card ( with optionaly the picto )
*
* @ param int $withpicto Include picto in link ( 0 = No picto , 1 = Include picto into link , 2 = Only picto )
2021-03-11 19:09:42 +01:00
* @ param int $maxlength Not use here just for declaration method compatibility with parent classes
* @ param string $classname Not use here just for declaration method compatibility with parent classes
2021-02-20 23:17:48 +01:00
* @ param string $option On what the link point to ( 'nolink' , ... )
2021-03-11 19:09:42 +01:00
* @ param int $overwritepicto Not use here just for declaration method compatibility with parent classes
2021-02-20 23:17:48 +01:00
* @ param int $notooltip 1 = Disable tooltip
* @ param int $save_lastsearch_value - 1 = Auto , 0 = No save of lastsearch_values when clicking , 1 = Save lastsearch_values whenclicking
2021-03-11 19:09:42 +01:00
* @ param string $morecss Add more css on link
2021-02-20 23:17:48 +01:00
* @ return string String with URL
*/
2021-03-11 19:09:42 +01:00
public function getNomUrl ( $withpicto = 0 , $maxlength = 0 , $classname = '' , $option = '' , $overwritepicto = 0 , $notooltip = 0 , $save_lastsearch_value = - 1 , $morecss = '' )
2021-02-20 23:17:48 +01:00
{
global $conf , $langs , $hookmanager ;
2021-02-26 21:22:52 +01:00
if ( ! empty ( $conf -> dol_no_mouse_hover )) {
$notooltip = 1 ; // Force disable tooltips
}
2021-02-20 23:17:48 +01:00
$result = '' ;
$label = img_picto ( '' , $this -> picto ) . ' <u>' . $langs -> trans ( " ConferenceOrBooth " ) . '</u>' ;
if ( isset ( $this -> status )) {
$label .= ' ' . $this -> getLibStatut ( 5 );
}
$label .= '<br>' ;
2021-02-27 15:34:28 +01:00
$label .= '<b>' . $langs -> trans ( 'Ref' ) . ':</b> ' . $this -> id ;
2021-02-20 23:17:48 +01:00
2021-09-08 01:45:17 +02:00
$url = DOL_URL_ROOT . '/eventorganization/conferenceorbooth_card.php?id=' . $this -> id ;
2021-02-20 23:17:48 +01:00
2021-02-26 21:22:52 +01:00
if ( $option != 'nolink' ) {
2021-02-20 23:17:48 +01:00
// Add param to save lastsearch_values or not
$add_save_lastsearch_values = ( $save_lastsearch_value == 1 ? 1 : 0 );
2021-02-26 21:22:52 +01:00
if ( $save_lastsearch_value == - 1 && preg_match ( '/list\.php/' , $_SERVER [ " PHP_SELF " ])) {
$add_save_lastsearch_values = 1 ;
}
if ( $add_save_lastsearch_values ) {
$url .= '&save_lastsearch_values=1' ;
}
2021-10-25 22:07:31 +02:00
if ( $option == 'withproject' ) {
2021-03-29 20:28:29 +02:00
$url .= '&withproject=1' ;
}
2021-02-20 23:17:48 +01:00
}
$linkclose = '' ;
2021-02-26 21:22:52 +01:00
if ( empty ( $notooltip )) {
if ( ! empty ( $conf -> global -> MAIN_OPTIMIZEFORTEXTBROWSER )) {
2021-02-20 23:17:48 +01:00
$label = $langs -> trans ( " ShowConferenceOrBooth " );
$linkclose .= ' alt="' . dol_escape_htmltag ( $label , 1 ) . '"' ;
}
2021-03-24 22:21:31 +01:00
//$linkclose .= ' title="'.dol_escape_htmltag($label, 1).'"';
2021-02-20 23:17:48 +01:00
$linkclose .= ' class="classfortooltip' . ( $morecss ? ' ' . $morecss : '' ) . '"' ;
2021-02-26 21:22:52 +01:00
} else {
$linkclose = ( $morecss ? ' class="' . $morecss . '"' : '' );
}
2021-02-20 23:17:48 +01:00
$linkstart = '<a href="' . $url . '"' ;
$linkstart .= $linkclose . '>' ;
$linkend = '</a>' ;
$result .= $linkstart ;
if ( empty ( $this -> showphoto_on_popup )) {
2021-02-26 21:22:52 +01:00
if ( $withpicto ) {
2021-03-29 16:25:34 +02:00
$picto = img_object (( $notooltip ? '' : $label ), ( $this -> picto ? $this -> picto : 'generic' ), ( $notooltip ? (( $withpicto != 2 ) ? 'class="paddingright"' : '' ) : 'class="' . (( $withpicto != 2 ) ? 'paddingright ' : '' ) . 'classfortooltip"' ), 0 , 0 , $notooltip ? 0 : 1 );
// var_dump($picto);
$result .= $picto ;
2021-02-26 21:22:52 +01:00
}
2021-02-20 23:17:48 +01:00
} else {
if ( $withpicto ) {
require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php' ;
2021-03-29 16:25:34 +02:00
//list($class, $module) = explode('@', $this->picto);
$upload_dir = $conf -> eventorganisation -> multidir_output [ $conf -> entity ] . " / " . dol_sanitizeFileName ( $this -> ref );
2021-02-20 23:17:48 +01:00
$filearray = dol_dir_list ( $upload_dir , " files " );
$filename = $filearray [ 0 ][ 'name' ];
if ( ! empty ( $filename )) {
$pospoint = strpos ( $filearray [ 0 ][ 'name' ], '.' );
2021-03-29 20:28:29 +02:00
$pathtophoto = '/' . $this -> ref . '/thumbs/' . substr ( $filename , 0 , $pospoint ) . '_mini' . substr ( $filename , $pospoint );
$result .= '<div class="floatleft inline-block valignmiddle divphotoref"><img class="photouserphoto userphoto" alt="No photo" border="0" src="' . DOL_URL_ROOT . '/viewimage.php?modulepart=eventorganisation&entity=' . $conf -> entity . '&file=' . urlencode ( $pathtophoto ) . '"></div>' ;
2021-02-20 23:17:48 +01:00
$result .= '</div>' ;
} else {
$result .= img_object (( $notooltip ? '' : $label ), ( $this -> picto ? $this -> picto : 'generic' ), ( $notooltip ? (( $withpicto != 2 ) ? 'class="paddingright"' : '' ) : 'class="' . (( $withpicto != 2 ) ? 'paddingright ' : '' ) . 'classfortooltip"' ), 0 , 0 , $notooltip ? 0 : 1 );
}
}
}
2021-02-26 21:22:52 +01:00
if ( $withpicto != 2 ) {
$result .= $this -> ref ;
}
2021-02-20 23:17:48 +01:00
$result .= $linkend ;
//if ($withpicto != 2) $result.=(($addlabel && $this->label) ? $sep . dol_trunc($this->label, ($addlabel > 1 ? $addlabel : 0)) : '');
global $action , $hookmanager ;
$hookmanager -> initHooks ( array ( 'conferenceorboothdao' ));
2021-11-22 19:57:26 +01:00
$parameters = array ( 'id' => $this -> id , 'getnomurl' => & $result );
2021-02-20 23:17:48 +01:00
$reshook = $hookmanager -> executeHooks ( 'getNomUrl' , $parameters , $this , $action ); // Note that $action and $object may have been modified by some hooks
2021-02-26 21:22:52 +01:00
if ( $reshook > 0 ) {
$result = $hookmanager -> resPrint ;
} else {
$result .= $hookmanager -> resPrint ;
}
2021-02-20 23:17:48 +01:00
return $result ;
}
/**
* Return the label of the status
*
* @ param int $mode 0 = long label , 1 = short label , 2 = Picto + short label , 3 = Picto , 4 = Picto + long label , 5 = Short label + Picto , 6 = Long label + Picto
2021-03-11 19:09:42 +01:00
* @ param int $hidenastatus Not use here just for declaration method compatibility with parent classes
2021-02-20 23:17:48 +01:00
* @ return string Label of status
*/
2021-03-11 19:09:42 +01:00
public function getLibStatut ( $mode = 0 , $hidenastatus = 0 )
2021-02-20 23:17:48 +01:00
{
2021-03-11 19:09:42 +01:00
return $this -> LibStatutEvent ( $this -> status , $mode );
2021-02-20 23:17:48 +01:00
}
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
/**
* Return the status
*
* @ param int $status Id status
* @ param int $mode 0 = long label , 1 = short label , 2 = Picto + short label , 3 = Picto , 4 = Picto + long label , 5 = Short label + Picto , 6 = Long label + Picto
* @ return string Label of status
*/
2021-03-11 19:09:42 +01:00
public function LibStatutEvent ( $status , $mode = 0 )
2021-02-20 23:17:48 +01:00
{
// phpcs:enable
2021-02-26 21:22:52 +01:00
if ( empty ( $this -> labelStatus ) || empty ( $this -> labelStatusShort )) {
2021-02-20 23:17:48 +01:00
global $langs ;
//$langs->load("eventorganization@eventorganization");
2021-10-16 19:37:57 +02:00
$this -> labelStatus [ self :: STATUS_DRAFT ] = $langs -> transnoentitiesnoconv ( 'Draft' );
$this -> labelStatus [ self :: STATUS_SUGGESTED ] = $langs -> transnoentitiesnoconv ( 'Suggested' );
$this -> labelStatus [ self :: STATUS_CONFIRMED ] = $langs -> transnoentitiesnoconv ( 'Confirmed' );
$this -> labelStatus [ self :: STATUS_NOT_QUALIFIED ] = $langs -> transnoentitiesnoconv ( 'NotSelected' );
$this -> labelStatus [ self :: STATUS_DONE ] = $langs -> transnoentitiesnoconv ( 'Done' );
$this -> labelStatus [ self :: STATUS_CANCELED ] = $langs -> transnoentitiesnoconv ( 'Canceled' );
$this -> labelStatusShort [ self :: STATUS_DRAFT ] = $langs -> transnoentitiesnoconv ( 'Draft' );
$this -> labelStatusShort [ self :: STATUS_SUGGESTED ] = $langs -> transnoentitiesnoconv ( 'Suggested' );
$this -> labelStatusShort [ self :: STATUS_CONFIRMED ] = $langs -> transnoentitiesnoconv ( 'Confirmed' );
$this -> labelStatusShort [ self :: STATUS_NOT_QUALIFIED ] = $langs -> transnoentitiesnoconv ( 'NotSelected' );
$this -> labelStatusShort [ self :: STATUS_DONE ] = $langs -> transnoentitiesnoconv ( 'Done' );
$this -> labelStatusShort [ self :: STATUS_CANCELED ] = $langs -> transnoentitiesnoconv ( 'Canceled' );
2021-02-20 23:17:48 +01:00
}
$statusType = 'status' . $status ;
//if ($status == self::STATUS_VALIDATED) $statusType = 'status1';
2021-02-26 21:22:52 +01:00
if ( $status == self :: STATUS_CANCELED ) {
$statusType = 'status6' ;
}
2021-02-20 23:17:48 +01:00
return dolGetStatus ( $this -> labelStatus [ $status ], $this -> labelStatusShort [ $status ], '' , $statusType , $mode );
}
/**
* Load the info information in the object
*
* @ param int $id Id of object
* @ return void
*/
public function info ( $id )
{
2021-02-27 15:34:28 +01:00
$sql = 'SELECT rowid, datec as datec, tms as datem,' ;
$sql .= ' fk_user_author, fk_user_mod' ;
2021-02-20 23:17:48 +01:00
$sql .= ' FROM ' . MAIN_DB_PREFIX . $this -> table_element . ' as t' ;
2021-03-30 11:36:50 +02:00
$sql .= ' WHERE t.id = ' . (( int ) $id );
2021-02-20 23:17:48 +01:00
$result = $this -> db -> query ( $sql );
2021-02-26 21:22:52 +01:00
if ( $result ) {
if ( $this -> db -> num_rows ( $result )) {
2021-02-20 23:17:48 +01:00
$obj = $this -> db -> fetch_object ( $result );
$this -> id = $obj -> rowid ;
2022-06-28 13:09:53 +02:00
$this -> user_creation_id = $obj -> fk_user_creat ;
$this -> user_modification_id = $obj -> fk_user_modif ;
2021-02-20 23:17:48 +01:00
$this -> date_creation = $this -> db -> jdate ( $obj -> datec );
2022-06-28 13:09:53 +02:00
$this -> date_modification = empty ( $obj -> datem ) ? '' : $this -> db -> jdate ( $obj -> datem );
2021-02-20 23:17:48 +01:00
}
$this -> db -> free ( $result );
} else {
dol_print_error ( $this -> db );
}
}
/**
* Initialise object with example values
* Id must be 0 if object instance is a specimen
*
* @ return void
*/
public function initAsSpecimen ()
{
$this -> initAsSpecimenCommon ();
}
/**
* Create an array of lines
*
* @ return array | int array of lines if OK , < 0 if KO
*/
2021-04-07 17:16:26 +02:00
/* public function getLinesArray ()
2021-02-20 23:17:48 +01:00
{
$this -> lines = array ();
$objectline = new ConferenceOrBoothLine ( $this -> db );
2021-09-15 20:03:38 +02:00
$result = $objectline -> fetchAll ( 'ASC' , 'position' , 0 , 0 , array ( 'customsql' => 'fk_conferenceorbooth = ' . (( int ) $this -> id )));
2021-02-20 23:17:48 +01:00
2021-02-26 21:22:52 +01:00
if ( is_numeric ( $result )) {
2021-02-20 23:17:48 +01:00
$this -> error = $this -> error ;
$this -> errors = $this -> errors ;
return $result ;
} else {
$this -> lines = $result ;
return $this -> lines ;
}
2021-04-07 17:16:26 +02:00
} */
2021-02-20 23:17:48 +01:00
/**
* Create a document onto disk according to template module .
*
* @ param string $modele Force template to use ( '' to not force )
* @ param Translate $outputlangs objet lang a utiliser pour traduction
* @ param int $hidedetails Hide details of lines
* @ param int $hidedesc Hide description
* @ param int $hideref Hide ref
* @ param null | array $moreparams Array to provide more information
* @ return int 0 if KO , 1 if OK
*/
public function generateDocument ( $modele , $outputlangs , $hidedetails = 0 , $hidedesc = 0 , $hideref = 0 , $moreparams = null )
{
global $conf , $langs ;
$result = 0 ;
$includedocgeneration = 0 ;
$langs -> load ( " eventorganization@eventorganization " );
if ( ! dol_strlen ( $modele )) {
$modele = 'standard_conferenceorbooth' ;
if ( ! empty ( $this -> model_pdf )) {
$modele = $this -> model_pdf ;
} elseif ( ! empty ( $conf -> global -> CONFERENCEORBOOTH_ADDON_PDF )) {
$modele = $conf -> global -> CONFERENCEORBOOTH_ADDON_PDF ;
}
}
$modelpath = " core/modules/eventorganization/doc/ " ;
if ( $includedocgeneration && ! empty ( $modele )) {
$result = $this -> commonGenerateDocument ( $modelpath , $modele , $outputlangs , $hidedetails , $hidedesc , $hideref , $moreparams );
}
return $result ;
}
/**
* Action executed by scheduler
* CAN BE A CRON TASK . In such a case , parameters come from the schedule job setup field 'Parameters'
* Use public function doScheduledJob ( $param1 , $param2 , ... ) to get parameters
*
* @ return int 0 if OK , <> 0 if KO ( this function is used also by cron so only 0 is OK )
*/
public function doScheduledJob ()
{
global $conf , $langs ;
//$conf->global->SYSLOG_FILE = 'DOL_DATA_ROOT/dolibarr_mydedicatedlofile.log';
$error = 0 ;
$this -> output = '' ;
$this -> error = '' ;
dol_syslog ( __METHOD__ , LOG_DEBUG );
$now = dol_now ();
$this -> db -> begin ();
// ...
$this -> db -> commit ();
return $error ;
}
}