Paul's Programming Notes     Archive     Feed     Github

Yii quickdlgs Without UrlManager Enabled

EQuickDlgs::iframeButton(
array(
'controllerRoute' => 'controller/create',
'dialogTitle' => 'Create New Record',
'dialogWidth' => 800,
'dialogHeight' => 600,
'openButtonText' => 'Add Record',
'closeButtonText' => 'Close',
//'openButtonHtmlOptions' => array(...),
)
);


With the code above, I was getting the following error:
The system is unable to find the requested action "create?qdsClass=EFrameJuiDlg".

I had to change line 79 in EFrameJuiDlg.php inside the quickdlgs extension from:
            $url .= '?' . http_build_query($this->urlParams);
to:
            $url .= '&' . http_build_query($this->urlParams);

htmlspecialchars() expects parameter 1 - Yii (echmultiselect)

htmlspecialchars() expects parameter 1 to be string, array given C:\xampp\htdocs\yii\framework\web\helpers\CHtml.php(98) 
The error only occurred when trying to apply the echmultiselect filter to the filter above the gridview.

Here's what I did to fix:
1. Went to the Yii framework folder and found the following file: yii\framework\web\helpers\CHtml.php

2. Modifed line 98 from "return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);" to:
"return htmlspecialchars(print_r($text, true),ENT_QUOTES,Yii::app()->charset);"

Then you need to implement the echmultiselect extension in the view (my example shows adding it for site_status):

3. Added this php code to the view: $data= CHtml::listData(Nvdaily::model()->findAll(), 'blahblahblah', 'blahblahblah');
(but it should probably be in the model)

4. Made my 'columns' array look like this:
'columns'=>array(
'id',
'blah',
'blahblah',
array (
            'name'=>'blahblahblah',
            'filter'=> $this->widget('ext.EchMultiselect.EchMultiselect',
array(
                'model' => $model,
                'dropDownAttribute' => 'blahblahblah',
                'data' => $data,
                'options' => array('buttonWidth' => 80, 'ajaxRefresh' => true),
            ),
            true // capture output; needed so the widget displays inside the grid
),
),
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
),
),

Error Handling In mysqldb - Python

I've had issues with queries failing and leaving connections open (enough to stall a server...). I know python's oursql library supports using the WITH keyword, and I think it will close the connection when there is an unexpected error. However, I'm not sure if I'm ready to move to a different library for MySQL (it's working well).

Here's what I'm currently doing to close the cursor and connection, then re-raise the error:

import MySQLdb

conn = MySQLdb.connect(user="username", passwd="secret", db="database", charset='utf8')
cur = conn.cursor()

try:
cur.execute("INSERT INTO testTable (userid) VALUES(%s);" % id)
conn.commit()
except:
cur.close()
conn.close()
raise
finally:
print "Insert Successful"

haufe.sharepoint Python Library - URLs With %20

I changed line 25 of the haufe.sharepoint library to fix an issue I was having with URLs which had %20 (the url encoded space character):

New Code:
location = urllib.quote(self.location(), safe=":/")

Old Code:
location = self.location()

Just try using a URL with %20 with haufe.sharepoint to see what I'm talking about.

urllib2.URLError Python SUDS library

To figure this out, you're going to need logging. Turn on logging with the following:

http://stackoverflow.com/questions/2388046/can-you-help-me-solve-this-suds-soap-issue

import logging logging.basicConfig(level=logging.INFO) logging.getLogger('suds.client').setLevel(logging.DEBUG) logging.getLogger('suds.transport').setLevel(logging.DEBUG) logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) logging.getLogger('suds.wsdl').setLevel(logging.DEBUG)