joomla 1.7用户注册定制问题

时间:2012-02-20 07:09:50

标签: php joomla joomla-extensions joomla1.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);
}
  • 不在表格中插入记录。 请帮帮我。

1 个答案:

答案 0 :(得分:0)

我认为你是对的:
Joomla 1.5 ACL(访问控制列表)是分层的:每个用户组都从其下面的组继承权限。
在Joomla 1.7中ACL不一定是分层的。您可以使用您希望的任何权限设置组。

Joomla 1.5和1.7中的ACL之间的区别不仅在于行为 - 而且在实施中!这意味着身份验证/注册机制将以不同的方式实现: http://www.youtube.com/watch?v=ZArgffnPUo4