2012-02-20 27 views
0

- >私は新しいユーザー登録のカスタマイズを試みています。joomla 1.7ユーザー登録カスタマイズの問題

- >そのために、コントローラからのコール関数を介してフォームと隠し変数を作成します。

- >コントローラのセーブ関数でこのコードを書くのですが、1.7で動作しない内部関数なので、ここで問題を作ります。

function register_save() 
{ 

    global $mainframe; 
    $db =& JFactory::getDBO(); 
    // Check for request forgeries 
    JRequest::checkToken() or jexit('Invalid Token'); 

    //clean request 
    $post = JRequest::get('post'); 
    $post['username'] = JRequest::getVar('username', '', 'post', 'username'); 
    $post['password'] = JRequest::getVar('password', '', 'post', 'string', JREQUEST_ALLOWRAW); 
    $post['password2'] = JRequest::getVar('password2', '', 'post', 'string', JREQUEST_ALLOWRAW); 

    // get the redirect 
    $return = JURI::base(); 

    // do a password safety check 
    if(strlen($post['password']) || strlen($post['password2'])) { // so that "0" can be used as password e.g. 
     if($post['password'] != $post['password2']) { 
      $msg = JText::_('PASSWORD NOT MATCH'); 
      // something is wrong. we are redirecting back to edit form. 
      // TODO: HTTP_REFERER should be replaced with a base64 encoded form field in a later release 
      $return = str_replace(array('"', '<', '>', "'"), '', @$_SERVER['HTTP_REFERER']); 
      if (empty($return) || !JURI::isInternal($return)) { 
       $return = JURI::base(); 
      } 
      $this->setRedirect($return, $msg, 'error'); 
      return false; 
     } 
    } 

    // Get required system objects 
    $user  = clone(JFactory::getUser()); 
    $pathway = JFactory::getApplication(); 
    //$pathway =& $mainframe->getPathway(); 
    $config  =& JFactory::getConfig(); 
    //print_r($config)."<br>"; 
    $authorize =& JFactory::getACL(); 
    //print_r($authorize)."<br>";    /// some mistake here 
    $newUsertype = 'Registered'; 

    // Bind the post array to the user object 
    if (!$user->bind(JRequest::get('post'), 'usertype')) { 
     JError::raiseError(500, $user->getError()); 
    } 
    // Set some initial user values 
    $user->set('id', 0); 
    $user->set('usertype', $newUsertype); 

    $user->set('gid', $authorize->get_group_id('', $newUsertype, 'ARO')); 

    $date =& JFactory::getDate(); 
    $user->set('registerDate', $date->toMySQL()); 

    // If user activation is turned on, we need to set the activation information 

     jimport('joomla.user.helper'); 
     $user->set('activation', JUtility::getHash(JUserHelper::genRandomPassword())); 
     $user->set('block', '1'); 

    // If there was an error with registration, set the message and display form 

    if (!$user->save()) 
    { 
     JError::raiseWarning('', JText::_($user->getError())); 
     $this->register(); 
     return false; 
    } 

     $obj1 = new stdClass(); 
     $obj1->userid = $user->id; 
     $obj1->points = 0; 
     $obj1->posted_on = $date->toMySQL(); 
     $obj1->avatar = '';        
     $obj1->thumb = ''; 
     $obj1->params = 'notifyEmailSystem=1 
          privacyProfileView=0 
          privacyPhotoView=0 
          privacyFriendsView=0 
          privacyVideoView=1 
          notifyEmailMessage=1 
          notifyEmailApps=1 
          notifyWallComment=0'; 
     $db->insertObject('#__community_users', $obj1, 'userid'); 

     $extra_field = array(1=>2,2=>3,3=>4,4=>6,5=>7,6=>8,7=>9,8=>10,9=>11,10=>12,11=>14,12=>15,13=>16); 
     $i = 1; 
     $obj2 = new stdClass(); 
     while($extra_field[$i] != "") 
     { 
      $obj2->id = ''; 
      $obj2->user_id = $user->id; 
      $obj2->field_id = $extra_field[$i]; 
      $obj2->value = ''; 
      $db->insertObject('#__community_fields_values', $obj2, 'id'); 
      $i++; 
     }     
    ////////// end of joomsocial customisation/////////////////////////// 
    // Send registration confirmation mail 
    $password = JRequest::getString('password', '', 'post', JREQUEST_ALLOWRAW); 
    $password = preg_replace('/[\x00-\x1F\x7F]/', '', $password); //Disallow control chars in the email 
    UserControllerRegister::_sendMail($user, $password); 

    // Everything went fine, set relevant message depending upon user activation state and display message 

     $message = JText::_('Your account has been created and an activation link has been sent to the e-mail address you entered. Note that you must activate the account by clicking on the activation link when you get the e-mail before you can login.'); 

    $this->setRedirect('index.php', $message); 
} 
  • テーブルにレコードを挿入しません。 私を助けてください。
+0

これは大量のコードですが、すべてが適切であるとは限りません。 すべての無関係のコードに注釈を付けるには、挿入パラメータの値を手動で入力し、このメソッドを呼び出して、挿入が機能するかどうかを確認してください。もしデバッグを開始し、受け取った値が何であるかを確認してください。 – alfasin

+0

お返事ありがとうございます。 ここでは、** $ authorize =&JFactory :: getACL(); **のコードに問題があると思います。 ** JAccess Object([acl] => Array([0] => Array([0])のような出力を** JAccess Object()** のように出力すると、1.5で実行した場合、大きな配列を返します JAuthorizationオブジェクト] => com_user [1] => edit .....))) ここでは1.7を取得するためのいくつかの問題があると思います。 – Mayur

答えて

0

私はあなたが正しいと思う:
joomlaの1.5 ACL(アクセスコントロールリスト)が階層的である:各ユーザー・グループは、その下のグループから権限を継承します。
Joomla 1.7では、ACLは必ずしも階層的であるとは限りません。任意のアクセス許可でグループを設定できます。

Joomla 1.5と1.7のACLの違いは、動作だけでなく実装でも同じです!つまり、認証/登録メカニズムはさまざまな方法で実装されます。 http://www.youtube.com/watch?v=ZArgffnPUo4

関連する問題