29require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobject.class.php';
40 public $module =
'partnership';
45 public $element =
'partnership';
50 public $table_element =
'partnership';
55 public $picto =
'partnership';
61 const STATUS_DRAFT = 0;
62 const STATUS_VALIDATED = 1;
63 const STATUS_APPROVED = 2;
64 const STATUS_REFUSED = 3;
65 const STATUS_CANCELED = 9;
98 public $fields = array(
99 'rowid' => array(
'type' =>
'integer',
'label' =>
'TechnicalID',
'enabled' => 1,
'position' => 1,
'notnull' => 1,
'visible' => 0,
'noteditable' => 1,
'index' => 1,
'css' =>
'left',
'comment' =>
"Id"),
100 'ref' => array(
'type' =>
'varchar(128)',
'label' =>
'Ref',
'enabled' => 1,
'position' => 10,
'notnull' => 1,
'visible' => 4,
'noteditable' => 1,
'default' =>
'(PROV)',
'index' => 1,
'searchall' => 1,
'showoncombobox' => 1,
'comment' =>
"Reference of object",
'csslist' =>
'tdoverflowmax150'),
101 'entity' => array(
'type' =>
'integer',
'label' =>
'Entity',
'enabled' =>
'isModEnabled("multicompany")',
'position' => 15,
'notnull' => 1,
'visible' => -2,
'default' =>
'1',
'index' => 1,),
102 'fk_type' => array(
'type' =>
'integer:PartnershipType:partnership/class/partnership_type.class.php:0:(active:=:1)',
'label' =>
'Type',
'enabled' => 1,
'position' => 20,
'notnull' => 1,
'visible' => 1,
'csslist' =>
'tdoverflowmax125'),
103 'fk_soc' => array(
'type' =>
'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))',
'label' =>
'ThirdParty',
'picto' =>
'company',
'enabled' => 1,
'position' => 50,
'notnull' => -1,
'visible' => 1,
'index' => 1,
'css' =>
'maxwidth500',
'csslist' =>
'tdoverflowmax125',),
104 'note_public' => array(
'type' =>
'html',
'label' =>
'NotePublic',
'enabled' => 1,
'position' => 61,
'notnull' => 0,
'visible' => 0,),
105 'note_private' => array(
'type' =>
'html',
'label' =>
'NotePrivate',
'enabled' => 1,
'position' => 62,
'notnull' => 0,
'visible' => 0,),
106 'date_creation' => array(
'type' =>
'datetime',
'label' =>
'DateCreation',
'enabled' => 1,
'position' => 500,
'notnull' => 1,
'visible' => -2,
'csslist' =>
'nowraponall'),
107 'tms' => array(
'type' =>
'timestamp',
'label' =>
'DateModification',
'enabled' => 1,
'position' => 501,
'notnull' => 0,
'visible' => -2,
'csslist' =>
'nowraponall'),
108 'fk_user_creat' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserAuthor',
'enabled' => 1,
'position' => 510,
'notnull' => 1,
'visible' => -2,
'foreignkey' =>
'user.rowid',
'csslist' =>
'tdoverflowmax125'),
109 'fk_user_modif' => array(
'type' =>
'integer:User:user/class/user.class.php',
'label' =>
'UserModif',
'enabled' => 1,
'position' => 511,
'notnull' => -1,
'visible' => -2,
'csslist' =>
'tdoverflowmax125'),
110 'last_main_doc' => array(
'type' =>
'varchar(255)',
'label' =>
'LastMainDoc',
'enabled' => 1,
'position' => 600,
'notnull' => 0,
'visible' => 0,),
111 'import_key' => array(
'type' =>
'varchar(14)',
'label' =>
'ImportId',
'enabled' => 1,
'position' => 1000,
'notnull' => -1,
'visible' => -2,),
112 'model_pdf' => array(
'type' =>
'varchar(255)',
'label' =>
'Model pdf',
'enabled' => 1,
'position' => 1010,
'notnull' => -1,
'visible' => 0,),
113 'date_partnership_start' => array(
'type' =>
'date',
'label' =>
'DatePartnershipStart',
'enabled' => 1,
'position' => 52,
'notnull' => 1,
'visible' => 1,),
114 'date_partnership_end' => array(
'type' =>
'date',
'label' =>
'DatePartnershipEnd',
'enabled' => 1,
'position' => 53,
'notnull' => 0,
'visible' => 1,),
115 'url_to_check' => array(
'type' =>
'url',
'label' =>
'UrlToCheck',
'enabled' =>
'getDolGlobalString("PARTNERSHIP_BACKLINKS_TO_CHECK")',
'position' => 70,
'notnull' => 0,
'visible' => -1,
'csslist' =>
'tdoverflowmax150'),
116 'count_last_url_check_error' => array(
'type' =>
'integer',
'label' =>
'CountLastUrlCheckError',
'enabled' =>
'getDolGlobalString("PARTNERSHIP_BACKLINKS_TO_CHECK")',
'position' => 71,
'notnull' => 0,
'visible' => -4,
'default' =>
'0',),
117 'last_check_backlink' => array(
'type' =>
'datetime',
'label' =>
'LastCheckBacklink',
'enabled' =>
'getDolGlobalString("PARTNERSHIP_BACKLINKS_TO_CHECK")',
'position' => 72,
'notnull' => 0,
'visible' => -4,
'csslist' =>
'nowraponall'),
118 'reason_decline_or_cancel' => array(
'type' =>
'text',
'label' =>
'ReasonDeclineOrCancel',
'enabled' => 1,
'position' => 73,
'notnull' => 0,
'visible' => -2,),
119 'ip' => array(
'type' =>
'ip',
'label' =>
'IPOfApplicant',
'enabled' => 1,
'position' => 74,
'notnull' => 0,
'visible' => -2,),
120 'status' => array(
'type' =>
'smallint',
'label' =>
'Status',
'enabled' => 1,
'position' => 2000,
'notnull' => 1,
'visible' => 2,
'default' =>
'0',
'index' => 1,
'arrayofkeyval' => array(
'0' =>
'Draft',
'1' =>
'Validated',
'2' =>
'Approved',
'3' =>
'Refused',
'9' =>
'Terminated'),),
127 public $note_private;
128 public $fk_user_creat;
129 public $fk_user_modif;
130 public $last_main_doc;
133 public $date_partnership_start;
134 public $date_partnership_end;
135 public $url_to_check;
136 public $count_last_url_check_error;
137 public $last_check_backlink;
138 public $reason_decline_or_cancel;
153 global $conf, $langs;
157 $this->ismultientitymanaged = 0;
158 $this->isextrafieldmanaged = 1;
161 $this->fields[
'fk_member'] = array(
'type' =>
'integer:Adherent:adherents/class/adherent.class.php:1',
'label' =>
'Member',
'enabled' =>
'1',
'position' => 50,
'notnull' => -1,
'visible' => 1,
'index' => 1,
'picto' =>
'member',
'csslist' =>
'tdoverflowmax150');
163 $this->fields[
'fk_soc'] = array(
'type' =>
'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))',
'label' =>
'ThirdParty',
'enabled' =>
'1',
'position' => 50,
'notnull' => -1,
'visible' => 1,
'index' => 1,
'picto' =>
'company',
'css' =>
'maxwidth500',
'csslist' =>
'tdoverflowmax150');
166 if (!
getDolGlobalString(
'MAIN_SHOW_TECHNICAL_ID') && isset($this->fields[
'rowid']) && !empty($this->fields[
'ref'])) {
167 $this->fields[
'rowid'][
'visible'] = 0;
171 foreach ($this->fields as $key => $val) {
172 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
173 unset($this->fields[$key]);
178 if (is_object($langs)) {
179 foreach ($this->fields as $key => $val) {
180 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
181 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
182 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
198 if ($this->fk_soc <= 0 && $this->fk_member <= 0) {
199 $this->errors[] =
"ErrorThirpdartyOrMemberidIsMandatory";
216 global $langs, $extrafields;
226 $result =
$object->fetchCommon($fromid);
227 if ($result > 0 && !empty(
$object->table_element_line)) {
241 if (property_exists(
$object,
'ref')) {
242 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
244 if (property_exists(
$object,
'label')) {
245 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->label : $this->fields[
'label'][
'default'];
247 if (property_exists(
$object,
'status')) {
248 $object->status = self::STATUS_DRAFT;
250 if (property_exists(
$object,
'date_creation')) {
253 if (property_exists(
$object,
'date_modification')) {
254 $object->date_modification =
null;
258 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
259 $extrafields->fetch_name_optionals_label($this->table_element);
260 foreach (
$object->array_options as $key => $option) {
261 $shortkey = preg_replace(
'/options_/',
'', $key);
262 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
265 unset(
$object->array_options[$key]);
271 $object->context[
'createfromclone'] =
'createfromclone';
272 $result =
$object->createCommon($user);
276 $this->errors =
$object->errors;
288 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
295 unset(
$object->context[
'createfromclone']);
302 $this->db->rollback();
317 public function fetch($id, $ref =
null, $fk_member =
null, $fk_soc =
null)
320 if (empty($id) && empty($ref) && empty($fk_member) && empty($fk_soc)) {
324 $sql =
'SELECT p.rowid, p.ref, p.fk_type, p.fk_soc, p.fk_member, p.status';
325 $sql .=
', p.entity, p.date_partnership_start, p.date_partnership_end, p.date_creation';
326 $sql .=
', p.fk_user_creat, p.tms, p.fk_user_modif, p.fk_user_modif';
327 $sql .=
', p.note_private, p.note_public, p.url_to_check';
328 $sql .=
', p.last_main_doc, p.count_last_url_check_error, p.last_check_backlink, p.reason_decline_or_cancel';
329 $sql .=
', p.import_key, p.model_pdf';
330 $sql .=
', pt.code as type_code, pt.label as type_label';
331 $sql .=
' FROM '.MAIN_DB_PREFIX.
'partnership as p';
332 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_partnership_type as pt ON p.fk_type = pt.rowid';
335 $sql .=
" WHERE p.rowid = ".((int) $id);
337 $sql .=
" WHERE p.entity IN (0,".getEntity(
'partnership').
")";
341 $sql .=
" AND p.ref='".$this->db->escape($ref).
"'";
344 if ($fk_member > 0) {
345 $sql .=
' AND p.fk_member = '.((int) $fk_member);
348 $sql .=
' AND p.fk_soc = '.((int) $fk_soc);
350 $sql .=
' ORDER BY p.date_partnership_end DESC';
352 dol_syslog(get_class($this).
"::fetch", LOG_DEBUG);
353 $result = $this->db->query($sql);
355 $obj = $this->db->fetch_object($result);
357 $this->
id = $obj->rowid;
358 $this->entity = $obj->entity;
359 $this->
ref = $obj->ref;
361 $this->fk_type = $obj->fk_type;
362 $this->type_code = $obj->type_code;
363 $this->type_label = $obj->type_label;
365 $this->fk_soc = $obj->fk_soc;
366 $this->fk_member = $obj->fk_member;
367 $this->
status = $obj->status;
368 $this->date_partnership_start = $this->db->jdate($obj->date_partnership_start);
369 $this->date_partnership_end = $this->db->jdate($obj->date_partnership_end);
370 $this->date_creation = $this->db->jdate($obj->date_creation);
371 $this->fk_user_creat = $obj->fk_user_creat;
372 $this->tms = $obj->tms;
373 $this->fk_user_modif = $obj->fk_user_modif;
374 $this->note_private = $obj->note_private;
375 $this->note_public = $obj->note_public;
376 $this->last_main_doc = $obj->last_main_doc;
377 $this->count_last_url_check_error = $obj->count_last_url_check_error;
378 $this->last_check_backlink = $this->db->jdate($obj->last_check_backlink);
379 $this->reason_decline_or_cancel = $obj->reason_decline_or_cancel;
380 $this->import_key = $obj->import_key;
381 $this->model_pdf = $obj->model_pdf;
382 $this->url_to_check = $obj->url_to_check;
388 $this->db->free($result);
396 $this->error = $this->db->error();
409 $this->lines = array();
427 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
435 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
436 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
437 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
439 $sql .=
' WHERE 1 = 1';
443 if (is_array($filter)) {
445 if (count($filter) > 0) {
446 foreach ($filter as $key => $value) {
447 if ($key ==
't.rowid') {
448 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
449 } elseif (array_key_exists($key, $this->fields) && in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
450 $sqlwhere[] = $this->db->sanitize($key).
" = '".$this->db->idate($value).
"'";
451 } elseif (strpos($value,
'%') ===
false) {
452 $sqlwhere[] = $this->db->sanitize($key).
" IN (".$this->db->sanitize($this->db->escape($value)).
")";
454 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
458 if (count($sqlwhere) > 0) {
459 $sql .=
' AND ('.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere).
')';
469 $this->errors[] = $errormessage;
470 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
474 if (!empty($sortfield)) {
475 $sql .= $this->db->order($sortfield, $sortorder);
477 if (!empty($limit)) {
478 $sql .= $this->db->plimit($limit, $offset);
481 $resql = $this->db->query($sql);
483 $num = $this->db->num_rows($resql);
485 while ($i < ($limit ? min($limit, $num) : $num)) {
486 $obj = $this->db->fetch_object($resql);
488 $record =
new self($this->db);
489 $record->setVarsFromFetchObj($obj);
491 $records[$record->id] = $record;
495 $this->db->free($resql);
499 $this->errors[] =
'Error '.$this->db->lasterror();
500 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
515 if ($this->fk_soc <= 0 && $this->fk_member <= 0) {
516 $this->errors[] =
"ErrorThirpdartyOrMemberidIsMandatory";
519 if (empty($this->fk_user_creat)) {
520 $this->fk_user_creat = $user->id;
533 public function delete(
User $user, $notrigger = 0)
550 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
569 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
574 if ($this->
status == self::STATUS_VALIDATED) {
575 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
592 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
597 $this->newref = $num;
601 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
602 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
603 $sql .=
" status = ".self::STATUS_VALIDATED;
604 if (!empty($this->fields[
'date_validation'])) {
605 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
607 if (!empty($this->fields[
'fk_user_valid'])) {
608 $sql .=
", fk_user_valid = ".$user->id;
610 $sql .=
" WHERE rowid = ".((int) $this->
id);
612 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
613 $resql = $this->db->query($sql);
616 $this->error = $this->db->lasterror();
620 if (!$error && !$notrigger) {
622 $result = $this->
call_trigger(
'PARTNERSHIP_VALIDATE', $user);
631 $this->oldref = $this->ref;
634 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
636 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'partnership/".$this->db->escape($this->newref).
"'";
637 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
638 $resql = $this->db->query($sql);
641 $this->error = $this->db->lasterror();
643 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'partnership/".$this->db->escape($this->newref).
"'";
644 $sql .=
" WHERE filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
645 $resql = $this->db->query($sql);
648 $this->error = $this->db->lasterror();
654 $dirsource = $conf->partnership->dir_output.
'/partnership/'.$oldref;
655 $dirdest = $conf->partnership->dir_output.
'/partnership/'.$newref;
656 if (!$error && file_exists($dirsource)) {
657 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
659 if (@rename($dirsource, $dirdest)) {
662 $listoffiles =
dol_dir_list($conf->partnership->dir_output.
'/partnership/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
663 foreach ($listoffiles as $fileentry) {
664 $dirsource = $fileentry[
'name'];
665 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
666 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
667 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
668 @rename($dirsource, $dirdest);
678 $this->
status = self::STATUS_VALIDATED;
685 $this->db->rollback();
697 public function approve($user, $notrigger = 0)
701 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
706 if ($this->
status == self::STATUS_APPROVED) {
707 dol_syslog(get_class($this).
"::accept action abandoned: already acceptd", LOG_WARNING);
724 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
729 $this->newref = $num;
733 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
734 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
735 $sql .=
" status = ".self::STATUS_APPROVED;
742 $sql .=
" WHERE rowid = ".((int) $this->
id);
744 dol_syslog(get_class($this).
"::accept()", LOG_DEBUG);
745 $resql = $this->db->query($sql);
748 $this->error = $this->db->lasterror();
752 if (!$error && !$notrigger) {
754 $result = $this->
call_trigger(
'PARTNERSHIP_ACCEPT', $user);
763 $this->oldref = $this->ref;
766 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
768 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filename = CONCAT('".$this->db->escape($this->newref).
"', SUBSTR(filename, ".(strlen($this->
ref) + 1).
")), filepath = 'partnership/".$this->db->escape($this->newref).
"'";
769 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
770 $resql = $this->db->query($sql);
773 $this->error = $this->db->lasterror();
775 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'partnership/".$this->db->escape($this->newref).
"'";
776 $sql .=
" WHERE filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
777 $resql = $this->db->query($sql);
780 $this->error = $this->db->lasterror();
786 $dirsource = $conf->partnership->dir_output.
'/partnership/'.$oldref;
787 $dirdest = $conf->partnership->dir_output.
'/partnership/'.$newref;
788 if (!$error && file_exists($dirsource)) {
789 dol_syslog(get_class($this).
"::accept() rename dir ".$dirsource.
" into ".$dirdest);
791 if (@rename($dirsource, $dirdest)) {
794 $listoffiles =
dol_dir_list($conf->partnership->dir_output.
'/partnership/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
795 foreach ($listoffiles as $fileentry) {
796 $dirsource = $fileentry[
'name'];
797 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
798 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
799 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
800 @rename($dirsource, $dirdest);
810 $this->
status = self::STATUS_APPROVED;
817 $this->db->rollback();
833 if ($this->
status <= self::STATUS_DRAFT) {
844 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'PARTNERSHIP_UNVALIDATE');
855 public function refused($user, $reasondeclinenote =
'', $notrigger = 0)
858 if ($this->
status == self::STATUS_REFUSED) {
862 $this->
status = self::STATUS_REFUSED;
863 $this->reason_decline_or_cancel = $reasondeclinenote;
865 $result = $this->
update($user);
868 $this->reason_decline_or_cancel = $reasondeclinenote;
882 public function cancel($user, $notrigger = 0)
885 if ($this->
status != self::STATUS_APPROVED) {
896 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'PARTNERSHIP_CANCEL');
906 public function reopen($user, $notrigger = 0)
909 if ($this->
status != self::STATUS_CANCELED && $this->
status != self::STATUS_REFUSED) {
920 return $this->
setStatusCommon($user, self::STATUS_APPROVED, $notrigger,
'PARTNERSHIP_REOPEN');
934 $langs->load(
'partnership');
937 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Partnership").
'</u>';
938 if (isset($this->
status)) {
939 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
941 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
956 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
958 global $conf, $langs, $hookmanager;
960 if (!empty($conf->dol_no_mouse_hover)) {
967 'objecttype' => $this->element,
970 $classfortooltip =
'classfortooltip';
973 $classfortooltip =
'classforajaxtooltip';
974 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
980 $url = DOL_URL_ROOT.
'/partnership/partnership_card.php?id='.$this->id;
982 if ($option !=
'nolink') {
984 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
985 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
986 $add_save_lastsearch_values = 1;
988 if ($add_save_lastsearch_values) {
989 $url .=
'&save_lastsearch_values=1';
994 if (empty($notooltip)) {
996 $label = $langs->trans(
"ShowPartnership");
997 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
999 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
1000 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
1002 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
1005 if ($option ==
'nolink') {
1006 $linkstart =
'<span';
1008 $linkstart =
'<a href="'.$url.
'"';
1010 $linkstart .= $linkclose.
'>';
1011 if ($option ==
'nolink') {
1012 $linkend =
'</span>';
1017 $result .= $linkstart;
1019 if (empty($this->showphoto_on_popup)) {
1021 $result .=
img_object(($notooltip ?
'' : $label), ($this->picto ? $this->picto :
'generic'), ($notooltip ? (($withpicto != 2) ?
'class="paddingright"' :
'') : $dataparams.
' class="'.(($withpicto != 2) ?
'paddingright ' :
'').$classfortooltip.
'"'), 0, 0, $notooltip ? 0 : 1);
1025 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1027 list($class, $module) = explode(
'@', $this->picto);
1030 $filename = $filearray[0][
'name'];
1031 if (!empty($filename)) {
1032 $pospoint = strpos($filearray[0][
'name'],
'.');
1034 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
1035 if (!
getDolGlobalString(strtoupper($module.
'_'.$class).
'_FORMATLISTPHOTOSASUSERS')) {
1036 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref"><img class="photo'.$module.
'" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div></div>';
1038 $result .=
'<div class="floatleft inline-block valignmiddle divphotoref"><img class="photouserphoto userphoto" alt="No photo" border="0" src="'.DOL_URL_ROOT.
'/viewimage.php?modulepart='.$module.
'&entity='.$conf->entity.
'&file='.urlencode($pathtophoto).
'"></div>';
1041 $result .=
'</div>';
1043 $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);
1048 if ($withpicto != 2) {
1049 $result .= $this->ref;
1052 $result .= $linkend;
1055 global $action, $hookmanager;
1056 $hookmanager->initHooks(array(
'partnershipdao'));
1057 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1058 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1060 $result = $hookmanager->resPrint;
1062 $result .= $hookmanager->resPrint;
1078 $tables = array(
'partnership');
1105 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
1108 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
1109 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
1110 $this->labelStatus[self::STATUS_APPROVED] = $langs->transnoentitiesnoconv(
'Approved');
1111 $this->labelStatus[self::STATUS_REFUSED] = $langs->transnoentitiesnoconv(
'Refused');
1112 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Terminated');
1113 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
1114 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
1115 $this->labelStatusShort[self::STATUS_APPROVED] = $langs->transnoentitiesnoconv(
'Approved');
1116 $this->labelStatusShort[self::STATUS_REFUSED] = $langs->transnoentitiesnoconv(
'Refused');
1117 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Terminated');
1120 $statusType =
'status'.$status;
1121 if ($status == self::STATUS_APPROVED) {
1122 $statusType =
'status4';
1124 if ($status == self::STATUS_REFUSED) {
1125 $statusType =
'status9';
1127 if ($status == self::STATUS_CANCELED) {
1128 $statusType =
'status6';
1131 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
1142 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
1143 $sql .=
' fk_user_creat, fk_user_modif';
1144 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
1145 $sql .=
' WHERE t.rowid = '.((int) $id);
1146 $result = $this->db->query($sql);
1148 if ($this->db->num_rows($result)) {
1149 $obj = $this->db->fetch_object($result);
1151 $this->
id = $obj->rowid;
1153 $this->user_creation_id = $obj->fk_user_creat;
1154 $this->user_modification_id = $obj->fk_user_modif;
1155 $this->date_creation = $this->db->jdate($obj->datec);
1156 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
1159 $this->db->free($result);
1183 $this->lines = array();
1186 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0,
'(fk_partnership:=:'.((
int) $this->
id).
')');
1188 if (is_numeric($result)) {
1189 $this->error = $objectline->error;
1190 $this->errors = $objectline->errors;
1193 $this->lines = $result;
1194 return $this->lines;
1205 global $langs, $conf;
1206 $langs->load(
"partnership");
1209 $conf->global->PARTNERSHIP_ADDON =
'mod_partnership_standard';
1219 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
1220 foreach ($dirmodels as $reldir) {
1224 $mybool = ((bool) @include_once $dir.$file) || $mybool;
1227 if ($mybool ===
false) {
1232 if (class_exists($classname)) {
1233 $obj =
new $classname();
1234 $numref = $obj->getNextValue($this);
1236 if ($numref !=
'' && $numref !=
'-1') {
1239 $this->error = $obj->error;
1244 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
1248 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
1264 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
1266 global $conf, $langs;
1269 $includedocgeneration = 0;
1271 $langs->load(
"partnership");
1274 $modele =
'standard_partnership';
1276 if (!empty($this->model_pdf)) {
1277 $modele = $this->model_pdf;
1283 $modelpath =
"core/modules/partnership/doc/";
1285 if ($includedocgeneration && !empty($modele)) {
1286 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1315 $this->db->commit();
1329 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1331 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1332 $return .=
'<div class="info-box info-box-sm">';
1333 $return .=
'<span class="info-box-icon bg-infobox-action">';
1335 $return .=
'</span>';
1336 $return .=
'<div class="info-box-content">';
1337 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
1338 if ($selected >= 0) {
1339 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1341 if (property_exists($this,
'label')) {
1342 $return .=
' <div class="inline-block opacitymedium valignmiddle tdoverflowmax100">'.$this->label.
'</div>';
1344 if (property_exists($this,
'thirdparty') && is_object($this->thirdparty)) {
1345 $return .=
'<br><div class="info-box-ref tdoverflowmax150">'.$this->thirdparty->getNomUrl(1).
'</div>';
1347 if (method_exists($this,
'getLibStatut')) {
1348 $return .=
'<br><div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
1350 $return .=
'</div>';
1351 $return .=
'</div>';
1352 $return .=
'</div>';
1359require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1379 $this->isextrafieldmanaged = 0;
if( $user->socid > 0) if(! $user->hasRight('accounting', 'chartofaccount')) $object
print $langs trans("AuditedSecurityEvents").'</strong >< span class="opacitymedium"></span >< br > status
Or an array listing all the potential status of the object: array: int of the status => translated la...
Parent class of all other business classes (invoices, contracts, proposals, orders,...
fetch_optionals($rowid=null, $optionsArray=null)
Function to get extra fields of an object into $this->array_options This method is in most cases call...
deleteLineCommon(User $user, $idline, $notrigger=0)
Delete a line of object in database.
commonGenerateDocument($modelspath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams=null)
Common function for all objects extending CommonObject for generating documents.
createCommon(User $user, $notrigger=0)
Create object in the database.
getFieldList($alias='', $excludefields=array())
Function to concat keys of fields.
updateCommon(User $user, $notrigger=0)
Update object into database.
setStatusCommon($user, $status, $notrigger=0, $triggercode='')
Set to a status.
initAsSpecimenCommon()
Initialise object with example values Id must be 0 if object instance is a specimen.
copy_linked_contact($objFrom, $source='internal')
Copy contact from one element to current.
static commonReplaceThirdparty(DoliDB $dbs, $origin_id, $dest_id, array $tables, $ignoreerrors=0)
Function used to replace a thirdparty id with another one.
fetchLinesCommon($morewhere='', $noextrafields=0)
Load object in memory from the database.
deleteCommon(User $user, $notrigger=0, $forcechilddeletion=0)
Delete object in database.
call_trigger($triggerName, $user)
Call trigger based on this instance.
Parent class for class inheritance lines of business objects This class is useless for the moment so ...
Class to manage Dolibarr database access.
initAsSpecimen()
Initialise object with example values Id must be 0 if object instance is a specimen.
__construct(DoliDB $db)
Constructor.
getNextNumRef()
Returns the reference to the following non used object depending on the active numbering module.
validate($user, $notrigger=0)
Validate object.
getNomUrl($withpicto=0, $option='', $notooltip=0, $morecss='', $save_lastsearch_value=-1)
Return a link to the object card (with optionally the picto)
generateDocument($modele, $outputlangs, $hidedetails=0, $hidedesc=0, $hideref=0, $moreparams=null)
Create a document onto disk according to template module.
static replaceThirdparty($db, $origin_id, $dest_id)
Function used to replace a thirdparty id with another one.
create(User $user, $notrigger=0)
Create object into database.
update(User $user, $notrigger=0)
Update object into database.
createFromClone(User $user, $fromid)
Clone an object into another one.
setDraft($user, $notrigger=0)
Set draft status.
refused($user, $reasondeclinenote='', $notrigger=0)
Set refused status.
fetch($id, $ref=null, $fk_member=null, $fk_soc=null)
Load object in memory from the database Get object from database.
getKanbanView($option='', $arraydata=null)
Return a thumb for kanban views.
getLinesArray()
Create an array of lines.
getTooltipContentArray($params)
getTooltipContentArray
cancel($user, $notrigger=0)
Set cancel status.
reopen($user, $notrigger=0)
Set back to validated status.
fetchLines()
Load object lines in memory from the database.
fetchAll($sortorder='', $sortfield='', $limit=0, $offset=0, $filter='', $filtermode='AND')
Load list of objects in memory from the database.
doScheduledJob()
Action executed by scheduler CAN BE A CRON TASK.
getLibStatut($mode=0)
Return the label of the status.
LibStatut($status, $mode=0)
Return the status.
info($id)
Load the info information in the object.
approve($user, $notrigger=0)
Approve object.
deleteLine(User $user, $idline, $notrigger=0)
Delete a line of object in database.
__construct(DoliDB $db)
Constructor.
Class to manage Dolibarr users.
dol_dir_list($utf8_path, $types="all", $recursive=0, $filter="", $excludefilter=null, $sortcriteria="name", $sortorder=SORT_ASC, $mode=0, $nohook=0, $relativename="", $donotfollowsymlinks=0, $nbsecondsold=0)
Scan a directory and return a list of files/directories.
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=0, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
dol_strlen($string, $stringencoding='UTF-8')
Make a strlen call.
forgeSQLFromUniversalSearchCriteria($filter, &$errorstr='', $noand=0, $nopar=0, $noerror=0)
forgeSQLFromUniversalSearchCriteria
dol_now($mode='auto')
Return date for now.
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
dol_buildpath($path, $type=0, $returnemptyifnotfound=0)
Return path of url or filesystem.
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.