[ create a new paste ] login | about

Link: http://codepad.org/PCKh8PLL    [ raw code | fork ]

PHP, pasted on Aug 9:
 case 'campaigns':
                $data = $this->table('definitions')->where('module', 'campaign');
                $deniedRows = ['id', 'check'];

                $dataCount = $data->count();

                if(strlen($search['value']) !== 0){
                    $data = $data->where(function($query) use ($columns, $search, $deniedRows){

                        foreach ($columns as $key => $value) {
                            if(in_array($columns[$key]['data'], $deniedRows)) {
                                unset($columns[$key]);
                            }else{
                                
                                if(strlen($columns[$key]['data']) !== 0){
                                    if(!is_numeric($search['value'])){
                                        $query = $query->orWhere($columns[$key]['data'], '~*', $search['value']);
                                    }else{
                                        $query = $query->orWhere($columns[$key]['data'], '=', $search['value']);
                                    }
                                }
                            }
                        }
                    });
                    
                    $searchCount = $data->count();
                }
                foreach ($order as $order) {
                    $colKey = $order['column'];
                    $orderDir = $order['dir'];
                    if(strlen($columns[$colKey]['data']) !== 0 && strlen($orderDir) !== 0){
                        if(!in_array($columns[$colKey]['data'], $deniedRows)) {
                            $data = $data->orderBy($columns[$colKey]['data'], $orderDir);
                        }
                    }
                    
                }
                if($length !== "-1"){
                    $data = $data->skip($start)->take($length);
                }

                $data = $data->orderBy('definitions.datetime','desc');

                foreach ($data->get() as $key => $value) {
                    $result['data'][$key]['id'] = $value->id;

                    /*
                    Campaign Name => name
                    Budget => budget
                    Lead Count => lead_count
                    Lead Per Cost => lead_per_cost
                    Conversion Rate => conversion_rate
                    Sales => sales
                    */

                    $data = json_decode($value->data);


                    $result['data'][$key]['name'] = $value->definition;
                    $result['data'][$key]['budget'] = (is_null($data->data->budget) ? 0 : (int) $data->data->budget);
                    $result['data'][$key]['lead_count'] = 0;
                    $result['data'][$key]['lead_per_cost'] = 0;
                    $result['data'][$key]['conversion_rate'] = 0;
                    $result['data'][$key]['sales'] = 0;

                    $channels = $this->table('all_channel')->get();
                    $total_sale = 0;
                    $sale_count = 0;
                    
                    foreach ($channels as $i => $channel) {
                        $result['data'][$key]['lead_count'] += (int) $channel->lead_count;
                    
            /*------------------------------DİKKAT---------------------------*/

                    /* Bu controllerda ekte yolladığım ekran görüntüsüne denk düşen değerleri kontrol eden bölüm. Kod çalışıyor. Fakat sorun şu kanımca for içinde fazlaca for döngüsü var, alttaki $sales değişkeni en çok buna neden olan şey çünkü dönküde sürekli sorgu yapıyor, onu kaldırdığımda hızlıca geliyor sayfa ama bu seferde doğal olarak bazı değerler gelmiyor, sürekli databaseden 
sorgu yaptığı ve bu değerlerle hesaplama yaptığı için ekrana çok geç geldiğini düşünüyorum, bunu nasıl optimize edebilirim? */

                        $sales = $this->table('ipd_sales')->where('channel_data','=',$channel->data)->get();
                        foreach ($sales as $i => $sale) {
                            $sale_data = json_decode($sale->operation_data);
                            $total_sale += (int) $sale_data->total;
                            $sale_count++;
                        }
                    }

                    /* $value->lead_count */

                    $result['data'][$key]['sales'] = $sale_count;
                    $result['data'][$key]['conversion_rate'] = floor(100 / ((int) $result['data'][$key]['lead_count'] / $sale_count) * 100) / 100 . '%';
                    $result['data'][$key]['lead_per_cost'] = floor((int) $result['data'][$key]['budget'] / (int) $result['data'][$key]['lead_count'] * 100) / 100;


                    $result['data'][$key]['actions'] = '<div class="btn-group">
                        <a class="btn green btn-xs" href="javascript:;" data-toggle="dropdown" aria-expanded="false">
                            <i class="fa fa-user"></i> Options
                            <i class="fa fa-angle-down"></i>
                        </a>
                        <ul class="dropdown-menu"><li>
                                <a href="'.$this->getRootPath().'/panel/edit_campaign/'.$value->id.'">
                                    <i class="fa fa-file-text-o"></i> '._('Edit').' </a>
                            </li>';
                    if($this->checkPermission('delete')){
                        $result['data'][$key]['actions'] .= '<li>
                                <a href="#" onclick="Campaigns.delete('.$value->id.', {title: \''._('Are you sure?').'\', text: \''._('This campaign will be delete!').'\', confirmButtonText: \''._('Yes').'\', cancelButtonText: \''._('No').'\', deletedText: \''._('Deleted!').'\'});">
                                    <i class="fa fa-trash-o"></i> '._('Delete').' </a>
                            </li>';
                    }

                    $result['data'][$key]['actions'] .= '
                            </ul>
                        </div>';
                }
                $result['recordsFiltered'] = ($search['value'] !== "" ? $searchCount : $dataCount);
                $result['recordsTotal'] = $this->table('definitions')->where('module', 'campaign')->count();
                break; 


Create a new paste based on this one


Comments: