public function executeDcWidgetFormSelectDoubleListFinderPropel(sfWebRequest $request) { $widget = unserialize(base64_decode($request->getParameter('widget'))); $values = unserialize(base64_decode($request->getParameter('values'))); $values = is_null($values) ? array() : $values; $size = $request->getParameter('size'); $letter = $request->getParameter('letter'); $name = $request->getParameter('name'); $method = $widget->getOption('method'); $key_method = $widget->getOption('key_method'); $column = strtoupper($widget->getOption('column')); $model = $widget->getOption('model') . 'Peer'; $peer_method = $widget->getOption('peer_method'); $connection = $widget->getOption('connection'); if ($request->hasParameter('custom_handler')) { $handler = unserialize(base64_decode($request->getParameter('custom_handler'))); @call_user_func($handler, $widget, $values); } $c = $widget->getOption('criteria'); $c->add(constant($model . '::' . $column), $letter . '%', Criteria::LIKE); $choices = array(); foreach (call_user_func(array($model, $peer_method), $c, $connection) as $choice) { if (!in_array($choice->getPrimaryKey(), $values)) { $choices[$choice->{$key_method}()] = $choice->{$method}(); } } $widget = new sfWidgetFormSelect(array('multiple' => true, 'choices' => $choices), array('size' => $size, 'class' => $widget->getOption('class_select'))); return $this->renderText($widget->render($name)); }