diff options
Diffstat (limited to 'app/helpers.php')
-rw-r--r-- | app/helpers.php | 675 |
1 files changed, 0 insertions, 675 deletions
diff --git a/app/helpers.php b/app/helpers.php deleted file mode 100644 index 01c45292..00000000 --- a/app/helpers.php +++ /dev/null @@ -1,675 +0,0 @@ -<?php - -namespace Helper; - -/** - * Template helpers - * - */ -use Core\Security; -use Core\Template; -use Core\Request; -use Parsedown; - -/** - * Append a CSRF token to a query string - * - * @return string - */ -function param_csrf() -{ - return '&csrf_token='.Security::getCSRFToken(); -} - -/** - * Add a Javascript asset - * - * @param string $filename Filename - * @return string - */ -function js($filename) -{ - return '<script type="text/javascript" src="'.$filename.'?'.filemtime($filename).'"></script>'; -} - -/** - * Add a stylesheet asset - * - * @param string $filename Filename - * @return string - */ -function css($filename) -{ - return '<link rel="stylesheet" href="'.$filename.'?'.filemtime($filename).'" media="screen">'; -} - -/** - * Load a template - * - * @param string $name Template name - * @param array $args Template parameters - * @return string - */ -function template($name, array $args = array()) -{ - $tpl = new Template; - return $tpl->load($name, $args); -} - -/** - * Check if the given user_id is the connected user - * - * @param integer $user_id User id - * @return boolean - */ -function is_current_user($user_id) -{ - return $_SESSION['user']['id'] == $user_id; -} - -/** - * Check if the current user is administrator - * - * @return boolean - */ -function is_admin() -{ - return $_SESSION['user']['is_admin'] == 1; -} - -/** - * Return true if the user can configure the project (project are previously filtered) - * - * @return boolean - */ -function is_project_admin(array $project) -{ - return is_admin() || $project['is_private'] == 1; -} - -/** - * Return the username - * - * @param array $user User properties (optional) - * @return string - */ -function get_username(array $user = array()) -{ - return ! empty($user) ? ($user['name'] ?: $user['username']) - : ($_SESSION['user']['name'] ?: $_SESSION['user']['username']); -} - -/** - * Get the current user id - * - * @return integer - */ -function get_user_id() -{ - return $_SESSION['user']['id']; -} - -/** - * Markdown transformation - * - * @param string $text Markdown content - * @param array $link Link parameters for replacement - * @return string - */ -function markdown($text, array $link = array('controller' => 'task', 'action' => 'show', 'params' => array())) -{ - $html = Parsedown::instance() - ->setMarkupEscaped(true) # escapes markup (HTML) - ->text($text); - - // Replace task #123 by a link to the task - $html = preg_replace_callback('!#(\d+)!i', function($matches) use ($link) { - return a( - $matches[0], - $link['controller'], - $link['action'], - $link['params'] + array('task_id' => $matches[1]) - ); - }, $html); - - return $html; -} - -/** - * Get the current URL without the querystring - * - * @return string - */ -function get_current_base_url() -{ - $url = Request::isHTTPS() ? 'https://' : 'http://'; - $url .= $_SERVER['SERVER_NAME']; - $url .= $_SERVER['SERVER_PORT'] == 80 || $_SERVER['SERVER_PORT'] == 443 ? '' : ':'.$_SERVER['SERVER_PORT']; - $url .= dirname($_SERVER['PHP_SELF']) !== '/' ? dirname($_SERVER['PHP_SELF']).'/' : '/'; - - return $url; -} - -/** - * HTML escaping - * - * @param string $value Value to escape - * @return string - */ -function escape($value) -{ - return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false); -} - -/** - * Dispplay the flash session message - * - * @param string $html HTML wrapper - * @return string - */ -function flash($html) -{ - $data = ''; - - if (isset($_SESSION['flash_message'])) { - $data = sprintf($html, escape($_SESSION['flash_message'])); - unset($_SESSION['flash_message']); - } - - return $data; -} - -/** - * Display the flash session error message - * - * @param string $html HTML wrapper - * @return string - */ -function flash_error($html) -{ - $data = ''; - - if (isset($_SESSION['flash_error_message'])) { - $data = sprintf($html, escape($_SESSION['flash_error_message'])); - unset($_SESSION['flash_error_message']); - } - - return $data; -} - -/** - * Format a file size - * - * @param integer $size Size in bytes - * @param integer $precision Precision - * @return string - */ -function format_bytes($size, $precision = 2) -{ - $base = log($size) / log(1024); - $suffixes = array('', 'k', 'M', 'G', 'T'); - - return round(pow(1024, $base - floor($base)), $precision).$suffixes[(int)floor($base)]; -} - -/** - * Truncate a long text - * - * @param string $value Text - * @param integer $max_length Max Length - * @param string $end Text end - * @return string - */ -function summary($value, $max_length = 85, $end = '[...]') -{ - $length = strlen($value); - - if ($length > $max_length) { - return substr($value, 0, $max_length).' '.$end; - } - - return $value; -} - -/** - * Return true if needle is contained in the haystack - * - * @param string $haystack Haystack - * @param string $needle Needle - * @return boolean - */ -function contains($haystack, $needle) -{ - return strpos($haystack, $needle) !== false; -} - -/** - * Return a value from a dictionary - * - * @param mixed $id Key - * @param array $listing Dictionary - * @param string $default_value Value displayed when the key doesn't exists - * @return string - */ -function in_list($id, array $listing, $default_value = '?') -{ - if (isset($listing[$id])) { - return escape($listing[$id]); - } - - return $default_value; -} - -/** - * Display the form error class - * - * @param array $errors Error list - * @param string $name Field name - * @return string - */ -function error_class(array $errors, $name) -{ - return ! isset($errors[$name]) ? '' : ' form-error'; -} - -/** - * Display a list of form errors - * - * @param array $errors List of errors - * @param string $name Field name - * @return string - */ -function error_list(array $errors, $name) -{ - $html = ''; - - if (isset($errors[$name])) { - - $html .= '<ul class="form-errors">'; - - foreach ($errors[$name] as $error) { - $html .= '<li>'.escape($error).'</li>'; - } - - $html .= '</ul>'; - } - - return $html; -} - -/** - * Get an escaped form value - * - * @param mixed $values Values - * @param string $name Field name - * @return string - */ -function form_value($values, $name) -{ - if (isset($values->$name)) { - return 'value="'.escape($values->$name).'"'; - } - - return isset($values[$name]) ? 'value="'.escape($values[$name]).'"' : ''; -} - -/** - * Hidden CSRF token field - * - * @return string - */ -function form_csrf() -{ - return '<input type="hidden" name="csrf_token" value="'.Security::getCSRFToken().'"/>'; -} - -/** - * Display a hidden form field - * - * @param string $name Field name - * @param array $values Form values - * @return string - */ -function form_hidden($name, array $values = array()) -{ - return '<input type="hidden" name="'.$name.'" id="form-'.$name.'" '.form_value($values, $name).'/>'; -} - -/** - * Display a select field - * - * @param string $name Field name - * @param array $options Options - * @param array $values Form values - * @param array $errors Form errors - * @param string $class CSS class - * @return string - */ -function form_select($name, array $options, array $values = array(), array $errors = array(), $class = '') -{ - $html = '<select name="'.$name.'" id="form-'.$name.'" class="'.$class.'">'; - - foreach ($options as $id => $value) { - - $html .= '<option value="'.escape($id).'"'; - - if (isset($values->$name) && $id == $values->$name) $html .= ' selected="selected"'; - if (isset($values[$name]) && $id == $values[$name]) $html .= ' selected="selected"'; - - $html .= '>'.escape($value).'</option>'; - } - - $html .= '</select>'; - $html .= error_list($errors, $name); - - return $html; -} - -/** - * Display a radio field group - * - * @param string $name Field name - * @param array $options Options - * @param array $values Form values - * @return string - */ -function form_radios($name, array $options, array $values = array()) -{ - $html = ''; - - foreach ($options as $value => $label) { - $html .= form_radio($name, $label, $value, isset($values[$name]) && $values[$name] == $value); - } - - return $html; -} - -/** - * Display a radio field - * - * @param string $name Field name - * @param string $label Form label - * @param string $value Form value - * @param boolean $selected Field selected or not - * @param string $class CSS class - * @return string - */ -function form_radio($name, $label, $value, $selected = false, $class = '') -{ - return '<label><input type="radio" name="'.$name.'" class="'.$class.'" value="'.escape($value).'" '.($selected ? 'selected="selected"' : '').'>'.escape($label).'</label>'; -} - -/** - * Display a checkbox field - * - * @param string $name Field name - * @param string $label Form label - * @param string $value Form value - * @param boolean $checked Field selected or not - * @param string $class CSS class - * @return string - */ -function form_checkbox($name, $label, $value, $checked = false, $class = '') -{ - return '<label><input type="checkbox" name="'.$name.'" class="'.$class.'" value="'.escape($value).'" '.($checked ? 'checked="checked"' : '').'> '.escape($label).'</label>'; -} - -/** - * Display a form label - * - * @param string $name Field name - * @param string $label Form label - * @param array $attributes HTML attributes - * @return string - */ -function form_label($label, $name, array $attributes = array()) -{ - return '<label for="form-'.$name.'" '.implode(' ', $attributes).'>'.escape($label).'</label>'; -} - -/** - * Display a textarea - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_textarea($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - $class .= error_class($errors, $name); - - $html = '<textarea name="'.$name.'" id="form-'.$name.'" class="'.$class.'" '; - $html .= implode(' ', $attributes).'>'; - $html .= isset($values->$name) ? escape($values->$name) : isset($values[$name]) ? $values[$name] : ''; - $html .= '</textarea>'; - $html .= error_list($errors, $name); - - return $html; -} - -/** - * Display a input field - * - * @param string $type HMTL input tag type - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_input($type, $name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - $class .= error_class($errors, $name); - - $html = '<input type="'.$type.'" name="'.$name.'" id="form-'.$name.'" '.form_value($values, $name).' class="'.$class.'" '; - $html .= implode(' ', $attributes).'/>'; - if (in_array('required', $attributes)) $html .= '<span class="form-required">*</span>'; - $html .= error_list($errors, $name); - - return $html; -} - -/** - * Display a text field - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_text($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - return form_input('text', $name, $values, $errors, $attributes, $class); -} - -/** - * Display a password field - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_password($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - return form_input('password', $name, $values, $errors, $attributes, $class); -} - -/** - * Display an email field - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_email($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - return form_input('email', $name, $values, $errors, $attributes, $class); -} - -/** - * Display a date field - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_date($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - return form_input('date', $name, $values, $errors, $attributes, $class); -} - -/** - * Display a number field - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_number($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - return form_input('number', $name, $values, $errors, $attributes, $class); -} - -/** - * Display a numeric field (allow decimal number) - * - * @param string $name Field name - * @param array $values Form values - * @param array $errors Form errors - * @param array $attributes HTML attributes - * @param string $class CSS class - * @return string - */ -function form_numeric($name, $values = array(), array $errors = array(), array $attributes = array(), $class = '') -{ - return form_input('text', $name, $values, $errors, $attributes, $class.' form-numeric'); -} - -/** - * Link - * - * a('link', 'task', 'show', array('task_id' => $task_id)) - * - * @param string $label Link label - * @param string $controller Controller name - * @param string $action Action name - * @param array $params Url parameters - * @param boolean $csrf Add a CSRF token - * @param string $class CSS class attribute - * @param boolean $new_tab Open the link in a new tab - * @return string - */ -function a($label, $controller, $action, array $params = array(), $csrf = false, $class = '', $title = '', $new_tab = false) -{ - return '<a href="'.u($controller, $action, $params, $csrf).'" class="'.$class.'" title="'.$title.'" '.($new_tab ? 'target="_blank"' : '').'>'.$label.'</a>'; -} - -/** - * URL query string - * - * u('task', 'show', array('task_id' => $task_id)) - * - * @param string $controller Controller name - * @param string $action Action name - * @param array $params Url parameters - * @param boolean $csrf Add a CSRF token - * @return string - */ -function u($controller, $action, array $params = array(), $csrf = false) -{ - $html = '?controller='.$controller.'&action='.$action; - - if ($csrf) { - $params['csrf_token'] = Security::getCSRFToken(); - } - - foreach ($params as $key => $value) { - $html .= '&'.$key.'='.$value; - } - - return $html; -} - -/** - * Pagination links - * - * @param array $pagination Pagination information - * @return string - */ -function paginate(array $pagination) -{ - extract($pagination); - - if ($pagination['offset'] === 0 && ($total - $pagination['offset']) <= $limit) { - return ''; - } - - $html = '<div class="pagination">'; - $html .= '<span class="pagination-previous">'; - - if ($pagination['offset'] > 0) { - $offset = $pagination['offset'] - $limit; - $html .= a('← '.t('Previous'), $controller, $action, $params + compact('offset', 'order', 'direction')); - } - else { - $html .= '← '.t('Previous'); - } - - $html .= '</span>'; - $html .= '<span class="pagination-next">'; - - if (($total - $pagination['offset']) > $limit) { - $offset = $pagination['offset'] + $limit; - $html .= a(t('Next').' →', $controller, $action, $params + compact('offset', 'order', 'direction')); - } - else { - $html .= t('Next').' →'; - } - - $html .= '</span>'; - $html .= '</div>'; - - return $html; -} - -/** - * Column sorting (work with pagination) - * - * @param string $label Column title - * @param string $column SQL column name - * @param array $pagination Pagination information - * @return string - */ -function order($label, $column, array $pagination) -{ - extract($pagination); - - $prefix = ''; - - if ($order === $column) { - $prefix = $direction === 'DESC' ? '▼ ' : '▲ '; - $direction = $direction === 'DESC' ? 'ASC' : 'DESC'; - } - - $order = $column; - - return $prefix.a($label, $controller, $action, $params + compact('offset', 'order', 'direction')); -} |