Skip to content

Instantly share code, notes, and snippets.

@vikky410
Created March 21, 2015 18:34
Show Gist options
  • Save vikky410/22fcca2d2b07c58d45d7 to your computer and use it in GitHub Desktop.
Save vikky410/22fcca2d2b07c58d45d7 to your computer and use it in GitHub Desktop.

Revisions

  1. vikky410 created this gist Mar 21, 2015.
    361 changes: 361 additions & 0 deletions Macros.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,361 @@
    <?php
    /**
    * Back office table headers
    */
    HTML::macro('th', function ($field = '', $defaultOrder = null, $sortable = true, $label = true) {
    $inputs = Input::all();
    $order = Input::get('order');
    if ($defaultOrder && ! $order) { // set default column active
    $order = $field;
    }
    $direction = Input::get('direction', $defaultOrder);
    $th = array();
    $th[] = '<th class="' . $field . '">';
    if ($sortable) {
    $inputs['direction'] = 'asc';
    $iconDir = ' text-muted'; // column not active, gray icons
    if ($order == $field) { // if this column is active
    $iconDir = '-' . $direction;
    if ($direction == 'asc') { // reverse direction
    $inputs['direction'] = 'desc';
    }
    }
    $inputs['order'] = $field;
    $th[] = '<a href="?' . http_build_query($inputs) . '">';
    $th[] = '<i class="fa fa-sort' . $iconDir . '"></i> ';
    }
    if ($label) {
    $th[] = trans('validation.attributes.' . $field);
    }
    if ($sortable) {
    $th[] = '</a>';
    }
    $th[] = '</th>';
    $th[] = "\r\n";

    return implode('', $th);
    });

    /**
    * Back office buttons in view list
    */
    HTML::macro('langButton', function ($locale = null, $attributes = []) {

    $inputs = Input::except('locale');
    $inputs['locale'] = $locale;

    $attributes['class'] = 'btn btn-default btn-xs';
    if ($locale == Config::get('app.locale')) {
    $attributes['class'] .= ' active';
    }
    $label = trans('global.languages.' . $locale);
    $attributes['href'] = '?' . http_build_query($inputs);

    return '<a ' . HTML::attributes($attributes) . '>' . $label . '</a>';

    });

    /**
    * Front office lang switcher
    */
    HTML::macro('languagesMenu', function (array $langsArray = array(), array $attributes = array()) {

    $attributes['role'] = 'menu';
    $attributes = HTML::attributes($attributes);

    $html = array();
    $html[] = '<ul ' . $attributes . '>';
    foreach ($langsArray as $item) {
    $html[] = '<li class="' . $item->class . '" role="menuitem">';
    $html[] = '<a href="' . $item->url . '">' . $item->lang . '</a>';
    $html[] = '</li>';
    }
    $html[] = '</ul>';

    return implode("\r\n", $html);

    });

    /**
    * Front office menu
    */
    HTML::macro('menu', $builtMenu = function ($items = array(), $ulAttr = array()) use (&$builtMenu) {

    $menuList = array('<ul ' . HTML::attributes($ulAttr) . '>');

    foreach ($items as $item) {

    $liAttr = array();
    $item->class && $liAttr['class'] = $item->class;
    $liAttr['role'] = 'menuitem';

    // item
    $menuList[] = '<li ' . HTML::attributes($liAttr) . '>';

    $aAttr = array();
    if ($item->items && $item->items->count()) {
    $aAttr['class'] = 'dropdown-toggle';
    $aAttr['data-toggle'] = 'dropdown';
    }
    $item->target && $aAttr['target'] = $item->target;
    $aAttr['href'] = $item->uri;

    $menuList[] = '<a ' . HTML::attributes($aAttr) . '>';
    if ($item->icon_class) {
    $menuList[] = '<span class="'.$item->icon_class.'"></span>';
    }
    $menuList[] = $item->title;
    if ($item->items && $item->items->count()) {
    $menuList[] = '<span class="caret"></span>';
    }
    $menuList[] = '</a>';

    // nested list
    if ($item->items && $item->items->count()) {
    $menuList[] = $builtMenu($item->items, array('class' => 'dropdown-menu'));
    }

    $menuList[] = '</li>';
    }
    $menuList[] = '</ul>';

    return implode("\r\n", $menuList);

    });


    /**
    * bs3 form macros
    * @params $options [array]
    * @type [type of the field text, password, checkbox, dropdown, textarea]
    * @labeWrapper [class to wrap label, default: col-sm-2]
    * @valueWrapper [class to wrap value, default: col-sm-10]
    * @name [name of the value field]
    * @label [label to be dispalyed]
    * @placeholder [placeholder to be displayed in field]
    * @validations [array] [parameters of form validator]
    * @dropdownParams [array] [parameters of dropdown]
    * @htmlOptions [array] [extra param to form fields]
    */
    Form::macro('field', function($options){
    $markup = '';
    $type = 'text';
    $labelWrapper = 'col-sm-2';
    $valueWrapper = 'col-sm-10';
    $required = "";
    $validatons = "";
    $list = [null => 'Select'];
    $selected = null;


    if(!empty($options['labelWrapper'])){
    $labelWrapper = $options['labelWrapper'];
    }

    if(!empty($options['valueWrapper'])){
    $valueWrapper = $options['valueWrapper'];
    }


    if(!empty($options['type'])){
    $type = $options['type'];
    }

    if(empty($options['name'])){
    return;
    }

    $name = $options['name'];


    if(!empty($options['required'])){
    $required = $options['required'];
    }

    $label = "";
    if(!empty($options['label'])){
    if(!empty($required) && $required != "" ){
    $label = $options['label']."<span class = 'asterisk'>*</span>";
    }
    else{
    $label = $options['label'];
    }

    }

    $value = Input::old($name);
    if( !empty( $options['value'] ) ){
    $value = Input::old($name, $options["value"]);
    }

    $placeholder = "";
    if (!empty($options["placeholder"])){
    $placeholder = $options["placeholder"];
    }

    $class = "";
    if (!empty($options["class"])){
    $class = " ".$options['class'];
    }

    $parameters = array(
    "class" => 'form-control' . $class,
    "placeholder" => $placeholder
    );

    $error = "";
    if( !empty($options['form']) ){
    $error = $options['form']->getError('name');
    }

    if ($type !== "hidden"){
    $markup .= "<div class='form-group";
    $markup .= ($error ? " has-error" : "");
    $markup .= "'>";
    }

    /**
    * formvalidator.net
    * form validaor validation
    */
    if(!empty($options['validations']) && is_array($options['validations']) ){
    $validators = $options['validations'];
    foreach($validators as $k => $v){
    $parameters += array($k => $v);
    }
    }

    /**
    * dropdown
    */
    if(isset($options['dropdownParams'])){
    if(!empty($options['dropdownParams']) && is_array($options['dropdownParams']) ){
    $dropdownParams = $options['dropdownParams'];
    if(isset($dropdownParams['list'])){
    $list = $dropdownParams['list'];
    }
    if(isset($dropdownParams['selected'])){
    $selected = $dropdownParams['selected'];
    }

    }
    }

    /**
    * htmlOptions
    */
    if(isset($options['htmlOptions'])){
    if(!empty($options['htmlOptions']) && is_array($options['htmlOptions']) ){
    $htmlOptions = $options['htmlOptions'];
    foreach($htmlOptions as $k => $v){
    $parameters += array($k => $v);
    }
    }
    }


    switch ($type) {
    case "text":
    {
    if(!empty($required) && $required != "" ){
    $markup .= HTML::decode(Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    )));
    }
    else{
    $markup .= Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    ));
    }

    $markup .= '<div class="'.$valueWrapper.'">';
    $markup .= Form::text($name, $value, $parameters);
    $markup .= '</div>';
    break;
    }

    case "dropdown":
    {
    if(!empty($required) && $required != "" ){
    $markup .= HTML::decode(Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    )));
    }
    else{
    $markup .= Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    ));
    }
    $markup .= '<div class="'.$valueWrapper.'">';
    $markup .= Form::select($name, $list, $selected, $parameters);
    $markup .= '</div>';
    break;

    }

    case "password":
    {
    if(!empty($required) && $required != "" ){
    $markup .= HTML::decode(Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    )));
    }
    else{
    $markup .= Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    ));
    }
    $markup .= '<div class="'.$valueWrapper.'">';
    $markup .= Form::password($name, $parameters);
    $markup .= '</div>';
    break;
    }

    case "checkbox";
    {
    $markup .= "<div class = 'checkbox'>";
    $markup .= "<label>";
    $markup .= Form::checkbox($name, 1, !!$value);
    $markup .= " " . $label;
    $markup .= "</label>";
    $markup .= "</div>";
    break;
    }

    case "textarea";
    {
    if(!empty($required) && $required != "" ){
    $markup .= HTML::decode(Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    )));
    }
    else{
    $markup .= Form::label($name, $label, array(
    'class' => "$labelWrapper control-label"
    ));
    }
    $markup .= '<div class="'.$valueWrapper.'">';
    $markup .= Form::textarea($name, $value, $parameters);
    $markup .= '</div>';
    break;
    }

    case "hidden":
    {
    $markup .= Form::hidden($name, $value);
    break;
    }

    }

    if($error){
    $markup .= "<span class='help-block'>";
    $markup .= $error;
    $markup .= "</span>";
    }
    if ($type !== "hidden"){
    $markup .= "</div>";
    }
    return $markup;
    });