<commit_before>
openerp.share = function(session) {

    var has_action_id = false;

    function launch_wizard(self, view, user_type, invite) {
        var action = view.getParent().action;
        var Share = new session.web.DataSet(self, 'share.wizard', view.dataset.get_context());
        var domain = new session.web.CompoundDomain(view.dataset.domain);
        if (view.fields_view.type == 'form') {
            domain = new session.web.CompoundDomain(domain, [['id', '=', view.datarecord.id]]);
        }
        if (view.fields_view.type == 'form') rec_name = view.datarecord.name;
        else rec_name = '';
        self.rpc('/web/session/eval_domain_and_context', {
            domains: [domain],
            contexts: [view.dataset.context]
        }, function (result) {
            Share.create({
                name: action.name,
                record_name: rec_name,
                domain: result.domain,
                action_id: action.id,
                user_type: user_type || 'embedded',
                view_type: view.fields_view.type,
                invite: invite || false,
            }, function(result) {
                var share_id = result.result;
                var step1 = Share.call('go_step_1', [[share_id],], function(result) {
                    var action = result;
                    self.do_action(action);
                });
            });
        });
    }

    function has_share(yes, no) {
        if (!session.connection.share_flag) {
            session.connection.share_flag = $.Deferred(function() {
                var func = new session.web.Model("share.wizard").get_func("has_share");
                func(session.connection.uid).pipe(function(res) {
                    if(res) {
                        session.connection.share_flag.resolve();
                    } else {
                        session.connection.share_flag.reject();
                    }
                });
            });
        }
        session.connection.share_flag.done(yes).fail(no);
    }

    session.web.Sidebar = session.web.Sidebar.extend({
        add_default_sections: function() {
            this._super();
            var self = this;
            has_share(function() {
                self.add_items('other', [{
                    label: 'Share',
                    callback: self.on_sidebar_click_share,
                    classname: 'oe_share',
                }]);
            });
        },
        on_sidebar_click_share: function(item) {
            var view = this.getParent()
            launch_wizard(this, view);
        },
    });

    /**
     * Extends mail (Chatter widget)
     * - show the 'invite' button' only we came on the form view through
     *   an action. We do this because 'invite' is based on the share
     *   mechanism, and it tries to share an action.
     */
    session.mail.RecordThread.include( {
        start: function() {
            start_res = this._super.apply(this, arguments);
            if (has_action_id) {
                this.$element.find('button.oe_share_mail').show();
            }
            return start_res;
        }
    });

    session.web.ViewManagerAction.include({<commit_msg>[IMP] share: share and embed added to 'more' sidebar menu.<commit_after>
openerp.share = function(session) {

    var has_action_id = false;

    function launch_wizard(self, view, user_type, invite) {
        var action = view.getParent().action;
        var Share = new session.web.DataSet(self, 'share.wizard', view.dataset.get_context());
        var domain = new session.web.CompoundDomain(view.dataset.domain);
        if (view.fields_view.type == 'form') {
            domain = new session.web.CompoundDomain(domain, [['id', '=', view.datarecord.id]]);
        }
        if (view.fields_view.type == 'form') rec_name = view.datarecord.name;
        else rec_name = '';
        self.rpc('/web/session/eval_domain_and_context', {
            domains: [domain],
            contexts: [view.dataset.context]
        }, function (result) {
            Share.create({
                name: action.name,
                record_name: rec_name,
                domain: result.domain,
                action_id: action.id,
                user_type: user_type || 'embedded',
                view_type: view.fields_view.type,
                invite: invite || false,
            }, function(result) {
                var share_id = result.result;
                var step1 = Share.call('go_step_1', [[share_id],], function(result) {
                    var action = result;
                    self.do_action(action);
                });
            });
        });
    }

    function has_share(yes, no) {
        if (!session.connection.share_flag) {
            session.connection.share_flag = $.Deferred(function() {
                var func = new session.web.Model("share.wizard").get_func("has_share");
                func(session.connection.uid).pipe(function(res) {
                    if(res) {
                        session.connection.share_flag.resolve();
                    } else {
                        session.connection.share_flag.reject();
                    }
                });
            });
        }
        session.connection.share_flag.done(yes).fail(no);
    }

    /* Extend the Sidebar to add Share and Embed links in the 'More' menu */
    session.web.Sidebar = session.web.Sidebar.extend({

        start: function() {
            var self = this;
            this._super(this);
            has_share(function() {
                self.add_items('other', [
                    {   label: 'Share',
                        callback: self.on_sidebar_click_share,
                        classname: 'oe_chare' },
                    {   label: 'Embed',
                        callback: self.on_sidebar_click_share,
                        classname: 'oe_chare' },
                ]);
            });
        },

        on_sidebar_click_share: function(item) {
            var view = this.getParent()
            launch_wizard(this, view);
        },
    });

    /**
     * Extends mail (Chatter widget)
     * - show the 'invite' button' only we came on the form view through
     *   an action. We do this because 'invite' is based on the share
     *   mechanism, and it tries to share an action.
     */
    session.mail.RecordThread.include( {
        start: function() {
            start_res = this._super.apply(this, arguments);
            if (has_action_id) {
                this.$element.find('button.oe_share_mail').show();
            }
            return start_res;
        }
    });

    session.web.ViewManagerAction.include({
{'fraction_non_alphanumeric': 0.11947234297706491, 'fraction_numerical': 0.0005996102533353321, 'mean_word_length': 1.581044487427466, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1193419', 'n_tokens_mistral': 1853, 'n_tokens_neox': 1787, 'n_words': 355}