Tuesday, 31 January 2017

Error: can not find module ‘underscore’

Error: can not find module ‘underscore’

Windows

npm install rimraf -g
rimraf node_modules
sudo npm install 

Friday, 8 May 2015

Conflict with stitch and sass newer releases

Lately we are having issue with compass, exactly with sass > 3.2.9 compatibility with stitch, so one of solution is to install olders versions that work. This iis what I needed:

> gem install sass  --version 3.2.9
> gem install compass  --version 0.12.0
> gem install stitch  --version 0.1.6
>gem install bootstrap-sass --version 3.3.1.0

Monday, 8 September 2014

First steps for already exisitngs projects in Laravel

I often have problems to remember what to do when I get to work on existing Laravel project.


Frist error I get is:

"../vendor/autoload.php): failed to open stream: No such file or directory in .."

To fix this, just run in Terminal
composer install
Then setup .htaccess.

Next thing, in config folder to setup local configuration (database and other settings), I usually do like here: http://laravel.com/docs/configuration#environment-configuration.

After setting up the conf next id database. Create database and then run
php artisan migrate
to create tables in your database.

And

php artisan db:seed

to seed data.

And now should be all running.

To set up mail work on localhost and not to send real mails  ...app\config\local\mail.php


return array(
 'driver' => 'mail',);

Friday, 25 January 2013

Create task using symfony and run it form action

Create MyTask.class.php in /lib/Task folder. It should look like this:
/**
 * MyTask class.
 *
 * @author ...
 */
class MyTask extends sfPropelBaseTask
{

  /**
   * Execute configure method.
   * 
   */
  protected function configure()
  {
    $this->addOptions(array(
      new sfCommandOption('application', NULL, sfCommandOption::PARAMETER_OPTIONAL, 'The application name', 'front'),
      new sfCommandOption('env', NULL, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev'),
      new sfCommandOption('connection', NULL, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel'),
    ));

    $this->namespace = 'namespace';
    $this->name = 'myTask';
    $this->briefDescription = 'Do Task';
    $this->detailedDescription = 'Do Task desc';
  }

  /**
   * Execute execute method.
   * 
   * @param array $arguments
   * @param array $options
   * 
   */
  protected function execute($arguments = array(), $options = array())
  {
    sfContext::createInstance($this->configuration);
    
    //Do Task

  }

}
And now, run it from action that you need:
    $dispatcher = sfContext::getInstance()->getEventDispatcher();
    $formatter = new sfFormatter();
    $task = new ReminderToWriteReviewTask($dispatcher, $formatter);
    chdir(sfConfig::get('sf_root_dir'));
    $task->run(array(), array('connection' =>  sfConfig::get('connection')));
You can also call the task, as it should be called, from command line
    php symfony namespace:myTask

Friday, 9 November 2012

symfony guard group permissions from database


Sometimes we need to have permission from database.
Suppose that uor tables look like this:

guard_permission:
    _attributes:                            { phpName: GuardPermission }
    code:                                   { type: char,    size: 150, required: true,  primaryKey: true }
    name:                                   { type: varchar, size: 100, required: true   }

  guard_group:
    _attributes:                            { phpName: GuardGroup }
    code:                                   { type: char,    size: 150, required: true,  primaryKey: true }
    name:                                   { type: varchar, size: 100, required: true   }
    description:                            { type: longvarchar,        required: false  }
    is_default:                             { type: boolean,            required: true,  default: false }

  guard_group_permission:
    _attributes:                            { phpName: GuardGroupPermission }
    id:                                     ~
    group_code:                             { type: char,    size: 150, required: true,  foreignTable:  guard_group,       foreignReference: code,   onDelete: cascade }
    permission_code:                        { type: char,    size: 150, required: true,  foreignTable:  guard_permission,  foreignReference: code,   onDelete: cascade }

  guard_user:
    _attributes:                            { phpName: GuardUser }
    id:                                     ~
    is_email_verified:                      { type: boolean,            required: true,  default: false  }

  guard_user_group:
    _attributes:                            { phpName: GuardUserGroup }
    id:                                     ~
    user_id:                                { type: integer,            required: true,  foreignTable: guard_user,       foreignReference: id,   onDelete: cascade }
    group_code:                             { type: char,    size: 150, required: true,  foreignTable: guard_group,      foreignReference: code, onDelete: cascade }


To check permissions from database, we just need to override  hasCredential method in apps/app_name/lib/MyUser.php. My data in database were 'module_name-action_name' e.g (permisssion_code: home-index), so i have overwritten parmission name to look like data from database.


 /**
   * Overridden method to use data from DB
   *
   * @param  string  permission name
   *
   * @return boolean true if the user has credential
   */

  public function hasCredential($permission_name)
  {
    if(!$this->isAuthenticated())

    {
      return false;
    }

    $GuardUser = $this->getGuardUser();

    $c = new Criteria();
    $c->add(GuardUserGroupPeer::USER_ID, $GuardUser->getId());
    $UserGroup = GuardUserGroupPeer::doSelectOne($c);   

    $Group = $UserGroup->getGuardGroup();
    $permissions = $Group->getGuardGroupPermissions();

    $permission_names = array();
    foreach($permissions as $permission)

    {
      $permission_names[] = $permission->getPermissionCode();
    }

   
    $moduleName = sfContext::getInstance()->getModuleName();
    $actionName = sfContext::getInstance()->getActionName();
    $permission_name = $moduleName . '-' . $actionName;

    return (in_array($permission_name, $permission_names)) ? true : false;
  }


Now all we need is to fill out the data in database, and this should work.

Wednesday, 7 November 2012

Create ssl certificate for site

If You allready have configured your apache server for ssl, type in these command lines for new cert for site

openssl req -new -days 365 -nodes -out www.mydomain.com.csr`
openssl x509 -in www.mydomain.com.csr -out www.mydomain.com.cert -req -signkey www.mydomain.com.key -days 365


And add your configuration to thhpd-ssl.conf


<VirtualHost _default_:443> 
    ServerAdmin admin@admin.com 
    DocumentRoot "YOUR_PRROJECT_PATH" 
    ServerName YOUR_PRROJECT_HOST:443 
    ServerAlias YOUR_PRROJECT_ALIAS:443 
    SSLEngine on

    SSLCertificateFile "C:/wamp/bin/apache/Apache2.2.21/conf/www.mydomain.com.cert"

    SSLCertificateKeyFile "C:/wamp/bin/apache/Apache2.2.21/conf/www.mydomain.com.key" 
</VirtualHost>       

Tuesday, 6 November 2012

Symfony propel file form widget editable

This is a simple editable file form widget:

If we have file_path field type varchar(255) in database, our widget will look like:

'file_path'        => new sfWidgetFormInputFileEditable(array('template' => '<div class="row file-editable-input">%input%</div><div class="row file-editable-remove"><ul class="inputs-list"><li><label>%delete%%delete_label%</label></li></ul></div><div class="row file-editable-img">%file%</div>',
        'file_src' =>  UPLOADS_DIR . $this->getObject()->getFilePath(),
        'is_image' => FALSE,
        'edit_mode' => TRUE,
        'delete_label' => __('Check this box if you want to remove current file'),
        'with_delete' => TRUE), array()),
And validator should look like:

'file_path' => new sfValidatorFile(array(
        'max_size' => Utils::getMaxUploadSize() * 1024 * 1024,
        'mime_types' => 'all_documents',
        'path' => UPLOADS_DIR,
        'required' => FALSE)),

And that's it. 'all_documents' is array of file extensions i creted in the validator file, along wit web_images and other. And off course your uploads dir must exist.