The Higher Education and Research forge

Home My Page Projects Code Snippets Project Openings MonLabo
Summary Activity Tracker Tasks Docs SCM Files Dokuwiki Continious Integration Listes Sympa

SCM Repository

authorHerve Suaudeau <herve.suaudeau@parisdescartes.fr>
Tue, 28 Jul 2020 17:56:30 +0000 (19:56 +0200)
committerHerve Suaudeau <herve.suaudeau@parisdescartes.fr>
Tue, 28 Jul 2020 17:56:30 +0000 (19:56 +0200)
admin/MonLabo-doc.php
admin/MonLabo-edit-members.php
admin/includes/inc-lib-tables.php
changelog.txt
includes/MonLabo-access-data.php
includes/MonLabo-generate-HTML.php
includes/MonLabo-lib.php
includes/MonLabo-shortcodes-publications.php
includes/MonLabo-shortcodes.php
mon-laboratoire.php
readme.txt

index 468974c..349bd98 100644 (file)
@@ -28,7 +28,7 @@ function MonLabo_help_shortcode_members_list() {
                <ul>
                <li><em>team="x"</em> : N\'affiche que les membres de l\'équipe n°x (paramètre rempli automatiquement sur une page d\'équipe)</li>
                <li><em>unit="x"</em> : N\'affiche que les membres de l\'unité n°x</li>
-               <li><em>categories="x"</em> : N\'affiche que les membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
+               <li><em>categories="x"</em> : N\'affiche que les membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.MonLaboLib::secured_implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
                </ul>
                <p><strong>Options à items multiples</strong>:</p>
                <ul>
@@ -68,7 +68,7 @@ function MonLabo_help_shortcode_members_table() {
                <ul>
                <li><em>team="x"</em> : N\'affiche que les membres de l\'équipe n°x (paramètre rempli automatiquement sur une page d\'équipe)</li>
                <li><em>unit="x"</em> : N\'affiche que les membres de l\'unité n°x</li>
-               <li><em>categories="x"</em> : N\'affiche que les membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
+               <li><em>categories="x"</em> : N\'affiche que les membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.MonLaboLib::secured_implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
                </ul>
                <p><strong>Options à items multiples</strong>:</p>
                <ul>
@@ -104,7 +104,7 @@ function MonLabo_help_shortcode_members_chart() {
                <ul>
                <li><em>team="x"</em> : N\'affiche que les membres de l\'équipe n°x (paramètre rempli automatiquement sur une page d\'équipe)</li>
                <li><em>unit="x"</em> : N\'affiche que les membres de l\'unité n°x</li>
-               <li><em>categories="x"</em> : N\'affiche que les membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
+               <li><em>categories="x"</em> : N\'affiche que les membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.MonLaboLib::secured_implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
                </ul>
                <p><strong>Options à items multiples</strong>:</p>
                <ul>
@@ -140,7 +140,7 @@ function MonLabo_help_shortcode_alumni_list() {
                <ul>
                <li><em>team="x"</em> : N\'affiche que les anciens membres de l\'équipe n°x (paramètre rempli automatiquement sur une page d\'équipe)</li>
                <li><em>unit="x"</em> : N\'affiche que les anciens membres de l\'unité n°x</li>
-               <li><em>categories="x"</em> : N\'affiche que les anciens membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
+               <li><em>categories="x"</em> : N\'affiche que les anciens membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.MonLaboLib::secured_implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
                </ul>
                <p><strong>Options à items multiples</strong>:</p>
                <ul>
@@ -176,7 +176,7 @@ function MonLabo_help_shortcode_alumni_table() {
                <ul>
                <li><em>team="x"</em> : N\'affiche que les anciens membres de l\'équipe n°x (paramètre rempli automatiquement sur une page d\'équipe)</li>
                <li><em>unit="x"</em> : N\'affiche que les anciens membres de l\'unité n°x</li>
-               <li><em>categories="x"</em> : N\'affiche que les anciens membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
+               <li><em>categories="x"</em> : N\'affiche que les anciens membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.MonLaboLib::secured_implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
                </ul>
                <p><strong>Options à items multiples</strong>:</p>
                <ul>
@@ -211,7 +211,7 @@ function MonLabo_help_shortcode_alumni_chart() {
                <ul>
                <li><em>team="x"</em> : N\'affiche que les anciens membres de l\'équipe n°x (paramètre rempli automatiquement sur une page d\'équipe)</li>
                <li><em>unit="x"</em> : N\'affiche que les anciens membres de l\'unité n°x</li>
-               <li><em>categories="x"</em> : N\'affiche que les anciens membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
+               <li><em>categories="x"</em> : N\'affiche que les anciens membres de la catégorie x (laisser vide pour choisir toutes les catégories, sinon choisir parmi <em>'.MonLaboLib::secured_implode( ",", get_MonLabo_persons_categories() ).'</em>)</li>
                </ul>
                <p><strong>Options à items multiples</strong>:</p>
                <ul>
index 99ffc53..e455b48 100644 (file)
@@ -702,7 +702,10 @@ function  display_advanced_features_for_mmebers() {
                        }
                }
                if ( !empty( $members_without_wp_post_id ) ) {
-                       $retval .= '<input type="hidden" name="create_missing_pages_submit_ids" value="'.serialize( array_keys( $members_without_wp_post_id ) ).'">';
+                       $retval .=
+                               '<input type="hidden" name="create_missing_pages_submit_ids" value="'
+                               .serialize( MonLaboLib::secured_array_keys( $members_without_wp_post_id ) )
+                               .'">';
                }
                $retval .= generate_submit_button( __( 'Créer les pages manquantes', 'mon-laboratoire' ).' ( '.count( $members_without_wp_post_id ).' )', 'submit_creer_pages_manquantes', '' );
                $retval .= '<p>'.__( 'Les personnels suivants n\'ont pas encore de page WordPress', 'mon-laboratoire' ).' : ';
index 507d59a..013123f 100644 (file)
@@ -79,13 +79,13 @@ function generate_table_admin_for_persons( $status ) {
                                foreach ( $teams_id as $id ) {
                                        $teams_links[] = "<a href='#' title='".$teams_information[$id]->name_fr."'>$id</a>";
                                }
-                               $person_array['equipes'] = ( ( is_array( $teams_links ) ) ? implode( ', ', $teams_links ): $teams_links );
+                               $person_array['equipes'] = MonLaboLib::secured_implode( ', ', $teams_links );
                        } else {
                                $person_array['equipes'] = '';
                        }
                        $mentors_name = $MonLabo_access_data->get_mentors_name_for_a_person( $person_information->id );
                        if ( !empty( $mentors_name ) ) {
-                               $person_array['mentors'] = '<small>'.( ( is_array( $mentors_name ) ) ? implode( ', ', $mentors_name ) : $mentors_name ).'</small>';
+                               $person_array['mentors'] = '<small>' . MonLaboLib::secured_implode( ', ', $mentors_name ) . '</small>';
                        } else {
                                $person_array['mentors'] = '';
                        }
@@ -142,7 +142,7 @@ function generate_table_admin_for_teams() {
                                foreach ( explode( ', ', $team_information->wp_post_id ) as $id ) {
                                        $teams_links[] = '<a href="'.get_edit_post_link( $id ).'&action=edit">'.$id.'</a>';
                                }
-                               $team_array['wp_post_id'] = ( ( is_array( $teams_links ) ) ? implode( ', ', $teams_links ) : $teams_links );
+                               $team_array['wp_post_id'] = MonLaboLib::secured_implode( ', ', $teams_links );
                        } else {
                                $team_array['wp_post_id'] = '';
                        }
@@ -156,7 +156,7 @@ function generate_table_admin_for_teams() {
                        }
                        $team_array['color'] = $team_information->color;
                        $team_names = $MonLabo_access_data->get_leaders_name_for_a_team( $team_information->id );
-                       $team_array['leaders'] = ( ( is_array( $team_names ) ) ? implode( ', ', $team_names ) : $team_names );
+                       $team_array['leaders'] = MonLaboLib::secured_implode( ', ', $team_names );
 
                        if ( MAIN_STRUCT_NO_UNIT === $team_information->id_unit ) {
                                $team_array['id_unit'] = __( 'Structure principale', 'mon-laboratoire' );
@@ -171,7 +171,7 @@ function generate_table_admin_for_teams() {
                                        foreach ( $thematics_information as $thematic ) {
                                                $thematics_links[] = "<a href='#' title='".$thematic->name_fr."'>$thematic->id</a>";
                                        }
-                                       $team_array['thematics'] = ( ( is_array( $thematics_links ) ) ? implode( ', ', $thematics_links ) : $thematics_links );
+                                       $team_array['thematics'] = MonLaboLib::secured_implode( ', ', $thematics_links );
                                } else {
                                        $team_array['thematics'] = '';
                                }
@@ -219,7 +219,7 @@ function generate_table_admin_for_thematics() {
                                foreach ( $teams_information as $team ) {
                                        $teams_links[] = "<a href='#' title='".$team->name_fr."'>$team->id</a>";
                                }
-                               $thematic_array['thematics'] = ( ( is_array( $teams_links ) ) ? implode( ', ', $teams_links ) : $teams_links );
+                               $thematic_array['thematics'] = MonLaboLib::secured_implode( ', ', $teams_links );
                        } else {
                                $thematic_array['thematics'] = '';
                        }
@@ -265,7 +265,11 @@ function generate_table_admin_for_units() {
                                                          __( 'Contact alt.', 'mon-laboratoire' ),
                                                          __( 'Directeurs', 'mon-laboratoire' ) );
        $list_array = array();
-       $number_of_units = count( $units_information );
+       if( !empty( $units_information ) ) {
+               $number_of_units = count( $units_information );
+       } else {
+               $number_of_units = 0;
+       }
        $a_afficher = '';
        if ( '0' != $number_of_units ) {
                foreach ( $units_information as $unit_information ) {
@@ -292,7 +296,7 @@ function generate_table_admin_for_units() {
                        $unit_array['contact_alt'] = $unit_information->contact_alt;
                        $directors = $MonLabo_access_data->get_directors_name_for_an_unit( $unit_information->id );
                        if ( !empty( $directors ) ) {
-                               $unit_array['directors'] = ( ( is_array( $directors ) ) ? implode( ', ', $directors ): $directors );
+                               $unit_array['directors'] = MonLaboLib::secured_implode( ', ', $directors );
                        } else {
                                $unit_array['directors'] = '';
                        }
index 13c29d7..20142fb 100644 (file)
@@ -79,6 +79,11 @@ Remember, check_admin_referer alone is not bulletproof security. Do not rely on
 
 
 == Changelog ==
+
+= 3.0.5 =
+(GIT tag v3.0.5)
+* BUG : PHP error when activate multiple units mode and define no unit
+
 = 3.0.4 =
 (GIT tag v3.0.4)
 * BUG : Bad PHP warning of function error_MonLabo_perso_page_parent()
index 698eac6..f5a4ebf 100644 (file)
@@ -432,11 +432,7 @@ class MonLabo_access_data {
         */
        private function get_table_variables_from_id( $table_name, $table_id, $table_columns ) {
                if ( $this->trigger_error_if_non_numeric( $table_id ) ) { return NULL; }
-               if ( is_array( $table_columns ) ) {
-                       $columns = implode( ', ', $table_columns );
-               } else {
-                       $columns = $table_columns;
-               }
+               $columns = MonLaboLib::secured_implode( ', ', $table_columns );
                $sql = $this->wpdb->prepare( 'SELECT '.$columns.' FROM '.$table_name.' WHERE id = "%d"', $table_id );
                $retval = $this->wpdb->get_row( $sql );
                return ( empty( $retval ) ? NULL : $retval );
@@ -465,7 +461,7 @@ class MonLabo_access_data {
                }
                $order = '';
                if ( isset( $order_by ) ) {
-                       $order = ' ORDER BY '.implode( ' ASC, ', $order_by ).' ASC';
+                       $order = ' ORDER BY '.MonLaboLib::secured_implode( ' ASC, ', $order_by ).' ASC';
                }
                $union_condition = '';
                if ( isset( $add_union_condition ) ) {
@@ -1106,7 +1102,11 @@ class MonLabo_access_data {
         */
        public function get_teams_id_for_an_unit( $id_unit ) {
                if ( $this->trigger_error_if_non_numeric( $id_unit ) ) { return NULL; }
-               $sql = $this->wpdb->prepare( "SELECT id FROM " . $this->wpdb->prefix . "MonLabo_teams  AS u WHERE u.id_unit = \"%d\"", $id_unit );
+               if( MAIN_STRUCT_NO_UNIT == $id_unit ) {
+                       $sql = $this->wpdb->prepare( "SELECT id FROM " . $this->wpdb->prefix . "MonLabo_teams  AS u WHERE u.id_unit = \"%d\" OR u.id_unit IS NULL", MAIN_STRUCT_NO_UNIT );
+               } else {
+                       $sql = $this->wpdb->prepare( "SELECT id FROM " . $this->wpdb->prefix . "MonLabo_teams  AS u WHERE u.id_unit = \"%d\"", $id_unit );
+               }
                $teams = $this->wpdb->get_results( $sql, OBJECT_K );
                $retval = $this->tidy_object_table_and_leave_only_one_column( $teams, 'id' );
                return ( empty( $retval ) ? NULL : $retval );
@@ -2200,7 +2200,7 @@ class MonLabo_access_data {
                //Delete relations between teams and this unit
                if ( isset( $teams_id ) ) {
                        foreach ( $teams_id as $team_id ) {
-                               $this->update_team( $team_id, array( 'id_unit' => NULL ) );
+                               $this->update_team( $team_id, array( 'id_unit' => MAIN_STRUCT_NO_UNIT ) );
                        }
                }
        }
index 77e32e7..4fbd2b0 100644 (file)
@@ -310,7 +310,7 @@ class MonLabo_generate_HTML {
                                $a_afficher .= '</td>';
                        }
                        $a_afficher .= '</tr>';
-                       $categories = array_keys( $persons_information_by_category_and_team );
+                       $categories = MonLaboLib::secured_array_keys( $persons_information_by_category_and_team );
                        foreach ( $categories as $category ) {
                                $a_afficher .= '<tr>';
                                foreach ( $teams_information as $team_id=>$team_information ) {
index a491e34..e44054d 100644 (file)
@@ -111,10 +111,30 @@ class MonLaboLib {
        /* Renvoie l'URL de la page courante sans éventuelle chaine de requeête supplémentaire ( ?foo = bar&toto )
        */
        public static function get_current_url_without_queries() {
-       $protocol = ( ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] != 'off' ) || $_SERVER['SERVER_PORT'] == 443 ) ? 'https://' : 'http://';
+               $protocol = ( ( !empty( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] != 'off' ) || $_SERVER['SERVER_PORT'] == 443 ) ? 'https://' : 'http://';
                return $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        }
 
+       /* Ne plante pas array_keys si l'argument est vide
+       */
+       public static function secured_array_keys( $array ) {
+               if ( !empty( $array ) ) {
+                       return array_keys( $array );
+               } else {
+                       return array();
+               }
+       }
+
+       /* Ne plante pas implode si l'argument est vide
+       */
+       public static function secured_implode( $separation, $array ) {
+               if ( is_array( $array ) ) {
+                       return implode( $separation, $array );
+               } else {
+                       return $array;
+               }
+       }
+
 }
 
 
index 669b891..a0457d4 100644 (file)
@@ -523,16 +523,21 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                // 3 - Si persons, teams ou units = '*'
                //-------------------------------------
                if ( '*' === $persons ) {
-                       $all_persons_id = array_keys( $MonLabo_access_data->get_persons_information() );
-                       if ( !empty( $all_persons_id ) ) { $persons = implode( '|', $all_persons_id ); }
+                       $persons_information = $MonLabo_access_data->get_persons_information();
+                       $all_persons_id = MonLaboLib::secured_array_keys( $MonLabo_access_data->get_persons_information() );
+                       if ( !empty( $all_persons_id ) ) {
+                               $persons = MonLaboLib::secured_implode( '|', $all_persons_id );
+                       }
                }
                if ( '*' === $teams ) {
-                       $all_teams_id = array_keys( $MonLabo_access_data->get_teams_information() );
-                       if ( !empty( $all_teams_id ) ) { $teams = implode( '|', $all_teams_id ); }
+                       $teams_information = $MonLabo_access_data->get_teams_information();
+                       $all_teams_id = MonLaboLib::secured_array_keys( $teams_information );
+                       if ( !empty( $all_teams_id ) ) { $teams = MonLaboLib::secured_implode( '|', $all_teams_id ); }
                }
                if ( '*' === $units ) {
-                       $all_units_id = array_keys( $MonLabo_access_data->get_units_information() );
-                       if ( !empty( $all_units_id ) ) { $units = implode( '|', $all_units_id ); }
+                       $units_information = $MonLabo_access_data->get_units_information();
+                       $all_units_id = MonLaboLib::secured_array_keys( $MonLabo_access_data->get_units_information() );
+                       if ( !empty( $all_units_id ) ) { $units = MonLaboLib::secured_implode( '|', $all_units_id ); }
                }
 
                //----------------------------------
@@ -601,9 +606,10 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                        }
                        if ( '__empty__' != $descartes_equipe ) {
                                if ( '*' === $descartes_equipe ) {  //Get all the descartes_publi_team_id list of teams configured in MonLabo
-                                       $all_teams_id = array_keys( $MonLabo_access_data->get_teams_information() );
+                                       $teams_information = $MonLabo_access_data->get_teams_information();
+                                       $all_teams_id = MonLaboLib::secured_array_keys( $teams_information );
                                        $descartes_team_ids   = self::_MonLaboTeamsIds_into_publicationServerTeamsIds( $all_teams_id, $base_to_use );
-                                       if ( !empty( $descartes_team_ids ) ) { $descartes_equipe = implode( '|', $descartes_team_ids ); }
+                                       if ( !empty( $descartes_team_ids ) ) { $descartes_equipe = MonLaboLib::secured_implode( '|', $descartes_team_ids ); }
                                }
                                $POST_query['equipe'] = $descartes_equipe;
                                $expert_mode = true;
@@ -635,10 +641,10 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                                        $descartes_team_ids   = self::_MonLaboTeamsIds_into_publicationServerTeamsIds( $teams_id, $base_to_use );
                                        $descartes_unit_ids   = self::_MonLaboUnitsIds_into_publicationServerUnitsIds( $units_id, $base_to_use );
                                        if ( !empty( $descartes_team_ids ) ) {
-                                               $POST_query['equipe'] = implode( '|', $descartes_team_ids );
+                                               $POST_query['equipe'] = MonLaboLib::secured_implode( '|', $descartes_team_ids );
                                        }
                                        if ( !empty( $descartes_unit_ids ) ) {
-                                               $POST_query['unite'] = implode( '|', $descartes_unit_ids );
+                                               $POST_query['unite'] = MonLaboLib::secured_implode( '|', $descartes_unit_ids );
                                        }
                                        if ( ( !empty( $descartes_team_ids ) ) or ( !empty( $descartes_unit_ids ) ) ) {
                                                if ( strlen( $years ) === 0 ) {
@@ -651,19 +657,20 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                                } elseif ( 'user_page' === $page_mode ) {
                                        $descartes_ids = self::_MonLaboPersonsIds_into_publicationServerAuthorsIds( $persons_id, $base_to_use );
                                        if ( !empty( $descartes_ids ) ) {
-                                               $POST_query['auteurid'] = implode( '|', $descartes_ids );
+                                               $POST_query['auteurid'] = MonLaboLib::secured_implode( '|', $descartes_ids );
                                        } else {
                                                return array( '', '' ); /*Vide*/
                                        }
                                } elseif ( 'main_structure_page' === $page_mode ) {
                                        //On retourne les publications de toutes les personnes
                                        $persons = '';
-                                       $all_persons_id = array_keys( $MonLabo_access_data->get_persons_information() );
-                                       if ( !empty( $all_persons_id ) ) { $persons = implode( '|', $all_persons_id ); }
+                                       $persons_information = $MonLabo_access_data->get_persons_information();
+                                       $all_persons_id = MonLaboLib::secured_array_keys( $persons_information );
+                                       if ( !empty( $all_persons_id ) ) { $persons = MonLaboLib::secured_implode( '|', $all_persons_id ); }
                                        $persons_id     = MonLaboLib::prepare_multiple_values_variable_into_array( $persons );
                                        $descartes_ids = self::_MonLaboPersonsIds_into_publicationServerAuthorsIds( $persons_id, $base_to_use );
                                        if ( !empty( $descartes_ids ) ) {
-                                               $POST_query['auteurid'] = implode( '|', $descartes_ids );
+                                               $POST_query['auteurid'] = MonLaboLib::secured_implode( '|', $descartes_ids );
                                        } else {
                                                return array( '', '' ); /*Vide*/
                                        }
@@ -714,7 +721,7 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                                                if ( ( !empty( $units_id ) ) and ( empty( $unitHAL_ids ) ) ) {
                                                        //Retourner les publications des membres de l'unité
                                                        foreach ( $units_id as $unit_id ) {
-                                                               $idHal = array_merge( $idHal, self::_MonLaboPersonsIds_into_publicationServerAuthorsIds( array_keys( $MonLabo_access_data->get_persons_information_for_an_unit( $unit_id ) ), $base_to_use ) );
+                                                               $idHal = array_merge( $idHal, self::_MonLaboPersonsIds_into_publicationServerAuthorsIds( MonLaboLib::secured_array_keys( $MonLabo_access_data->get_persons_information_for_an_unit( $unit_id ) ), $base_to_use ) );
                                                        }
                                                }
                                        } elseif ( 'main_structure_page' === $page_mode ) {
@@ -737,9 +744,9 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                        }
                        //Les paramètres idHal et struct sont incompatibles.
                        if ( !empty( $idHal ) ) {
-                               $POST_query['idHal'] = implode( ';', $idHal );
+                               $POST_query['idHal'] = MonLaboLib::secured_implode( ';', $idHal );
                        } elseif ( !empty( $HAL_ids ) ) {
-                               $POST_query['struct'] = implode( ';', $HAL_ids );
+                               $POST_query['struct'] = MonLaboLib::secured_implode( ';', $HAL_ids );
                        } else {
                                return array( '', '' ); /*Vide*/
                        }
@@ -895,7 +902,7 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                $a_afficher = '<div id="res_script">';
                if ( !empty( $data_publi ) ) {
                        foreach ( $data_publi as $type => $datum_type ) {
-                               if ( in_array( $type, array_keys( $type_name ) ) ) { //Vérifier qu'on est capable de traiter le $type dans le switch
+                               if ( in_array( $type, MonLaboLib::secured_array_keys( $type_name ) ) ) { //Vérifier qu'on est capable de traiter le $type dans le switch
                                        $a_afficher .= "<p class='Rubrique'>".$type_name[$type][$lang].'</p>';
                                        foreach ( $datum_type as $date => $datum_date ) {
                                                $a_afficher .= "<p class='SousRubrique'>".$date.'</p>';
@@ -1188,7 +1195,7 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                                        foreach ( $composed_first_names as $composed_first_name ) {
                                                $abreviated_composed_first_names[] = strtoupper( substr( trim( $composed_first_name ), 0, 1 ) ).'.';
                                        }
-                                       $abreviated_first_names[] = implode( '-', $abreviated_composed_first_names );
+                                       $abreviated_first_names[] = MonLaboLib::secured_implode( '-', $abreviated_composed_first_names );
                                } else {
                                        $abreviated_first_names[] = strtoupper( substr( trim( $composed_first_names[0] ), 0, 1 ) ).'.';
                                }
@@ -1202,17 +1209,17 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                                        foreach ( $composed_last_names as $composed_last_name ) {
                                                $cased_composed_last_names[] = ucwords( strtolower( trim( $composed_last_name ) ) );
                                        }
-                                       $cased_last_names[] = implode( '-', $cased_composed_last_names );
+                                       $cased_last_names[] = MonLaboLib::secured_implode( '-', $cased_composed_last_names );
                                } else {
                                        $cased_last_names[] = ucwords( strtolower( trim( $composed_last_names[0] ) ) );
                                }
                        }
-                       $first_name = implode( ' ', $abreviated_first_names );
-                       $last_name = implode( ' ', $cased_last_names );
+                       $first_name = MonLaboLib::secured_implode( ' ', $abreviated_first_names );
+                       $last_name = MonLaboLib::secured_implode( ' ', $cased_last_names );
                        $authors_names[] = $first_name.' '.$last_name;
                }
                if ( count( $authors ) > 1 ) {
-                       $authors_name = implode( ', ', array_splice( $authors_names, 0, count( $authors_names )-1 ) );
+                       $authors_name = MonLaboLib::secured_implode( ', ', array_splice( $authors_names, 0, count( $authors_names )-1 ) );
                        if ( !empty( $authors_names ) ) {
                                $authors_name .= ', and '.$authors_names[0];
                        }
@@ -1243,17 +1250,17 @@ class MonLabo_shortcodes_publications extends MonLabo_shortcodes_mother_class {
                                        foreach ( $composed_first_names as $composed_first_name ) {
                                                $abreviated_composed_first_names[] = strtoupper( substr( trim( $composed_first_name ), 0, 1 ) ).'.';
                                        }
-                                       $abreviated_first_names[] = implode( '-', $abreviated_composed_first_names );
+                                       $abreviated_first_names[] = MonLaboLib::secured_implode( '-', $abreviated_composed_first_names );
                                } else {
                                        $abreviated_first_names[] = strtoupper( substr( trim( $composed_first_names[0] ), 0, 1 ) ).'.';
                                }
                        }
-                       $first_name = implode( '', $abreviated_first_names );
+                       $first_name = MonLaboLib::secured_implode( '', $abreviated_first_names );
                        $last_name = ucwords( strtolower( trim( $names[0] ) ) );
                        $authors_names[] = $last_name.', '.$first_name;
                }
                if ( count( $authors ) > 1 ) {
-                       $authors_name = implode(', ', array_splice( $authors_names, 0, count( $authors_names )-1 ) );
+                       $authors_name = MonLaboLib::secured_implode(', ', array_splice( $authors_names, 0, count( $authors_names )-1 ) );
                        if ( !empty( $authors_names ) ) {
                                $authors_name .= ', & '.$authors_names[0];
                        }
index eb9998c..71b064a 100644 (file)
@@ -113,7 +113,6 @@ class MonLabo_shortcodes extends MonLabo_shortcodes_mother_class {
                // filtrer en fonction des catégories
 
                $access_data = New MonLabo_access_data();
-
                //---------------------------------------
                // 1 - Préparation des variables d'entrée
                //---------------------------------------
@@ -126,21 +125,28 @@ class MonLabo_shortcodes extends MonLabo_shortcodes_mother_class {
                //-------------------------------------------
                $direction_title_mode = 'directors';
                $MonLabo_persons = New MonLabo_persons( $access_data->get_persons_information( $status ) );
+
                //  Si teams non vide
                if ( !empty( $teams ) ) {
                        // Préparation de la liste de toutes les équipes existantes
-                       $existing_teams_id = array_keys( $access_data->get_teams_information() );
-                       // S'il n'y a qu'une seule équipe, chercher les chefs d'équipe plutot que la direction de la structure.
-                       if ( count( $teams ) === 1 ){ $direction_title_mode = 'team_leaders';  }
-                       // Par défaut utiliser toutes les équipes.
-                       if ( empty( $teams ) ) { $teams = $existing_teams_id;  }
-                       // On enlève les équipes fantaisistes
-                       $teams = array_intersect( $teams, $existing_teams_id );
-                       // On filtre
-                       $MonLabo_persons->filter_with_teams( $teams, $status );
+                       $teams_informations = $access_data->get_teams_information();
+                       if ( ( is_array( $teams_informations ) ) and ( !empty($teams_informations ) ) ) {
+                               //On ne filtre que si des équipes sont définies
+                               $existing_teams_id = MonLaboLib::secured_array_keys( $teams_informations );
+                               // S'il n'y a qu'une seule équipe, chercher les chefs d'équipe plutot que la direction de la structure.
+                               if ( count( $teams ) === 1 ){ $direction_title_mode = 'team_leaders';  }
+                               // Par défaut utiliser toutes les équipes.
+                               if ( empty( $teams ) ) { $teams = $existing_teams_id;  }
+                               // On enlève les équipes fantaisistes
+                               $teams = array_intersect( $teams, $existing_teams_id );
+                               // On filtre
+                               $MonLabo_persons->filter_with_teams( $teams, $status );
+                       }
                } else {
                        // Préparation de la liste de toutes les unités existantes
-                       $existing_units_id = array( MAIN_STRUCT_NO_UNIT=>MAIN_STRUCT_NO_UNIT ) + array_keys( $access_data->get_units_name() );
+                       $units_name = $access_data->get_units_name();
+                       $existing_units_id = array( MAIN_STRUCT_NO_UNIT=>MAIN_STRUCT_NO_UNIT ) + MonLaboLib::secured_array_keys( $access_data->get_units_name() );
+
                        // si units non vide
                        if ( !empty( $units ) ) {
                                // Si l'on demande que la structure principale
@@ -155,6 +161,7 @@ class MonLabo_shortcodes extends MonLabo_shortcodes_mother_class {
                                // Demander toutes les unités
                                $units = $existing_units_id;
                        }
+
                        // On filtre
                        $MonLabo_persons->filter_with_units( $units, $status );
                }
@@ -533,7 +540,8 @@ class MonLabo_shortcodes extends MonLabo_shortcodes_mother_class {
                        // On recherche une éventuelle équipe attachée à la page courante
                        $teams = self::_team_of_curent_page();
                        if ( '' === $teams ) {
-                               $units = MAIN_STRUCT_NO_UNIT.','.implode( ',', array_keys( $access_data->get_units_name() ) );
+                               $units_name = $access_data->get_units_name();
+                               $units = MAIN_STRUCT_NO_UNIT.','.MonLaboLib::secured_implode( ',', MonLaboLib::secured_array_keys( $access_data->get_units_name() ) );
                        }
                }
 
index aa53829..0c770fa 100644 (file)
@@ -8,7 +8,7 @@ defined( 'ABSPATH' ) or die( 'No direct script access allowed' );
 * Plugin Name:       Mon Laboratoire
 * Plugin URI:        http://www.monlabo.org
 * Description:       Simplify the management of a research unit's website
-* Version:           3.0.4
+* Version:           3.0.5
 * Requires at least: 4.8
 * Requires PHP:      5.4
 * License:           GPLv2 or later
@@ -21,7 +21,7 @@ defined( 'ABSPATH' ) or die( 'No direct script access allowed' );
 /* Delphine RIDER was co-author before versions v2.0 */
 
 //Currently plugin version, use SemVer - https://semver.org
-function get_version() { return '3.0.4'; }
+function get_version() { return '3.0.5'; }
 
 ///////////////////////////////////////////////////////////////////////////////////////////
 //                                        PLUGIN CLASS DEFINITIONS
index 849d046..5f2bfe4 100644 (file)
@@ -40,6 +40,9 @@ Answer: By default you have to use HAL which is opened to all french-speaking sc
 
 You can consult complete changelogs in file changelog.txt
 
+= 3.0.5 =
+* BUG : PHP error when activate multiple units mode and define no unit
+
 = 3.0.4 =
 * BUG : Bad PHP warning of function error_MonLabo_perso_page_parent()