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 $date_creation;
129 public $fk_user_creat;
130 public $fk_user_modif;
131 public $last_main_doc;
134 public $date_partnership_start;
135 public $date_partnership_end;
136 public $url_to_check;
137 public $count_last_url_check_error;
138 public $last_check_backlink;
139 public $reason_decline_or_cancel;
154 global $conf, $langs;
158 $this->ismultientitymanaged = 0;
159 $this->isextrafieldmanaged = 1;
162 $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');
164 $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');
167 if (!
getDolGlobalString(
'MAIN_SHOW_TECHNICAL_ID') && isset($this->fields[
'rowid']) && !empty($this->fields[
'ref'])) {
168 $this->fields[
'rowid'][
'visible'] = 0;
172 foreach ($this->fields as $key => $val) {
173 if (isset($val[
'enabled']) && empty($val[
'enabled'])) {
174 unset($this->fields[$key]);
179 if (is_object($langs)) {
180 foreach ($this->fields as $key => $val) {
181 if (!empty($val[
'arrayofkeyval']) && is_array($val[
'arrayofkeyval'])) {
182 foreach ($val[
'arrayofkeyval'] as $key2 => $val2) {
183 $this->fields[$key][
'arrayofkeyval'][$key2] = $langs->trans($val2);
199 if ($this->fk_soc <= 0 && $this->fk_member <= 0) {
200 $this->errors[] =
"ErrorThirpdartyOrMemberidIsMandatory";
217 global $langs, $extrafields;
227 $result =
$object->fetchCommon($fromid);
228 if ($result > 0 && !empty(
$object->table_element_line)) {
242 if (property_exists(
$object,
'ref')) {
243 $object->ref = empty($this->fields[
'ref'][
'default']) ?
"Copy_Of_".$object->ref : $this->fields[
'ref'][
'default'];
245 if (property_exists(
$object,
'label')) {
246 $object->label = empty($this->fields[
'label'][
'default']) ? $langs->trans(
"CopyOf").
" ".
$object->label : $this->fields[
'label'][
'default'];
248 if (property_exists(
$object,
'status')) {
249 $object->status = self::STATUS_DRAFT;
251 if (property_exists(
$object,
'date_creation')) {
254 if (property_exists(
$object,
'date_modification')) {
255 $object->date_modification =
null;
259 if (is_array(
$object->array_options) && count(
$object->array_options) > 0) {
260 $extrafields->fetch_name_optionals_label($this->table_element);
261 foreach (
$object->array_options as $key => $option) {
262 $shortkey = preg_replace(
'/options_/',
'', $key);
263 if (!empty($extrafields->attributes[$this->table_element][
'unique'][$shortkey])) {
266 unset(
$object->array_options[$key]);
272 $object->context[
'createfromclone'] =
'createfromclone';
273 $result =
$object->createCommon($user);
277 $this->errors =
$object->errors;
289 if (property_exists($this,
'fk_soc') && $this->fk_soc ==
$object->socid) {
296 unset(
$object->context[
'createfromclone']);
303 $this->db->rollback();
318 public function fetch($id, $ref =
null, $fk_member =
null, $fk_soc =
null)
321 if (empty($id) && empty($ref) && empty($fk_member) && empty($fk_soc)) {
325 $sql =
'SELECT p.rowid, p.ref, p.fk_type, p.fk_soc, p.fk_member, p.status';
326 $sql .=
', p.entity, p.date_partnership_start, p.date_partnership_end, p.date_creation';
327 $sql .=
', p.fk_user_creat, p.tms, p.fk_user_modif, p.fk_user_modif';
328 $sql .=
', p.note_private, p.note_public, p.url_to_check';
329 $sql .=
', p.last_main_doc, p.count_last_url_check_error, p.last_check_backlink, p.reason_decline_or_cancel';
330 $sql .=
', p.import_key, p.model_pdf';
331 $sql .=
', pt.code as type_code, pt.label as type_label';
332 $sql .=
' FROM '.MAIN_DB_PREFIX.
'partnership as p';
333 $sql .=
' LEFT JOIN '.MAIN_DB_PREFIX.
'c_partnership_type as pt ON p.fk_type = pt.rowid';
336 $sql .=
" WHERE p.rowid = ".((int) $id);
338 $sql .=
" WHERE p.entity IN (0,".getEntity(
'partnership').
")";
342 $sql .=
" AND p.ref='".$this->db->escape($ref).
"'";
345 if ($fk_member > 0) {
346 $sql .=
' AND p.fk_member = '.((int) $fk_member);
349 $sql .=
' AND p.fk_soc = '.((int) $fk_soc);
351 $sql .=
' ORDER BY p.date_partnership_end DESC';
353 dol_syslog(get_class($this).
"::fetch", LOG_DEBUG);
354 $result = $this->db->query($sql);
356 $obj = $this->db->fetch_object($result);
358 $this->
id = $obj->rowid;
359 $this->entity = $obj->entity;
360 $this->
ref = $obj->ref;
362 $this->fk_type = $obj->fk_type;
363 $this->type_code = $obj->type_code;
364 $this->type_label = $obj->type_label;
366 $this->fk_soc = $obj->fk_soc;
367 $this->fk_member = $obj->fk_member;
368 $this->
status = $obj->status;
369 $this->date_partnership_start = $this->db->jdate($obj->date_partnership_start);
370 $this->date_partnership_end = $this->db->jdate($obj->date_partnership_end);
371 $this->date_creation = $this->db->jdate($obj->date_creation);
372 $this->fk_user_creat = $obj->fk_user_creat;
373 $this->tms = $obj->tms;
374 $this->fk_user_modif = $obj->fk_user_modif;
375 $this->note_private = $obj->note_private;
376 $this->note_public = $obj->note_public;
377 $this->last_main_doc = $obj->last_main_doc;
378 $this->count_last_url_check_error = $obj->count_last_url_check_error;
379 $this->last_check_backlink = $this->db->jdate($obj->last_check_backlink);
380 $this->reason_decline_or_cancel = $obj->reason_decline_or_cancel;
381 $this->import_key = $obj->import_key;
382 $this->model_pdf = $obj->model_pdf;
383 $this->url_to_check = $obj->url_to_check;
389 $this->db->free($result);
397 $this->error = $this->db->error();
410 $this->lines = array();
428 public function fetchAll($sortorder =
'', $sortfield =
'', $limit = 0, $offset = 0, $filter =
'', $filtermode =
'AND')
436 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
437 if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) {
438 $sql .=
' WHERE t.entity IN ('.getEntity($this->element).
')';
440 $sql .=
' WHERE 1 = 1';
444 if (is_array($filter)) {
446 if (count($filter) > 0) {
447 foreach ($filter as $key => $value) {
448 if ($key ==
't.rowid') {
449 $sqlwhere[] = $this->db->sanitize($key).
" = ".((int) $value);
450 } elseif (array_key_exists($key, $this->fields) && in_array($this->fields[$key][
'type'], array(
'date',
'datetime',
'timestamp'))) {
451 $sqlwhere[] = $this->db->sanitize($key).
" = '".$this->db->idate($value).
"'";
452 } elseif (strpos($value,
'%') ===
false) {
453 $sqlwhere[] = $this->db->sanitize($key).
" IN (".$this->db->sanitize($this->db->escape($value)).
")";
455 $sqlwhere[] = $this->db->sanitize($key).
" LIKE '%".$this->db->escape($this->db->escapeforlike($value)).
"%'";
459 if (count($sqlwhere) > 0) {
460 $sql .=
' AND ('.implode(
' '.$this->db->escape($filtermode).
' ', $sqlwhere).
')';
470 $this->errors[] = $errormessage;
471 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
475 if (!empty($sortfield)) {
476 $sql .= $this->db->order($sortfield, $sortorder);
478 if (!empty($limit)) {
479 $sql .= $this->db->plimit($limit, $offset);
482 $resql = $this->db->query($sql);
484 $num = $this->db->num_rows($resql);
486 while ($i < ($limit ? min($limit, $num) : $num)) {
487 $obj = $this->db->fetch_object($resql);
489 $record =
new self($this->db);
490 $record->setVarsFromFetchObj($obj);
492 $records[$record->id] = $record;
496 $this->db->free($resql);
500 $this->errors[] =
'Error '.$this->db->lasterror();
501 dol_syslog(__METHOD__.
' '.implode(
',', $this->errors), LOG_ERR);
516 if ($this->fk_soc <= 0 && $this->fk_member <= 0) {
517 $this->errors[] =
"ErrorThirpdartyOrMemberidIsMandatory";
520 if (empty($this->fk_user_creat)) {
521 $this->fk_user_creat = $user->id;
534 public function delete(
User $user, $notrigger = 0)
551 $this->error =
'ErrorDeleteLineNotAllowedByObjectStatus';
570 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
575 if ($this->
status == self::STATUS_VALIDATED) {
576 dol_syslog(get_class($this).
"::validate action abandoned: already validated", LOG_WARNING);
593 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
598 $this->newref = $num;
602 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
603 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
604 $sql .=
" status = ".self::STATUS_VALIDATED;
605 if (!empty($this->fields[
'date_validation'])) {
606 $sql .=
", date_validation = '".$this->db->idate($now).
"'";
608 if (!empty($this->fields[
'fk_user_valid'])) {
609 $sql .=
", fk_user_valid = ".$user->id;
611 $sql .=
" WHERE rowid = ".((int) $this->
id);
613 dol_syslog(get_class($this).
"::validate()", LOG_DEBUG);
614 $resql = $this->db->query($sql);
617 $this->error = $this->db->lasterror();
621 if (!$error && !$notrigger) {
623 $result = $this->
call_trigger(
'PARTNERSHIP_VALIDATE', $user);
632 $this->oldref = $this->ref;
635 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
637 $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).
"'";
638 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
639 $resql = $this->db->query($sql);
642 $this->error = $this->db->lasterror();
644 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'partnership/".$this->db->escape($this->newref).
"'";
645 $sql .=
" WHERE filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
646 $resql = $this->db->query($sql);
649 $this->error = $this->db->lasterror();
655 $dirsource = $conf->partnership->dir_output.
'/partnership/'.$oldref;
656 $dirdest = $conf->partnership->dir_output.
'/partnership/'.$newref;
657 if (!$error && file_exists($dirsource)) {
658 dol_syslog(get_class($this).
"::validate() rename dir ".$dirsource.
" into ".$dirdest);
660 if (@rename($dirsource, $dirdest)) {
663 $listoffiles =
dol_dir_list($conf->partnership->dir_output.
'/partnership/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
664 foreach ($listoffiles as $fileentry) {
665 $dirsource = $fileentry[
'name'];
666 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
667 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
668 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
669 @rename($dirsource, $dirdest);
679 $this->
status = self::STATUS_VALIDATED;
686 $this->db->rollback();
698 public function approve($user, $notrigger = 0)
702 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
707 if ($this->
status == self::STATUS_APPROVED) {
708 dol_syslog(get_class($this).
"::accept action abandoned: already acceptd", LOG_WARNING);
725 if (!$error && (preg_match(
'/^[\(]?PROV/i', $this->
ref) || empty($this->
ref))) {
730 $this->newref = $num;
734 $sql =
"UPDATE ".MAIN_DB_PREFIX.$this->table_element;
735 $sql .=
" SET ref = '".$this->db->escape($num).
"',";
736 $sql .=
" status = ".self::STATUS_APPROVED;
743 $sql .=
" WHERE rowid = ".((int) $this->
id);
745 dol_syslog(get_class($this).
"::accept()", LOG_DEBUG);
746 $resql = $this->db->query($sql);
749 $this->error = $this->db->lasterror();
753 if (!$error && !$notrigger) {
755 $result = $this->
call_trigger(
'PARTNERSHIP_ACCEPT', $user);
764 $this->oldref = $this->ref;
767 if (preg_match(
'/^[\(]?PROV/i', $this->
ref)) {
769 $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).
"'";
770 $sql .=
" WHERE filename LIKE '".$this->db->escape($this->
ref).
"%' AND filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
771 $resql = $this->db->query($sql);
774 $this->error = $this->db->lasterror();
776 $sql =
'UPDATE '.MAIN_DB_PREFIX.
"ecm_files set filepath = 'partnership/".$this->db->escape($this->newref).
"'";
777 $sql .=
" WHERE filepath = 'partnership/".$this->db->escape($this->
ref).
"' and entity = ".$conf->entity;
778 $resql = $this->db->query($sql);
781 $this->error = $this->db->lasterror();
787 $dirsource = $conf->partnership->dir_output.
'/partnership/'.$oldref;
788 $dirdest = $conf->partnership->dir_output.
'/partnership/'.$newref;
789 if (!$error && file_exists($dirsource)) {
790 dol_syslog(get_class($this).
"::accept() rename dir ".$dirsource.
" into ".$dirdest);
792 if (@rename($dirsource, $dirdest)) {
795 $listoffiles =
dol_dir_list($conf->partnership->dir_output.
'/partnership/'.$newref,
'files', 1,
'^'.preg_quote($oldref,
'/'));
796 foreach ($listoffiles as $fileentry) {
797 $dirsource = $fileentry[
'name'];
798 $dirdest = preg_replace(
'/^'.preg_quote($oldref,
'/').
'/', $newref, $dirsource);
799 $dirsource = $fileentry[
'path'].
'/'.$dirsource;
800 $dirdest = $fileentry[
'path'].
'/'.$dirdest;
801 @rename($dirsource, $dirdest);
811 $this->
status = self::STATUS_APPROVED;
818 $this->db->rollback();
834 if ($this->
status <= self::STATUS_DRAFT) {
845 return $this->
setStatusCommon($user, self::STATUS_DRAFT, $notrigger,
'PARTNERSHIP_UNVALIDATE');
856 public function refused($user, $reasondeclinenote =
'', $notrigger = 0)
859 if ($this->
status == self::STATUS_REFUSED) {
863 $this->
status = self::STATUS_REFUSED;
864 $this->reason_decline_or_cancel = $reasondeclinenote;
866 $result = $this->
update($user);
869 $this->reason_decline_or_cancel = $reasondeclinenote;
883 public function cancel($user, $notrigger = 0)
886 if ($this->
status != self::STATUS_APPROVED) {
897 return $this->
setStatusCommon($user, self::STATUS_CANCELED, $notrigger,
'PARTNERSHIP_CANCEL');
907 public function reopen($user, $notrigger = 0)
910 if ($this->
status != self::STATUS_CANCELED && $this->
status != self::STATUS_REFUSED) {
921 return $this->
setStatusCommon($user, self::STATUS_APPROVED, $notrigger,
'PARTNERSHIP_REOPEN');
935 $langs->load(
'partnership');
938 $datas[
'picto'] =
img_picto(
'', $this->picto).
' <u>'.$langs->trans(
"Partnership").
'</u>';
939 if (isset($this->
status)) {
940 $datas[
'picto'] .=
' '.$this->getLibStatut(5);
942 $datas[
'ref'] =
'<br><b>'.$langs->trans(
'Ref').
':</b> '.$this->ref;
957 public function getNomUrl($withpicto = 0, $option =
'', $notooltip = 0, $morecss =
'', $save_lastsearch_value = -1)
959 global $conf, $langs, $hookmanager;
961 if (!empty($conf->dol_no_mouse_hover)) {
968 'objecttype' => $this->element,
971 $classfortooltip =
'classfortooltip';
974 $classfortooltip =
'classforajaxtooltip';
975 $dataparams =
' data-params="'.dol_escape_htmltag(json_encode($params)).
'"';
981 $url = DOL_URL_ROOT.
'/partnership/partnership_card.php?id='.$this->id;
983 if ($option !=
'nolink') {
985 $add_save_lastsearch_values = ($save_lastsearch_value == 1 ? 1 : 0);
986 if ($save_lastsearch_value == -1 && isset($_SERVER[
"PHP_SELF"]) && preg_match(
'/list\.php/', $_SERVER[
"PHP_SELF"])) {
987 $add_save_lastsearch_values = 1;
989 if ($add_save_lastsearch_values) {
990 $url .=
'&save_lastsearch_values=1';
995 if (empty($notooltip)) {
997 $label = $langs->trans(
"ShowPartnership");
998 $linkclose .=
' alt="'.dol_escape_htmltag($label, 1).
'"';
1000 $linkclose .= ($label ?
' title="'.dol_escape_htmltag($label, 1).
'"' :
' title="tocomplete"');
1001 $linkclose .= $dataparams.
' class="'.$classfortooltip.($morecss ?
' '.$morecss :
'').
'"';
1003 $linkclose = ($morecss ?
' class="'.$morecss.
'"' :
'');
1006 if ($option ==
'nolink') {
1007 $linkstart =
'<span';
1009 $linkstart =
'<a href="'.$url.
'"';
1011 $linkstart .= $linkclose.
'>';
1012 if ($option ==
'nolink') {
1013 $linkend =
'</span>';
1018 $result .= $linkstart;
1020 if (empty($this->showphoto_on_popup)) {
1022 $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);
1026 require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
1028 list($class, $module) = explode(
'@', $this->picto);
1031 $filename = $filearray[0][
'name'];
1032 if (!empty($filename)) {
1033 $pospoint = strpos($filearray[0][
'name'],
'.');
1035 $pathtophoto = $class.
'/'.$this->
ref.
'/thumbs/'.substr($filename, 0, $pospoint).
'_mini'.substr($filename, $pospoint);
1036 if (!
getDolGlobalString(strtoupper($module.
'_'.$class).
'_FORMATLISTPHOTOSASUSERS')) {
1037 $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>';
1039 $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>';
1042 $result .=
'</div>';
1044 $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);
1049 if ($withpicto != 2) {
1050 $result .= $this->ref;
1053 $result .= $linkend;
1056 global $action, $hookmanager;
1057 $hookmanager->initHooks(array(
'partnershipdao'));
1058 $parameters = array(
'id' => $this->
id,
'getnomurl' => &$result);
1059 $reshook = $hookmanager->executeHooks(
'getNomUrl', $parameters, $this, $action);
1061 $result = $hookmanager->resPrint;
1063 $result .= $hookmanager->resPrint;
1079 $tables = array(
'partnership');
1106 if (empty($this->labelStatus) || empty($this->labelStatusShort)) {
1109 $this->labelStatus[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
1110 $this->labelStatus[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
1111 $this->labelStatus[self::STATUS_APPROVED] = $langs->transnoentitiesnoconv(
'Approved');
1112 $this->labelStatus[self::STATUS_REFUSED] = $langs->transnoentitiesnoconv(
'Refused');
1113 $this->labelStatus[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Terminated');
1114 $this->labelStatusShort[self::STATUS_DRAFT] = $langs->transnoentitiesnoconv(
'Draft');
1115 $this->labelStatusShort[self::STATUS_VALIDATED] = $langs->transnoentitiesnoconv(
'Validated');
1116 $this->labelStatusShort[self::STATUS_APPROVED] = $langs->transnoentitiesnoconv(
'Approved');
1117 $this->labelStatusShort[self::STATUS_REFUSED] = $langs->transnoentitiesnoconv(
'Refused');
1118 $this->labelStatusShort[self::STATUS_CANCELED] = $langs->transnoentitiesnoconv(
'Terminated');
1121 $statusType =
'status'.$status;
1122 if ($status == self::STATUS_APPROVED) {
1123 $statusType =
'status4';
1125 if ($status == self::STATUS_REFUSED) {
1126 $statusType =
'status9';
1128 if ($status == self::STATUS_CANCELED) {
1129 $statusType =
'status6';
1132 return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status],
'', $statusType, $mode);
1143 $sql =
'SELECT rowid, date_creation as datec, tms as datem,';
1144 $sql .=
' fk_user_creat, fk_user_modif';
1145 $sql .=
' FROM '.MAIN_DB_PREFIX.$this->table_element.
' as t';
1146 $sql .=
' WHERE t.rowid = '.((int) $id);
1147 $result = $this->db->query($sql);
1149 if ($this->db->num_rows($result)) {
1150 $obj = $this->db->fetch_object($result);
1152 $this->
id = $obj->rowid;
1154 $this->user_creation_id = $obj->fk_user_creat;
1155 $this->user_modification_id = $obj->fk_user_modif;
1156 $this->date_creation = $this->db->jdate($obj->datec);
1157 $this->date_modification = empty($obj->datem) ?
'' : $this->db->jdate($obj->datem);
1160 $this->db->free($result);
1184 $this->lines = array();
1187 $result = $objectline->fetchAll(
'ASC',
'position', 0, 0,
'(fk_partnership:=:'.((
int) $this->
id).
')');
1189 if (is_numeric($result)) {
1190 $this->error = $objectline->error;
1191 $this->errors = $objectline->errors;
1194 $this->lines = $result;
1195 return $this->lines;
1206 global $langs, $conf;
1207 $langs->load(
"partnership");
1210 $conf->global->PARTNERSHIP_ADDON =
'mod_partnership_standard';
1220 $dirmodels = array_merge(array(
'/'), (array) $conf->modules_parts[
'models']);
1221 foreach ($dirmodels as $reldir) {
1225 $mybool = ((bool) @include_once $dir.$file) || $mybool;
1228 if ($mybool ===
false) {
1233 if (class_exists($classname)) {
1234 $obj =
new $classname();
1235 $numref = $obj->getNextValue($this);
1237 if ($numref !=
'' && $numref !=
'-1') {
1240 $this->error = $obj->error;
1245 print $langs->trans(
"Error").
" ".$langs->trans(
"ClassNotFound").
' '.$classname;
1249 print $langs->trans(
"ErrorNumberingModuleNotSetup", $this->element);
1265 public function generateDocument($modele, $outputlangs, $hidedetails = 0, $hidedesc = 0, $hideref = 0, $moreparams =
null)
1267 global $conf, $langs;
1270 $includedocgeneration = 0;
1272 $langs->load(
"partnership");
1275 $modele =
'standard_partnership';
1277 if (!empty($this->model_pdf)) {
1278 $modele = $this->model_pdf;
1284 $modelpath =
"core/modules/partnership/doc/";
1286 if ($includedocgeneration && !empty($modele)) {
1287 $result = $this->
commonGenerateDocument($modelpath, $modele, $outputlangs, $hidedetails, $hidedesc, $hideref, $moreparams);
1316 $this->db->commit();
1330 $selected = (empty($arraydata[
'selected']) ? 0 : $arraydata[
'selected']);
1332 $return =
'<div class="box-flex-item box-flex-grow-zero">';
1333 $return .=
'<div class="info-box info-box-sm">';
1334 $return .=
'<span class="info-box-icon bg-infobox-action">';
1336 $return .=
'</span>';
1337 $return .=
'<div class="info-box-content">';
1338 $return .=
'<span class="info-box-ref inline-block tdoverflowmax150 valignmiddle">'.(method_exists($this,
'getNomUrl') ? $this->
getNomUrl() : $this->ref).
'</span>';
1339 if ($selected >= 0) {
1340 $return .=
'<input id="cb'.$this->id.
'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->
id.
'"'.($selected ?
' checked="checked"' :
'').
'>';
1342 if (property_exists($this,
'label')) {
1343 $return .=
' <div class="inline-block opacitymedium valignmiddle tdoverflowmax100">'.$this->label.
'</div>';
1345 if (property_exists($this,
'thirdparty') && is_object($this->thirdparty)) {
1346 $return .=
'<br><div class="info-box-ref tdoverflowmax150">'.$this->thirdparty->getNomUrl(1).
'</div>';
1348 if (method_exists($this,
'getLibStatut')) {
1349 $return .=
'<br><div class="info-box-status">'.$this->getLibStatut(3).
'</div>';
1351 $return .=
'</div>';
1352 $return .=
'</div>';
1353 $return .=
'</div>';
1360require_once DOL_DOCUMENT_ROOT.
'/core/class/commonobjectline.class.php';
1380 $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.