'; foreach ($actions as $action) { if (isset($action['requirement']) && !$action['requirement']) { continue; } if (isset($action['complex_requirement'])) { if ($action['complex_requirement'] instanceof Closure) { $requirementMet = $action['complex_requirement']($row); } else { if (isset($action['complex_requirement']['options']['datapath'])) { foreach ($action['complex_requirement']['options']['datapath'] as $name => $path) { $action['complex_requirement']['options']['datapath'][$name] = empty(Hash::extract($row, $path)[0]) ? null : Hash::extract($row, $path)[0]; } } $options = isset($action['complex_requirement']['options']) ? $action['complex_requirement']['options'] : []; $requirementMet = $action['complex_requirement']['function']($row, $options); } if (!$requirementMet) { continue; } } $url_param_data_paths = ''; $url = empty($action['url']) ? '#' : h($action['url']); if (!empty($action['url_params_data_paths'])) { if (is_array($action['url_params_data_paths'])) { $temp = array(); foreach ($action['url_params_data_paths'] as $k => $path) { $extracted_value = Hash::extract($row, $path); if (!empty($extracted_value)) { if (is_string($k)) { // associative array, use cake's parameter $temp[] = h($k) . ':' . h($extracted_value[0]); } else { $temp[] = h($extracted_value[0]); } } } $url_param_data_paths = implode('/', $temp); } else { $url_param_data_paths = h(Hash::extract($row, $action['url_params_data_paths'])[0]); } $url .= '/' . $url_param_data_paths; } if (!empty($action['url_named_params_data_paths'])) { if (is_array($action['url_named_params_data_paths'])) { $temp = array(); foreach ($action['url_named_params_data_paths'] as $namedParam => $path) { $temp[] = sprintf('%s:%s', h($namedParam), h(Hash::extract($row, $path)[0])); } $url_param_data_paths = implode('/', $temp); } $url .= '/' . $url_param_data_paths; } $url_params_values = ''; if (!empty($action['url_params_values'])) { if (is_array($action['url_params_values'])) { $temp = array(); foreach ($action['url_params_values'] as $namedParam => $value) { $temp[] = sprintf('%s:%s', h($namedParam), h($value)); } $url_params_values = implode('/', $temp); } $url .= '/' . $url_params_values; } if (!empty($action['url_extension'])) { $url .= '.' . $action['url_extension']; } if (isset($action['postLink'])) { echo $this->Form->postLink( '', $url, array( 'class' => $this->FontAwesome->getClass($action['icon']) . ' black ' . (empty($action['class']) ? '' : h($action['class'])), 'title' => empty($action['title']) ? '' : h($action['title']), 'aria-label' => empty($action['title']) ? '' : h($action['title']), ), empty($action['postLinkConfirm'])? '' : $action['postLinkConfirm'] ) . ' '; } else { if (!empty($action['onclick']) && !empty($action['onclick_params_data_path'])) { if (is_array($action['onclick_params_data_path'])) { $temp = array(); foreach ($action['onclick_params_data_path'] as $k => $path) { $extracted_value = Hash::extract($row, $path); if (!empty($extracted_value)) { if (is_string($k)) { // associative array, use cake's parameter $temp[] = h($k) . ':' . h($extracted_value[0]); } else { $temp[] = h($extracted_value[0]); } } } $onclick_params_data_path = implode('/', $temp); } else { $onclick_params_data_path = h(Hash::extract($row, $action['onclick_params_data_path'])[0]); } $action['onclick'] = str_replace( '[onclick_params_data_path]', $onclick_params_data_path, $action['onclick'] ); } $title = empty($action['title']) ? '' : h($action['title']); $classes = []; if (!empty($action['class'])) { $classes[] = h($action['class']); } if (!empty($action['dbclickAction'])) { $classes[] = 'dblclickActionElement'; } echo sprintf( ' ', $url, $title, $title, empty($classes) ? '' : ' class="' . implode(' ', $classes) . '"', empty($action['onclick']) ? '' : sprintf(' onclick="event.preventDefault();%s"', $action['onclick']), $this->FontAwesome->getClass($action['icon']) ); } } echo '';