Completed
Branch develop (fcf50c)
by
unknown
32:54
created

modBlockedLog::init()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 34
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 22
nc 3
nop 1
dl 0
loc 34
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/* Copyright (C) 2017   Laurent Destailleur  <[email protected]>
3
 *
4
 * This program is free software; you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation; either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16
 */
17
18
/**
19
 * 	\defgroup   blockedlog   Module BlockedLog
20
 *  \brief      Add a log into a block chain for some actions.
21
 *  \file       htdocs/core/modules/modBlockedLog.class.php
22
 *  \ingroup    blockedlog
23
 *  \brief      Description and activation file for module BlockedLog
24
 */
25
include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php';
26
27
/**
28
 *	Class to describe a BlockedLog module
29
 */
30
class modBlockedLog extends DolibarrModules
31
{
32
    /**
33
	 *   Constructor. Define names, constants, directories, boxes, permissions
34
	 *
35
	 *   @param      DoliDB		$db      Database handler
36
     */
37
    function __construct($db)
38
    {
39
    	global $langs, $conf, $mysoc;
40
41
        $this->db = $db;
42
        $this->numero = 3200;
43
        // Key text used to identify module (for permissions, menus, etc...)
44
        $this->rights_class = 'blockedlog';
45
46
		// Family can be 'crm','financial','hr','projects','products','ecm','technic','other'
47
		// It is used to group modules in module setup page
48
        $this->family = "base";
49
        // Module label (no space allowed), used if translation string 'ModuleXXXName' not found (where XXX is value of numeric property 'numero' of module)
50
        $this->name = preg_replace('/^mod/i','',get_class($this));
51
        $this->description = "Enable a log on some business events into a non reversible log. This module may be mandatory for some countries.";
52
		// Possible values for version are: 'development', 'experimental', 'dolibarr' or version
53
        $this->version = 'dolibarr';
54
        // Key used in llx_const table to save module status enabled/disabled (where MYMODULE is value of property name of module in uppercase)
55
        $this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
56
        // Where to store the module in setup page (0=common,1=interface,2=others,3=very specific)
57
        $this->special = 2;
58
        // Name of image file used for this module.
59
        $this->picto='technic';
60
61
        // Data directories to create when module is enabled
62
        $this->dirs = array();
63
64
        // Config pages
65
        //-------------
66
        $this->config_page_url = array('blockedlog.php@blockedlog');
67
68
        // Dependancies
69
        //-------------
70
	    $this->hidden = false;	// A condition to disable module
71
	    $this->depends = array('always'=>'modFacture');	   // List of modules id that must be enabled if this module is enabled
1 ignored issue
show
Documentation Bug introduced by
It seems like array('always' => 'modFacture') of type array<string,string,{"always":"string"}> is incompatible with the declared type array<integer,string> of property $depends.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
72
        $this->requiredby = array();	                   // List of modules id to disable if this one is disabled
73
	    $this->conflictwith = array();	                   // List of modules id this module is in conflict with
74
        $this->langfiles = array('blockedlog');
75
76
        $this->warnings_activation = array();                     // Warning to show when we activate module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
77
        $this->warnings_activation_ext = array();                 // Warning to show when we activate an external module. array('always'='text') or array('FR'='textfr','ES'='textes'...)
78
        $this->warnings_unactivation = array('FR'=>'BlockedLogAreRequiredByYourCountryLegislation');
79
80
        // Currently, activation is not automatic because only companies (in France) making invoices to non business customers must
81
        // enable this module.
82
        /*if (! empty($conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY))
83
        {
84
        	$tmp=explode(',', $conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY);
85
        	$this->automatic_activation = array();
86
        	foreach($tmp as $key)
87
        	{
88
        		$this->automatic_activation[$key]='BlockedLogActivatedBecauseRequiredByYourCountryLegislation';
89
        	}
90
        }*/
91
        //var_dump($this->automatic_activation);
92
93
        $this->always_enabled = (!empty($conf->blockedlog->enabled)
94
        	&& !empty($conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY)
95
        	&& in_array($mysoc->country_code, explode(',', $conf->global->BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY))
96
        	&& $this->alreadyUsed(1));
97
98
        // Constants
99
        //-----------
100
        $this->const = array(
101
        	1=>array('BLOCKEDLOG_DISABLE_NOT_ALLOWED_FOR_COUNTRY', 'chaine', 'FR', 'This is list of country code where the module may be mandatory', 0, 'current', 0)
102
        );
103
104
        // New pages on tabs
105
        // -----------------
106
        $this->tabs = array();
107
108
        // Boxes
109
        //------
110
        $this->boxes = array();
111
112
        // Permissions
113
        $this->rights = array();		// Permission array used by this module
114
115
        $r=0;
116
        $this->rights[$r][0] = $this->numero + $r;	// Permission id (must not be already used)
117
        $this->rights[$r][1] = 'Read archived events and fingerprints';	// Permission label
118
        $this->rights[$r][3] = 0; 					// Permission by default for new user (0/1)
119
        $this->rights[$r][4] = 'read';				// In php code, permission will be checked by test if ($user->rights->mymodule->level1->level2)
120
        $this->rights[$r][5] = '';
121
122
        // Main menu entries
123
        //------------------
124
        $this->menu = array();
125
    }
126
127
128
    /**
129
     * Check if module was already used before unactivation linked to warnings_unactivation property
130
     *
131
     * @return	boolean		True if already used, otherwise False
132
     */
133
    function alreadyUsed() {
134
135
    	require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php';
136
    	$b=new BlockedLog($this->db);
137
    	return $b->alreadyUsed(1);
138
    }
139
140
141
    /**
142
     *      Function called when module is enabled.
143
     *      The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database.
144
     *      It also creates data directories.
145
     *
146
     *      @param      string	$options    Options when enabling module ('', 'noboxes')
147
     *      @return     int             	1 if OK, 0 if KO
148
     */
149
    function init($options='')
150
    {
151
    	global $conf, $user;
152
153
    	$sql = array();
154
155
    	// If already used, we add an entry to show we enable module
156
   		require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php';
157
158
   		$object=new stdClass;
159
    	$object->id = 1;
160
    	$object->element = 'module';
161
    	$object->ref = 'systemevent';
162
    	$object->entity = $conf->entity;
163
    	$object->date = dol_now();
164
165
    	$b=new BlockedLog($this->db);
166
    	$result = $b->setObjectData($object, 'MODULE_SET', 0);
167
    	if ($result < 0)
168
    	{
169
    		$this->error = $b->error;
170
    		$this->errors = $b->erros;
171
    		return 0;
172
    	}
173
174
    	$res = $b->create($user);
175
    	if ($res<=0) {
176
    		$this->error = $b->error;
177
    		$this->errors = $b->errors;
178
    		return $res;
179
    	}
180
181
    	return $this->_init($sql, $options);
182
    }
183
184
    /**
185
	 * Function called when module is disabled.
186
	 * The remove function removes tabs, constants, boxes, permissions and menus from Dolibarr database.
187
	 * Data directories are not deleted
188
	 *
189
	 * @param      string	$options    Options when enabling module ('', 'noboxes')
190
	 * @return     int             		1 if OK, 0 if KO
191
	 */
192
    function remove($options = '') {
193
194
    	global $conf, $user;
195
196
    	$sql = array();
197
198
		// If already used, we add an entry to show we enable module
199
		require_once DOL_DOCUMENT_ROOT.'/blockedlog/class/blockedlog.class.php';
200
201
		$object=new stdClass;
202
    	$object->id = 1;
203
    	$object->element = 'module';
204
    	$object->ref = 'systemevent';
205
    	$object->entity = $conf->entity;
206
    	$object->date = dol_now();
207
208
    	$b=new BlockedLog($this->db);
209
    	$result = $b->setObjectData($object, 'MODULE_RESET', 0);
210
    	if ($result < 0)
211
    	{
212
    		$this->error = $b->error;
213
    		$this->errors = $b->erros;
214
    		return 0;
215
    	}
216
217
    	if ($b->alreadyUsed(1))
218
    	{
219
    		$res = $b->create($user, '0000000000');		// If already used for something else than SET or UNSET, we log with error
220
    	}
221
    	else
222
    	{
223
    		$res = $b->create($user);
224
    	}
225
	    if ($res<=0) {
226
	    	$this->error = $b->error;
227
	    	$this->errors = $b->errors;
228
	    	return $res;
229
    	}
230
231
    	return $this->_remove($sql, $options);
232
    }
233
}
234