Development

Changeset 5964

You must first sign up to be able to contribute.

Changeset 5964

Show
Ignore:
Timestamp:
11/11/07 01:18:40 (2 years ago)
Author:
Leon.van.der.Ree
Message:

I added a adjustable-delimitor to distinguish table-names and column-names.

You can set it in your application settings, the key is: table_delimiter

The only valid and usefull value seems '-'

The nicest would be '/' but this renders the drop-down combo-boxes broken.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/sfExtjsThemePlugin/data/generator/sfPropelAdmin/extjs/template/templates/_json_list_autocomplete_td.php

    r5929 r5964  
    22{ 
    33<?php 
     4$tableDelimiter = sfConfig::get('app_sf_extjs_theme_plugin_table_delimiter', '-'); 
    45 
    56// TODO: improve getting the primary-key-name (check if exists and outside the template) 
     
    2728 
    2829    $columnPk = $completeColumns['related'][$relatedClassName]['pk']; 
    29     $columnName = $relatedClassName."/".$columnPk->getName(); 
     30    $columnName = $relatedClassName.'/'.$columnPk->getName(); 
    3031     
    3132    // add column PK if not already in list 
     
    6162<?php 
    6263  // TODO: to make it work with componentents and partials, check the method getColumnAjaxDefinition instead of processColumnAutocompleteName (which can than get private)  
    63   // value data, unfortunately we cannot use the '/' to distinquish the class and the field, because the name is used as variable in _list_ajax_layout.php 
     64  // value data, NOW WE CAN PROBABLE, OBSOLETE: unfortunately we cannot use the '/' to distinquish the class and the field, because the name is used as variable in _list_ajax_layout.php 
    6465?> 
    65   "<?php echo str_replace('/','_',$columnName) ?>": "[?php echo str_replace('"', '\"', $results-><?php echo $this->processColumnAutocompleteName($column->getPhpName()) ?>) ?]" 
     66  "<?php echo str_replace('/',$tableDelimiter,$columnName) ?>": "[?php echo str_replace('"', '\"', $results-><?php echo $this->processColumnAutocompleteName($column->getPhpName()) ?>) ?]" 
    6667  [?php $i++; ?] 
    6768[?php endif; ?] 
  • plugins/sfExtjsThemePlugin/data/generator/sfPropelAdmin/extjs/template/templates/_json_list_td.php

    r5891 r5964  
    44{ 
    55<?php 
     6 
     7$tableDelimiter = sfConfig::get('app_sf_extjs_theme_plugin_table_delimiter', '-'); 
    68 
    79// TODO: improve getting the primary-key-name (check if exists and outside the template) 
     
    2830    list($relatedClassName, $relatedColumn) = explode('/', $column->getName()); 
    2931    $columnPk = $completeColumns['related'][$relatedClassName]['pk']; 
    30     $columnName = $relatedClassName."/".$columnPk->getName(); 
     32    $columnName = $relatedClassName.'/'.$columnPk->getName(); 
    3133 
    3234    // add column if not already in list 
     
    4850  if (!$foreign = (false !== strpos($column->getName(), '/'))) 
    4951  { 
    50     $columnName = strtolower($this->getClassName())."/".$column->getName(); 
     52    $columnName = strtolower($this->getClassName()).'/'.$column->getName(); 
    5153  } 
    5254 
     
    6668  } 
    6769 
    68   // value data, unfortunately we cannot use the '/' to distinquish the class and the field, because the name is used as variable in _list_ajax_layout.php 
    69   echo "\"".str_replace('/','_',$columnName)."\": \"[?php echo str_replace('\"', '\\\"', ".$this->getColumnAjaxTag($column).") ?]\""; 
     70  // value data, NOW WE CAN PROBABLY /// OBSOLETE: unfortunately we cannot use the '/' to distinquish the class and the field, because the name is used as variable in _list_ajax_layout.php 
     71//  echo "\"".str_replace('/','_',$columnName)."\": \"[?php echo str_replace('\"', '\\\"', ".$this->getColumnAjaxTag($column).") ?]\""; 
     72  echo "\"".str_replace('/',$tableDelimiter,$columnName)."\": \"[?php echo str_replace('\"', '\\\"', ".$this->getColumnAjaxTag($column).") ?]\""; 
    7073 
    7174  //don't add it twice 
  • plugins/sfExtjsThemePlugin/data/generator/sfPropelAdmin/extjs/template/templates/_list_ajax_layout.php

    r5948 r5964  
    1 [?php 
    2 /* 
    3  * Created on 2-sep-2007 
    4  * 
    5  * by Leon van der Ree 
    6  */ 
    7 ?] 
     1[?php /* * Created on 2-sep-2007 * * by Leon van der Ree */ ?] 
    82 
    93<?php 
     
    2014} 
    2115 
     16$tableDelimiter = sfConfig::get('app_sf_extjs_theme_plugin_table_delimiter', '-'); 
    2217 
    2318// get generator.yml options: 
     
    4439  if (false !== strpos($group_field, '/')) 
    4540  { 
    46     $group_field = str_replace('/', '_', $group_field); 
     41    if ($tableDelimiter != '/' ) 
     42    { 
     43      $group_field = str_replace('/', $tableDelimiter, $group_field); 
     44    }  
    4745  } 
    4846  else 
    4947  { 
    50     $group_field = $prefix."_".$group_field; 
     48    $group_field = $prefix.$tableDelimiter.$group_field; 
    5149  } 
    5250} 
     
    9189 
    9290        // Always add the primary key 
    93         $listDisplay[0] = array('name' => $prefix."_".$columns['pk']->getName(), 
    94                                 'mapping' => $prefix."_".$columns['pk']->getName(), 
     91        $listDisplay[0] = array('name' => $prefix.$tableDelimiter.$columns['pk']->getName(), 
     92                                'mapping' => $prefix.$tableDelimiter.$columns['pk']->getName(), 
    9593                                'type' => extjs_convert_propel_type($columns['pk']->getType())); 
    9694 
     
    10199          { 
    102100            // Add id 
    103             $listDisplay[$i] = array('name' => $class."_".$relatedClasses['pk']->getName(), 
    104                                      'mapping' => $class."_".$relatedClasses['pk']->getName(), 
     101            $listDisplay[$i] = array('name' => $class.$tableDelimiter.$relatedClasses['pk']->getName(), 
     102                                     'mapping' => $class.$tableDelimiter.$relatedClasses['pk']->getName(), 
    105103                                     'type' => extjs_convert_propel_type($relatedClasses['pk']->getType())); 
    106104            $i++; 
     
    108106            foreach ($relatedClasses['columns'] as $relatedColumn => $col) 
    109107            { 
    110               $listDisplay[$i] = array('name' => $class.'_'.$relatedColumn, 
    111                                        'mapping' => $class.'_'.$relatedColumn, 
     108              $listDisplay[$i] = array('name' => $class.$tableDelimiter.$relatedColumn, 
     109                                       'mapping' => $class.$tableDelimiter.$relatedColumn, 
    112110                                       'type' => extjs_convert_propel_type($col->getType())); 
    113111              $i++; 
     
    119117        foreach ($columns['column'] as $column) 
    120118        { 
    121           $listDisplay[$i] = array('name' => $prefix."_".$column->getName(), 
    122                                    'mapping' => $prefix."_".$column->getName(), 
     119          $listDisplay[$i] = array('name' => $prefix.$tableDelimiter.$column->getName(), 
     120                                   'mapping' => $prefix.$tableDelimiter.$column->getName(), 
    123121                                   'type' => extjs_convert_propel_type($column->getType())); 
    124122 
     
    126124        } 
    127125 
    128         $options = array('id' => $prefix."_".$pkn, 
     126        $options = array('id' => $prefix.$tableDelimiter.$pkn, 
    129127                         'root' => 'data', 
    130128                         'totalProperty' => 'totalCount'); 
     
    171169[?php if ($key) : 
    172170  if (false !== strpos($key, '/')): 
    173     $key_new = str_replace('/', '_', $key); 
     171    if ($tableDelimiter != '/') 
     172    {  
     173      $key_new = str_replace('/', $tableDelimiter, $key); 
     174    } 
     175    else 
     176    { 
     177      $key_new = $key; 
     178    } 
    174179  else: 
    175     $key_new = '<?php echo $prefix ?>_'.$key; 
     180    $key_new = '<?php echo $prefix ?>/'.$key; 
    176181  endif; 
    177182  echo '// '.$key_new ?] // TODO: use this for sort working... 
     
    193198 
    194199    $pk = $relatedClasses['pk']->getName(); 
    195     $listDisplay = array(array('name' => $class.'_'.$pk, 'mapping' => $class.'_'.$pk)); 
     200    $listDisplay = array(array('name' => $class.$tableDelimiter.$pk, 'mapping' => $class.$tableDelimiter.$pk)); 
    196201 
    197202    // iterate through all requested columns of current class 
     
    206211<?php 
    207212      // add colum to array 
    208       $listDisplay[] = array('name' => $class.'_'.$columnName, 'mapping' => $class.'_'.$columnName); 
     213      $listDisplay[] = array('name' => $class.$tableDelimiter.$columnName, 'mapping' => $class.$tableDelimiter.$columnName); 
    209214?> 
    210215<?php 
     
    217222<?php endforeach; ?> 
    218223<?php 
    219     $options = array('id' => $class.'_'.$pk, 
     224    $options = array('id' => $class.$tableDelimiter.$pk, 
    220225                     'root' => 'data', 
    221226                     'totalProperty' => 'totalCount'); 
    222227    $jsReader = extjs_data_reader($options, $listDisplay, 'json'); 
    223228 
    224 // TODO: This would be nice, eventually      $url = $controller->genUrl($this->getModuleName().'/jsonList'.$relatedClassName; 
    225 // It probably is easier to use the general jsonListSuccess.php and provide arguments like ?table=relatedClassName 
    226     // For now, the old way, which already works (although not perfectly) 
    227229    $url = $controller->genUrl($this->getModuleName().'/jsonListAutocomplete?class='.$class); 
    228 //TODO: sortInfo columnName can be wrong! now the latest column is taken, you should be able to set this. 
     230 
    229231    $options = array('url' => $url, 
    230232                     'baseParams' => array('filter' => 'query'), 
    231233                     'reader' => $jsReader, 
    232                      'sortInfo' => array('field' => $class.'_'.$columnName, 'direction' => 'asc'), 
     234                     'sortInfo' => array('field' => $class.$tableDelimiter.$columnName, 'direction' => 'asc'), 
    233235                     'remoteSort' => 'true'); 
    234236    $jsDataStore = extjs_data_store($options); 
    235237?> 
    236238    var <?= strtolower($class) ?>_ds = <?php echo $jsDataStore ?>; 
    237     // disabled 
    238     // <?php echo strtolower($class) ?>_ds.load({params:{start:0, limit:10000}}); // TODO: do I need to say more, this is a hack to preload everything, which probably isn't desired... (but when something isn't there, but it is requested by the renderer with its ID javascript breaks. Requesting the id would be ideal, but because it runs in a seperate thread I don't know how yet... 
    239239 
    240240    function <?php echo strtolower($class) ?>_ds_add_preloaded_from_index(index, value) { 
     
    245245      var Record = Ext.data.Record.create(<?php echo _extjs_property_encode($fields) ?>); 
    246246 
    247       var r = new Record({ 
    248         <?php echo $class.'_'.$pk ?>: value 
     247 
     248      var record_data = Array(); 
     249      record_data['<?php echo $class.$tableDelimiter.$pk ?>'] = value; 
    249250<?php 
    250251    $hs = $this->getParameterValue('list.hide', array()); 
     
    259260    [?php if ($sf_user->hasCredential(<?php echo $credentials ?>)): ?] 
    260261<?php endif; ?> 
    261         <?php echo ", ".$class.'_'.$columnName ?>: ds.getAt(index).get('<?php echo $class.'_'.$columnName ?>') 
     262      record_data['<?php echo $class.$tableDelimiter.$columnName ?>'] = ds.getAt(index).get('<?php echo $class.$tableDelimiter.$columnName ?>'); 
    262263<?php 
    263264  //don't add it twice 
     
    268269<?php endif; ?> 
    269270<?php endforeach; ?> 
    270       }); 
     271      var r = new Record(record_data); 
    271272 
    272273      <?php echo strtolower($class) ?>_ds.add(r); 
     274 
    273275    } 
    274276 
     
    307309    { 
    308310      list($relatedClassName, $relatedColumn) = explode('/', $column->getName()); 
    309       $key = $relatedClassName."_".$completeColumns['related'][$relatedClassName]['pk']->getName(); // removed $relatedClassName.'_'. 
     311      $key = $relatedClassName.$tableDelimiter.$completeColumns['related'][$relatedClassName]['pk']->getName(); 
    310312    } 
    311313    else 
     
    331333          // if value in foreign datastore, return this value 
    332334          if (<?php echo $foreign_ds ?>.getById(value)) { 
    333             return <?php echo $foreign_ds ?>.getById(value).get('<?php echo $relatedClassName."_".$name ?>'); 
     335            return <?php echo $foreign_ds ?>.getById(value).get('<?php echo $relatedClassName.$tableDelimiter.$name ?>'); 
    334336          // if not in foreign datastore, test if it is preloaded (this can be out-dated therefor do it after checking datastore) 
    335337          } else if ((index = ds.find('<?php echo $key ?>', value)) != -1)  { 
     
    337339            <?php echo $foreign_ds ?>_add_preloaded_from_index(index, value); 
    338340 
    339             return ds.getAt(index).get('<?php echo $relatedClassName.'_'.$name ?>'); 
     341            return ds.getAt(index).get('<?php echo $relatedClassName.$tableDelimiter.$name ?>'); 
    340342          } else { 
    341343            //TODO if value still not found the foreign-data-store should get it from the server! (but I don't think this will be necesarry occur) 
     
    377379  { 
    378380    list($relatedClassName, $relatedColumn) = explode('/', $column->getName()); 
    379     $dataIndex = $relatedClassName."_".$completeColumns['related'][$relatedClassName]['pk']->getName(); 
     381    $dataIndex = $relatedClassName.$tableDelimiter.$completeColumns['related'][$relatedClassName]['pk']->getName(); 
    380382  } 
    381383  else 
    382384  { 
    383     $dataIndex = strtolower($this->getClassName())."_".$column->getName(); 
     385    $dataIndex = strtolower($this->getClassName()).$tableDelimiter.$column->getName(); 
    384386  } 
    385387 
     
    412414<?php endforeach; ?> 
    413415[?php include_partial('<?php echo $this->getModuleName() ?>/list_ajax_plugin') ?] 
     416       
    414417      cm = <?php echo _extjs_write_class('grid.ColumnModel', array($cmOptions), true, $expander) ?>; 
    415418 
  • plugins/sfExtjsThemePlugin/lib/sfExtjsPropelAdminGenerator.php

    r5948 r5964  
    161161      addTab('Edit number ' + gridContextMenu.rowRecord['".$pkName."'], { url: '".$url."', params: '".$pkName."=' + gridContextMenu.rowRecord['".$pkName."'], scripts: true }, 'edit_' + gridContextMenu.rowRecord['".$pkName."']); 
    162162    }"; 
    163     //return '<li>[?php echo link_to(image_tag(\''.$icon.'\', array(\'alt\' => __(\''.$name.'\'), \'title\' => __(\''.$name.'\'))), \''.$this->getModuleName().'/'.$action.$url_params.($options ? ', '.$phpOptions : '').') ?]</li>'."\n"; 
     163    //return '<li>[?php echo link_to(image_tag(\''.$icon.'\', array(\'alt\' => __(\''.$name.'\'), \'title\' => __(\''.$name.'\'))), \''.$this->getModuleName().$tableDelimiter.$action.$url_params.($options ? ', '.$phpOptions : '').') ?]</li>'."\n"; 
    164164 
    165165    return $html; 
     
    292292  { 
    293293    $definition = array(); 
     294    $tableDelimiter = sfConfig::get('app_sf_extjs_theme_plugin_table_delimiter', '-'); 
    294295     
    295296    sfLoader::loadHelpers('Extjs'); 
     
    335336      list($relatedClassPhpName) = explode('::', $column->getPhpName()); 
    336337      list($relatedClassName, $relatedColumn) = explode('/', $column->getName()); 
    337       $valueField = $relatedClassName."_".$columns['related'][$relatedClassName]['pk']->getName(); 
     338      $valueField = $relatedClassName.$tableDelimiter.$columns['related'][$relatedClassName]['pk']->getName(); 
    338339 
    339340      $cbOptions = array('hiddenName' => strtolower($relatedClassPhpName).'_'.$relatedColumn.'_combo', 
    340341                         'name' => strtolower($relatedClassPhpName).'_'.$relatedColumn.'_combo', 
    341342                         'valueField' => $valueField, 
    342                          'displayField' => $relatedClassName."_".$relatedColumn, 
     343                         'displayField' => $relatedClassName.$tableDelimiter.$relatedColumn, 
    343344                         'queryParam' => 'filters['.$column->getName().']', 
    344345                         'store' => strtolower($relatedClassPhpName).'_ds' 

The Sensio Labs Network

Since 1998, Sensio Labs has been promoting the Open-Source software movement by providing quality web application development, training, consulting.
Sensio Labs also supports several large Open-Source projects.