mise à jour NodCms v3.4.1 vers v3.4.1c
Bonjour les développeurs,
Date des travaux 2023/01/12
auteur gbobard@gmail.com
site web http://byoosdigital.com
Ce fichier se nomme nodcms_v3-4-1c_portage_ci4-3-0_et_php8-2.txt
source Fichier nodcms_v3-4-1_new surgithub
ou https://github.com/khodakhah/
nodcms ou https://github.com/khodakhah/nodcms.git
avec_php8-2_nodcms-v3.4.1c.zip et LINUX - Debian 11.6
OBJECTIFS
Pour porter nodcms_3-4-1 à CodeIgniter 4.3.0-0
et ensuite améliorer la TRADUCTION 'fr', la PAGINATION, l'AUTH, l'AFFICHAGE des
articles, la multi-langue.
UPDATE
SONT NÉCESSAIRES
nodcms version 3-4-1 le 16 octobre 2022 codeIgniter 4.3.0-0 gbobard@gmail.com
environnement
debian 11.6 - PHP8.2 - MariaDB 10.5
Le fichier .htaccess doit être installé dans /root/, puis remplacer /myPath par
votre répertoire de travail.
# rediriger vers la page publique
RewriteEngine On
RewriteCond %{REQUEST_URI} !^public$
RewriteCond %{REQUEST_URI} !^/.well-known/acme-challenge [NC]
RewriteRule "^(.*)$" "/myPath/public/" [R=301,L]
# Désactiver la navigation dans les répertoires
# Pour des raisons de sécurité, l'option all ne peut pas être remplacée.
Options +SymLinksIfOwnerMatch -Index
# empêcher la liste des dossiers
IndexIgnore *
Fin du code .htaccess
1)
******************************
CompatibilitéCI 4.1.4
ajouter dans nodcms-core/config/Execptions.php
/**
*
* CACHER LA TRACE DE DÉBOGAGE
*
* Toute donnée que vous souhaitez masquer de la trace de débogage.
* Afin de spécifier 2 niveaux, utilisez "/" pour les séparer.
* ex. ['server', 'setup/password', 'secret_token']
*
* @var array
*/
public $sensitiveDataInTrace = [] ;
2)
*******************************
/root/public/.htaccess
ligne 33 à modifier
dansdex.php?/$1
RewriteRule ^([\s\S]*)$ index.php?/$1 [L,NC,QSA]
//Activer le mode de réécriture d'apache2, réécriture d'URL.
$sudo a2enmod rewrite
IN /etc/apache2/apache2.conf //AllowOverride None change AllowOverride All
Options Indexes FollowSymLinks
AllowOverride All
Exiger que toutes les subventions
//puis redémarrer le serveur apache2
$sudo systemcl restart apache2
Editez ce fichier /root/public/env.development.php
renommezen
.env et modifiez
#--------------------------------------------------------------------
# Exemple de fichier de configuration de
l'environnement #
# Ce fichier peut être utilisé comme point de départ pour votre propre
# les fichiers .env personnalisés, et contient la plupart des
paramètres possibles # disponibles dans une installation par
défaut.
#
# Par défaut, tous les paramètres sont commentés. Si vous voulez
# pour remplacer le paramètre, vous devez le décommenter en
supprimant le '#' # au début de la ligne.
#--------------------------------------------------------------------
#--------------------------------------------------------------------
# ENVIRONMENT
#--------------------------------------------------------------------
CI_ENVIRONMENT=développement
ENVIRONMENT=développement
#--------------------------------------------------------------------
# APP
#--------------------------------------------------------------------
# URL de la racine du Web
app.baseURL=http://localhost/nodcms_v3-4-1_new/public/
CONFIGURATION DE DÉPART
********************************
si vous préférez travailler en mode http uniquement, désactivez le mode https
forcé dans : root/nodcms-core/config/App.php
|-------------------------------------------------------------------------
-
| URI PROTOCOL
|-------------------------------------------------------------------------
-
|
| Si c'est vrai, cela forcera chaque demande faite à cette application à
être
| effectuée via une connexion sécurisée (HTTPS). Si la demande entrante
n'est pas
| sécurisé, l'utilisateur sera redirigé vers une version sécurisée de la
page.
| et l'en-tête HTTP Strict Transport Security sera défini.
*/
public $forceGlobalSecureRequests = false ;
*******************************
INSTALLATION des dépendances
aller à la racine du projet ICI /myPath/nodcms_v3-4-1c_new, exemple :
/var/www/html/nodcms_v3-4-1c_new
//lancez ensuite l'application 'composer' sachant qu'elle doit être installée
sur le serveur sudo composer install
Les dépendances seront installées automatiquement mais il y a maintenant deux
STSTEM
/root/systemand
root/vendor/codeigniter4/framework/system répondez oui à la
question suivante
Continuer en tant que root/super utilisateur [oui] ? y
4)
********************************
activer le mode développement pour suivre les alarmes et autres
messages IN /root/public/index.php
// Valeurs acceptables : développement, test, production
define('ENVIRONMENT', 'development') ;
*********************************
activer les journaux de mode
DANS root/nodcms-core/Config/logger.php
public $threshold
=public $threshold = [3, 4, 5, 8,9] ;
CONFIGURATION FINALE
**********************************
DÉMARRAGE AUTHENTIFICATION de
l'utilisateur
5) modifyroot/nodcms-core/models/Users
.php champ mot de passe 255 car.
le modèle de données table users change la taille de 'password' à 255
caractères, de même dans le modèle Users fonction init()
et ajouter la fonction
d'authentification
du champ init()
{
$table_name = "users" ;
$primary_key = "user_id" ;
$fields = array(
'user_id'=> "int(10) unsigned NOT NULL AUTO_INCREMENT",
'username'=> "varchar(50) DEFAULT NULL", 'password'=>
"varchar(255) DEFAULT NULL",
'auth'=> "varchar(4) DEFAULT 'HASH'",
...
*************************************
remplacer l'authentification MD5 par les fonctions PHP passord_hash() et
password_verify()
6) modifier root/nodcms-core/Models/Users.php
public function loginMatch($username, $password) : ?tableau
{
// ancien code...return $this->getOne(null, ['username'=>$username,
'password'=>md5($password)]]) ;
$auth = $this->getOne(null, ['username'=>$username, 'auth'=>'MD5',
'password'=>md5($password)]) ;
if($auth){
$data['password'] = password_hash($password,
PASSWORD_DEFAULT) ;
$data['auth'] = 'HASH' ;
$id = $auth['user_id'] ;
parent::edit($id, $data) ;
return $auth ;
}
$data = $this->getOne(null, ['username'=>$username]) ;
$pass = $data['password'] ;
$authenticatePassword = password_verify($password, $pass) ;
if($authenticatePassword){
retourner $data ;
}
}
retourner array() ;
*************************************
IN /root/nodcms-users/Controllers/Users.php remplacer MD5 par
password_hash($data['password'], PASSWORD_DEFAULT)
ligne 119
fonction publique userRegistration()
{
...
"password"=>password_hash($data['password'], PASSWORD_DEFAULT),
et la ligne 297
public function setNewPassword($user_unique_key, $active_code)
{
...
'password'=>password_hash($data['password'], PASSWORD_DEFAULT),
*************************************
IN/root/nodcms-core/Controllers/GeneralMembers
.php modifier cette ligne 221
if(md5($post_data['password']) != $this->userdata["password"]){
...
modifie comme suit
fonction publique accountChangePassword()
{
...
if(!password_verify($post_data['password'], $this-
>userdata['password'])){
return $this->errorMessage("Votre mot de passe actuel est
incorrect.",
$self_url) ;
}
**************************************
IN /root/nodcms-core/Models/Users.php remplacer MD5 par
password_hash($data['password'], PASSWORD_DEFAULT)
ligne 97
fonction publique add(array $data) : int
{
...
$data['password'] = password_hash($data['password'], PASSWORD_DEFAULT) ;
}
return parent::add($data) ;
et 111
public function edit($id, $data)
{
if(key_exists('password', $data)) {
$data['password'] = password_hash($data['password'],
PASSWORD_DEFAULT) ;
}
....
FIN DE L'AUTHENTIFICATION
****************************************
6) modifier root/nodcms-core/Models/Model.phpforcer le type de retour (int)
pour cette ligne return count($result)!=0 ?(int) $result["sum($field)"]:0 ;
fonction getSum($field, $conditions = null) : int
{
$builder = $this->getBuilder() ;
$builder->select("sum($field)") ;
}
si ($conditions != null)
$this->searchDecode($conditions, $builder) ;
$query = $builder->get() ;
$result = $query->getRowArray() ;
return count($result)!=0 ?(int) $result["sum($field)"]:0 ;
**************************************
DÉBUT DE LA PAGINATION
IN /root/nodcms-layout/Views/common/pagination/
copier le fichier pagination_bootstrap.php tel que vu sur le site :
https://includebeer.com/fr/blog/creation-dune-application-web-de-base-avec-
codeigniter-4-partie-4
DANS root/nodcms-
core/Config/pager.php ajouter cette
ligne
public $templates = [
...
// Modèle personnalisé pour l'utilisation de Bootstrap
bootstrap'
=>
'\NodCMS\Layout\Views\common\pagination\',
] ;
IN IN root/nodcms-core/Controllers/GeneralAdmin.php
//pour lapagination
utilisateur fonction publique utilisateur(int $page = 1)
{
...
$config = array() ;
$config['base_url'] = ADMIN_URL. 'user' ;
$tab = array_filter(explode('/', $config['base_url'])) ;
unset($tab[0], $tab[2]) ;
$config['tab_uri_segment'] = implode('/', $tab) ;
$config['reuse_query_string'] = TRUE ;
$config['total_rows'] = Services::model()->users()->getCount() ;
$config['uri_segment'] = count($tab)+1 ;
$config['per_page'] = 10 ;
...
****************************************
IN root/nodcms-core/Controllers/App.php
Fonction protégée mkPagination(tableau $config)
{
$pagination = \Config\Services::pager() ;
$pagination->setPath($config['tab_uri_segment']) ;
$pagination->setSegment($config['uri_segment']) ;
if((int) ceil($config['total_rows'] / $config['per_page']) > 1){
$this->data['pagination'] = $pagination->makeLinks($pagination-
>getCurrentPage(), $config['per_page'], $config['total_rows'], 'bootstrap',
$config['uri_segment'])
;
}
else{
$this->data['pagination'] = "" ;
}
}
IN root/nodcms-blog/Controllers/blog.php //pour la pagination blog - posts
function posts($page = 1, $category_id = null)
{
//custom byoosdigital.com
$tab = array_filter(explode('/', $self_url)) ;
unset($tab[0], $tab[2]) ;
$config['tab_uri_segment'] = implode('/', $tab) ;
$config = array(
) ;
base_url'=>$self_url,
query_string_segment'=>'',
reuse_query_string'=>TRUE,
total_rows'=>Models::blogPost()->getCount($conditions),
'uri_segment'=>count($tab)+1,
'tab_uri_segment'=>implode('/', $tab),
par_page'=>10,
FIN DE LA PAGINATION
*******************************************
START TRADUCTION
DANS root/nodcms-core/Language/en/App.php
Ajouter le répertoire 'fr' dans root/nodcms-
core/Language/en/App.php traduire les phrases de l'anglais vers
le français.
charger la langue fr.zip
FIN DE LA TRADUCTION
********************************************
START LANGUAGE gestion du " code ".
Réparation du code de langue par défaut 'en' 'fr'
... DANS /root/nodcms-core/Filters/UrlLocale.php
/**
* @inheritDoc FIX byoosdigital.com
*/
public function before(RequestInterface $request, $arguments = null)
{
$config=config('app') ;
$localePrefix = $request->uri->getSegment(1) ;
// Aucun préfixe n'a été défini
if(empty($localePrefix)) {
$locale=$config->defaultLocale ;
if(empty($local)) {
// getDefaultRecord force 'en' ou la langue du navigateur
// autre code... "locale_accept_from_http($_SERVER['HTTP_ACCEPT_LANGUAGE'])".
$language = Models::languages()->getDefaultRecord() ;
}sélection{
$language = Models::languages()->getByCode($locale) ;
}
}
// Définir la langue du système à partir du code de langue de l'URL
(préfixe de langue) else{
$language = Models::languages()->getByCode($localePrefix) ;
}
if(empty($language)){
$language = Models::languages()->getOne(null) ;
}
if(empty($language)){
lancer une nouvelle \Exception("Language \"{$localePrefix}\" not
found in
base de données ") ;
}
if($language['code'] != $localePrefix) {
$request->uri->setSegment(1, $language['code']) ;
return redirect()->to($request->uri->getPath()) ;
}
}
// Définir la langue à partir de la
base de données Services::language()-
>set($language) ;
// Chargement des paramètres depuis la base de données
Services::settings()->load($language['language_id']) ;
renvoyer la fausse ;
exploiter la
configurationIN root/nodcms-core/Config/App.php
public
$defaultLocale = 'fr' ;
********************************************
puis dans la bibliothèque Language IN root/nodcms-core/libraries/language.php
méthode set afin de stocker la langue courante en session
fonction publique set(array $language)
{
$session = \Config\Services::session() ;
$newdata['language'] = $language ;
$session->set($newdata) ;
$this->DBlanguage = $language ;
parent::setLocale($language['code']) ;
}
*********************************************
puis dans la vue... DANS root/nodcms-layout/Views/nodcms-top-menu.php
remplacer par >langue['image']) ; ?>" />
*********************************************
IN
/root/nodcms-core/Controllers/General.php
$this->data['languages'] = Models::languages()->getAllActives() ;
déplacer la ligne ci-dessus dans /root/nodcms-core/Controllers/Frontend.php
parent : : construct() ;
....
gestion des langues sur le frontend
// ajout de ce code depuis nodcms 3.3c -- menu "Set Languages".
$this->data['lang_url'] = base_url().'/'.uri_string() ;
$this->data['languages'] = Models::languages()->getAllActives() ;
foreach ($this->data['languages'] as &$value) {
$url_array = explode("/",$this->data["lang_url"]) ;
$url_array[array_search($this->lang,$url_array)]=$value["code"] ;
$value["lang_url"] = implode("/",$url_array) ;
}
// fin du nouveau code
FIN DE LA LANGUE
*********************************************
Essayez d'afficher le lien Afficher le site du côté de l'administrateur.
// Ajout du menu supérieur
Services::topMenu()->addLink(
'view_site',
_l("View Site", $this), CONFIG_BASE_URL.
"{$this->language['code']}"
) ;
*********************************************
DANS /root/nodcms-
articles/Views/frontend/article.php
render($content_type) ; ?>
... ajouter l'écho ...
BUGG corrigé, OUF !!!...
***********************************************
LES SERVICES
DANS root/nodcms-services/Controllers/ServicesAdmin.php
if($this->settings['services_page']){
$config[] = array(
champ" => "service_uri",
label' => _l("Service URI", $this),
rules' => 'required|validURI|is_unique[services.service_uri'.
(isset($current_data) ?",service_id,$current_data[service_id]" :"").']',
'type' => "text",
'default'=>isset($current_data)?$current_data["service_uri"]:'',
'input_prefix'=>base_url($this->language['code']."/service-"),//
correctif, remplacer / par -
) ;
}
FIN SERVICES
*************************************************
PORTFOLIO
IN root/nodcms-portfolio/Config/Routes.php
Ajouter une route
$routes->get('{locale}/portfolio', "\NodCMS\Portfolio\Controllers\
Portfolio::Home") ;
définir un menu sur la route "portfolio".
Apparement ce module n'est pas complet ... à suivre ...
**************************************************
installation avec php8.1 correctif CI_415
DANS /root/vendor/codeigniter4/. .../system/Validation/FormatRules.php
public function valid_ip(?string $ip = null, ?string $which = '') : bool //
correctif $which = ''
{
if (empty($ip)) {
return false ;
}
switch (strtolower($which)) {
case 'ipv4' :
$which = FILTER_FLAG_IPV4 ;
break ;
cas 'ipv6' :
$which = FILTER_FLAG_IPV6 ;
break ;
}
par défaut :
$which = FILTER_DEFAULT;// correctif FILTER_DEFAULT
break ;
DANS /root/vendor/codeigniter4/. .../system/HTTP/ResponseTrait.php
fonction publique send()
{
// Si nous appliquons une politique de sécurité du contenu,
// nous devons lui donner une chance de construire ses en-
têtes. if ($this->CSPEnabled === true) {
$this->CSP->finalize($this) ;
} else {
$this->body = str_replace(['', '{csp-script-
nonce}'], '', $this->body ? ? '');//correctif
}
$this->sendHeaders()$this->sendCookies()$this->sendBody() ;
;
;
return $this ;
IN /root/nodcms-core/View/View.
phpstring $viewPath = "
public function construct($config = null, string $viewPath = '', $loader =
null, bool $debug = null, LoggerInterface $logger = null)
{
DANS /root/vendor/codeigniter4/framework/system/View/View.php
chaîne de
caractères
$viewPath = ''
public function construct($config = null, string $viewPath = '', $loader =
null, bool $debug = null, LoggerInterface $logger = null)
{
IN /var/www/html/cms/vendor/codeigniter4/framework/system/I18n/Time.php
string $time = ''
public function construct(?string $time = '', $timezone = null, ?string
$locale = null)
{
****************************************************
IN/root/nodcms-core/Models/Model.php
remplace $builder->group_start() ;
remplace $builder->group_end() ;
par
$builder->groupStart()
;
par
$builder->groupEnd() ;
le nom de ces méthodes ont changées entre CI3.1.11 et CI4.1.5
****************************************************
NOTA : le répertoire root/nodcms-core/wiew a été renommé par rapport à
l'install appstarter de CI4...( bon à savoir )....
portage de CI4.1.5 vers CI 4.2.x le 16/06/2022
télécharger la version 4.2.11 de codeigniter4
lancer la procédure composer installer à la racine de CI4.2
dans le projet nodCMS 3.2.2c copier les fichiers de CI4.2 composer.jsn et
composer.lock
lancer la procédure composer update à la racine du projet nodCMS 3.2.2c puis
copier de ci4.2.11le répertoire /system
verle projet nodCMS 3.2.2c
vendor/codeigniter4/framework/system
version PHP8.2 et CI 4.3.0-0
DANS /root/nodcms-core/Config/Cache.php
// BYOOSdigital.com
public array $file = [] ;
DANS /root/nodcms-core/view/view.php
//ajouté par BYOOSdigital.com La création d'une propriété dynamique est
dépréciée public $mainTemplate ;
public $frameTemplate ;
public $cleanFrame ;
public $page_sidebar ;
public $page_sidebar_closed ;
public $page_sidebar_items ;
public $page_sidebar_close ;
public $page_sidebar_menu_closed
; public $display_title ;
public $display_page_title ;
public $view ;
public $session ;
public $langArray
;
public $controllerType ;
public $admin_panel_items ;
public $captcha_session_name
; public $html_form_data ;
public $settings_default ;
bugg sur la connexion /root/nodcms-
users/controllers/Users.php IN /root/nodcms-
core/validation/Validation.php
FIX
, chaîne $originalField = null et $originalField
Fonction protégée processRules(string $field, string $label = null, $value,
$rules = null, ?array $data = null, string $originalField = null) : bool
{
// nettoyer le dernier message d'erreur
$this->latestErrorMessage = null ;
// exécuter la personnalisation uniquement si la méthode originale a
trouvé une erreur if(!parent::processRules($field, $label, $value,
$rules, $data,
$originalField))
La création de la propriété dynamique NodCMS\Core\Libraries\Ajaxlist::$view est
obsolète protected $view ;
fonction
{
...
construire()
DANS /root/nodcms-core/View/Layout.php
//ajouté par BYOOSdigital.com La création d'une propriété dynamique est
dépréciée public $avatar_file_key ;
****************************************************************
Comment faire fonctionner nodCms version 3.4.1 sur PHP8.2 et CI
4.3.0-0
Classe "Config\Renderer" non trouvée
//le nom de la classe Renderer a été changé en AbstractRenderer
IN root/APPPATH/Config/Kint.php at line 46
public $richSort = AbstractRenderer::SORT_FULL ;
//et
utiliser Kint\Renderer\AbstractRenderer ;
//vérifier :
classe Kint extends BaseConfig
DANS /root/vendor/autoload_psr4.php
Kint\' => array($vendorDir . '/kint-php/kint/src'),
...
Obsolète : La création de la propriété dynamique Config\App::$cookieSameSite
n'est plus d'actualité.
/var/www/html/1 codeigniter_dev/1 2023/cms/nodcms_v3-4-1/vendor/codeigniter4/
framework/system/HTTP/Response.php sur la ligne 168
//BYOOSdigital.com public
$cookieSameSite ;
Déclassé : Création d'une propriété dynamique Config\Exceptions: :
$sensitiveDataInTrace est déprécié en
/var/www/html/1 codeigniter_dev/1 2023/cms/nodcms_v3-4-1/vendor/codeigniter4/
framework/system/Debug/Exceptions.php on line 84
Déprécié : La création de la propriété dynamique
Config\Exceptions::$logDeprecations est obsolète en
/var/www/html/1 codeigniter_dev/1 2023/cms/nodcms_v3-4-1/vendor/codeigniter4/
framework/system/Debug/Exceptions.php on line 87
Obsolète : La création de la propriété dynamique
Config\Exceptions::$deprecationLogLevel est obsolète en
/var/www/html/1 codeigniter_dev/1 2023/cms/nodcms_v3-4-1/vendor/codeigniter4/
framework/system/Debug/Exceptions.php on line 88
IN /root/nodcms-core/Config/Exeptions/php
//Création de la propriété dynamique Config\Exceptions: :... est
obsolète public $sensitiveDataInTrace ;
public $logDeprecations ;
public $deprecationLogLevel ;
DANS /root/vendor/codeigniter4/framework/system/View/View.php ligne 143
$this->viewPath = rtrim((string)$viewPath, '\\/ ') .
SÉPARATEUR DE RÉPERTOIRE ;
DANS /root/nodcms-core/view/view.php
//ajouté par BYOOSdigital.com La création d'une propriété dynamique est
dépréciée public $mainTemplate ;
public $frameTemplate ;
public $cleanFrame ;
public $page_sidebar ;
public $page_sidebar_closed ;
public $page_sidebar_items ;
public $page_sidebar_close ;
public $page_sidebar_menu_closed
; public $display_title ;
public $display_page_title ;
public $view ;
public $session ;
public $langArray
;
public $controllerType ;
public $admin_panel_items ;
public $captcha_session_name
; public $html_form_data ;
public $settings_default ;
public $userdata ;
*************************************************
START CONSTANTS
DANS /root/nodcms-module/bootstrap.php remplacer le code du module par le nom du
module
define('BLOG_ADMIN_URL', base_url("admin-blog").'/') ;
define('GALLERY_ADMIN_URL',base_url("admin-gallery").'/') ;
define('PORTFOLIO_ADMIN_URL',base_url("admin-portfolio").'/') ;
define('SERVICES_ADMIN_URL',base_url("admin-services").'/') ;
les "defines" suivants sont relocalisés dans leur module, le fichier
bootstrap.php les "defines" suivants sont relocalisés dans leur module, le
fichier bootstrap.php
placer un test si non défini avant chaque ligne de "define".
exemple :
fonction publique backend()
{
si (!defined('BLOG_ADMIN_URL'))
define('BLOG_ADMIN_URL', base_url("admin-blog").'/') ;
DANS /root/nodcms-core/bootstrap.php
ajouté cette définition sous COREPATH
define('COREPATH', $paths->appDirectory . DIRECTORY_SEPARATOR) ;
// Chemin de la base de données NodCMS
define("DB_CONFIG_PATH", COREPATH. 'Config/Database.php') ;
// Chemin public NodCMS
define("SELF_PATH", FCPATH) ;
// Trouver le protocole demandé
$protocol_status = intval(isset($_SERVER['HTTPS'])) ;
define("SSL_PROTOCOL", $protocol_status) ;
define("URL_PROTOCOL", $protocol_status ? "https://" : "http://") ;
CONSTANTS DE FIN
*************************************************
START CKEDITOR
//error js load ckeditor, a slash "/" is missing between the public segment and
assets
Échec du chargement pour l'élément