From a3869762421fc93078d94a21ec18cacd08fd519e Mon Sep 17 00:00:00 2001 From: Samson Alajede Date: Thu, 9 Aug 2018 12:39:11 +0100 Subject: [PATCH 1/2] PCHR-4104: Js error on ssp - dashboard and tasks --- civicrm_resources/civicrm_resources.module | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/civicrm_resources/civicrm_resources.module b/civicrm_resources/civicrm_resources.module index 44e990bc..5cb81153 100644 --- a/civicrm_resources/civicrm_resources.module +++ b/civicrm_resources/civicrm_resources.module @@ -23,24 +23,30 @@ function civicrm_resources_add_resources($extention_path, $req_files = []) { $js_list = []; $css_list = []; + $resourceFilenameUri = array_map(function ($file) { + return ['filename' => $file->filename, 'uri' => $file->uri]; + }, $files); + $resourceFilenameUriValues = array_values($resourceFilenameUri); + $fileNames = array_column($resourceFilenameUri, 'filename'); + foreach ($req_files as $req_file) { + $index = array_search($req_file, $fileNames); + if ($index && preg_match('/\.js$/', $req_file)) { + $js_list[] = $resourceFilenameUriValues[$index]['uri']; + } + elseif ($index && preg_match('/\.css$/', $req_file)) { + $css_list[] = $resourceFilenameUriValues[$index]['uri']; + } + } + foreach ($files as $key => $file) { if (!empty($req_files)) { if (in_array('*.js', $req_files) && preg_match('/\.js$/', $file->filename)) { $js_list[] = $file->uri; } - else { - if (in_array($file->filename, $req_files) && preg_match('/\.js$/', $file->filename)) { - $js_list[] = $file->uri; - } - } + if (in_array('*.css', $req_files) && preg_match('/\.css$/', $file->filename)) { $css_list[] = $file->uri; } - else { - if (in_array($file->filename, $req_files) && preg_match('/\.css$/', $file->filename)) { - $css_list[] = $file->uri; - } - } } else { if (preg_match('/\.css$/', $file->filename)) { From 6b91b3ec047e57048263bfd66ed843a80926f454 Mon Sep 17 00:00:00 2001 From: Samson Alajede Date: Fri, 10 Aug 2018 15:19:06 +0100 Subject: [PATCH 2/2] PCHR-4104: PR Feedback - Code refactoring --- civicrm_resources/civicrm_resources.module | 107 ++++++++++++++------- 1 file changed, 74 insertions(+), 33 deletions(-) diff --git a/civicrm_resources/civicrm_resources.module b/civicrm_resources/civicrm_resources.module index 5cb81153..6f764da3 100644 --- a/civicrm_resources/civicrm_resources.module +++ b/civicrm_resources/civicrm_resources.module @@ -19,44 +19,39 @@ function civicrm_resources_add_resources($extention_path, $req_files = []) { global $base_url; $files = civicrm_resources_file_scan_directory($extention_path, '/\.(css|js)$/i'); - $js_list = []; $css_list = []; + list($all_js, $all_css) = _civicrm_resources_filter_files($files); - $resourceFilenameUri = array_map(function ($file) { - return ['filename' => $file->filename, 'uri' => $file->uri]; - }, $files); - $resourceFilenameUriValues = array_values($resourceFilenameUri); - $fileNames = array_column($resourceFilenameUri, 'filename'); - foreach ($req_files as $req_file) { - $index = array_search($req_file, $fileNames); - if ($index && preg_match('/\.js$/', $req_file)) { - $js_list[] = $resourceFilenameUriValues[$index]['uri']; - } - elseif ($index && preg_match('/\.css$/', $req_file)) { - $css_list[] = $resourceFilenameUriValues[$index]['uri']; - } + if (empty($req_files)) { + $req_files = ['*.css', '*.js']; } - foreach ($files as $key => $file) { - if (!empty($req_files)) { - if (in_array('*.js', $req_files) && preg_match('/\.js$/', $file->filename)) { - $js_list[] = $file->uri; - } + if (in_array('*.js', $req_files)) { + $js_list = _civicrm_resources_get_uris($all_js); + } - if (in_array('*.css', $req_files) && preg_match('/\.css$/', $file->filename)) { - $css_list[] = $file->uri; - } - } - else { - if (preg_match('/\.css$/', $file->filename)) { - $css_list[] = $file->uri; + if (in_array('*.css', $req_files)) { + $css_list = _civicrm_resources_get_uris($all_css); + } + + if (!in_array('*.css', $req_files) || !in_array('*.js', $req_files)) { + $file_names = array_column($files, 'filename'); + + foreach ($req_files as $req_file) { + $index = array_search($req_file, $file_names); + if (($index !== FALSE) && preg_match('/\.js$/', $req_file)) { + $js_list[] = _civicrm_resources_get_file_uri($index, $all_js); + continue; } - elseif (preg_match('/\.js$/', $file->filename)) { - $js_list[] = $file->uri; + + if (($index !== FALSE) && preg_match('/\.css$/', $req_file)) { + $css_list[] = _civicrm_resources_get_file_uri($index, $all_css); + continue; } } } + foreach ($css_list as $key => $css_file) { drupal_add_css(ltrim(str_replace(DRUPAL_ROOT, '', $css_file), '/')); } @@ -65,6 +60,53 @@ function civicrm_resources_add_resources($extention_path, $req_files = []) { } } +/** + * Filters files into css or js + * + * @param array $files + * + * @return array + */ +function _civicrm_resources_filter_files($files) { + $filtered_js_file = array_filter($files, function ($file) { + return preg_match('/\.js$/', $file['filename']); + }); + + $filtered_css_file = array_filter($files, function ($file) { + return preg_match('/\.css$/', $file['filename']); + }); + + return [$filtered_js_file, $filtered_css_file]; +} + +/** + * Retrieves uri for file list + * + * @param array $files + * + * @return array + */ +function _civicrm_resources_get_uris($files) { + $resource_uri = array_map(function ($file) { + return $file->uri; + }, $files); + + return array_values($resource_uri); +} + +/** + * Retrieves uri for a specific file + * + * @param int $index + * @param array $resource_list + * + * @return string + */ +function _civicrm_resources_get_file_uri($index, $resource_list) { + $uri_values = array_values($resource_list); + + return $uri_values[$index]['uri']; +} /** * Finds all files that match a given mask in a given directory. * @@ -123,12 +165,11 @@ function civicrm_resources_file_scan_directory($dir, $mask, $options = [], $dept $files = array_merge(civicrm_resources_file_scan_directory($uri, $mask, $options, $depth + 1), $files); } elseif ($depth >= $options['min_depth'] && preg_match($mask, $filename)) { - $file = new stdClass(); - $file->uri = $uri; - $file->filename = $filename; - $file->name = pathinfo($filename, PATHINFO_FILENAME); + $file['uri'] = $uri; + $file['filename'] = $filename; + $file['name'] = pathinfo($filename, PATHINFO_FILENAME); $key = $options['key']; - $files[$file->$key] = $file; + $files[$file[$key]] = $file; if ($options['callback']) { $options['callback']($uri); }